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
5a692b9f
Commit
5a692b9f
authored
May 02, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved API
parent
471bd398
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
17 additions
and
107 deletions
+17
-107
ext_app.go
ethereal/ui/ext_app.go
+2
-94
gui.go
ethereal/ui/gui.go
+7
-6
html_container.go
ethereal/ui/html_container.go
+3
-2
library.go
ethereal/ui/library.go
+5
-5
No files found.
ethereal/ui/ext_app.go
View file @
5a692b9f
...
...
@@ -2,13 +2,11 @@ package ethui
import
(
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml"
"math/big"
"strings"
)
type
AppContainer
interface
{
...
...
@@ -24,7 +22,7 @@ type AppContainer interface {
}
type
ExtApplication
struct
{
*
Q
Ethereum
*
utils
.
P
Ethereum
blockChan
chan
ethutil
.
React
changeChan
chan
ethutil
.
React
...
...
@@ -37,7 +35,7 @@ type ExtApplication struct {
func
NewExtApplication
(
container
AppContainer
,
lib
*
UiLib
)
*
ExtApplication
{
app
:=
&
ExtApplication
{
NewQ
Ethereum
(
lib
.
eth
),
utils
.
NewP
Ethereum
(
lib
.
eth
),
make
(
chan
ethutil
.
React
,
1
),
make
(
chan
ethutil
.
React
,
1
),
make
(
chan
bool
),
...
...
@@ -127,93 +125,3 @@ func (app *ExtApplication) Watch(addr, storageAddr string) {
app
.
registeredEvents
=
append
(
app
.
registeredEvents
,
event
)
}
type
QEthereum
struct
{
stateManager
*
ethchain
.
StateManager
blockChain
*
ethchain
.
BlockChain
txPool
*
ethchain
.
TxPool
}
func
NewQEthereum
(
eth
*
eth
.
Ethereum
)
*
QEthereum
{
return
&
QEthereum
{
eth
.
StateManager
(),
eth
.
BlockChain
(),
eth
.
TxPool
(),
}
}
func
(
lib
*
QEthereum
)
GetBlock
(
hexHash
string
)
*
QBlock
{
hash
:=
ethutil
.
FromHex
(
hexHash
)
block
:=
lib
.
blockChain
.
GetBlock
(
hash
)
return
&
QBlock
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
}
func
(
lib
*
QEthereum
)
GetKey
()
string
{
return
ethutil
.
Hex
(
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
.
Address
())
}
func
(
lib
*
QEthereum
)
GetStateObject
(
address
string
)
*
QStateObject
{
stateObject
:=
lib
.
stateManager
.
ProcState
()
.
GetContract
(
ethutil
.
FromHex
(
address
))
if
stateObject
!=
nil
{
return
NewQStateObject
(
stateObject
)
}
// See GetStorage for explanation on "nil"
return
NewQStateObject
(
nil
)
}
func
(
lib
*
QEthereum
)
Watch
(
addr
,
storageAddr
string
)
{
// lib.stateManager.Watch(ethutil.FromHex(addr), ethutil.FromHex(storageAddr))
}
func
(
lib
*
QEthereum
)
CreateTx
(
key
,
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
return
lib
.
Transact
(
key
,
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
)
}
func
(
lib
*
QEthereum
)
Transact
(
key
,
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
var
hash
[]
byte
var
contractCreation
bool
if
len
(
recipient
)
==
0
{
contractCreation
=
true
}
else
{
hash
=
ethutil
.
FromHex
(
recipient
)
}
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
}
ethereal/ui/gui.go
View file @
5a692b9f
...
...
@@ -7,6 +7,7 @@ import (
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethdb"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml"
"math/big"
"strings"
...
...
@@ -56,9 +57,9 @@ func (ui *Gui) Start(assetPath string) {
// Register ethereum functions
qml
.
RegisterTypes
(
"Ethereum"
,
1
,
0
,
[]
qml
.
TypeSpec
{{
Init
:
func
(
p
*
Q
Block
,
obj
qml
.
Object
)
{
p
.
Number
=
0
;
p
.
Hash
=
""
},
Init
:
func
(
p
*
utils
.
P
Block
,
obj
qml
.
Object
)
{
p
.
Number
=
0
;
p
.
Hash
=
""
},
},
{
Init
:
func
(
p
*
Q
Tx
,
obj
qml
.
Object
)
{
p
.
Value
=
""
;
p
.
Hash
=
""
;
p
.
Address
=
""
},
Init
:
func
(
p
*
utils
.
P
Tx
,
obj
qml
.
Object
)
{
p
.
Value
=
""
;
p
.
Hash
=
""
;
p
.
Address
=
""
},
}})
ethutil
.
Config
.
SetClientString
(
fmt
.
Sprintf
(
"/Ethereal v%s"
,
"0.2"
))
...
...
@@ -129,13 +130,13 @@ func (ui *Gui) readPreviousTransactions() {
for
it
.
Next
()
{
tx
:=
ethchain
.
NewTransactionFromBytes
(
it
.
Value
())
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
NewQ
Tx
(
tx
))
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
utils
.
NewP
Tx
(
tx
))
}
it
.
Release
()
}
func
(
ui
*
Gui
)
ProcessBlock
(
block
*
ethchain
.
Block
)
{
ui
.
win
.
Root
()
.
Call
(
"addBlock"
,
NewQ
Block
(
block
))
ui
.
win
.
Root
()
.
Call
(
"addBlock"
,
utils
.
NewP
Block
(
block
))
}
// Simple go routine function that updates the list of peers in the GUI
...
...
@@ -156,13 +157,13 @@ func (ui *Gui) update() {
if
txMsg
.
Type
==
ethchain
.
TxPre
{
if
bytes
.
Compare
(
tx
.
Sender
(),
ui
.
addr
)
==
0
&&
addrState
.
Nonce
<=
tx
.
Nonce
{
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
NewQ
Tx
(
tx
))
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
utils
.
NewP
Tx
(
tx
))
ui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
addrState
.
Nonce
+=
1
unconfirmedFunds
.
Sub
(
unconfirmedFunds
,
tx
.
Value
)
}
else
if
bytes
.
Compare
(
tx
.
Recipient
,
ui
.
addr
)
==
0
{
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
NewQ
Tx
(
tx
))
ui
.
win
.
Root
()
.
Call
(
"addTx"
,
utils
.
NewP
Tx
(
tx
))
ui
.
txDb
.
Put
(
tx
.
Hash
(),
tx
.
RlpEncode
())
unconfirmedFunds
.
Add
(
unconfirmedFunds
,
tx
.
Value
)
...
...
ethereal/ui/html_container.go
View file @
5a692b9f
...
...
@@ -4,6 +4,7 @@ import (
"errors"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/go-ethereum/utils"
"github.com/go-qml/qml"
"math/big"
"path/filepath"
...
...
@@ -56,12 +57,12 @@ func (app *HtmlApplication) Window() *qml.Window {
}
func
(
app
*
HtmlApplication
)
NewBlock
(
block
*
ethchain
.
Block
)
{
b
:=
&
Q
Block
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
b
:=
&
utils
.
P
Block
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
app
.
webView
.
Call
(
"onNewBlockCb"
,
b
)
}
func
(
app
*
HtmlApplication
)
ObjectChanged
(
stateObject
*
ethchain
.
StateObject
)
{
app
.
webView
.
Call
(
"onObjectChangeCb"
,
NewQ
StateObject
(
stateObject
))
app
.
webView
.
Call
(
"onObjectChangeCb"
,
utils
.
NewP
StateObject
(
stateObject
))
}
func
(
app
*
HtmlApplication
)
StorageChanged
(
stateObject
*
ethchain
.
StateObject
,
addr
[]
byte
,
value
*
big
.
Int
)
{
...
...
ethereal/ui/library.go
View file @
5a692b9f
...
...
@@ -47,14 +47,14 @@ func (lib *EthLib) GetKey() string {
return
ethutil
.
Hex
(
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
.
Address
())
}
func
(
lib
*
EthLib
)
GetStateObject
(
address
string
)
*
Q
StateObject
{
func
(
lib
*
EthLib
)
GetStateObject
(
address
string
)
*
utils
.
P
StateObject
{
stateObject
:=
lib
.
stateManager
.
ProcState
()
.
GetContract
(
ethutil
.
FromHex
(
address
))
if
stateObject
!=
nil
{
return
NewQ
StateObject
(
stateObject
)
return
utils
.
NewP
StateObject
(
stateObject
)
}
// See GetStorage for explanation on "nil"
return
NewQ
StateObject
(
nil
)
return
utils
.
NewP
StateObject
(
nil
)
}
func
(
lib
*
EthLib
)
Watch
(
addr
,
storageAddr
string
)
{
...
...
@@ -115,7 +115,7 @@ func (lib *EthLib) Transact(recipient, valueStr, gasStr, gasPriceStr, dataStr st
return
ethutil
.
Hex
(
tx
.
Hash
()),
nil
}
func
(
lib
*
EthLib
)
GetBlock
(
hexHash
string
)
*
Q
Block
{
func
(
lib
*
EthLib
)
GetBlock
(
hexHash
string
)
*
utils
.
P
Block
{
hash
,
err
:=
hex
.
DecodeString
(
hexHash
)
if
err
!=
nil
{
return
nil
...
...
@@ -123,5 +123,5 @@ func (lib *EthLib) GetBlock(hexHash string) *QBlock {
block
:=
lib
.
blockChain
.
GetBlock
(
hash
)
return
&
Q
Block
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
return
&
utils
.
P
Block
{
Number
:
int
(
block
.
BlockInfo
()
.
Number
),
Hash
:
ethutil
.
Hex
(
block
.
Hash
())}
}
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