Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
Geth-Modification
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张蕾
Geth-Modification
Commits
e85d5dd4
Commit
e85d5dd4
authored
Apr 29, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
API changes
parent
64c2550b
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
208 additions
and
152 deletions
+208
-152
ethereum.js
ethereal/assets/ethereum.js
+52
-18
webapp.qml
ethereal/assets/qml/webapp.qml
+155
-131
samplecoin.html
ethereal/assets/samplecoin.html
+1
-3
No files found.
ethereal/assets/ethereum.js
View file @
e85d5dd4
// 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
)
...
...
ethereal/assets/qml/webapp.qml
View file @
e85d5dd4
...
...
@@ -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
}
}
]
}
}
ethereal/assets/samplecoin.html
View file @
e85d5dd4
...
...
@@ -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
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment