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
3238894a
Commit
3238894a
authored
Apr 11, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added wip debugger
parent
1e94cb52
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
166 additions
and
49 deletions
+166
-49
wallet.qml
ethereal/assets/qml/wallet.qml
+100
-11
gui.go
ethereal/ui/gui.go
+2
-2
library.go
ethereal/ui/library.go
+1
-36
ui_lib.go
ethereal/ui/ui_lib.go
+63
-0
No files found.
ethereal/assets/qml/wallet.qml
View file @
3238894a
...
...
@@ -194,20 +194,32 @@ ApplicationWindow {
width
:
parent
.
width
/
2
}
Button
{
id
:
txButton
text
:
"Send"
onClicked
:
{
//this.enabled = false
var
res
=
eth
.
createTx
(
txRecipient
.
text
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
if
(
res
[
1
])
{
txOutput
.
text
=
"Output:
\n
"
+
res
[
1
].
error
()
}
else
{
txOutput
.
text
=
"Output:
\n
"
+
res
[
0
]
RowLayout
{
Button
{
id
:
txButton
text
:
"Send"
onClicked
:
{
//this.enabled = false
var
res
=
eth
.
createTx
(
txRecipient
.
text
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
if
(
res
[
1
])
{
txOutput
.
text
=
"Output:
\n
"
+
res
[
1
].
error
()
}
else
{
txOutput
.
text
=
"Output:
\n
"
+
res
[
0
]
}
txOutput
.
visible
=
true
}
}
Button
{
id
:
debugButton
text
:
"Debug"
onClicked
:
{
var
res
=
ui
.
debugTx
(
txRecipient
.
text
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
debugWindow
.
visible
=
true
}
txOutput
.
visible
=
true
}
}
TextArea
{
id
:
txOutput
visible
:
false
...
...
@@ -409,6 +421,83 @@ ApplicationWindow {
}
Window
{
id
:
debugWindow
visible
:
false
title
:
"Debugger"
minimumWidth
:
600
minimumHeight
:
600
width
:
800
height
:
600
SplitView
{
anchors.fill
:
parent
property
var
asmModel
:
ListModel
{
id
:
asmModel
}
TableView
{
id
:
asmTableView
width
:
200
TableViewColumn
{
role
:
"value"
;
title
:
""
;
width
:
100
}
model
:
asmModel
}
Rectangle
{
anchors.left
:
asmTableView
.
right
anchors.right
:
parent
.
right
SplitView
{
orientation
:
Qt
.
Vertical
anchors.fill
:
parent
TableView
{
property
var
memModel
:
ListModel
{
id
:
memModel
}
height
:
parent
.
height
/
2
width
:
parent
.
width
TableViewColumn
{
id
:
mnumColmn
;
role
:
"num"
;
title
:
"#"
;
width
:
50
}
TableViewColumn
{
role
:
"value"
;
title
:
"Memory"
;
width
:
750
}
model
:
memModel
}
TableView
{
property
var
stackModel
:
ListModel
{
id
:
stackModel
}
height
:
parent
.
height
/
2
width
:
parent
.
width
TableViewColumn
{
role
:
"value"
;
title
:
"Stack"
;
width
:
parent
.
width
}
model
:
stackModel
}
}
}
}
}
function
setAsm
(
asm
)
{
//for(var i = 0; i < asm.length; i++) {
asmModel
.
append
({
asm
:
asm
})
//}
}
function
clearAsm
()
{
asmModel
.
clear
()
}
function
setMem
(
mem
)
{
memModel
.
append
({
num
:
mem
.
num
,
value
:
mem
.
value
})
}
function
clearMem
(){
memModel
.
clear
()
}
function
setStack
(
stack
)
{
stackModel
.
append
({
value
:
stack
})
}
function
clearStack
()
{
stackModel
.
clear
()
}
function
loadPlugin
(
name
)
{
console
.
log
(
"Loading plugin"
+
name
)
mainView
.
addPlugin
(
name
)
...
...
ethereal/ui/gui.go
View file @
3238894a
...
...
@@ -53,7 +53,6 @@ type Gui struct {
txDb
*
ethdb
.
LDBDatabase
addr
[]
byte
}
// Create GUI, but doesn't start it
...
...
@@ -96,12 +95,13 @@ func (ui *Gui) Start(assetPath string) {
// Load the main QML interface
component
,
err
:=
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'"
)
ethutil
.
Config
.
Log
.
Infoln
(
"FATAL: asset not found: you can set an alternative asset path on on the command line using option 'asset_path'"
)
panic
(
err
)
}
ui
.
engine
.
LoadFile
(
uiLib
.
AssetPath
(
"qml/transactions.qml"
))
ui
.
win
=
component
.
CreateWindow
(
nil
)
uiLib
.
win
=
ui
.
win
// Register the ui as a block processor
//ui.eth.BlockManager.SecondaryBlockProcessor = ui
...
...
ethereal/ui/library.go
View file @
3238894a
...
...
@@ -43,7 +43,7 @@ func (lib *EthLib) CreateTx(recipient, valueStr, gasStr, gasPriceStr, data strin
code
:=
ethutil
.
Assemble
(
asm
...
)
tx
=
ethchain
.
NewContractCreationTx
(
value
,
gasPrice
,
code
)
}
else
{
tx
=
ethchain
.
NewTransactionMessage
(
hash
,
value
,
gasPrice
,
gas
,
[]
string
{}
)
tx
=
ethchain
.
NewTransactionMessage
(
hash
,
value
,
gasPrice
,
gas
,
nil
)
}
acc
:=
lib
.
stateManager
.
GetAddrState
(
keyPair
.
Address
())
tx
.
Nonce
=
acc
.
Nonce
...
...
@@ -60,41 +60,6 @@ func (lib *EthLib) CreateTx(recipient, valueStr, gasStr, gasPriceStr, data strin
return
ethutil
.
Hex
(
tx
.
Hash
()),
nil
}
/*
func (lib *EthLib) CreateTx(receiver, a, data string) string {
var hash []byte
if len(receiver) == 0 {
hash = ethchain.ContractAddr
} else {
var err error
hash, err = hex.DecodeString(receiver)
if err != nil {
return err.Error()
}
}
k, _ := ethutil.Config.Db.Get([]byte("KeyRing"))
keyPair := ethutil.NewKeyFromBytes(k)
amount := ethutil.Big(a)
code := ethchain.Compile(strings.Split(data, "\n"))
tx := ethchain.NewTx(hash, amount, code)
tx.Nonce = lib.stateManager.GetAddrState(keyPair.Address()).Nonce
tx.Sign(keyPair.PrivateKey)
lib.txPool.QueueTransaction(tx)
if len(receiver) == 0 {
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())
}
*/
func
(
lib
*
EthLib
)
GetBlock
(
hexHash
string
)
*
Block
{
hash
,
err
:=
hex
.
DecodeString
(
hexHash
)
if
err
!=
nil
{
...
...
ethereal/ui/ui_lib.go
View file @
3238894a
...
...
@@ -2,13 +2,18 @@ package ethui
import
(
"bitbucket.org/kardianos/osext"
"fmt"
"github.com/ethereum/eth-go"
"github.com/ethereum/eth-go/ethchain"
"github.com/ethereum/eth-go/ethutil"
"github.com/niemeyer/qml"
"github.com/obscuren/mutan"
"math/big"
"os"
"path"
"path/filepath"
"runtime"
"strings"
)
// UI Library that has some basic functionality exposed
...
...
@@ -17,6 +22,8 @@ type UiLib struct {
eth
*
eth
.
Ethereum
connected
bool
assetPath
string
// The main application window
win
*
qml
.
Window
}
func
NewUiLib
(
engine
*
qml
.
Engine
,
eth
*
eth
.
Ethereum
,
assetPath
string
)
*
UiLib
{
...
...
@@ -81,3 +88,59 @@ func DefaultAssetPath() string {
return
base
}
type
memAddr
struct
{
Num
string
Value
string
}
func
(
ui
*
UiLib
)
DebugTx
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
data
string
)
(
string
,
error
)
{
state
:=
ui
.
eth
.
BlockChain
()
.
CurrentBlock
.
State
()
asm
,
err
:=
mutan
.
Compile
(
strings
.
NewReader
(
data
),
false
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
callerScript
:=
ethutil
.
Assemble
(
asm
...
)
dis
:=
ethchain
.
Disassemble
(
callerScript
)
ui
.
win
.
Root
()
.
Call
(
"clearAsm"
)
for
_
,
str
:=
range
dis
{
ui
.
win
.
Root
()
.
Call
(
"setAsm"
,
str
)
}
callerTx
:=
ethchain
.
NewContractCreationTx
(
ethutil
.
Big
(
valueStr
),
ethutil
.
Big
(
gasPriceStr
),
callerScript
)
// Contract addr as test address
keyPair
:=
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
account
:=
ui
.
eth
.
StateManager
()
.
GetAddrState
(
keyPair
.
Address
())
.
Account
c
:=
ethchain
.
MakeContract
(
callerTx
,
state
)
callerClosure
:=
ethchain
.
NewClosure
(
account
,
c
,
c
.
Script
(),
state
,
ethutil
.
Big
(
gasStr
),
new
(
big
.
Int
))
block
:=
ui
.
eth
.
BlockChain
()
.
CurrentBlock
vm
:=
ethchain
.
NewVm
(
state
,
ethchain
.
RuntimeVars
{
Origin
:
account
.
Address
(),
BlockNumber
:
block
.
BlockInfo
()
.
Number
,
PrevHash
:
block
.
PrevHash
,
Coinbase
:
block
.
Coinbase
,
Time
:
block
.
Time
,
Diff
:
block
.
Difficulty
,
TxData
:
nil
,
})
callerClosure
.
Call
(
vm
,
nil
,
func
(
op
ethchain
.
OpCode
,
mem
*
ethchain
.
Memory
,
stack
*
ethchain
.
Stack
)
{
ui
.
win
.
Root
()
.
Call
(
"clearMem"
)
ui
.
win
.
Root
()
.
Call
(
"clearStack"
)
addr
:=
0
for
i
:=
0
;
i
+
32
<=
mem
.
Len
();
i
+=
32
{
ui
.
win
.
Root
()
.
Call
(
"setMem"
,
memAddr
{
fmt
.
Sprintf
(
"%03d"
,
addr
),
fmt
.
Sprintf
(
"% x"
,
mem
.
Data
()[
i
:
i
+
32
])})
addr
++
}
for
_
,
val
:=
range
stack
.
Data
()
{
ui
.
win
.
Root
()
.
Call
(
"setStack"
,
val
.
String
())
}
})
state
.
Reset
()
return
""
,
nil
}
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