Reflect RPC changes

This commit is contained in:
obscuren 2014-10-21 13:25:54 +02:00
parent 6ea44c466a
commit 6f08e30109
2 changed files with 361 additions and 370 deletions

@ -7,411 +7,402 @@ import QtQuick.Layouts 1.0;
import QtQuick.Window 2.1; import QtQuick.Window 2.1;
import Ethereum 1.0 import Ethereum 1.0
import "../ext/qml_messaging.js" as Messaging Rectangle {
id: window
//ApplicationWindow { property var title: "Browser"
Rectangle { property var iconSource: "../browser.png"
id: window property var menuItem
property var title: "Browser"
property var iconSource: "../browser.png" property alias url: webview.url
property var menuItem property alias webView: webview
property alias url: webview.url property var cleanPath: false
property alias webView: webview property var open: function(url) {
if(!window.cleanPath) {
property var cleanPath: false var uri = url;
property var open: function(url) { if(!/.*\:\/\/.*/.test(uri)) {
if(!window.cleanPath) { uri = "http://" + uri;
var uri = url; }
if(!/.*\:\/\/.*/.test(uri)) {
uri = "http://" + uri; var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/
}
if(reg.test(uri)) {
var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/ uri.replace(reg, function(match, pre, domain, path) {
uri = pre;
if(reg.test(uri)) {
uri.replace(reg, function(match, pre, domain, path) { var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4));
uri = pre; var ip = [];
for(var i = 0, l = lookup.length; i < l; i++) {
var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4)); ip.push(lookup.charCodeAt(i))
var ip = []; }
for(var i = 0, l = lookup.length; i < l; i++) {
ip.push(lookup.charCodeAt(i)) if(ip.length != 0) {
} uri += lookup;
} else {
if(ip.length != 0) { uri += domain;
uri += lookup; }
} else {
uri += domain; uri += path;
} });
}
uri += path;
}); window.cleanPath = true;
}
webview.url = uri;
window.cleanPath = true;
//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>");
webview.url = uri; uriNav.text = uri;
} else {
//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>"); // Prevent inf loop.
uriNav.text = uri; window.cleanPath = false;
} else { }
// Prevent inf loop. }
window.cleanPath = false;
} Component.onCompleted: {
} webview.url = "http://etherian.io"
}
Component.onCompleted: {
webview.url = "http://etherian.io" signal messages(var messages, int id);
} onMessages: {
// Bit of a cheat to get proper JSON
signal messages(var messages, int id); var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
onMessages: { webview.postEvent("messages", [m, id]);
// Bit of a cheat to get proper JSON }
var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
webview.postEvent("messages", [m, id]); Item {
} objectName: "root"
id: root
Item { anchors.fill: parent
objectName: "root" state: "inspectorShown"
id: root
anchors.fill: parent RowLayout {
state: "inspectorShown" id: navBar
height: 40
RowLayout { anchors {
id: navBar left: parent.left
height: 40 right: parent.right
anchors { leftMargin: 7
left: parent.left }
right: parent.right
leftMargin: 7 Button {
} id: back
onClicked: {
Button { webview.goBack()
id: back }
onClicked: { style: ButtonStyle {
webview.goBack() background: Image {
} source: "../back.png"
style: ButtonStyle { width: 30
background: Image { height: 30
source: "../back.png" }
width: 30 }
height: 30 }
}
} TextField {
} anchors {
left: back.right
TextField { right: toggleInspector.left
anchors { leftMargin: 5
left: back.right rightMargin: 5
right: toggleInspector.left }
leftMargin: 5 text: "http://etherian.io"
rightMargin: 5 id: uriNav
} y: parent.height / 2 - this.height / 2
text: "http://etherian.io"
id: uriNav Keys.onReturnPressed: {
y: parent.height / 2 - this.height / 2 webview.url = this.text;
}
Keys.onReturnPressed: { }
webview.url = this.text;
} Button {
} id: toggleInspector
anchors {
Button { right: parent.right
id: toggleInspector }
anchors { iconSource: "../bug.png"
right: parent.right onClicked: {
} if(inspector.visible == true){
iconSource: "../bug.png" inspector.visible = false
onClicked: { }else{
if(inspector.visible == true){ inspector.visible = true
inspector.visible = false inspector.url = webview.experimental.remoteInspectorUrl
}else{ }
inspector.visible = true }
inspector.url = webview.experimental.remoteInspectorUrl }
} }
}
}
} WebView {
objectName: "webView"
id: webview
WebView { anchors {
objectName: "webView" left: parent.left
id: webview right: parent.right
anchors { bottom: parent.bottom
left: parent.left top: navBar.bottom
right: parent.right }
bottom: parent.bottom
top: navBar.bottom //property var cleanPath: false
} onNavigationRequested: {
window.open(request.url.toString());
//property var cleanPath: false }
onNavigationRequested: {
window.open(request.url.toString()); function sendMessage(data) {
} webview.experimental.postMessage(JSON.stringify(data))
}
function sendMessage(data) {
webview.experimental.postMessage(JSON.stringify(data))
} experimental.preferences.javascriptEnabled: true
experimental.preferences.navigatorQtObjectEnabled: true
onTitleChanged: { experimental.preferences.developerExtrasEnabled: true
var data = Messaging.HandleMessage(title); experimental.userScripts: ["../ext/qt_messaging_adapter.js", "../ext/q.js", "../ext/big.js", "../ext/string.js", "../ext/html_messaging.js"]
if(data) { experimental.onMessageReceived: {
sendMessage(data) console.log("[onMessageReceived]: ", message.data)
} // TODO move to messaging.js
} var data = JSON.parse(message.data)
experimental.preferences.javascriptEnabled: true try {
experimental.preferences.navigatorQtObjectEnabled: true switch(data.call) {
experimental.preferences.developerExtrasEnabled: true case "compile":
experimental.userScripts: ["../ext/qt_messaging_adapter.js", "../ext/q.js", "../ext/big.js", "../ext/string.js", "../ext/html_messaging.js"] postData(data._seed, eth.compile(data.args[0]))
experimental.onMessageReceived: { break
console.log("[onMessageReceived]: ", message.data)
// TODO move to messaging.js case "getCoinBase":
var data = JSON.parse(message.data) postData(data._seed, eth.coinBase())
try { break
switch(data.call) {
case "compile": case "getIsListening":
postData(data._seed, eth.compile(data.args[0])) postData(data._seed, eth.isListening())
break
case "getCoinBase":
postData(data._seed, eth.coinBase())
break
case "getIsListening":
postData(data._seed, eth.isListening())
break
case "getIsMining":
postData(data._seed, eth.isMining())
break
case "getPeerCount": break
postData(data._seed, eth.peerCount())
case "getIsMining":
postData(data._seed, eth.isMining())
break break
case "getCountAt": case "getPeerCount":
require(1) postData(data._seed, eth.peerCount())
postData(data._seed, eth.txCountAt(data.args[0]))
break break
case "getCodeAt": case "getCountAt":
require(1) require(1)
var code = eth.codeAt(data.args[0]) postData(data._seed, eth.txCountAt(data.args[0]))
postData(data._seed, code);
break break
case "getBlockByNumber": case "getCodeAt":
var block = eth.blockByNumber(data.args[0]) require(1)
postData(data._seed, block) var code = eth.codeAt(data.args[0])
postData(data._seed, code);
break break
case "getBlockByHash": case "getBlockByNumber":
var block = eth.blockByHash(data.args[0]) var block = eth.blockByNumber(data.args[0])
postData(data._seed, block) postData(data._seed, block)
break break
case "transact": case "getBlockByHash":
require(5) var block = eth.blockByHash(data.args[0])
postData(data._seed, block)
var tx = eth.transact(data.args) break
postData(data._seed, tx)
break case "transact":
require(5)
case "getStorageAt": var tx = eth.transact(data.args)
require(2); postData(data._seed, tx)
var storage = eth.storageAt(data.args[0], data.args[1]); break
postData(data._seed, storage)
break case "getStorageAt":
require(2);
case "call": var storage = eth.storageAt(data.args[0], data.args[1]);
require(1); postData(data._seed, storage)
var ret = eth.call(data.args)
postData(data._seed, ret)
break break
case "getEachStorage": case "call":
require(1); require(1);
var storage = JSON.parse(eth.eachStorage(data.args[0])) var ret = eth.call(data.args)
postData(data._seed, storage) postData(data._seed, ret)
break break
case "getTransactionsFor": case "getEachStorage":
require(1); require(1);
var txs = eth.transactionsFor(data.args[0], true) var storage = JSON.parse(eth.eachStorage(data.args[0]))
postData(data._seed, txs) postData(data._seed, storage)
break break
case "getBalanceAt": case "getTransactionsFor":
require(1); require(1);
var txs = eth.transactionsFor(data.args[0], true)
postData(data._seed, txs)
postData(data._seed, eth.balanceAt(data.args[0])); break
break case "getBalanceAt":
require(1);
case "getKey": postData(data._seed, eth.balanceAt(data.args[0]));
var key = eth.key().privateKey;
postData(data._seed, key) break
break
case "watch": case "getKey":
require(2) var key = eth.key().privateKey;
eth.watch(data.args[0], data.args[1])
case "disconnect": postData(data._seed, key)
require(1) break
postData(data._seed, null)
break; case "watch":
require(2)
eth.watch(data.args[0], data.args[1])
case "getSecretToAddress": case "disconnect":
require(1) require(1)
postData(data._seed, null)
var addr = eth.secretToAddress(data.args[0]) break;
console.log("getsecret", addr)
postData(data._seed, addr)
break; case "getSecretToAddress":
require(1)
case "messages": var addr = eth.secretToAddress(data.args[0])
require(1); console.log("getsecret", addr)
postData(data._seed, addr)
var messages = JSON.parse(eth.getMessages(data.args[0])) break;
postData(data._seed, messages)
break case "messages":
require(1);
case "mutan": var messages = JSON.parse(eth.getMessages(data.args[0]))
require(1) postData(data._seed, messages)
var code = eth.compileMutan(data.args[0]) break
postData(data._seed, "0x"+code)
break; case "mutan":
require(1)
case "newFilterString": var code = eth.compileMutan(data.args[0])
require(1) postData(data._seed, "0x"+code)
var id = eth.newFilterString(data.args[0])
postData(data._seed, id); break;
break;
case "newFilter": case "newFilterString":
require(1) require(1)
var id = eth.newFilter(data.args[0]) var id = eth.newFilterString(data.args[0])
postData(data._seed, id);
postData(data._seed, id); break;
break; case "newFilter":
require(1)
case "getMessages": var id = eth.newFilter(data.args[0])
require(1);
postData(data._seed, id);
var messages = eth.messages(data.args[0]); break;
var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
postData(data._seed, m); case "getMessages":
require(1);
break;
var messages = eth.messages(data.args[0]);
case "deleteFilter": var m = JSON.parse(JSON.parse(JSON.stringify(messages)))
require(1); postData(data._seed, m);
eth.uninstallFilter(data.args[0])
break; break;
}
} catch(e) { case "deleteFilter":
console.log(data.call + ": " + e) require(1);
eth.uninstallFilter(data.args[0])
postData(data._seed, null); break;
} }
} } catch(e) {
console.log(data.call + ": " + e)
function post(seed, data) { postData(data._seed, null);
postData(data._seed, data) }
} }
function require(args, num) {
if(args.length < num) { function post(seed, data) {
throw("required argument count of "+num+" got "+args.length); postData(data._seed, data)
} }
}
function postData(seed, data) { function require(args, num) {
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed})) if(args.length < num) {
} throw("required argument count of "+num+" got "+args.length);
function postEvent(event, data) { }
webview.experimental.postMessage(JSON.stringify({data: data, _event: event})) }
} function postData(seed, data) {
webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
function onWatchedCb(data, id) { }
var messages = JSON.parse(data) function postEvent(event, data) {
postEvent("watched:"+id, messages) webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
} }
function onNewBlockCb(block) { function onWatchedCb(data, id) {
postEvent("block:new", block) var messages = JSON.parse(data)
} postEvent("watched:"+id, messages)
function onObjectChangeCb(stateObject) { }
postEvent("object:"+stateObject.address(), stateObject)
} function onNewBlockCb(block) {
function onStorageChangeCb(storageObject) { postEvent("block:new", block)
var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":"); }
postEvent(ev, [storageObject.address, storageObject.value]) function onObjectChangeCb(stateObject) {
} postEvent("object:"+stateObject.address(), stateObject)
} }
function onStorageChangeCb(storageObject) {
var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":");
Rectangle { postEvent(ev, [storageObject.address, storageObject.value])
id: sizeGrip }
color: "gray" }
visible: false
height: 10
anchors { Rectangle {
left: root.left id: sizeGrip
right: root.right color: "gray"
} visible: false
y: Math.round(root.height * 2 / 3) height: 10
anchors {
MouseArea { left: root.left
anchors.fill: parent right: root.right
drag.target: sizeGrip }
drag.minimumY: 0 y: Math.round(root.height * 2 / 3)
drag.maximumY: root.height
drag.axis: Drag.YAxis MouseArea {
} anchors.fill: parent
} drag.target: sizeGrip
drag.minimumY: 0
WebView { drag.maximumY: root.height
id: inspector drag.axis: Drag.YAxis
visible: false }
anchors { }
left: root.left
right: root.right WebView {
top: sizeGrip.bottom id: inspector
bottom: root.bottom visible: false
} anchors {
} left: root.left
right: root.right
states: [ top: sizeGrip.bottom
State { bottom: root.bottom
name: "inspectorShown" }
PropertyChanges { }
target: inspector
} states: [
} State {
] name: "inspectorShown"
} PropertyChanges {
} target: inspector
}
}
]
}
}

