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
183dbcc6
Commit
183dbcc6
authored
Apr 30, 2014
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed state object changes for eth api
parent
e85d5dd4
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
98 additions
and
58 deletions
+98
-58
ethereum.js
ethereal/assets/ethereum.js
+7
-7
webapp.qml
ethereal/assets/qml/webapp.qml
+2
-3
samplecoin.html
ethereal/assets/samplecoin.html
+1
-2
ext_app.go
ethereal/ui/ext_app.go
+53
-9
library.go
ethereal/ui/library.go
+3
-32
types.go
ethereal/ui/types.go
+32
-5
No files found.
ethereal/assets/ethereum.js
View file @
183dbcc6
...
...
@@ -42,13 +42,13 @@ window.eth = {
},
watch
:
function
(
address
,
storageAddrOrCb
,
cb
)
{
var
ev
=
"changed:"
+
address
;
var
ev
;
if
(
cb
===
undefined
)
{
cb
=
storageAddrOrCb
;
storageAddrOrCb
=
""
;
ev
=
"object:"
+
address
;
}
else
{
ev
+=
":"
+
storageAddrOrCb
;
ev
=
"storage:"
+
address
+
":"
+
storageAddrOrCb
;
}
eth
.
on
(
ev
,
cb
)
...
...
@@ -57,13 +57,13 @@ window.eth = {
},
disconnect
:
function
(
address
,
storageAddrOrCb
,
cb
)
{
var
ev
=
"changed:"
+
address
;
var
ev
;
if
(
cb
===
undefined
)
{
cb
=
storageAddrOrCb
;
storageAddrOrCb
=
null
;
storageAddrOrCb
=
""
;
ev
=
"object:"
+
address
;
}
else
{
ev
+=
":"
+
storageAddrOrCb
;
ev
=
"storage:"
+
address
+
":"
+
storageAddrOrCb
;
}
eth
.
off
(
ev
,
cb
)
...
...
ethereal/assets/qml/webapp.qml
View file @
183dbcc6
...
...
@@ -58,8 +58,7 @@ ApplicationWindow {
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
])
var
tx
=
eth
.
transact
(
data
.
args
[
0
],
data
.
args
[
1
],
data
.
args
[
2
],
data
.
args
[
3
],
data
.
args
[
4
],
data
.
args
[
5
])
postData
(
data
.
_seed
,
tx
)
break
case
"create"
:
...
...
@@ -116,7 +115,7 @@ ApplicationWindow {
postEvent
(
"block:new"
,
block
)
}
function
onObjectChangeCb
(
stateObject
)
{
postEvent
(
"object:
change"
,
stateObject
)
postEvent
(
"object:
"
+
stateObject
.
address
()
,
stateObject
)
}
}
...
...
ethereal/assets/samplecoin.html
View file @
183dbcc6
...
...
@@ -9,7 +9,7 @@ function createTransaction() {
var
amount
=
document
.
querySelector
(
"#amount"
).
value
;
var
data
=
"0x"
+
addr
+
"
\n
"
+
amount
eth
.
createTx
(
jefcoinAddr
,
0
,
"10000000"
,
"250"
,
data
,
function
(
tx
)
{
eth
.
transact
(
""
,
jefcoinAddr
,
0
,
"10000000"
,
"250"
,
data
,
function
(
tx
)
{
debug
(
"received tx hash:"
,
tx
)
})
}
...
...
@@ -28,7 +28,6 @@ function init() {
});
eth
.
watch
(
jefcoinAddr
,
function
(
stateObject
)
{
debug
(
stateObject
);
eth
.
getStorage
(
jefcoinAddr
,
key
,
function
(
storage
)
{
document
.
querySelector
(
"#currentAmount"
).
innerHTML
=
"Amount: "
+
storage
;
});
...
...
ethereal/ui/ext_app.go
View file @
183dbcc6
...
...
@@ -5,8 +5,10 @@ import (
"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
{
...
...
@@ -116,10 +118,10 @@ out:
func
(
app
*
ExtApplication
)
Watch
(
addr
,
storageAddr
string
)
{
var
event
string
if
len
(
storageAddr
)
==
0
{
event
=
"
storage:"
+
string
(
ethutil
.
FromHex
(
addr
))
+
":"
+
string
(
ethutil
.
FromHex
(
storageA
ddr
))
event
=
"
object:"
+
string
(
ethutil
.
FromHex
(
a
ddr
))
app
.
lib
.
eth
.
Reactor
()
.
Subscribe
(
event
,
app
.
changeChan
)
}
else
{
event
=
"
object:"
+
string
(
ethutil
.
FromHex
(
a
ddr
))
event
=
"
storage:"
+
string
(
ethutil
.
FromHex
(
addr
))
+
":"
+
string
(
ethutil
.
FromHex
(
storageA
ddr
))
app
.
lib
.
eth
.
Reactor
()
.
Subscribe
(
event
,
app
.
changeChan
)
}
...
...
@@ -152,24 +154,66 @@ func (lib *QEthereum) GetKey() string {
return
ethutil
.
Hex
(
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
.
Address
())
}
func
(
lib
*
QEthereum
)
GetStateObject
(
address
string
)
*
Contra
ct
{
func
(
lib
*
QEthereum
)
GetStateObject
(
address
string
)
*
QStateObje
ct
{
stateObject
:=
lib
.
stateManager
.
ProcState
()
.
GetContract
(
ethutil
.
FromHex
(
address
))
if
stateObject
!=
nil
{
return
New
Contra
ct
(
stateObject
)
return
New
QStateObje
ct
(
stateObject
)
}
// See GetStorage for explanation on "nil"
return
New
Contra
ct
(
nil
)
return
New
QStateObje
ct
(
nil
)
}
func
(
lib
*
QEthereum
)
Watch
(
addr
,
storageAddr
string
)
{
// lib.stateManager.Watch(ethutil.FromHex(addr), ethutil.FromHex(storageAddr))
}
func
(
lib
*
QEthereum
)
CreateTx
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
return
lib
.
Transact
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
)
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
(
recipient
,
valueStr
,
gasStr
,
gasPriceStr
,
dataStr
string
)
(
string
,
error
)
{
return
""
,
nil
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/library.go
View file @
183dbcc6
...
...
@@ -10,35 +10,6 @@ import (
"strings"
)
type
Contract
struct
{
object
*
ethchain
.
StateObject
}
func
NewContract
(
object
*
ethchain
.
StateObject
)
*
Contract
{
return
&
Contract
{
object
:
object
}
}
func
(
c
*
Contract
)
GetStorage
(
address
string
)
string
{
// Because somehow, even if you return nil to QML it
// still has some magical object so we can't rely on
// undefined or null at the QML side
if
c
.
object
!=
nil
{
val
:=
c
.
object
.
GetMem
(
ethutil
.
Big
(
"0x"
+
address
))
return
val
.
BigInt
()
.
String
()
}
return
""
}
func
(
c
*
Contract
)
Value
()
string
{
if
c
.
object
!=
nil
{
return
c
.
object
.
Amount
.
String
()
}
return
""
}
type
EthLib
struct
{
stateManager
*
ethchain
.
StateManager
blockChain
*
ethchain
.
BlockChain
...
...
@@ -76,14 +47,14 @@ func (lib *EthLib) GetKey() string {
return
ethutil
.
Hex
(
ethutil
.
Config
.
Db
.
GetKeys
()[
0
]
.
Address
())
}
func
(
lib
*
EthLib
)
GetStateObject
(
address
string
)
*
Contra
ct
{
func
(
lib
*
EthLib
)
GetStateObject
(
address
string
)
*
QStateObje
ct
{
stateObject
:=
lib
.
stateManager
.
ProcState
()
.
GetContract
(
ethutil
.
FromHex
(
address
))
if
stateObject
!=
nil
{
return
New
Contra
ct
(
stateObject
)
return
New
QStateObje
ct
(
stateObject
)
}
// See GetStorage for explanation on "nil"
return
New
Contra
ct
(
nil
)
return
New
QStateObje
ct
(
nil
)
}
func
(
lib
*
EthLib
)
Watch
(
addr
,
storageAddr
string
)
{
...
...
ethereal/ui/types.go
View file @
183dbcc6
...
...
@@ -46,11 +46,38 @@ func NewQKeyRing(keys []interface{}) *QKeyRing {
}
type
QStateObject
struct
{
Address
string
Amount
string
Nonce
int
object
*
ethchain
.
StateObject
}
func
NewQStateObject
(
object
*
ethchain
.
StateObject
)
*
QStateObject
{
return
&
QStateObject
{
object
:
object
}
}
func
NewQStateObject
(
stateObject
*
ethchain
.
StateObject
)
*
QStateObject
{
return
&
QStateObject
{
ethutil
.
Hex
(
stateObject
.
Address
()),
stateObject
.
Amount
.
String
(),
int
(
stateObject
.
Nonce
)}
func
(
c
*
QStateObject
)
GetStorage
(
address
string
)
string
{
// Because somehow, even if you return nil to QML it
// still has some magical object so we can't rely on
// undefined or null at the QML side
if
c
.
object
!=
nil
{
val
:=
c
.
object
.
GetMem
(
ethutil
.
Big
(
"0x"
+
address
))
return
val
.
BigInt
()
.
String
()
}
return
""
}
func
(
c
*
QStateObject
)
Value
()
string
{
if
c
.
object
!=
nil
{
return
c
.
object
.
Amount
.
String
()
}
return
""
}
func
(
c
*
QStateObject
)
Address
()
string
{
if
c
.
object
!=
nil
{
return
ethutil
.
Hex
(
c
.
object
.
Address
())
}
return
""
}
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