forked from mirror/go-ethereum
parent
0bf2d24cb0
commit
1471585af0
@ -1,236 +0,0 @@ |
|||||||
// Main Ethereum library
|
|
||||||
window.eth = { |
|
||||||
prototype: Object(), |
|
||||||
|
|
||||||
// Retrieve block
|
|
||||||
//
|
|
||||||
// Either supply a number or a string. Type is determent for the lookup method
|
|
||||||
// string - Retrieves the block by looking up the hash
|
|
||||||
// number - Retrieves the block by looking up the block number
|
|
||||||
getBlock: function(numberOrHash, cb) { |
|
||||||
var func; |
|
||||||
if(typeof numberOrHash == "string") { |
|
||||||
func = "getBlockByHash"; |
|
||||||
} else { |
|
||||||
func = "getBlockByNumber"; |
|
||||||
} |
|
||||||
postData({call: func, args: [numberOrHash]}, cb); |
|
||||||
}, |
|
||||||
|
|
||||||
// Create transaction
|
|
||||||
//
|
|
||||||
// Transact between two state objects
|
|
||||||
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); |
|
||||||
}, |
|
||||||
|
|
||||||
getStorageAt: function(address, storageAddress, cb) { |
|
||||||
postData({call: "getStorage", args: [address, storageAddress]}, cb); |
|
||||||
}, |
|
||||||
|
|
||||||
getKey: function(cb) { |
|
||||||
postData({call: "getKey"}, cb); |
|
||||||
}, |
|
||||||
|
|
||||||
getBalanceAt: function(address, cb) { |
|
||||||
postData({call: "getBalance", args: [address]}, cb); |
|
||||||
}, |
|
||||||
|
|
||||||
getSecretToAddress: function(sec, cb) { |
|
||||||
postData({call: "getSecretToAddress", args: [sec]}, cb); |
|
||||||
}, |
|
||||||
|
|
||||||
watch: function(address, storageAddrOrCb, cb) { |
|
||||||
var ev; |
|
||||||
if(cb === undefined) { |
|
||||||
cb = storageAddrOrCb; |
|
||||||
storageAddrOrCb = ""; |
|
||||||
ev = "object:"+address; |
|
||||||
} else { |
|
||||||
ev = "storage:"+address+":"+storageAddrOrCb; |
|
||||||
} |
|
||||||
|
|
||||||
eth.on(ev, cb) |
|
||||||
|
|
||||||
postData({call: "watch", args: [address, storageAddrOrCb]}); |
|
||||||
}, |
|
||||||
|
|
||||||
disconnect: function(address, storageAddrOrCb, cb) { |
|
||||||
var ev; |
|
||||||
if(cb === undefined) { |
|
||||||
cb = storageAddrOrCb; |
|
||||||
storageAddrOrCb = ""; |
|
||||||
ev = "object:"+address; |
|
||||||
} else { |
|
||||||
ev = "storage:"+address+":"+storageAddrOrCb; |
|
||||||
} |
|
||||||
|
|
||||||
eth.off(ev, cb) |
|
||||||
|
|
||||||
postData({call: "disconnect", args: [address, storageAddrOrCb]}); |
|
||||||
}, |
|
||||||
|
|
||||||
set: function(props) { |
|
||||||
postData({call: "set", args: props}); |
|
||||||
}, |
|
||||||
|
|
||||||
on: function(event, cb) { |
|
||||||
if(eth._onCallbacks[event] === undefined) { |
|
||||||
eth._onCallbacks[event] = []; |
|
||||||
} |
|
||||||
|
|
||||||
eth._onCallbacks[event].push(cb); |
|
||||||
|
|
||||||
return this |
|
||||||
}, |
|
||||||
|
|
||||||
off: function(event, cb) { |
|
||||||
if(eth._onCallbacks[event] !== undefined) { |
|
||||||
var callbacks = eth._onCallbacks[event]; |
|
||||||
for(var i = 0; i < callbacks.length; i++) { |
|
||||||
if(callbacks[i] === cb) { |
|
||||||
delete callbacks[i]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return this |
|
||||||
}, |
|
||||||
|
|
||||||
trigger: function(event, data) { |
|
||||||
var callbacks = eth._onCallbacks[event]; |
|
||||||
if(callbacks !== undefined) { |
|
||||||
for(var i = 0; i < callbacks.length; i++) { |
|
||||||
// Figure out whether the returned data was an array
|
|
||||||
// array means multiple return arguments (multiple params)
|
|
||||||
if(data instanceof Array) { |
|
||||||
callbacks[i].apply(this, data); |
|
||||||
} else { |
|
||||||
callbacks[i].call(this, data); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
}, |
|
||||||
} |
|
||||||
window.eth._callbacks = {} |
|
||||||
window.eth._onCallbacks = {} |
|
||||||
|
|
||||||
function hello() { |
|
||||||
debug("hello") |
|
||||||
window.dataTest = true; |
|
||||||
} |
|
||||||
|
|
||||||
function debug(/**/) { |
|
||||||
var args = arguments; |
|
||||||
var msg = "" |
|
||||||
for(var i = 0; i < args.length; i++){ |
|
||||||
if(typeof args[i] === "object") { |
|
||||||
msg += " " + JSON.stringify(args[i]) |
|
||||||
} else { |
|
||||||
msg += args[i] |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
postData({call:"debug", args:[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) { |
|
||||||
var data = JSON.parse(ev.data) |
|
||||||
|
|
||||||
if(data._event !== undefined) { |
|
||||||
eth.trigger(data._event, data.data); |
|
||||||
} else { |
|
||||||
if(data._seed) { |
|
||||||
var cb = eth._callbacks[data._seed]; |
|
||||||
if(cb) { |
|
||||||
// Figure out whether the returned data was an array
|
|
||||||
// array means multiple return arguments (multiple params)
|
|
||||||
if(data.data instanceof Array) { |
|
||||||
cb.apply(this, data.data) |
|
||||||
} else { |
|
||||||
cb.call(this, data.data) |
|
||||||
} |
|
||||||
|
|
||||||
// Remove the "trigger" callback
|
|
||||||
delete eth._callbacks[ev._seed]; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
window.eth._0 = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" |
|
||||||
String.prototype.pad = function(len) { |
|
||||||
var bin = this.bin(); |
|
||||||
var l = bin.length; |
|
||||||
if(l < 32) { |
|
||||||
return eth._0.substr(0, 32 - bin.length) + bin; |
|
||||||
} |
|
||||||
|
|
||||||
return bin; |
|
||||||
} |
|
||||||
|
|
||||||
String.prototype.unpad = function() { |
|
||||||
var i, l; |
|
||||||
for(i = 0, l = this.length; i < l; i++) { |
|
||||||
if(this[i] != "\0") { |
|
||||||
return this.substr(i, this.length); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return this.substr(i, this.length); |
|
||||||
} |
|
||||||
|
|
||||||
String.prototype.bin = function() { |
|
||||||
if(this.substr(0, 2) == "0x") { |
|
||||||
return this.hex2bin(); |
|
||||||
} else if(/^\d+$/.test(this)) { |
|
||||||
return this.num2bin() |
|
||||||
} |
|
||||||
|
|
||||||
// Otherwise we'll return the "String" object instead of an actual string
|
|
||||||
return this.substr(0, this.length) |
|
||||||
} |
|
||||||
|
|
||||||
String.prototype.unbin = function() { |
|
||||||
var i, l, o = ''; |
|
||||||
for(i = 0, l = this.length; i < l; i++) { |
|
||||||
var n = this.charCodeAt(i).toString(16); |
|
||||||
o += n.length < 2 ? '0' + n : n; |
|
||||||
} |
|
||||||
|
|
||||||
return "0x" + o; |
|
||||||
} |
|
||||||
|
|
||||||
String.prototype.hex2bin = function() { |
|
||||||
bytes = [] |
|
||||||
|
|
||||||
for(var i=2; i< this.length-1; i+=2) { |
|
||||||
bytes.push(parseInt(this.substr(i, 2), 16)); |
|
||||||
} |
|
||||||
|
|
||||||
return String.fromCharCode.apply(String, bytes); |
|
||||||
} |
|
||||||
|
|
||||||
String.prototype.num2bin = function() { |
|
||||||
return ("0x"+parseInt(this).toString(16)).bin() |
|
||||||
} |
|
||||||
|
|
Loading…
Reference in new issue