@ -19,9 +19,9 @@ import (
"github.com/ethereum/eth-go/ethlog" "github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethminer" "github.com/ethereum/eth-go/ethminer"
"github.com/ethereum/eth-go/ethpipe" "github.com/ethereum/eth-go/ethpipe"
"github.com/ethereum/eth-go/ethrpc"
"github.com/ethereum/eth-go/ethutil" "github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire" "github.com/ethereum/eth-go/ethwire"
"github.com/ethereum/eth-go/rpc"
) )
var logger = ethlog.NewLogger("CLI") var logger = ethlog.NewLogger("CLI")
@ -244,7 +244,7 @@ func KeyTasks(keyManager *ethcrypto.KeyManager, KeyRing string, GenAddr bool, Se
func StartRpc(ethereum *eth.Ethereum, RpcPort int) { func StartRpc(ethereum *eth.Ethereum, RpcPort int) {
var err error var err error
ethereum.RpcServer, err = ethrpc.NewJsonRpcServer(ethpipe.NewJSPipe(ethereum), RpcPort) ethereum.RpcServer, err = rpc.NewJsonRpcServer(ethpipe.NewJSPipe(ethereum), RpcPort)
if err != nil { if err != nil {
logger.Errorf("Could not start RPC interface (port %v): %v", RpcPort, err) logger.Errorf("Could not start RPC interface (port %v): %v", RpcPort, err)
} else { } else {