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
b0023f66
Commit
b0023f66
authored
May 10, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'release/poc5-rc2'
parents
a77dcd10
109395da
Changes
14
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
590 additions
and
298 deletions
+590
-298
big.js
ethereal/assets/ext/big.js
+380
-0
ethereum.js
ethereal/assets/ext/ethereum.js
+0
-115
pre.js
ethereal/assets/ext/pre.js
+58
-0
string.js
ethereal/assets/ext/string.js
+58
-0
index.html
ethereal/assets/muted/index.html
+0
-1
_new_contract.qml
ethereal/assets/qml/newTransaction/_new_contract.qml
+2
-2
_simple_send.qml
ethereal/assets/qml/newTransaction/_simple_send.qml
+2
-2
webapp.qml
ethereal/assets/qml/webapp.qml
+1
-1
samplecoin.html
ethereal/assets/samplecoin/samplecoin.html
+5
-7
ethereum.go
ethereal/ethereum.go
+0
-1
gui.go
ethereal/ui/gui.go
+79
-69
library.go
ethereal/ui/library.go
+0
-85
ui_lib.go
ethereal/ui/ui_lib.go
+3
-13
ethereum.go
ethereum/ethereum.go
+2
-2
No files found.
ethereal/assets/ext/big.js
0 → 100644
View file @
b0023f66
This diff is collapsed.
Click to expand it.
ethereal/assets/ethereum.js
→
ethereal/assets/e
xt/e
thereum.js
View file @
b0023f66
...
...
@@ -119,118 +119,3 @@ window.eth = {
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
()
}
ethereal/assets/ext/pre.js
0 → 100644
View file @
b0023f66
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
.
onerror
=
function
(
message
,
file
,
lineNumber
,
column
,
errorObj
)
{
debug
(
file
,
message
,
lineNumber
+
":"
+
column
,
errorObj
);
return
false
;
}
ethereal/assets/ext/string.js
0 → 100644
View file @
b0023f66
String
.
prototype
.
pad
=
function
(
l
,
r
)
{
if
(
r
===
undefined
)
{
r
=
l
if
(
!
(
this
.
substr
(
0
,
2
)
==
"0x"
||
/^
\d
+$/
.
test
(
this
)))
l
=
0
}
var
ret
=
this
.
bin
();
while
(
ret
.
length
<
l
)
ret
=
"
\
0"
+
ret
while
(
ret
.
length
<
r
)
ret
=
ret
+
"
\
0"
return
ret
;
}
String
.
prototype
.
unpad
=
function
()
{
var
i
=
this
.
length
;
while
(
i
&&
this
[
i
-
1
]
==
"
\
0"
)
--
i
return
this
.
substr
(
0
,
i
)
}
String
.
prototype
.
bin
=
function
()
{
if
(
this
.
substr
(
0
,
2
)
==
"0x"
)
{
bytes
=
[]
var
i
=
2
;
// Check if it's odd - pad with a zero if so.
if
(
this
.
length
%
2
)
bytes
.
push
(
parseInt
(
this
.
substr
(
i
++
,
1
),
16
))
for
(;
i
<
this
.
length
-
1
;
i
+=
2
)
bytes
.
push
(
parseInt
(
this
.
substr
(
i
,
2
),
16
));
return
String
.
fromCharCode
.
apply
(
String
,
bytes
);
}
else
if
(
/^
\d
+$/
.
test
(
this
))
return
bigInt
(
this
.
substr
(
0
)).
toHex
().
bin
()
// 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
.
dec
=
function
()
{
return
bigInt
(
this
.
substr
(
0
)).
toString
()
}
String
.
prototype
.
hex
=
function
()
{
return
bigInt
(
this
.
substr
(
0
)).
toHex
()
}
ethereal/assets/muted/index.html
View file @
b0023f66
...
...
@@ -46,7 +46,6 @@
.CodeMirror
{
height
:
70%
;
font-size
:
14pt
;
}
</style>
</head>
...
...
ethereal/assets/qml/newTransaction/_new_contract.qml
View file @
b0023f66
...
...
@@ -150,7 +150,7 @@ Component {
text
:
"Send"
onClicked
:
{
//this.enabled = false
var
res
=
eth
.
create
Tx
(
txFuelRecipient
.
text
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
var
res
=
eth
.
create
(
txFuelRecipient
.
text
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
if
(
res
[
1
])
{
txResult
.
text
=
"Your contract <b>could not</b> be send over the network:
\n
<b>"
txResult
.
text
+=
res
[
1
].
error
()
...
...
@@ -158,7 +158,7 @@ Component {
mainContractColumn
.
state
=
"ERROR"
}
else
{
txResult
.
text
=
"Your transaction has been submitted:
\n
"
txOutput
.
text
=
res
[
0
]
txOutput
.
text
=
res
[
0
]
.
address
mainContractColumn
.
state
=
"DONE"
}
}
...
...
ethereal/assets/qml/newTransaction/_simple_send.qml
View file @
b0023f66
...
...
@@ -77,12 +77,12 @@ Component {
text
:
"Send"
onClicked
:
{
//this.enabled = false
var
res
=
eth
.
createTx
(
txSimpleRecipient
.
text
,
txSimpleValue
.
text
,
""
,
""
,
""
)
var
res
=
eth
.
transact
(
txSimpleRecipient
.
text
,
txSimpleValue
.
text
,
""
,
""
,
""
)
if
(
res
[
1
])
{
txSimpleResult
.
text
=
"There has been an error broadcasting your transaction:"
+
res
[
1
].
error
()
}
else
{
txSimpleResult
.
text
=
"Your transaction has been broadcasted over the network.
\n
Your transaction id is:"
txSimpleOutput
.
text
=
res
[
0
]
txSimpleOutput
.
text
=
res
[
0
]
.
hash
this
.
visible
=
false
simpleSendColumn
.
state
=
"DONE"
}
...
...
ethereal/assets/qml/webapp.qml
View file @
b0023f66
...
...
@@ -39,7 +39,7 @@ ApplicationWindow {
experimental.preferences.javascriptEnabled
:
true
experimental.preferences.navigatorQtObjectEnabled
:
true
experimental.preferences.developerExtrasEnabled
:
true
experimental.userScripts
:
[
ui
.
assetPath
(
"ethereum.js"
)]
experimental.userScripts
:
[
ui
.
assetPath
(
"e
xt/pre.js"
),
ui
.
assetPath
(
"ext/big.js"
),
ui
.
assetPath
(
"ext/string.js"
),
ui
.
assetPath
(
"ext/e
thereum.js"
)]
experimental.onMessageReceived
:
{
console
.
log
(
"[onMessageReceived]: "
,
message
.
data
)
// TODO move to messaging.js
...
...
ethereal/assets/samplecoin/samplecoin.html
View file @
b0023f66
...
...
@@ -5,19 +5,18 @@
<link
rel=
"stylesheet"
href=
"bootstrap.min.css"
>
<link
rel=
"stylesheet"
href=
"bootstrap-theme.min.css"
>
<link
rel=
"stylesheet"
href=
"samplecoin.css"
>
<script
src=
"promise.min.js"
></script>
<meta
name=
"viewport"
content=
"minimum-scale=1; maximum-scale=1; initial-scale=1;"
>
<script
type=
"text/javascript"
>
var
jefcoinAddr
=
"
3dff537f51350239abc95c76a5864aa605259e7d
"
var
jefcoinAddr
=
"
b7cb72c47ec4f31751d0d628b5a33fd6671bbba0
"
var
mAddr
=
""
function
createTransaction
()
{
var
addr
=
document
.
querySelector
(
"#addr"
).
value
;
var
amount
=
document
.
querySelector
(
"#amount"
).
value
;
var
addr
=
(
"0x"
+
document
.
querySelector
(
"#addr"
).
value
).
pad
(
32
)
;
var
amount
=
document
.
querySelector
(
"#amount"
).
value
.
pad
(
32
)
;
var
data
=
(
(
"0x"
+
addr
).
pad
(
32
)
+
amount
.
pad
(
32
)).
unbin
()
var
data
=
(
addr
+
amount
).
unbin
();
eth
.
transact
(
mAddr
,
jefcoinAddr
,
0
,
"10000000"
,
"250"
,
data
,
function
(
receipt
)
{
debug
(
"received tx hash:"
,
reciept
.
address
)
})
...
...
@@ -27,9 +26,8 @@ function init() {
eth
.
set
({
width
:
500
});
eth
.
getKey
(
function
(
sec
)
{
mAddr
=
sec
;
eth
.
getSecretToAddress
(
sec
,
function
(
addr
)
{
mAddr
=
addr
;
eth
.
getStorageAt
(
jefcoinAddr
,
addr
,
function
(
storage
)
{
document
.
querySelector
(
"#current-amount"
).
innerHTML
=
storage
;
});
...
...
ethereal/ethereum.go
View file @
b0023f66
...
...
@@ -42,7 +42,6 @@ func main() {
ethchain
.
InitFees
()
ethutil
.
ReadConfig
(
DataDir
)
ethutil
.
Config
.
Seed
=
UseSeed
// Instantiated a eth stack
ethereum
,
err
:=
eth
.
New
(
eth
.
CapDefault
,
UseUPnP
)
...
...
ethereal/ui/gui.go
View file @
b0023f66
...
...
@@ -9,6 +9,7 @@ import (
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethutil"
"github.com/go-qml/qml"
"github.com/obscuren/mutan"
"math/big"
"strings"
)
...
...
@@ -28,6 +29,8 @@ type Gui struct {
txDb
*
ethdb
.
LDBDatabase
addr
[]
byte
pub
*
ethpub
.
PEthereum
}
// Create GUI, but doesn't start it
...
...
@@ -46,14 +49,16 @@ func New(ethereum *eth.Ethereum) *Gui {
key
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
addr
=
key
.
Address
()
ethereum
.
StateManager
()
.
WatchAddr
(
addr
)
//
ethereum.StateManager().WatchAddr(addr)
}
return
&
Gui
{
eth
:
ethereum
,
lib
:
lib
,
txDb
:
db
,
addr
:
addr
}
pub
:=
ethpub
.
NewPEthereum
(
ethereum
.
StateManager
(),
ethereum
.
BlockChain
(),
ethereum
.
TxPool
())
return
&
Gui
{
eth
:
ethereum
,
lib
:
lib
,
txDb
:
db
,
addr
:
addr
,
pub
:
pub
}
}
func
(
ui
*
Gui
)
Start
(
assetPath
string
)
{
defer
ui
.
txDb
.
Close
()
func
(
g
ui
*
Gui
)
Start
(
assetPath
string
)
{
defer
g
ui
.
txDb
.
Close
()
// Register ethereum functions
qml
.
RegisterTypes
(
"Ethereum"
,
1
,
0
,
[]
qml
.
TypeSpec
{{
...
...
@@ -62,15 +67,15 @@ func (ui *Gui) Start(assetPath string) {
Init
:
func
(
p
*
ethpub
.
PTx
,
obj
qml
.
Object
)
{
p
.
Value
=
""
;
p
.
Hash
=
""
;
p
.
Address
=
""
},
}})
ethutil
.
Config
.
SetClientString
(
fmt
.
Sprintf
(
"/Ethereal v%s"
,
"0.2"
))
ethutil
.
Config
.
SetClientString
(
fmt
.
Sprintf
(
"/Ethereal v%s"
,
"0.
5.0 RC
2"
))
ethutil
.
Config
.
Log
.
Infoln
(
"[GUI] Starting GUI"
)
// Create a new QML engine
ui
.
engine
=
qml
.
NewEngine
()
context
:=
ui
.
engine
.
Context
()
g
ui
.
engine
=
qml
.
NewEngine
()
context
:=
g
ui
.
engine
.
Context
()
// Expose the eth library and the ui library to QML
context
.
SetVar
(
"eth"
,
ui
.
lib
)
uiLib
:=
NewUiLib
(
ui
.
engine
,
ui
.
eth
,
assetPath
)
context
.
SetVar
(
"eth"
,
gui
)
uiLib
:=
NewUiLib
(
gui
.
engine
,
g
ui
.
eth
,
assetPath
)
context
.
SetVar
(
"ui"
,
uiLib
)
// Load the main QML interface
...
...
@@ -80,9 +85,9 @@ func (ui *Gui) Start(assetPath string) {
firstRun
:=
len
(
data
)
==
0
if
firstRun
{
component
,
err
=
ui
.
engine
.
LoadFile
(
uiLib
.
AssetPath
(
"qml/first_run.qml"
))
component
,
err
=
g
ui
.
engine
.
LoadFile
(
uiLib
.
AssetPath
(
"qml/first_run.qml"
))
}
else
{
component
,
err
=
ui
.
engine
.
LoadFile
(
uiLib
.
AssetPath
(
"qml/wallet.qml"
))
component
,
err
=
g
ui
.
engine
.
LoadFile
(
uiLib
.
AssetPath
(
"qml/wallet.qml"
))
}
if
err
!=
nil
{
ethutil
.
Config
.
Log
.
Infoln
(
"FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'"
)
...
...
@@ -90,65 +95,60 @@ func (ui *Gui) Start(assetPath string) {
panic
(
err
)
}
ui
.
win
=
component
.
CreateWindow
(
nil
)
uiLib
.
win
=
ui
.
win
db
:=
&
Debugger
{
ui
.
win
,
make
(
chan
bool
)}
ui
.
lib
.
Db
=
db
g
ui
.
win
=
component
.
CreateWindow
(
nil
)
uiLib
.
win
=
g
ui
.
win
db
:=
&
Debugger
{
g
ui
.
win
,
make
(
chan
bool
)}
g
ui
.
lib
.
Db
=
db
uiLib
.
Db
=
db
// Register the ui as a block processor
//ui.eth.BlockManager.SecondaryBlockProcessor = ui
//ui.eth.TxPool.SecondaryProcessor = ui
// Add the ui as a log system so we can log directly to the UGI
ethutil
.
Config
.
Log
.
AddLogSystem
(
ui
)
ethutil
.
Config
.
Log
.
AddLogSystem
(
g
ui
)
// Loads previous blocks
if
firstRun
==
false
{
go
ui
.
setInitialBlockChain
()
go
ui
.
readPreviousTransactions
()
go
ui
.
update
()
go
g
ui
.
setInitialBlockChain
()
go
g
ui
.
readPreviousTransactions
()
go
g
ui
.
update
()
}
ui
.
win
.
Show
()
ui
.
win
.
Wait
()
g
ui
.
win
.
Show
()
g
ui
.
win
.
Wait
()
ui
.
eth
.
Stop
()
g
ui
.
eth
.
Stop
()
}
func
(
ui
*
Gui
)
setInitialBlockChain
()
{
func
(
g
ui
*
Gui
)
setInitialBlockChain
()
{
// Load previous 10 blocks
chain
:=
ui
.
eth
.
BlockChain
()
.
GetChain
(
ui
.
eth
.
BlockChain
()
.
CurrentBlock
.
Hash
(),
10
)
chain
:=
gui
.
eth
.
BlockChain
()
.
GetChain
(
g
ui
.
eth
.
BlockChain
()
.
CurrentBlock
.
Hash
(),
10
)
for
_
,
block
:=
range
chain
{
ui
.
P
rocessBlock
(
block
)
gui
.
p
rocessBlock
(
block
)
}
}
func
(
ui
*
Gui
)
readPreviousTransactions
()
{
it
:=
ui
.
txDb
.
Db
()
.
NewIterator
(
nil
,
nil
)
func
(
g
ui
*
Gui
)
readPreviousTransactions
()
{
it
:=
g
ui
.
txDb
.
Db
()
.
NewIterator
(
nil
,
nil
)
for
it
.
Next
()
{
tx
:=
ethchain
.
NewTransactionFromBytes
(
it
.
Value
())
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
g
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
}
it
.
Release
()
}
func
(
ui
*
Gui
)
P
rocessBlock
(
block
*
ethchain
.
Block
)
{
ui
.
win
.
Root
()
.
Call
(
"addBlock"
,
ethpub
.
NewPBlock
(
block
))
func
(
gui
*
Gui
)
p
rocessBlock
(
block
*
ethchain
.
Block
)
{
g
ui
.
win
.
Root
()
.
Call
(
"addBlock"
,
ethpub
.
NewPBlock
(
block
))
}
// Simple go routine function that updates the list of peers in the GUI
func
(
ui
*
Gui
)
update
()
{
func
(
g
ui
*
Gui
)
update
()
{
txChan
:=
make
(
chan
ethchain
.
TxMsg
,
1
)
ui
.
eth
.
TxPool
()
.
Subscribe
(
txChan
)
g
ui
.
eth
.
TxPool
()
.
Subscribe
(
txChan
)
account
:=
ui
.
eth
.
StateManager
()
.
GetAddrState
(
ui
.
addr
)
.
Object
unconfirmedFunds
:=
new
(
big
.
Int
)
ui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
fmt
.
Sprintf
(
"%v"
,
ethutil
.
CurrencyToString
(
account
.
Amount
)))
state
:=
gui
.
eth
.
StateManager
()
.
TransState
()
addrState
:=
ui
.
eth
.
StateManager
()
.
GetAddrState
(
ui
.
addr
)
unconfirmedFunds
:=
new
(
big
.
Int
)
gui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
fmt
.
Sprintf
(
"%v"
,
ethutil
.
CurrencyToString
(
state
.
GetStateObject
(
gui
.
addr
)
.
Amount
)))
for
{
select
{
...
...
@@ -156,15 +156,19 @@ func (ui *Gui) update() {
tx
:=
txMsg
.
Tx
if
txMsg
.
Type
==
ethchain
.
TxPre
{
if
bytes
.
Compare
(
tx
.
Sender
(),
ui
.
addr
)
==
0
&&
addrState
.
Nonce
<=
tx
.
Nonce
{
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
ui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
object
:=
state
.
GetStateObject
(
gui
.
addr
)
if
bytes
.
Compare
(
tx
.
Sender
(),
gui
.
addr
)
==
0
&&
object
.
Nonce
<=
tx
.
Nonce
{
gui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
gui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
object
.
Nonce
+=
1
state
.
SetStateObject
(
object
)
addrState
.
Nonce
+=
1
unconfirmedFunds
.
Sub
(
unconfirmedFunds
,
tx
.
Value
)
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
ui
.
addr
)
==
0
{
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
ui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
g
ui
.
addr
)
==
0
{
g
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
ethpub
.
NewPTx
(
tx
))
g
ui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
unconfirmedFunds
.
Add
(
unconfirmedFunds
,
tx
.
Value
)
}
...
...
@@ -174,46 +178,52 @@ func (ui *Gui) update() {
pos
=
"-"
}
val
:=
ethutil
.
CurrencyToString
(
new
(
big
.
Int
)
.
Abs
(
ethutil
.
BigCopy
(
unconfirmedFunds
)))
str
:=
fmt
.
Sprintf
(
"%v (%s %v)"
,
ethutil
.
CurrencyToString
(
accoun
t
.
Amount
),
pos
,
val
)
str
:=
fmt
.
Sprintf
(
"%v (%s %v)"
,
ethutil
.
CurrencyToString
(
objec
t
.
Amount
),
pos
,
val
)
ui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
str
)
g
ui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
str
)
}
else
{
amount
:=
account
.
Amount
if
bytes
.
Compare
(
tx
.
Sender
(),
ui
.
addr
)
==
0
{
amount
.
Sub
(
account
.
Amount
,
tx
.
Value
)
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
ui
.
addr
)
==
0
{
amount
.
Add
(
account
.
Amount
,
tx
.
Value
)
object
:=
state
.
GetStateObject
(
gui
.
addr
)
if
bytes
.
Compare
(
tx
.
Sender
(),
g
ui
.
addr
)
==
0
{
object
.
SubAmount
(
tx
.
Value
)
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
g
ui
.
addr
)
==
0
{
object
.
AddAmount
(
tx
.
Value
)
}
ui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
fmt
.
Sprintf
(
"%v"
,
ethutil
.
CurrencyToString
(
amount
)))
gui
.
win
.
Root
()
.
Call
(
"setWalletValue"
,
fmt
.
Sprintf
(
"%v"
,
ethutil
.
CurrencyToString
(
object
.
Amount
)))
state
.
SetStateObject
(
object
)
}
}
/*
accountAmount := ui.eth.BlockManager.GetAddrState(ui.addr).Account.Amount
ui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", accountAmount))
ui.win.Root().Call("setPeers", fmt.Sprintf("%d / %d", ui.eth.Peers().Len(), ui.eth.MaxPeers))
time.Sleep(1 * time.Second)
*/
}
}
// Logging functions that log directly to the GUI interface
func
(
ui
*
Gui
)
Println
(
v
...
interface
{})
{
func
(
g
ui
*
Gui
)
Println
(
v
...
interface
{})
{
str
:=
strings
.
TrimRight
(
fmt
.
Sprintln
(
v
...
),
"
\n
"
)
lines
:=
strings
.
Split
(
str
,
"
\n
"
)
for
_
,
line
:=
range
lines
{
ui
.
win
.
Root
()
.
Call
(
"addLog"
,
line
)
g
ui
.
win
.
Root
()
.
Call
(
"addLog"
,
line
)
}
}
func
(
ui
*
Gui
)
Printf
(
format
string
,
v
...
interface
{})
{
func
(
g
ui
*
Gui
)
Printf
(
format
string
,
v
...
interface
{})
{
str
:=
strings
.
TrimRight
(
fmt
.
Sprintf
(
format
,
v
...
),
"
\n
"
)
lines
:=
strings
.
Split
(
str
,
"
\n
"
)
for
_
,
line
:=
range
lines
{
ui
.
win
.
Root
()
.
Call
(
"addLog"
,
line
)
g
ui
.
win
.
Root
()
.
Call
(
"addLog"
,
line
)
}
}
func
(
gui
*
Gui
)
Transact
(
recipient
,
value
,
gas
,
gasPrice
,
data
string
)
(
*
ethpub
.
PReceipt
,
error
)
{
keyPair
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
return
gui
.
pub
.
Transact
(
ethutil
.
Hex
(
keyPair
.
PrivateKey
),
recipient
,
value
,
gas
,
gasPrice
,
data
)
}
func
(
gui
*
Gui
)
Create
(
recipient
,
value
,
gas
,
gasPrice
,
data
string
)
(
*
ethpub
.
PReceipt
,
error
)
{
keyPair
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
mainInput
,
initInput
:=
mutan
.
PreProcess
(
data
)
return
gui
.
pub
.
Create
(
ethutil
.
Hex
(
keyPair
.
PrivateKey
),
value
,
gas
,
gasPrice
,
initInput
,
mainInput
)
}
ethereal/ui/library.go
View file @
b0023f66
package
ethui
import
(
"encoding/hex"
"fmt"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethpub"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
"github.com/obscuren/secp256k1-go"
...
...
@@ -43,86 +41,3 @@ func (lib *EthLib) CreateAndSetPrivKey() (string, string, string, string) {
mnemonicString
:=
strings
.
Join
(
mne
,
" "
)
return
mnemonicString
,
fmt
.
Sprintf
(
"%x"
,
pair
.
Address
()),
fmt
.
Sprintf
(
"%x"
,
prv
),
fmt
.
Sprintf
(
"%x"
,
pub
)
}
func
(
lib
*
EthLib
)
GetKey
()
string
{
return
ethutil
.
Hex
(
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
.
Address
())
}
func
(
lib
*
EthLib
)
GetStateObject
(
address
string
)
*
ethpub
.
PStateObject
{
stateObject
:=
lib
.
stateManager
.
ProcState
()
.
GetContract
(
ethutil
.
FromHex
(
address
))
if
stateObject
!=
nil
{
return
ethpub
.
NewPStateObject
(
stateObject
)
}
// See GetStorage for explanation on "nil"
return
ethpub
.
NewPStateObject
(
nil
)
}
func
(
lib
*
EthLib
)
Watch
(
addr
,
storageAddr
string
)
{
// lib.stateManager.Watch(ethutil.FromHex(addr), ethutil.FromHex(storageAddr))
}
func
(
lib
*
EthLib
)
CreateTx
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
return
lib
.
Transact
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
)
}
func
(
lib
*
EthLib
)
Transact
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
var
hash
[]
byte
var
contractCreation
bool
if
len
(
recipient
)
==
0
{
contractCreation
=
true
}
else
{
var
err
error
hash
,
err
=
hex
.
DecodeString
(
recipient
)
if
err
!=
nil
{
return
""
,
err
}
}
keyPair
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
value
:=
ethutil
.
Big
(
valueStr
)
gas
:=
ethutil
.
Big
(
gasStr
)
gasPrice
:=
ethutil
.
Big
(
gasPriceStr
)
var
tx
*
ethchain
.
Transaction
// Compile and assemble the given data
if
contractCreation
{
// Compile script
mainScript
,
initScript
,
err
:=
utils
.
CompileScript
(
dataStr
)
if
err
!=
nil
{
return
""
,
err
}
tx
=
ethchain
.
NewContractCreationTx
(
value
,
gas
,
gasPrice
,
mainScript
,
initScript
)
}
else
{
lines
:=
strings
.
Split
(
dataStr
,
"
\n
"
)
var
data
[]
byte
for
_
,
line
:=
range
lines
{
data
=
append
(
data
,
ethutil
.
BigToBytes
(
ethutil
.
Big
(
line
),
256
)
...
)
}
tx
=
ethchain
.
NewTransactionMessage
(
hash
,
value
,
gas
,
gasPrice
,
data
)
}
acc
:=
lib
.
stateManager
.
GetAddrState
(
keyPair
.
Address
())
tx
.
Nonce
=
acc
.
Nonce
tx
.
Sign
(
keyPair
.
PrivateKey
)
lib
.
txPool
.
QueueTransaction
(
tx
)
if
contractCreation
{
ethutil
.
Config
.
Log
.
Infof
(
"Contract addr %x"
,
tx
.
Hash
()[
12
:
])
}
else
{
ethutil
.
Config
.
Log
.
Infof
(
"Tx hash %x"
,
tx
.
Hash
())
}
return
ethutil
.
Hex
(
tx
.
Hash
()),
nil
}
func
(
lib
*
EthLib
)
GetBlock
(
hexHash
string
)
*
ethpub
.
PBlock
{
hash
,
err
:=
hex
.
DecodeString
(
hexHash
)
if
err
!=
nil
{
return
nil
}
block
:=
lib
.
blockChain
.
GetBlock
(
hash
)
return
&
ethpub
.
PBlock
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
}
ethereal/ui/ui_lib.go
View file @
b0023f66
...
...
@@ -59,14 +59,6 @@ func (ui *UiLib) OpenHtml(path string) {
go
app
.
run
()
}
func
(
ui
*
UiLib
)
Watch
(
addr
,
storageAddr
string
)
{
if
len
(
storageAddr
)
==
0
{
ui
.
eth
.
Reactor
()
.
Subscribe
(
"storage:"
+
string
(
ethutil
.
FromHex
(
addr
))
+
":"
+
string
(
ethutil
.
FromHex
(
storageAddr
)),
nil
)
}
else
{
ui
.
eth
.
Reactor
()
.
Subscribe
(
"object:"
+
string
(
ethutil
.
FromHex
(
addr
)),
nil
)
}
}
func
(
ui
*
UiLib
)
Muted
(
content
string
)
{
component
,
err
:=
ui
.
engine
.
LoadFile
(
ui
.
AssetPath
(
"qml/muted.qml"
))
if
err
!=
nil
{
...
...
@@ -78,8 +70,6 @@ func (ui *UiLib) Muted(content string) {
go
func
()
{
path
:=
"file://"
+
ui
.
AssetPath
(
"muted/index.html"
)
win
.
Set
(
"url"
,
path
)
//debuggerPath := "file://" + ui.AssetPath("muted/debugger.html")
//win.Set("debugUrl", debuggerPath)
win
.
Show
()
win
.
Wait
()
...
...
@@ -88,7 +78,7 @@ func (ui *UiLib) Muted(content string) {
func
(
ui
*
UiLib
)
Connect
(
button
qml
.
Object
)
{
if
!
ui
.
connected
{
ui
.
eth
.
Start
()
ui
.
eth
.
Start
(
true
)
ui
.
connected
=
true
button
.
Set
(
"enabled"
,
false
)
}
...
...
@@ -149,9 +139,9 @@ func (ui *UiLib) DebugTx(recipient, valueStr, gasStr, gasPriceStr, data string)
// Contract addr as test address
keyPair
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
account
:=
ui
.
eth
.
StateManager
()
.
GetAddrState
(
keyPair
.
Address
())
.
Object
account
:=
ui
.
eth
.
StateManager
()
.
TransState
()
.
GetStateObject
(
keyPair
.
Address
())
c
:=
ethchain
.
MakeContract
(
callerTx
,
state
)
callerClosure
:=
ethchain
.
NewClosure
(
account
,
c
,
c
.
Script
(),
state
,
ethutil
.
Big
(
gasStr
),
ethutil
.
Big
(
gasPriceStr
)
,
ethutil
.
Big
(
valueStr
)
)
callerClosure
:=
ethchain
.
NewClosure
(
account
,
c
,
c
.
Script
(),
state
,
ethutil
.
Big
(
gasStr
),
ethutil
.
Big
(
gasPriceStr
))
block
:=
ui
.
eth
.
BlockChain
()
.
CurrentBlock
vm
:=
ethchain
.
NewVm
(
state
,
ui
.
eth
.
StateManager
(),
ethchain
.
RuntimeVars
{
...
...
ethereum/ethereum.go
View file @
b0023f66
...
...
@@ -73,7 +73,6 @@ func main() {
}*/
ethchain
.
InitFees
()
ethutil
.
Config
.
Seed
=
UseSeed
// Instantiated a eth stack
ethereum
,
err
:=
eth
.
New
(
eth
.
CapDefault
,
UseUPnP
)
...
...
@@ -139,7 +138,8 @@ func main() {
}
RegisterInterrupts
(
ethereum
)
ethereum
.
Start
()
ethereum
.
Start
(
UseSeed
)
if
StartMining
{
logger
.
Infoln
(
"Miner started"
)
...
...
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