aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-04-30 07:44:12 +0800
committerobscuren <geffobscura@gmail.com>2014-04-30 07:44:12 +0800
commite85d5dd428c71dd45060082a9af28a40a68a25e4 (patch)
treeb580e1d7fc5f211dda95ed9de86bdc4c9b66321c
parent64c2550b3154df7f2c75dda559d91046cb559ffd (diff)
downloaddexon-e85d5dd428c71dd45060082a9af28a40a68a25e4.tar.gz
dexon-e85d5dd428c71dd45060082a9af28a40a68a25e4.tar.zst
dexon-e85d5dd428c71dd45060082a9af28a40a68a25e4.zip
API changes
-rw-r--r--ethereal/assets/ethereum.js70
-rw-r--r--ethereal/assets/qml/webapp.qml286
-rw-r--r--ethereal/assets/samplecoin.html4
3 files changed, 208 insertions, 152 deletions
diff --git a/ethereal/assets/ethereum.js b/ethereal/assets/ethereum.js
index 0f9f68c43..bb6346cab 100644
--- a/ethereal/assets/ethereum.js
+++ b/ethereal/assets/ethereum.js
@@ -1,17 +1,3 @@
-// Helper function for generating pseudo callbacks and sending data to the QML part of the application
-function postData(data, cb) {
- data._seed = Math.floor(Math.random() * 1000000)
- if(cb) {
- eth._callbacks[data._seed] = cb;
- }
-
- if(data.args === undefined) {
- data.args = [];
- }
-
- navigator.qt.postMessage(JSON.stringify(data));
-}
-
// Main Ethereum library
window.eth = {
prototype: Object(),
@@ -35,8 +21,12 @@ window.eth = {
//
// Creates a transaction with the current account
// If no recipient is set, the Ethereum API will see it as a contract creation
- createTx: function(recipient, value, gas, gasPrice, data, cb) {
- postData({call: "createTx", args: [recipient, value, gas, gasPrice, data]}, cb);
+ transact: function(sec, recipient, value, gas, gasPrice, data, cb) {
+ postData({call: "transact", args: [sec, recipient, value, gas, gasPrice, data]}, cb);
+ },
+
+ create: function(sec, value, gas, gasPrice, init, body, cb) {
+ postData({call: "create", args: [sec, value, gas, gasPrice, init, body]}, cb);
},
getStorage: function(address, storageAddress, cb) {
@@ -47,10 +37,39 @@ window.eth = {
postData({call: "getKey"}, cb);
},
- watch: function(address) {
- postData({call: "watch", args: [address]});
+ getBalance: function(address, cb) {
+ postData({call: "getBalance", args: [address]}, cb);
+ },
+
+ watch: function(address, storageAddrOrCb, cb) {
+ var ev = "changed:"+address;
+
+ if(cb === undefined) {
+ cb = storageAddrOrCb;
+ storageAddrOrCb = "";
+ } else {
+ ev += ":"+storageAddrOrCb;
+ }
+
+ eth.on(ev, cb)
+
+ postData({call: "watch", args: [address, storageAddrOrCb]});
},
+ disconnect: function(address, storageAddrOrCb, cb) {
+ var ev = "changed:"+address;
+
+ if(cb === undefined) {
+ cb = storageAddrOrCb;
+ storageAddrOrCb = null;
+ } else {
+ ev += ":"+storageAddrOrCb;
+ }
+
+ eth.off(ev, cb)
+
+ postData({call: "disconnect", args: [address, storageAddrOrCb]});
+ },
on: function(event, cb) {
if(eth._onCallbacks[event] === undefined) {
@@ -61,6 +80,7 @@ window.eth = {
return this
},
+
off: function(event, cb) {
if(eth._onCallbacks[event] !== undefined) {
var callbacks = eth._onCallbacks[event];
@@ -100,6 +120,20 @@ function debug(/**/) {
document.getElementById("debug").innerHTML += "<br>" + msg
}
+// Helper function for generating pseudo callbacks and sending data to the QML part of the application
+function postData(data, cb) {
+ data._seed = Math.floor(Math.random() * 1000000)
+ if(cb) {
+ eth._callbacks[data._seed] = cb;
+ }
+
+ if(data.args === undefined) {
+ data.args = [];
+ }
+
+ navigator.qt.postMessage(JSON.stringify(data));
+}
+
navigator.qt.onmessage = function(ev) {
var data = JSON.parse(ev.data)
diff --git a/ethereal/assets/qml/webapp.qml b/ethereal/assets/qml/webapp.qml
index 3afc0def0..eebe8921f 100644
--- a/ethereal/assets/qml/webapp.qml
+++ b/ethereal/assets/qml/webapp.qml
@@ -7,135 +7,159 @@ import QtQuick.Window 2.1;
import Ethereum 1.0
ApplicationWindow {
- id: window
- title: "Ethereum"
- width: 900
- height: 600
- minimumHeight: 300
-
- property alias url: webview.url
- property alias webView: webview
-
- Item {
- objectName: "root"
- id: root
- anchors.fill: parent
- state: "inspectorShown"
-
- WebView {
- objectName: "webView"
- id: webview
- anchors.fill: parent
- /*
- anchors {
- left: parent.left
- right: parent.right
- bottom: sizeGrip.top
- top: parent.top
- }
- */
-
- onTitleChanged: { window.title = title }
- experimental.preferences.javascriptEnabled: true
- experimental.preferences.navigatorQtObjectEnabled: true
- experimental.preferences.developerExtrasEnabled: true
- experimental.userScripts: [ui.assetPath("ethereum.js")]
- experimental.onMessageReceived: {
- //console.log("[onMessageReceived]: ", message.data)
- var data = JSON.parse(message.data)
-
- switch(data.call) {
- case "getBlockByNumber":
- var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
- postData(data._seed, block)
- break
- case "getBlockByHash":
- var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
- postData(data._seed, block)
- break
- case "createTx":
- if(data.args.length < 5) {
- postData(data._seed, null)
- } else {
- var tx = eth.createTx(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
- postData(data._seed, tx)
- }
- break
- case "getStorage":
- if(data.args.length < 2) {
- postData(data._seed, null)
- } else {
- var stateObject = eth.getStateObject(data.args[0])
- var storage = stateObject.getStorage(data.args[1])
- postData(data._seed, storage)
- }
- break
- case "getKey":
- var keys = eth.getKey()
- postData(data._seed, keys)
- break
- case "watch":
- if(data.args.length > 0) {
- eth.watch(data.args[0]);
- }
- break
- }
- }
- function postData(seed, data) {
- webview.experimental.postMessage(JSON.stringify({data: data, _seed: seed}))
- }
- function postEvent(event, data) {
- webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
- }
-
- function onNewBlockCb(block) {
- postEvent("block:new", block)
- }
- function onObjectChangeCb(stateObject) {
- postEvent("object:change", stateObject)
- }
- }
-
- 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
- url: webview.experimental.remoteInspectorUrl
- anchors {
- left: root.left
- right: root.right
- top: sizeGrip.bottom
- bottom: root.bottom
- }
- }
-
- states: [
- State {
- name: "inspectorShown"
- PropertyChanges {
- target: inspector
- url: webview.experimental.remoteInspectorUrl
- }
- }
- ]
- }
+ id: window
+ title: "Ethereum"
+ width: 900
+ height: 600
+ minimumHeight: 300
+
+ property alias url: webview.url
+ property alias webView: webview
+
+ Item {
+ objectName: "root"
+ id: root
+ anchors.fill: parent
+ state: "inspectorShown"
+
+ WebView {
+ objectName: "webView"
+ id: webview
+ anchors.fill: parent
+ /*
+ anchors {
+ left: parent.left
+ right: parent.right
+ bottom: sizeGrip.top
+ top: parent.top
+ }
+ */
+
+ onTitleChanged: { window.title = title }
+ experimental.preferences.javascriptEnabled: true
+ experimental.preferences.navigatorQtObjectEnabled: true
+ experimental.preferences.developerExtrasEnabled: true
+ experimental.userScripts: [ui.assetPath("ethereum.js")]
+ experimental.onMessageReceived: {
+ //console.log("[onMessageReceived]: ", message.data)
+ // TODO move to messaging.js
+ var data = JSON.parse(message.data)
+
+ try {
+ switch(data.call) {
+ case "getBlockByNumber":
+ var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
+ postData(data._seed, block)
+ break
+ case "getBlockByHash":
+ var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
+ postData(data._seed, block)
+ break
+ case "transact":
+ require(5)
+
+ // TODO this will change to 6 soon with sec being teh first argument
+ var tx = eth.transact(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
+ postData(data._seed, tx)
+ break
+ case "create":
+ postData(data._seed, null)
+
+ break
+ case "getStorage":
+ require(2);
+
+ var stateObject = eth.getStateObject(data.args[0])
+ var storage = stateObject.getStorage(data.args[1])
+ postData(data._seed, storage)
+
+ break
+ case "getBalance":
+ require(1);
+
+ postData(data._seed, eth.getStateObject(data.args[0]).Value());
+
+ break
+ case "getKey":
+ var keys = eth.getKey()
+ postData(data._seed, keys)
+ break
+ case "watch":
+ require(1)
+ eth.watch(data.args[0], data.args[1]);
+ break
+ case "disconnect":
+ require(1)
+ postData(data._seed, null)
+ break;
+ }
+ } catch(e) {
+ console.log(data.call + ": " + e)
+
+ postData(data._seed, null);
+ }
+ }
+
+ 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, _seed: seed}))
+ }
+ function postEvent(event, data) {
+ webview.experimental.postMessage(JSON.stringify({data: data, _event: event}))
+ }
+
+ function onNewBlockCb(block) {
+ postEvent("block:new", block)
+ }
+ function onObjectChangeCb(stateObject) {
+ postEvent("object:change", stateObject)
+ }
+ }
+
+ 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
+ url: webview.experimental.remoteInspectorUrl
+ anchors {
+ left: root.left
+ right: root.right
+ top: sizeGrip.bottom
+ bottom: root.bottom
+ }
+ }
+
+ states: [
+ State {
+ name: "inspectorShown"
+ PropertyChanges {
+ target: inspector
+ url: webview.experimental.remoteInspectorUrl
+ }
+ }
+ ]
+ }
}
diff --git a/ethereal/assets/samplecoin.html b/ethereal/assets/samplecoin.html
index 1b89be877..73368a0b8 100644
--- a/ethereal/assets/samplecoin.html
+++ b/ethereal/assets/samplecoin.html
@@ -22,14 +22,12 @@ function tests() {
}
function init() {
- eth.watch(jefcoinAddr);
-
eth.getKey(function(key) {
eth.getStorage(jefcoinAddr, key, function(storage) {
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
});
- eth.on("object:change", function(stateObject) {
+ eth.watch(jefcoinAddr, function(stateObject) {
debug(stateObject);
eth.getStorage(jefcoinAddr, key, function(storage) {
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;