API changes
This commit is contained in:
parent
64c2550b31
commit
e85d5dd428
@ -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
|
// Main Ethereum library
|
||||||
window.eth = {
|
window.eth = {
|
||||||
prototype: Object(),
|
prototype: Object(),
|
||||||
@ -35,8 +21,12 @@ window.eth = {
|
|||||||
//
|
//
|
||||||
// Creates a transaction with the current account
|
// Creates a transaction with the current account
|
||||||
// If no recipient is set, the Ethereum API will see it as a contract creation
|
// If no recipient is set, the Ethereum API will see it as a contract creation
|
||||||
createTx: function(recipient, value, gas, gasPrice, data, cb) {
|
transact: function(sec, recipient, value, gas, gasPrice, data, cb) {
|
||||||
postData({call: "createTx", args: [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) {
|
getStorage: function(address, storageAddress, cb) {
|
||||||
@ -47,10 +37,39 @@ window.eth = {
|
|||||||
postData({call: "getKey"}, cb);
|
postData({call: "getKey"}, cb);
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: function(address) {
|
getBalance: function(address, cb) {
|
||||||
postData({call: "watch", args: [address]});
|
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) {
|
on: function(event, cb) {
|
||||||
if(eth._onCallbacks[event] === undefined) {
|
if(eth._onCallbacks[event] === undefined) {
|
||||||
@ -61,6 +80,7 @@ window.eth = {
|
|||||||
|
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
|
|
||||||
off: function(event, cb) {
|
off: function(event, cb) {
|
||||||
if(eth._onCallbacks[event] !== undefined) {
|
if(eth._onCallbacks[event] !== undefined) {
|
||||||
var callbacks = eth._onCallbacks[event];
|
var callbacks = eth._onCallbacks[event];
|
||||||
@ -100,6 +120,20 @@ function debug(/**/) {
|
|||||||
document.getElementById("debug").innerHTML += "<br>" + msg
|
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) {
|
navigator.qt.onmessage = function(ev) {
|
||||||
var data = JSON.parse(ev.data)
|
var data = JSON.parse(ev.data)
|
||||||
|
|
||||||
|
@ -7,135 +7,159 @@ import QtQuick.Window 2.1;
|
|||||||
import Ethereum 1.0
|
import Ethereum 1.0
|
||||||
|
|
||||||
ApplicationWindow {
|
ApplicationWindow {
|
||||||
id: window
|
id: window
|
||||||
title: "Ethereum"
|
title: "Ethereum"
|
||||||
width: 900
|
width: 900
|
||||||
height: 600
|
height: 600
|
||||||
minimumHeight: 300
|
minimumHeight: 300
|
||||||
|
|
||||||
property alias url: webview.url
|
property alias url: webview.url
|
||||||
property alias webView: webview
|
property alias webView: webview
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
objectName: "root"
|
objectName: "root"
|
||||||
id: root
|
id: root
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
state: "inspectorShown"
|
state: "inspectorShown"
|
||||||
|
|
||||||
WebView {
|
WebView {
|
||||||
objectName: "webView"
|
objectName: "webView"
|
||||||
id: webview
|
id: webview
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
/*
|
/*
|
||||||
anchors {
|
anchors {
|
||||||
left: parent.left
|
left: parent.left
|
||||||
right: parent.right
|
right: parent.right
|
||||||
bottom: sizeGrip.top
|
bottom: sizeGrip.top
|
||||||
top: parent.top
|
top: parent.top
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
onTitleChanged: { window.title = title }
|
onTitleChanged: { window.title = title }
|
||||||
experimental.preferences.javascriptEnabled: true
|
experimental.preferences.javascriptEnabled: true
|
||||||
experimental.preferences.navigatorQtObjectEnabled: true
|
experimental.preferences.navigatorQtObjectEnabled: true
|
||||||
experimental.preferences.developerExtrasEnabled: true
|
experimental.preferences.developerExtrasEnabled: true
|
||||||
experimental.userScripts: [ui.assetPath("ethereum.js")]
|
experimental.userScripts: [ui.assetPath("ethereum.js")]
|
||||||
experimental.onMessageReceived: {
|
experimental.onMessageReceived: {
|
||||||
//console.log("[onMessageReceived]: ", message.data)
|
//console.log("[onMessageReceived]: ", message.data)
|
||||||
var data = JSON.parse(message.data)
|
// TODO move to messaging.js
|
||||||
|
var data = JSON.parse(message.data)
|
||||||
|
|
||||||
switch(data.call) {
|
try {
|
||||||
case "getBlockByNumber":
|
switch(data.call) {
|
||||||
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
case "getBlockByNumber":
|
||||||
postData(data._seed, block)
|
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
||||||
break
|
postData(data._seed, block)
|
||||||
case "getBlockByHash":
|
break
|
||||||
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
case "getBlockByHash":
|
||||||
postData(data._seed, block)
|
var block = eth.getBlock("b9b56cf6f907fbee21db0cd7cbc0e6fea2fe29503a3943e275c5e467d649cb06")
|
||||||
break
|
postData(data._seed, block)
|
||||||
case "createTx":
|
break
|
||||||
if(data.args.length < 5) {
|
case "transact":
|
||||||
postData(data._seed, null)
|
require(5)
|
||||||
} 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) {
|
// TODO this will change to 6 soon with sec being teh first argument
|
||||||
postEvent("block:new", block)
|
var tx = eth.transact(data.args[0], data.args[1],data.args[2],data.args[3],data.args[4])
|
||||||
}
|
postData(data._seed, tx)
|
||||||
function onObjectChangeCb(stateObject) {
|
break
|
||||||
postEvent("object:change", stateObject)
|
case "create":
|
||||||
}
|
postData(data._seed, null)
|
||||||
}
|
|
||||||
|
|
||||||
Rectangle {
|
break
|
||||||
id: sizeGrip
|
case "getStorage":
|
||||||
color: "gray"
|
require(2);
|
||||||
visible: false
|
|
||||||
height: 10
|
|
||||||
anchors {
|
|
||||||
left: root.left
|
|
||||||
right: root.right
|
|
||||||
}
|
|
||||||
y: Math.round(root.height * 2 / 3)
|
|
||||||
|
|
||||||
MouseArea {
|
var stateObject = eth.getStateObject(data.args[0])
|
||||||
anchors.fill: parent
|
var storage = stateObject.getStorage(data.args[1])
|
||||||
drag.target: sizeGrip
|
postData(data._seed, storage)
|
||||||
drag.minimumY: 0
|
|
||||||
drag.maximumY: root.height
|
|
||||||
drag.axis: Drag.YAxis
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
WebView {
|
break
|
||||||
id: inspector
|
case "getBalance":
|
||||||
visible: false
|
require(1);
|
||||||
url: webview.experimental.remoteInspectorUrl
|
|
||||||
anchors {
|
|
||||||
left: root.left
|
|
||||||
right: root.right
|
|
||||||
top: sizeGrip.bottom
|
|
||||||
bottom: root.bottom
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
states: [
|
postData(data._seed, eth.getStateObject(data.args[0]).Value());
|
||||||
State {
|
|
||||||
name: "inspectorShown"
|
break
|
||||||
PropertyChanges {
|
case "getKey":
|
||||||
target: inspector
|
var keys = eth.getKey()
|
||||||
url: webview.experimental.remoteInspectorUrl
|
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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,14 +22,12 @@ function tests() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function init() {
|
function init() {
|
||||||
eth.watch(jefcoinAddr);
|
|
||||||
|
|
||||||
eth.getKey(function(key) {
|
eth.getKey(function(key) {
|
||||||
eth.getStorage(jefcoinAddr, key, function(storage) {
|
eth.getStorage(jefcoinAddr, key, function(storage) {
|
||||||
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
|
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
|
||||||
});
|
});
|
||||||
|
|
||||||
eth.on("object:change", function(stateObject) {
|
eth.watch(jefcoinAddr, function(stateObject) {
|
||||||
debug(stateObject);
|
debug(stateObject);
|
||||||
eth.getStorage(jefcoinAddr, key, function(storage) {
|
eth.getStorage(jefcoinAddr, key, function(storage) {
|
||||||
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
|
document.querySelector("#currentAmount").innerHTML = "Amount: " + storage;
|
||||||
|
Loading…
Reference in New Issue
Block a user