removed key while in the process of moving to the new key storage
This commit is contained in:
		| @@ -1,486 +0,0 @@ | |||||||
| import QtQuick 2.1 |  | ||||||
| import QtWebKit 3.0 |  | ||||||
| import QtWebKit.experimental 1.0 |  | ||||||
| import QtQuick.Controls 1.0; |  | ||||||
| import QtQuick.Controls.Styles 1.0 |  | ||||||
| import QtQuick.Layouts 1.0; |  | ||||||
| import QtQuick.Window 2.1; |  | ||||||
| import Ethereum 1.0 |  | ||||||
|  |  | ||||||
| Rectangle { |  | ||||||
| 	id: window |  | ||||||
| 	anchors.fill: parent |  | ||||||
| 	color: "#00000000" |  | ||||||
|  |  | ||||||
| 	property var title: "DApps" |  | ||||||
| 	property var iconSource: "../browser.png" |  | ||||||
| 	property var menuItem |  | ||||||
|     property var hideUrl: true |  | ||||||
|  |  | ||||||
| 	property alias url: webview.url |  | ||||||
|     property alias windowTitle: webview.title |  | ||||||
| 	property alias webView: webview |  | ||||||
|  |  | ||||||
| 	property var cleanPath: false |  | ||||||
| 	property var open: function(url) { |  | ||||||
| 		if(!window.cleanPath) { |  | ||||||
| 			var uri = url; |  | ||||||
| 			if(!/.*\:\/\/.*/.test(uri)) { |  | ||||||
| 				uri = "http://" + uri; |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/ |  | ||||||
|  |  | ||||||
| 			if(reg.test(uri)) { |  | ||||||
| 				uri.replace(reg, function(match, pre, domain, path) { |  | ||||||
| 					uri = pre; |  | ||||||
|  |  | ||||||
| 					var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4)); |  | ||||||
| 					var ip = []; |  | ||||||
| 					for(var i = 0, l = lookup.length; i < l; i++) { |  | ||||||
| 						ip.push(lookup.charCodeAt(i)) |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					if(ip.length != 0) { |  | ||||||
| 						uri += lookup; |  | ||||||
| 					} else { |  | ||||||
| 						uri += domain; |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					uri += path; |  | ||||||
| 				}); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			window.cleanPath = true; |  | ||||||
|  |  | ||||||
| 			webview.url = uri; |  | ||||||
|  |  | ||||||
| 			//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>"); |  | ||||||
| 			uriNav.text = uri; |  | ||||||
| 		} else { |  | ||||||
| 			// Prevent inf loop. |  | ||||||
| 			window.cleanPath = false; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	Component.onCompleted: { |  | ||||||
| 		webview.url = "http://etherian.io" |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
|     function messages(messages, id) { |  | ||||||
| 		// Bit of a cheat to get proper JSON |  | ||||||
| 		var m = JSON.parse(JSON.parse(JSON.stringify(messages))) |  | ||||||
| 		webview.postEvent("eth_changed", id, m); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	function onShhMessage(message, id) { |  | ||||||
| 		webview.postEvent("shh_changed", id, message) |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	Item { |  | ||||||
| 		objectName: "root" |  | ||||||
| 		id: root |  | ||||||
| 		anchors.fill: parent |  | ||||||
| 		state: "inspectorShown" |  | ||||||
|  |  | ||||||
| 		RowLayout { |  | ||||||
| 			id: navBar |  | ||||||
| 			height: 40 |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				leftMargin: 7 |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			Button { |  | ||||||
| 				id: back |  | ||||||
| 				onClicked: { |  | ||||||
| 					webview.goBack() |  | ||||||
| 				} |  | ||||||
| 				style: ButtonStyle { |  | ||||||
| 					background: Image { |  | ||||||
| 						source: "../back.png" |  | ||||||
| 						width: 30 |  | ||||||
| 						height: 30 |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			TextField { |  | ||||||
| 				anchors { |  | ||||||
| 					left: back.right |  | ||||||
| 					right: toggleInspector.left |  | ||||||
| 					leftMargin: 10 |  | ||||||
| 					rightMargin: 10 |  | ||||||
| 				} |  | ||||||
| 				text: webview.url; |  | ||||||
| 				id: uriNav |  | ||||||
| 				y: parent.height / 2 - this.height / 2 |  | ||||||
|  |  | ||||||
| 				Keys.onReturnPressed: { |  | ||||||
| 					webview.url = this.text; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			Button { |  | ||||||
| 				id: toggleInspector |  | ||||||
| 				anchors { |  | ||||||
| 					right: parent.right |  | ||||||
| 				} |  | ||||||
| 				iconSource: "../bug.png" |  | ||||||
| 				onClicked: { |  | ||||||
| 					if(inspector.visible == true){ |  | ||||||
| 						inspector.visible = false |  | ||||||
| 					}else{ |  | ||||||
| 						inspector.visible = true |  | ||||||
| 						inspector.url = webview.experimental.remoteInspectorUrl |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// Border |  | ||||||
| 		Rectangle { |  | ||||||
| 			id: divider |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				top: navBar.bottom |  | ||||||
| 			} |  | ||||||
| 			z: -1 |  | ||||||
| 			height: 1 |  | ||||||
| 			color: "#CCCCCC" |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		ScrollView { |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				bottom: parent.bottom |  | ||||||
| 				top: divider.bottom |  | ||||||
| 			} |  | ||||||
| 			WebView { |  | ||||||
| 				objectName: "webView" |  | ||||||
| 				id: webview |  | ||||||
| 				anchors.fill: parent |  | ||||||
|  |  | ||||||
| 				function sendMessage(data) { |  | ||||||
| 					webview.experimental.postMessage(JSON.stringify(data)) |  | ||||||
| 				} |  | ||||||
|  |  | ||||||
| 				experimental.preferences.javascriptEnabled: true |  | ||||||
| 				experimental.preferences.webAudioEnabled: true |  | ||||||
| 				experimental.preferences.pluginsEnabled: true |  | ||||||
| 				experimental.preferences.navigatorQtObjectEnabled: true |  | ||||||
| 				experimental.preferences.developerExtrasEnabled: true |  | ||||||
| 				experimental.preferences.webGLEnabled: true |  | ||||||
| 				experimental.preferences.notificationsEnabled: true |  | ||||||
| 				experimental.preferences.localStorageEnabled: true |  | ||||||
| 				experimental.userAgent:"Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36  (KHTML, like Gecko) Mist/0.1 Safari/537.36" |  | ||||||
|  |  | ||||||
| 				experimental.itemSelector:  MouseArea { |  | ||||||
| 					// To avoid conflicting with ListView.model when inside Initiator context. |  | ||||||
| 					property QtObject selectorModel: model |  | ||||||
| 					anchors.fill: parent |  | ||||||
| 					onClicked: selectorModel.reject() |  | ||||||
|  |  | ||||||
| 					Menu { |  | ||||||
| 						visible: true |  | ||||||
| 						id: itemSelector |  | ||||||
|  |  | ||||||
| 						Instantiator { |  | ||||||
| 							model: selectorModel.items |  | ||||||
| 							delegate: MenuItem { |  | ||||||
| 								text: model.text |  | ||||||
| 								onTriggered: { |  | ||||||
| 									selectorModel.accept(index) |  | ||||||
| 								} |  | ||||||
| 							} |  | ||||||
| 							onObjectAdded: itemSelector.insertItem(index, object) |  | ||||||
| 							onObjectRemoved: itemSelector.removeItem(object) |  | ||||||
| 						} |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					Component.onCompleted: { |  | ||||||
| 						itemSelector.popup() |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				experimental.userScripts: ["../ext/q.js", "../ext/ethereum.js/lib/web3.js", "../ext/ethereum.js/lib/qt.js", "../ext/setup.js"] |  | ||||||
| 				experimental.onMessageReceived: { |  | ||||||
| 					//console.log("[onMessageReceived]: ", message.data) |  | ||||||
| 					var data = JSON.parse(message.data) |  | ||||||
|  |  | ||||||
| 					try { |  | ||||||
| 						switch(data.call) { |  | ||||||
| 							case "eth_compile": |  | ||||||
| 							postData(data._id, eth.compile(data.args[0])) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_coinbase": |  | ||||||
| 							postData(data._id, eth.coinBase()) |  | ||||||
|  |  | ||||||
| 							case "eth_account": |  | ||||||
| 							postData(data._id, eth.key().address); |  | ||||||
|  |  | ||||||
| 							case "eth_istening": |  | ||||||
| 							postData(data._id, eth.isListening()) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_mining": |  | ||||||
| 							postData(data._id, eth.isMining()) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_peerCount": |  | ||||||
| 							postData(data._id, eth.peerCount()) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_countAt": |  | ||||||
| 							require(1) |  | ||||||
| 							postData(data._id, eth.txCountAt(data.args[0])) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_codeAt": |  | ||||||
| 							require(1) |  | ||||||
| 							var code = eth.codeAt(data.args[0]) |  | ||||||
| 							postData(data._id, code); |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_blockByNumber": |  | ||||||
| 							require(1) |  | ||||||
| 							var block = eth.blockByNumber(data.args[0]) |  | ||||||
| 							postData(data._id, block) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_blockByHash": |  | ||||||
| 							require(1) |  | ||||||
| 							var block = eth.blockByHash(data.args[0]) |  | ||||||
| 							postData(data._id, block) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							require(2) |  | ||||||
| 							var block = eth.blockByHash(data.args[0]) |  | ||||||
| 							postData(data._id, block.transactions[data.args[1]]) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_transactionByHash": |  | ||||||
| 							case "eth_transactionByNumber": |  | ||||||
| 							require(2) |  | ||||||
|  |  | ||||||
| 							var block; |  | ||||||
| 							if (data.call === "transactionByHash") |  | ||||||
| 							block = eth.blockByHash(data.args[0]) |  | ||||||
| 							else |  | ||||||
| 							block = eth.blockByNumber(data.args[0]) |  | ||||||
|  |  | ||||||
| 							var tx = block.transactions.get(data.args[1]) |  | ||||||
|  |  | ||||||
| 							postData(data._id, tx) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_uncleByHash": |  | ||||||
| 							case "eth_uncleByNumber": |  | ||||||
| 							require(2) |  | ||||||
|  |  | ||||||
| 							var block; |  | ||||||
| 							if (data.call === "uncleByHash") |  | ||||||
| 							block = eth.blockByHash(data.args[0]) |  | ||||||
| 							else |  | ||||||
| 							block = eth.blockByNumber(data.args[0]) |  | ||||||
|  |  | ||||||
| 							var uncle = block.uncles.get(data.args[1]) |  | ||||||
|  |  | ||||||
| 							postData(data._id, uncle) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "transact": |  | ||||||
| 							require(5) |  | ||||||
|  |  | ||||||
| 							var tx = eth.transact(data.args) |  | ||||||
| 							postData(data._id, tx) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_stateAt": |  | ||||||
| 							require(2); |  | ||||||
|  |  | ||||||
| 							var storage = eth.storageAt(data.args[0], data.args[1]); |  | ||||||
| 							postData(data._id, storage) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_call": |  | ||||||
| 							require(1); |  | ||||||
| 							var ret = eth.call(data.args) |  | ||||||
| 							postData(data._id, ret) |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_balanceAt": |  | ||||||
| 							require(1); |  | ||||||
|  |  | ||||||
| 							postData(data._id, eth.balanceAt(data.args[0])); |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "eth_watch": |  | ||||||
| 							require(2) |  | ||||||
| 							eth.watch(data.args[0], data.args[1]) |  | ||||||
|  |  | ||||||
| 							case "eth_disconnect": |  | ||||||
| 							require(1) |  | ||||||
| 							postData(data._id, null) |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "eth_newFilterString": |  | ||||||
| 							require(1) |  | ||||||
| 							var id = eth.newFilterString(data.args[0], window) |  | ||||||
| 							postData(data._id, id); |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "eth_newFilter": |  | ||||||
| 							require(1) |  | ||||||
| 							var id = eth.newFilter(data.args[0], window) |  | ||||||
|  |  | ||||||
| 							postData(data._id, id); |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "eth_filterLogs": |  | ||||||
| 							require(1); |  | ||||||
|  |  | ||||||
| 							var messages = eth.messages(data.args[0]); |  | ||||||
| 							var m = JSON.parse(JSON.parse(JSON.stringify(messages))) |  | ||||||
| 							postData(data._id, m); |  | ||||||
|  |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "eth_deleteFilter": |  | ||||||
| 							require(1); |  | ||||||
| 							eth.uninstallFilter(data.args[0]) |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 							case "shh_newFilter": |  | ||||||
| 							require(1); |  | ||||||
| 							var id = shh.watch(data.args[0], window); |  | ||||||
| 							postData(data._id, id); |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "shh_newIdentity": |  | ||||||
| 							var id = shh.newIdentity() |  | ||||||
| 							postData(data._id, id) |  | ||||||
|  |  | ||||||
| 							break |  | ||||||
|  |  | ||||||
| 							case "shh_post": |  | ||||||
| 							require(1); |  | ||||||
|  |  | ||||||
| 							var params = data.args[0]; |  | ||||||
| 							var fields = ["payload", "to", "from"]; |  | ||||||
| 							for(var i = 0; i < fields.length; i++) { |  | ||||||
| 								params[fields[i]] = params[fields[i]] || ""; |  | ||||||
| 							} |  | ||||||
| 							if(typeof params.payload !== "object") { params.payload = [params.payload]; } //params.payload = params.payload.join(""); } |  | ||||||
| 							params.topics = params.topics || []; |  | ||||||
| 							params.priority = params.priority || 1000; |  | ||||||
| 							params.ttl = params.ttl || 100; |  | ||||||
|  |  | ||||||
| 							shh.post(params.payload, params.to, params.from, params.topics, params.priority, params.ttl); |  | ||||||
|  |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "shh_getMessages": |  | ||||||
| 							require(1); |  | ||||||
|  |  | ||||||
| 							var m = shh.messages(data.args[0]); |  | ||||||
| 							var messages = JSON.parse(JSON.parse(JSON.stringify(m))); |  | ||||||
| 							postData(data._id, messages); |  | ||||||
|  |  | ||||||
| 							break; |  | ||||||
|  |  | ||||||
| 							case "ssh_newGroup": |  | ||||||
| 							postData(data._id, ""); |  | ||||||
| 							break; |  | ||||||
| 						} |  | ||||||
| 					} catch(e) { |  | ||||||
| 						console.log(data.call + ": " + e) |  | ||||||
|  |  | ||||||
| 						postData(data._id, null); |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
|  |  | ||||||
| 				function post(seed, data) { |  | ||||||
| 					postData(data._id, data) |  | ||||||
| 				} |  | ||||||
| 				function require(args, num) { |  | ||||||
| 					if(args.length < num) { |  | ||||||
| 						throw("required argument count of "+num+" got "+args.length); |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 				function postData(seed, data) { |  | ||||||
| 					webview.experimental.postMessage(JSON.stringify({data: data, _id: seed})) |  | ||||||
| 				} |  | ||||||
| 				function postEvent(event, id, data) { |  | ||||||
| 					webview.experimental.postMessage(JSON.stringify({data: data, _id: id, _event: event})) |  | ||||||
| 				} |  | ||||||
| 				function onWatchedCb(data, id) { |  | ||||||
| 					var messages = JSON.parse(data) |  | ||||||
| 					postEvent("watched:"+id, messages) |  | ||||||
| 				} |  | ||||||
| 				function onNewBlockCb(block) { |  | ||||||
| 					postEvent("block:new", block) |  | ||||||
| 				} |  | ||||||
| 				function onObjectChangeCb(stateObject) { |  | ||||||
| 					postEvent("object:"+stateObject.address(), stateObject) |  | ||||||
| 				} |  | ||||||
| 				function onStorageChangeCb(storageObject) { |  | ||||||
| 					var ev = ["storage", storageObject.stateAddress, storageObject.address].join(":"); |  | ||||||
| 					postEvent(ev, [storageObject.address, storageObject.value]) |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		Rectangle { |  | ||||||
| 			id: sizeGrip |  | ||||||
| 			color: "gray" |  | ||||||
| 			visible: false |  | ||||||
| 			height: 10 |  | ||||||
| 			anchors { |  | ||||||
| 				left: root.left |  | ||||||
| 				right: root.right |  | ||||||
| 			} |  | ||||||
| 			y: Math.round(root.height * 2 / 3) |  | ||||||
|  |  | ||||||
| 			MouseArea { |  | ||||||
| 				anchors.fill: parent |  | ||||||
| 				drag.target: sizeGrip |  | ||||||
| 				drag.minimumY: 0 |  | ||||||
| 				drag.maximumY: root.height |  | ||||||
| 				drag.axis: Drag.YAxis |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		WebView { |  | ||||||
| 			id: inspector |  | ||||||
| 			visible: false |  | ||||||
| 			anchors { |  | ||||||
| 				left: root.left |  | ||||||
| 				right: root.right |  | ||||||
| 				top: sizeGrip.bottom |  | ||||||
| 				bottom: root.bottom |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		states: [ |  | ||||||
| 			State { |  | ||||||
| 				name: "inspectorShown" |  | ||||||
| 				PropertyChanges { |  | ||||||
| 					target: inspector |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @@ -109,7 +109,7 @@ ApplicationWindow { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	function newBrowserTab(url) { | 	function newBrowserTab(url) { | ||||||
| 		var window = addPlugin("./views/browser2.qml", {noAdd: true, close: true, section: "apps", active: true}); | 		var window = addPlugin("./views/browser.qml", {noAdd: true, close: true, section: "apps", active: true}); | ||||||
| 		window.view.url = url; | 		window.view.url = url; | ||||||
| 		window.menuItem.title = "Browser Tab"; | 		window.menuItem.title = "Browser Tab"; | ||||||
| 		activeView(window.view, window.menuItem); | 		activeView(window.view, window.menuItem); | ||||||
|   | |||||||
| @@ -1,209 +0,0 @@ | |||||||
| import QtQuick 2.0 |  | ||||||
| import QtQuick.Controls 1.0; |  | ||||||
| import QtQuick.Controls.Styles 1.0 |  | ||||||
| import QtQuick.Layouts 1.0; |  | ||||||
| import QtWebEngine 1.0 |  | ||||||
| //import QtWebEngine.experimental 1.0 |  | ||||||
| import QtQuick.Window 2.0; |  | ||||||
|  |  | ||||||
| Rectangle { |  | ||||||
| 	id: window |  | ||||||
| 	anchors.fill: parent |  | ||||||
| 	color: "#00000000" |  | ||||||
|  |  | ||||||
| 	property var title: "DApps" |  | ||||||
| 	property var iconSource: "../browser.png" |  | ||||||
| 	property var menuItem |  | ||||||
| 	property var hideUrl: true |  | ||||||
|  |  | ||||||
| 	property alias url: webview.url |  | ||||||
| 	property alias windowTitle: webview.title |  | ||||||
| 	property alias webView: webview |  | ||||||
|  |  | ||||||
| 	property var cleanPath: false |  | ||||||
| 	property var open: function(url) { |  | ||||||
| 		if(!window.cleanPath) { |  | ||||||
| 			var uri = url; |  | ||||||
| 			if(!/.*\:\/\/.*/.test(uri)) { |  | ||||||
| 				uri = "http://" + uri; |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			var reg = /(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.eth)(.*)/ |  | ||||||
|  |  | ||||||
| 			if(reg.test(uri)) { |  | ||||||
| 				uri.replace(reg, function(match, pre, domain, path) { |  | ||||||
| 					uri = pre; |  | ||||||
|  |  | ||||||
| 					var lookup = eth.lookupDomain(domain.substring(0, domain.length - 4)); |  | ||||||
| 					var ip = []; |  | ||||||
| 					for(var i = 0, l = lookup.length; i < l; i++) { |  | ||||||
| 						ip.push(lookup.charCodeAt(i)) |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					if(ip.length != 0) { |  | ||||||
| 						uri += lookup; |  | ||||||
| 					} else { |  | ||||||
| 						uri += domain; |  | ||||||
| 					} |  | ||||||
|  |  | ||||||
| 					uri += path; |  | ||||||
| 				}); |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			window.cleanPath = true; |  | ||||||
|  |  | ||||||
| 			webview.url = uri; |  | ||||||
|  |  | ||||||
| 			//uriNav.text = uri.text.replace(/(^https?\:\/\/(?:www\.)?)([a-zA-Z0-9_\-]*\.\w{2,3})(.*)/, "$1$2<span style='color:#CCC'>$3</span>"); |  | ||||||
| 			uriNav.text = uri; |  | ||||||
| 		} else { |  | ||||||
| 			// Prevent inf loop. |  | ||||||
| 			window.cleanPath = false; |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	Component.onCompleted: { |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	Item { |  | ||||||
| 		objectName: "root" |  | ||||||
| 		id: root |  | ||||||
| 		anchors.fill: parent |  | ||||||
| 		state: "inspectorShown" |  | ||||||
|  |  | ||||||
| 		RowLayout { |  | ||||||
| 			id: navBar |  | ||||||
| 			height: 40 |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				leftMargin: 7 |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			Button { |  | ||||||
| 				id: back |  | ||||||
| 				onClicked: { |  | ||||||
| 					webview.goBack() |  | ||||||
| 				} |  | ||||||
| 				style: ButtonStyle { |  | ||||||
| 					background: Image { |  | ||||||
| 						source: "../../back.png" |  | ||||||
| 						width: 30 |  | ||||||
| 						height: 30 |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			TextField { |  | ||||||
| 				anchors { |  | ||||||
| 					left: back.right |  | ||||||
| 					right: toggleInspector.left |  | ||||||
| 					leftMargin: 10 |  | ||||||
| 					rightMargin: 10 |  | ||||||
| 				} |  | ||||||
| 				text: webview.url; |  | ||||||
| 				id: uriNav |  | ||||||
| 				y: parent.height / 2 - this.height / 2 |  | ||||||
|  |  | ||||||
| 				Keys.onReturnPressed: { |  | ||||||
| 					webview.url = this.text; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			Button { |  | ||||||
| 				id: toggleInspector |  | ||||||
| 				anchors { |  | ||||||
| 					right: parent.right |  | ||||||
| 				} |  | ||||||
| 				iconSource: "../../bug.png" |  | ||||||
| 				onClicked: { |  | ||||||
| 					// XXX soon |  | ||||||
| 					return |  | ||||||
| 					if(inspector.visible == true){ |  | ||||||
| 						inspector.visible = false |  | ||||||
| 					}else{ |  | ||||||
| 						inspector.visible = true |  | ||||||
| 						inspector.url = webview.experimental.remoteInspectorUrl |  | ||||||
| 					} |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		// Border |  | ||||||
| 		Rectangle { |  | ||||||
| 			id: divider |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				top: navBar.bottom |  | ||||||
| 			} |  | ||||||
| 			z: -1 |  | ||||||
| 			height: 1 |  | ||||||
| 			color: "#CCCCCC" |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		WebEngineView { |  | ||||||
| 			objectName: "webView" |  | ||||||
| 			id: webview |  | ||||||
| 			anchors { |  | ||||||
| 				left: parent.left |  | ||||||
| 				right: parent.right |  | ||||||
| 				bottom: parent.bottom |  | ||||||
| 				top: divider.bottom |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			onLoadingChanged: { |  | ||||||
| 				console.log(url) |  | ||||||
| 				if (loadRequest.status == WebEngineView.LoadSucceededStatus) { |  | ||||||
| 					webview.runJavaScript(eth.readFile("bignumber.min.js")); |  | ||||||
| 					webview.runJavaScript(eth.readFile("dist/ethereum.js")); |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			onJavaScriptConsoleMessage: { |  | ||||||
| 				console.log(sourceID + ":" + lineNumber + ":" + JSON.stringify(message)); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		Rectangle { |  | ||||||
| 			id: sizeGrip |  | ||||||
| 			color: "gray" |  | ||||||
| 			visible: false |  | ||||||
| 			height: 10 |  | ||||||
| 			anchors { |  | ||||||
| 				left: root.left |  | ||||||
| 				right: root.right |  | ||||||
| 			} |  | ||||||
| 			y: Math.round(root.height * 2 / 3) |  | ||||||
|  |  | ||||||
| 			MouseArea { |  | ||||||
| 				anchors.fill: parent |  | ||||||
| 				drag.target: sizeGrip |  | ||||||
| 				drag.minimumY: 0 |  | ||||||
| 				drag.maximumY: root.height |  | ||||||
| 				drag.axis: Drag.YAxis |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		WebEngineView { |  | ||||||
| 			id: inspector |  | ||||||
| 			visible: false |  | ||||||
| 			anchors { |  | ||||||
| 				left: root.left |  | ||||||
| 				right: root.right |  | ||||||
| 				top: sizeGrip.bottom |  | ||||||
| 				bottom: root.bottom |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		states: [ |  | ||||||
| 			State { |  | ||||||
| 				name: "inspectorShown" |  | ||||||
| 				PropertyChanges { |  | ||||||
| 					target: inspector |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		] |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
|  |  | ||||||
| @@ -61,7 +61,7 @@ func (gui *Gui) Transact(recipient, value, gas, gasPrice, d string) (string, err | |||||||
| 		data = ethutil.Bytes2Hex(utils.FormatTransactionData(d)) | 		data = ethutil.Bytes2Hex(utils.FormatTransactionData(d)) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return gui.xeth.Transact(gui.privateKey(), recipient, value, gas, gasPrice, data) | 	return gui.xeth.Transact(recipient, value, gas, gasPrice, data) | ||||||
| } | } | ||||||
|  |  | ||||||
| func (gui *Gui) SetCustomIdentifier(customIdentifier string) { | func (gui *Gui) SetCustomIdentifier(customIdentifier string) { | ||||||
|   | |||||||
| @@ -30,6 +30,7 @@ import ( | |||||||
| 	"github.com/ethereum/go-ethereum/eth" | 	"github.com/ethereum/go-ethereum/eth" | ||||||
| 	"github.com/ethereum/go-ethereum/logger" | 	"github.com/ethereum/go-ethereum/logger" | ||||||
| 	"github.com/ethereum/go-ethereum/p2p" | 	"github.com/ethereum/go-ethereum/p2p" | ||||||
|  | 	"github.com/ethereum/go-ethereum/ui/qt/webengine" | ||||||
| 	"github.com/obscuren/qml" | 	"github.com/obscuren/qml" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @@ -42,6 +43,8 @@ var ethereum *eth.Ethereum | |||||||
| var mainlogger = logger.NewLogger("MAIN") | var mainlogger = logger.NewLogger("MAIN") | ||||||
|  |  | ||||||
| func run() error { | func run() error { | ||||||
|  | 	webengine.Initialize() | ||||||
|  |  | ||||||
| 	// precedence: code-internal flag default < config file < environment variables < command line | 	// precedence: code-internal flag default < config file < environment variables < command line | ||||||
| 	Init() // parsing command line | 	Init() // parsing command line | ||||||
|  |  | ||||||
|   | |||||||
| @@ -179,7 +179,6 @@ func (self *UiLib) Transact(params map[string]interface{}) (string, error) { | |||||||
| 	object := mapToTxParams(params) | 	object := mapToTxParams(params) | ||||||
|  |  | ||||||
| 	return self.XEth.Transact( | 	return self.XEth.Transact( | ||||||
| 		object["from"], |  | ||||||
| 		object["to"], | 		object["to"], | ||||||
| 		object["value"], | 		object["value"], | ||||||
| 		object["gas"], | 		object["gas"], | ||||||
|   | |||||||
| @@ -75,7 +75,7 @@ func (self *JSEthereum) GetStateObject(addr string) otto.Value { | |||||||
| } | } | ||||||
|  |  | ||||||
| func (self *JSEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) otto.Value { | func (self *JSEthereum) Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr string) otto.Value { | ||||||
| 	r, err := self.XEth.Transact(key, recipient, valueStr, gasStr, gasPriceStr, dataStr) | 	r, err := self.XEth.Transact(recipient, valueStr, gasStr, gasPriceStr, dataStr) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		fmt.Println(err) | 		fmt.Println(err) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -65,7 +65,7 @@ func (p *EthereumApi) Transact(args *NewTxArgs, reply *interface{}) error { | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
| 	result, _ := p.xeth.Transact( /* TODO specify account */ "", args.Recipient, args.Value, args.Gas, args.GasPrice, args.Body) | 	result, _ := p.xeth.Transact( /* TODO specify account */ args.Recipient, args.Value, args.Gas, args.GasPrice, args.Body) | ||||||
| 	*reply = result | 	*reply = result | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| @@ -76,7 +76,7 @@ func (p *EthereumApi) Create(args *NewTxArgs, reply *interface{}) error { | |||||||
| 		return err | 		return err | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	result, _ := p.xeth.Transact( /* TODO specify account */ "", "", args.Value, args.Gas, args.GasPrice, args.Body) | 	result, _ := p.xeth.Transact( /* TODO specify account */ "", args.Value, args.Gas, args.GasPrice, args.Body) | ||||||
| 	*reply = result | 	*reply = result | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										68
									
								
								xeth/xeth.go
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								xeth/xeth.go
									
									
									
									
									
								
							| @@ -22,7 +22,6 @@ var pipelogger = logger.NewLogger("XETH") | |||||||
| type Backend interface { | type Backend interface { | ||||||
| 	BlockProcessor() *core.BlockProcessor | 	BlockProcessor() *core.BlockProcessor | ||||||
| 	ChainManager() *core.ChainManager | 	ChainManager() *core.ChainManager | ||||||
| 	Coinbase() []byte |  | ||||||
| 	KeyManager() *crypto.KeyManager | 	KeyManager() *crypto.KeyManager | ||||||
| 	IsMining() bool | 	IsMining() bool | ||||||
| 	IsListening() bool | 	IsListening() bool | ||||||
| @@ -82,14 +81,6 @@ func (self *XEth) Accounts() []string { | |||||||
| 	return []string{toHex(self.eth.KeyManager().Address())} | 	return []string{toHex(self.eth.KeyManager().Address())} | ||||||
| } | } | ||||||
|  |  | ||||||
| /* |  | ||||||
| func (self *XEth) StateObject(addr string) *Object { |  | ||||||
| 	object := &Object{self.State().safeGet(fromHex(addr))} |  | ||||||
|  |  | ||||||
| 	return NewObject(object) |  | ||||||
| } |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| func (self *XEth) PeerCount() int { | func (self *XEth) PeerCount() int { | ||||||
| 	return self.eth.PeerCount() | 	return self.eth.PeerCount() | ||||||
| } | } | ||||||
| @@ -190,10 +181,6 @@ func (self *XEth) FromNumber(str string) string { | |||||||
| 	return ethutil.BigD(fromHex(str)).String() | 	return ethutil.BigD(fromHex(str)).String() | ||||||
| } | } | ||||||
|  |  | ||||||
| func (self *XEth) Transact(key, toStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) { |  | ||||||
| 	return "", nil |  | ||||||
| } |  | ||||||
|  |  | ||||||
| func ToMessages(messages state.Messages) *ethutil.List { | func ToMessages(messages state.Messages) *ethutil.List { | ||||||
| 	var msgs []Message | 	var msgs []Message | ||||||
| 	for _, m := range messages { | 	for _, m := range messages { | ||||||
| @@ -216,3 +203,58 @@ func (self *XEth) PushTx(encodedTx string) (string, error) { | |||||||
| 	} | 	} | ||||||
| 	return toHex(tx.Hash()), nil | 	return toHex(tx.Hash()), nil | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func (self *XEth) Transact(toStr, valueStr, gasStr, gasPriceStr, codeStr string) (string, error) { | ||||||
|  |  | ||||||
|  | 	var ( | ||||||
|  | 		to               []byte | ||||||
|  | 		value            = ethutil.NewValue(valueStr) | ||||||
|  | 		gas              = ethutil.NewValue(gasStr) | ||||||
|  | 		price            = ethutil.NewValue(gasPriceStr) | ||||||
|  | 		data             []byte | ||||||
|  | 		key              = self.eth.KeyManager().KeyPair() | ||||||
|  | 		contractCreation bool | ||||||
|  | 	) | ||||||
|  |  | ||||||
|  | 	data = fromHex(codeStr) | ||||||
|  | 	to = fromHex(toStr) | ||||||
|  | 	if len(to) == 0 { | ||||||
|  | 		contractCreation = true | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var tx *types.Transaction | ||||||
|  | 	if contractCreation { | ||||||
|  | 		tx = types.NewContractCreationTx(value.BigInt(), gas.BigInt(), price.BigInt(), data) | ||||||
|  | 	} else { | ||||||
|  | 		tx = types.NewTransactionMessage(to, value.BigInt(), gas.BigInt(), price.BigInt(), data) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	state := self.chainManager.TransState() | ||||||
|  | 	nonce := state.GetNonce(key.Address()) | ||||||
|  |  | ||||||
|  | 	tx.SetNonce(nonce) | ||||||
|  | 	tx.Sign(key.PrivateKey) | ||||||
|  |  | ||||||
|  | 	// Do some pre processing for our "pre" events  and hooks | ||||||
|  | 	block := self.chainManager.NewBlock(key.Address()) | ||||||
|  | 	coinbase := state.GetOrNewStateObject(key.Address()) | ||||||
|  | 	coinbase.SetGasPool(block.GasLimit()) | ||||||
|  | 	self.blockProcessor.ApplyTransactions(coinbase, state, block, types.Transactions{tx}, true) | ||||||
|  |  | ||||||
|  | 	err := self.eth.TxPool().Add(tx) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return "", err | ||||||
|  | 	} | ||||||
|  | 	state.SetNonce(key.Address(), nonce+1) | ||||||
|  |  | ||||||
|  | 	if contractCreation { | ||||||
|  | 		addr := core.AddressFromMessage(tx) | ||||||
|  | 		pipelogger.Infof("Contract addr %x\n", addr) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if types.IsContractAddr(to) { | ||||||
|  | 		return toHex(core.AddressFromMessage(tx)), nil | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return toHex(tx.Hash()), nil | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user