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
4d187984
Commit
4d187984
authored
Apr 11, 2014
by
Maran
Browse files
Options
Browse Files
Download
Plain Diff
Fix merge conflicts
parents
cf1ae41b
8280dd65
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
150 additions
and
35 deletions
+150
-35
wallet.qml
ethereal/assets/qml/wallet.qml
+86
-0
gui.go
ethereal/ui/gui.go
+1
-0
library.go
ethereal/ui/library.go
+0
-35
ui_lib.go
ethereal/ui/ui_lib.go
+63
-0
No files found.
ethereal/assets/qml/wallet.qml
View file @
4d187984
...
...
@@ -406,6 +406,15 @@ ApplicationWindow {
mainContractColumn
.
state
=
"SETUP"
}
}
Button
{
id
:
debugButton
text
:
"Debug"
onClicked
:
{
var
res
=
ui
.
debugTx
(
""
,
txValue
.
text
,
txGas
.
text
,
txGasPrice
.
text
,
codeView
.
text
)
debugWindow
.
visible
=
true
}
}
}
}
}
...
...
@@ -601,6 +610,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 @
4d187984
...
...
@@ -116,6 +116,7 @@ func (ui *Gui) Start(assetPath string) {
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 @
4d187984
...
...
@@ -94,41 +94,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 @
4d187984
...
...
@@ -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