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
5ab0eaa0
Commit
5ab0eaa0
authored
Feb 26, 2015
by
obscuren
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wip
parent
52ccaa60
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
132 additions
and
69 deletions
+132
-69
account_manager.go
accounts/account_manager.go
+1
-0
api.go
rpc/api.go
+113
-33
world.go
xeth/world.go
+0
-32
xeth.go
xeth/xeth.go
+18
-4
No files found.
accounts/account_manager.go
View file @
5ab0eaa0
...
@@ -34,6 +34,7 @@ package accounts
...
@@ -34,6 +34,7 @@ package accounts
import
(
import
(
crand
"crypto/rand"
crand
"crypto/rand"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto"
)
)
...
...
rpc/api.go
View file @
5ab0eaa0
...
@@ -9,6 +9,7 @@ For each request type, define the following:
...
@@ -9,6 +9,7 @@ For each request type, define the following:
package
rpc
package
rpc
import
(
import
(
"fmt"
"math/big"
"math/big"
"strings"
"strings"
"sync"
"sync"
...
@@ -19,8 +20,10 @@ import (
...
@@ -19,8 +20,10 @@ import (
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/event/filter"
"github.com/ethereum/go-ethereum/event/filter"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/ui"
"github.com/ethereum/go-ethereum/xeth"
"github.com/ethereum/go-ethereum/xeth"
)
)
...
@@ -31,7 +34,10 @@ var (
...
@@ -31,7 +34,10 @@ var (
)
)
type
EthereumApi
struct
{
type
EthereumApi
struct
{
xeth
*
xeth
.
XEth
eth
*
xeth
.
XEth
xethMu
sync
.
RWMutex
mux
*
event
.
TypeMux
quit
chan
struct
{}
quit
chan
struct
{}
filterManager
*
filter
.
FilterManager
filterManager
*
filter
.
FilterManager
...
@@ -50,7 +56,8 @@ type EthereumApi struct {
...
@@ -50,7 +56,8 @@ type EthereumApi struct {
func
NewEthereumApi
(
eth
*
xeth
.
XEth
)
*
EthereumApi
{
func
NewEthereumApi
(
eth
*
xeth
.
XEth
)
*
EthereumApi
{
db
,
_
:=
ethdb
.
NewLDBDatabase
(
"dapps"
)
db
,
_
:=
ethdb
.
NewLDBDatabase
(
"dapps"
)
api
:=
&
EthereumApi
{
api
:=
&
EthereumApi
{
xeth
:
eth
,
eth
:
eth
,
mux
:
eth
.
Backend
()
.
EventMux
(),
quit
:
make
(
chan
struct
{}),
quit
:
make
(
chan
struct
{}),
filterManager
:
filter
.
NewFilterManager
(
eth
.
Backend
()
.
EventMux
()),
filterManager
:
filter
.
NewFilterManager
(
eth
.
Backend
()
.
EventMux
()),
logs
:
make
(
map
[
int
]
*
logFilter
),
logs
:
make
(
map
[
int
]
*
logFilter
),
...
@@ -65,9 +72,25 @@ func NewEthereumApi(eth *xeth.XEth) *EthereumApi {
...
@@ -65,9 +72,25 @@ func NewEthereumApi(eth *xeth.XEth) *EthereumApi {
func
(
self
*
EthereumApi
)
start
()
{
func
(
self
*
EthereumApi
)
start
()
{
timer
:=
time
.
NewTicker
(
filterTickerTime
)
timer
:=
time
.
NewTicker
(
filterTickerTime
)
events
:=
self
.
mux
.
Subscribe
(
core
.
ChainEvent
{})
done
:
done
:
for
{
for
{
select
{
select
{
case
ev
:=
<-
events
.
Chan
()
:
switch
ev
.
(
type
)
{
case
core
.
ChainEvent
:
// fixme
const
something
=
1337
if
something
<
0
{
chain
:=
self
.
xeth
()
.
Backend
()
.
ChainManager
()
block
:=
chain
.
GetBlockByNumber
(
chain
.
CurrentBlock
()
.
Number
()
.
Uint64
()
-
something
)
if
block
!=
nil
{
statedb
:=
state
.
New
(
block
.
Root
(),
self
.
db
)
self
.
useState
(
statedb
)
}
}
}
case
<-
timer
.
C
:
case
<-
timer
.
C
:
self
.
logMut
.
Lock
()
self
.
logMut
.
Lock
()
self
.
messagesMut
.
Lock
()
self
.
messagesMut
.
Lock
()
...
@@ -80,7 +103,7 @@ done:
...
@@ -80,7 +103,7 @@ done:
for
id
,
filter
:=
range
self
.
messages
{
for
id
,
filter
:=
range
self
.
messages
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
if
time
.
Since
(
filter
.
timeout
)
>
20
*
time
.
Second
{
self
.
xeth
.
Whisper
()
.
Unwatch
(
id
)
self
.
xeth
()
.
Whisper
()
.
Unwatch
(
id
)
delete
(
self
.
messages
,
id
)
delete
(
self
.
messages
,
id
)
}
}
}
}
...
@@ -128,7 +151,7 @@ func (self *EthereumApi) WatchTx(args string, reply *interface{}) error {
...
@@ -128,7 +151,7 @@ func (self *EthereumApi) WatchTx(args string, reply *interface{}) error {
func
(
self
*
EthereumApi
)
NewFilter
(
args
*
FilterOptions
,
reply
*
interface
{})
error
{
func
(
self
*
EthereumApi
)
NewFilter
(
args
*
FilterOptions
,
reply
*
interface
{})
error
{
var
id
int
var
id
int
filter
:=
core
.
NewFilter
(
self
.
xeth
.
Backend
())
filter
:=
core
.
NewFilter
(
self
.
xeth
()
.
Backend
())
filter
.
SetOptions
(
toFilterOptions
(
args
))
filter
.
SetOptions
(
toFilterOptions
(
args
))
filter
.
LogsCallback
=
func
(
logs
state
.
Logs
)
{
filter
.
LogsCallback
=
func
(
logs
state
.
Logs
)
{
self
.
logMut
.
Lock
()
self
.
logMut
.
Lock
()
...
@@ -153,7 +176,7 @@ func (self *EthereumApi) UninstallFilter(id int, reply *interface{}) error {
...
@@ -153,7 +176,7 @@ func (self *EthereumApi) UninstallFilter(id int, reply *interface{}) error {
func
(
self
*
EthereumApi
)
NewFilterString
(
args
string
,
reply
*
interface
{})
error
{
func
(
self
*
EthereumApi
)
NewFilterString
(
args
string
,
reply
*
interface
{})
error
{
var
id
int
var
id
int
filter
:=
core
.
NewFilter
(
self
.
xeth
.
Backend
())
filter
:=
core
.
NewFilter
(
self
.
xeth
()
.
Backend
())
callback
:=
func
(
block
*
types
.
Block
)
{
callback
:=
func
(
block
*
types
.
Block
)
{
self
.
logMut
.
Lock
()
self
.
logMut
.
Lock
()
...
@@ -198,7 +221,7 @@ func (self *EthereumApi) Logs(id int, reply *interface{}) error {
...
@@ -198,7 +221,7 @@ func (self *EthereumApi) Logs(id int, reply *interface{}) error {
}
}
func
(
self
*
EthereumApi
)
AllLogs
(
args
*
FilterOptions
,
reply
*
interface
{})
error
{
func
(
self
*
EthereumApi
)
AllLogs
(
args
*
FilterOptions
,
reply
*
interface
{})
error
{
filter
:=
core
.
NewFilter
(
self
.
xeth
.
Backend
())
filter
:=
core
.
NewFilter
(
self
.
xeth
()
.
Backend
())
filter
.
SetOptions
(
toFilterOptions
(
args
))
filter
.
SetOptions
(
toFilterOptions
(
args
))
*
reply
=
toLogs
(
filter
.
Find
())
*
reply
=
toLogs
(
filter
.
Find
())
...
@@ -209,13 +232,28 @@ func (self *EthereumApi) AllLogs(args *FilterOptions, reply *interface{}) error
...
@@ -209,13 +232,28 @@ func (self *EthereumApi) AllLogs(args *FilterOptions, reply *interface{}) error
func
(
p
*
EthereumApi
)
GetBlock
(
args
*
GetBlockArgs
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetBlock
(
args
*
GetBlockArgs
,
reply
*
interface
{})
error
{
// This seems a bit precarious Maybe worth splitting to discrete functions
// This seems a bit precarious Maybe worth splitting to discrete functions
if
len
(
args
.
Hash
)
>
0
{
if
len
(
args
.
Hash
)
>
0
{
*
reply
=
p
.
xeth
.
BlockByHash
(
args
.
Hash
)
*
reply
=
p
.
xeth
()
.
BlockByHash
(
args
.
Hash
)
}
else
{
}
else
{
*
reply
=
p
.
xeth
.
BlockByNumber
(
args
.
BlockNumber
)
*
reply
=
p
.
xeth
()
.
BlockByNumber
(
args
.
BlockNumber
)
}
}
return
nil
return
nil
}
}
/*
func unlockAccount(server, account *Account) bool {
pwd, status := server.PasswordDialog()
switch status {
case Ok:
if !account.Unlock([]byte(pwd)) {
return unlockAccount(account)
}
return true
default:
return false
}
}
*/
func
(
p
*
EthereumApi
)
Transact
(
args
*
NewTxArgs
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
Transact
(
args
*
NewTxArgs
,
reply
*
interface
{})
error
{
if
len
(
args
.
Gas
)
==
0
{
if
len
(
args
.
Gas
)
==
0
{
args
.
Gas
=
defaultGas
.
String
()
args
.
Gas
=
defaultGas
.
String
()
...
@@ -226,18 +264,35 @@ func (p *EthereumApi) Transact(args *NewTxArgs, reply *interface{}) error {
...
@@ -226,18 +264,35 @@ func (p *EthereumApi) Transact(args *NewTxArgs, reply *interface{}) error {
}
}
// TODO if no_private_key then
// TODO if no_private_key then
if
_
,
exists
:=
p
.
register
[
args
.
From
];
exists
{
//if _, exists := p.register[args.From]; exists {
p
.
register
[
args
.
From
]
=
append
(
p
.
register
[
args
.
From
],
args
)
// p.register[args.From] = append(p.register[args.From], args)
}
else
{
//} else {
result
,
_
:=
p
.
xeth
.
Transact
(
/* TODO specify account */
args
.
To
,
args
.
Value
,
args
.
Gas
,
args
.
GasPrice
,
args
.
Data
)
/*
*
reply
=
result
account := accounts.Get(fromHex(args.From))
if account != nil {
if account.Unlocked() {
if !unlockAccount(account) {
return
}
}
}
result, _ := account.Transact(fromHex(args.To), fromHex(args.Value), fromHex(args.Gas), fromHex(args.GasPrice), fromHex(args.Data))
if len(result) > 0 {
*reply = toHex(result)
}
} else if _, exists := p.register[args.From]; exists {
p.register[ags.From] = append(p.register[args.From], args)
}
*/
result
,
_
:=
p
.
xeth
()
.
Transact
(
/* TODO specify account */
args
.
To
,
args
.
Value
,
args
.
Gas
,
args
.
GasPrice
,
args
.
Data
)
*
reply
=
result
//}
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
Call
(
args
*
NewTxArgs
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
Call
(
args
*
NewTxArgs
,
reply
*
interface
{})
error
{
result
,
err
:=
p
.
xeth
.
Call
(
/* TODO specify account */
args
.
To
,
args
.
Value
,
args
.
Gas
,
args
.
GasPrice
,
args
.
Data
)
result
,
err
:=
p
.
xeth
()
.
Call
(
/* TODO specify account */
args
.
To
,
args
.
Value
,
args
.
Gas
,
args
.
GasPrice
,
args
.
Data
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -251,7 +306,7 @@ func (p *EthereumApi) PushTx(args *PushTxArgs, reply *interface{}) error {
...
@@ -251,7 +306,7 @@ func (p *EthereumApi) PushTx(args *PushTxArgs, reply *interface{}) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
result
,
_
:=
p
.
xeth
.
PushTx
(
args
.
Tx
)
result
,
_
:=
p
.
xeth
()
.
PushTx
(
args
.
Tx
)
*
reply
=
result
*
reply
=
result
return
nil
return
nil
}
}
...
@@ -262,7 +317,7 @@ func (p *EthereumApi) GetStateAt(args *GetStateArgs, reply *interface{}) error {
...
@@ -262,7 +317,7 @@ func (p *EthereumApi) GetStateAt(args *GetStateArgs, reply *interface{}) error {
return
err
return
err
}
}
state
:=
p
.
xeth
.
State
()
.
SafeGet
(
args
.
Address
)
state
:=
p
.
xeth
()
.
State
()
.
SafeGet
(
args
.
Address
)
value
:=
state
.
StorageString
(
args
.
Key
)
value
:=
state
.
StorageString
(
args
.
Key
)
var
hx
string
var
hx
string
...
@@ -284,42 +339,42 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *interface{}) err
...
@@ -284,42 +339,42 @@ func (p *EthereumApi) GetStorageAt(args *GetStorageArgs, reply *interface{}) err
return
err
return
err
}
}
*
reply
=
p
.
xeth
.
State
()
.
SafeGet
(
args
.
Address
)
.
Storage
()
*
reply
=
p
.
xeth
()
.
State
()
.
SafeGet
(
args
.
Address
)
.
Storage
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
GetPeerCount
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetPeerCount
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
PeerCount
()
*
reply
=
p
.
xeth
()
.
PeerCount
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
GetIsListening
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetIsListening
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
IsListening
()
*
reply
=
p
.
xeth
()
.
IsListening
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
GetCoinbase
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetCoinbase
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Coinbase
()
*
reply
=
p
.
xeth
()
.
Coinbase
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
Accounts
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
Accounts
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Accounts
()
*
reply
=
p
.
xeth
()
.
Accounts
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
GetIsMining
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
GetIsMining
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
IsMining
()
*
reply
=
p
.
xeth
()
.
IsMining
()
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
SetMining
(
shouldmine
bool
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
SetMining
(
shouldmine
bool
,
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
SetMining
(
shouldmine
)
*
reply
=
p
.
xeth
()
.
SetMining
(
shouldmine
)
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
BlockNumber
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
BlockNumber
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Backend
()
.
ChainManager
()
.
CurrentBlock
()
.
Number
()
*
reply
=
p
.
xeth
()
.
Backend
()
.
ChainManager
()
.
CurrentBlock
()
.
Number
()
return
nil
return
nil
}
}
...
@@ -328,7 +383,7 @@ func (p *EthereumApi) GetTxCountAt(args *GetTxCountArgs, reply *interface{}) err
...
@@ -328,7 +383,7 @@ func (p *EthereumApi) GetTxCountAt(args *GetTxCountArgs, reply *interface{}) err
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
*
reply
=
p
.
xeth
.
TxCountAt
(
args
.
Address
)
*
reply
=
p
.
xeth
()
.
TxCountAt
(
args
.
Address
)
return
nil
return
nil
}
}
...
@@ -337,7 +392,7 @@ func (p *EthereumApi) GetBalanceAt(args *GetBalanceArgs, reply *interface{}) err
...
@@ -337,7 +392,7 @@ func (p *EthereumApi) GetBalanceAt(args *GetBalanceArgs, reply *interface{}) err
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
state
:=
p
.
xeth
.
State
()
.
SafeGet
(
args
.
Address
)
state
:=
p
.
xeth
()
.
State
()
.
SafeGet
(
args
.
Address
)
*
reply
=
toHex
(
state
.
Balance
()
.
Bytes
())
*
reply
=
toHex
(
state
.
Balance
()
.
Bytes
())
return
nil
return
nil
}
}
...
@@ -347,7 +402,7 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error {
...
@@ -347,7 +402,7 @@ func (p *EthereumApi) GetCodeAt(args *GetCodeAtArgs, reply *interface{}) error {
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
*
reply
=
p
.
xeth
.
CodeAt
(
args
.
Address
)
*
reply
=
p
.
xeth
()
.
CodeAt
(
args
.
Address
)
return
nil
return
nil
}
}
...
@@ -394,7 +449,7 @@ func (p *EthereumApi) DbGet(args *DbArgs, reply *interface{}) error {
...
@@ -394,7 +449,7 @@ func (p *EthereumApi) DbGet(args *DbArgs, reply *interface{}) error {
}
}
func
(
p
*
EthereumApi
)
NewWhisperIdentity
(
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
NewWhisperIdentity
(
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Whisper
()
.
NewIdentity
()
*
reply
=
p
.
xeth
()
.
Whisper
()
.
NewIdentity
()
return
nil
return
nil
}
}
...
@@ -405,7 +460,7 @@ func (p *EthereumApi) NewWhisperFilter(args *xeth.Options, reply *interface{}) e
...
@@ -405,7 +460,7 @@ func (p *EthereumApi) NewWhisperFilter(args *xeth.Options, reply *interface{}) e
defer
p
.
messagesMut
.
Unlock
()
defer
p
.
messagesMut
.
Unlock
()
p
.
messages
[
id
]
.
add
(
msg
)
// = append(p.messages[id], msg)
p
.
messages
[
id
]
.
add
(
msg
)
// = append(p.messages[id], msg)
}
}
id
=
p
.
xeth
.
Whisper
()
.
Watch
(
args
)
id
=
p
.
xeth
()
.
Whisper
()
.
Watch
(
args
)
p
.
messages
[
id
]
=
&
whisperFilter
{
timeout
:
time
.
Now
()}
p
.
messages
[
id
]
=
&
whisperFilter
{
timeout
:
time
.
Now
()}
*
reply
=
id
*
reply
=
id
return
nil
return
nil
...
@@ -423,7 +478,7 @@ func (self *EthereumApi) MessagesChanged(id int, reply *interface{}) error {
...
@@ -423,7 +478,7 @@ func (self *EthereumApi) MessagesChanged(id int, reply *interface{}) error {
}
}
func
(
p
*
EthereumApi
)
WhisperPost
(
args
*
WhisperMessageArgs
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
WhisperPost
(
args
*
WhisperMessageArgs
,
reply
*
interface
{})
error
{
err
:=
p
.
xeth
.
Whisper
()
.
Post
(
args
.
Payload
,
args
.
To
,
args
.
From
,
args
.
Topic
,
args
.
Priority
,
args
.
Ttl
)
err
:=
p
.
xeth
()
.
Whisper
()
.
Post
(
args
.
Payload
,
args
.
To
,
args
.
From
,
args
.
Topic
,
args
.
Priority
,
args
.
Ttl
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
}
...
@@ -433,12 +488,12 @@ func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{})
...
@@ -433,12 +488,12 @@ func (p *EthereumApi) WhisperPost(args *WhisperMessageArgs, reply *interface{})
}
}
func
(
p
*
EthereumApi
)
HasWhisperIdentity
(
args
string
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
HasWhisperIdentity
(
args
string
,
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Whisper
()
.
HasIdentity
(
args
)
*
reply
=
p
.
xeth
()
.
Whisper
()
.
HasIdentity
(
args
)
return
nil
return
nil
}
}
func
(
p
*
EthereumApi
)
WhisperMessages
(
id
int
,
reply
*
interface
{})
error
{
func
(
p
*
EthereumApi
)
WhisperMessages
(
id
int
,
reply
*
interface
{})
error
{
*
reply
=
p
.
xeth
.
Whisper
()
.
Messages
(
id
)
*
reply
=
p
.
xeth
()
.
Whisper
()
.
Messages
(
id
)
return
nil
return
nil
}
}
...
@@ -634,3 +689,28 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
...
@@ -634,3 +689,28 @@ func (p *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) error
rpclogger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
rpclogger
.
DebugDetailf
(
"Reply: %T %s"
,
reply
,
reply
)
return
nil
return
nil
}
}
func
(
self
*
EthereumApi
)
xeth
()
*
xeth
.
XEth
{
self
.
xethMu
.
RLock
()
defer
self
.
xethMu
.
RUnlock
()
return
self
.
eth
}
func
(
self
*
EthereumApi
)
useState
(
statedb
*
state
.
StateDB
)
{
self
.
xethMu
.
Lock
()
defer
self
.
xethMu
.
Unlock
()
self
.
eth
=
self
.
xeth
()
.
UseState
(
statedb
)
}
func
t
(
f
ui
.
Frontend
)
{
// Call the password dialog
ret
,
err
:=
f
.
Call
(
"PasswordDialog"
)
if
err
!=
nil
{
fmt
.
Println
(
err
)
}
// Get the first argument
t
,
_
:=
ret
.
Get
(
0
)
fmt
.
Println
(
"return:"
,
t
)
}
xeth/world.go
deleted
100644 → 0
View file @
52ccaa60
package
xeth
import
"github.com/ethereum/go-ethereum/state"
type
State
struct
{
xeth
*
XEth
}
func
NewState
(
xeth
*
XEth
)
*
State
{
return
&
State
{
xeth
}
}
func
(
self
*
State
)
State
()
*
state
.
StateDB
{
return
self
.
xeth
.
chainManager
.
TransState
()
}
func
(
self
*
State
)
Get
(
addr
string
)
*
Object
{
return
&
Object
{
self
.
State
()
.
GetStateObject
(
fromHex
(
addr
))}
}
func
(
self
*
State
)
SafeGet
(
addr
string
)
*
Object
{
return
&
Object
{
self
.
safeGet
(
addr
)}
}
func
(
self
*
State
)
safeGet
(
addr
string
)
*
state
.
StateObject
{
object
:=
self
.
State
()
.
GetStateObject
(
fromHex
(
addr
))
if
object
==
nil
{
object
=
state
.
NewStateObject
(
fromHex
(
addr
),
self
.
xeth
.
eth
.
Db
())
}
return
object
}
xeth/xeth.go
View file @
5ab0eaa0
...
@@ -17,6 +17,7 @@ import (
...
@@ -17,6 +17,7 @@ import (
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/miner"
"github.com/ethereum/go-ethereum/miner"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/whisper"
"github.com/ethereum/go-ethereum/whisper"
)
)
...
@@ -54,13 +55,26 @@ func New(eth Backend) *XEth {
...
@@ -54,13 +55,26 @@ func New(eth Backend) *XEth {
whisper
:
NewWhisper
(
eth
.
Whisper
()),
whisper
:
NewWhisper
(
eth
.
Whisper
()),
miner
:
eth
.
Miner
(),
miner
:
eth
.
Miner
(),
}
}
xeth
.
state
=
NewState
(
xeth
)
xeth
.
state
=
NewState
(
xeth
,
xeth
.
chainManager
.
TransState
()
)
return
xeth
return
xeth
}
}
func
(
self
*
XEth
)
Backend
()
Backend
{
return
self
.
eth
}
func
(
self
*
XEth
)
Backend
()
Backend
{
return
self
.
eth
}
func
(
self
*
XEth
)
UseState
(
statedb
*
state
.
StateDB
)
*
XEth
{
xeth
:=
&
XEth
{
eth
:
self
.
eth
,
blockProcessor
:
self
.
blockProcessor
,
chainManager
:
self
.
chainManager
,
whisper
:
self
.
whisper
,
miner
:
self
.
miner
,
}
xeth
.
state
=
NewState
(
xeth
,
statedb
)
return
xeth
}
func
(
self
*
XEth
)
State
()
*
State
{
return
self
.
state
}
func
(
self
*
XEth
)
State
()
*
State
{
return
self
.
state
}
func
(
self
*
XEth
)
Whisper
()
*
Whisper
{
return
self
.
whisper
}
func
(
self
*
XEth
)
Whisper
()
*
Whisper
{
return
self
.
whisper
}
func
(
self
*
XEth
)
Miner
()
*
miner
.
Miner
{
return
self
.
miner
}
func
(
self
*
XEth
)
Miner
()
*
miner
.
Miner
{
return
self
.
miner
}
...
@@ -229,7 +243,7 @@ func (self *XEth) Call(toStr, valueStr, gasStr, gasPriceStr, dataStr string) (st
...
@@ -229,7 +243,7 @@ func (self *XEth) Call(toStr, valueStr, gasStr, gasPriceStr, dataStr string) (st
}
}
var
(
var
(
statedb
=
self
.
chainManager
.
TransState
()
statedb
=
self
.
State
()
.
State
()
//self.
chainManager.TransState()
key
=
self
.
eth
.
KeyManager
()
.
KeyPair
()
key
=
self
.
eth
.
KeyManager
()
.
KeyPair
()
from
=
statedb
.
GetOrNewStateObject
(
key
.
Address
())
from
=
statedb
.
GetOrNewStateObject
(
key
.
Address
())
block
=
self
.
chainManager
.
CurrentBlock
()
block
=
self
.
chainManager
.
CurrentBlock
()
...
...
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