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
ab6311c1
Commit
ab6311c1
authored
Mar 23, 2015
by
Taylor Gerring
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Move remote mining agent to XEth
parent
d76e8cb1
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
93 additions
and
9 deletions
+93
-9
api.go
rpc/api.go
+4
-9
miner_agent.go
xeth/miner_agent.go
+81
-0
xeth.go
xeth/xeth.go
+8
-0
No files found.
rpc/api.go
View file @
ab6311c1
...
@@ -17,9 +17,6 @@ type EthereumApi struct {
...
@@ -17,9 +17,6 @@ type EthereumApi struct {
eth
*
xeth
.
XEth
eth
*
xeth
.
XEth
xethMu
sync
.
RWMutex
xethMu
sync
.
RWMutex
db
common
.
Database
db
common
.
Database
// Miner agent
agent
*
Agent
}
}
func
NewEthereumApi
(
xeth
*
xeth
.
XEth
,
dataDir
string
)
*
EthereumApi
{
func
NewEthereumApi
(
xeth
*
xeth
.
XEth
,
dataDir
string
)
*
EthereumApi
{
...
@@ -28,9 +25,7 @@ func NewEthereumApi(xeth *xeth.XEth, dataDir string) *EthereumApi {
...
@@ -28,9 +25,7 @@ func NewEthereumApi(xeth *xeth.XEth, dataDir string) *EthereumApi {
api
:=
&
EthereumApi
{
api
:=
&
EthereumApi
{
eth
:
xeth
,
eth
:
xeth
,
db
:
db
,
db
:
db
,
agent
:
NewAgent
(),
}
}
xeth
.
Backend
()
.
Miner
()
.
Register
(
api
.
agent
)
return
api
return
api
}
}
...
@@ -349,13 +344,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
...
@@ -349,13 +344,13 @@ func (api *EthereumApi) GetRequestReply(req *RpcRequest, reply *interface{}) err
*
reply
=
NewLogsRes
(
api
.
xeth
()
.
AllLogs
(
opts
))
*
reply
=
NewLogsRes
(
api
.
xeth
()
.
AllLogs
(
opts
))
case
"eth_getWork"
:
case
"eth_getWork"
:
api
.
xeth
()
.
SetMining
(
true
)
api
.
xeth
()
.
SetMining
(
true
)
*
reply
=
api
.
agent
.
GetWork
()
*
reply
=
api
.
xeth
()
.
RemoteMining
()
.
GetWork
()
case
"eth_submitWork"
:
case
"eth_submitWork"
:
args
:=
new
(
SubmitWorkArgs
)
args
:=
new
(
SubmitWorkArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
return
err
return
err
}
}
*
reply
=
api
.
agent
.
SetResult
(
args
.
Nonce
,
args
.
Digest
,
args
.
Header
)
*
reply
=
api
.
xeth
()
.
RemoteMining
()
.
SubmitWork
(
args
.
Nonce
,
args
.
Digest
,
args
.
Header
)
case
"db_putString"
:
case
"db_putString"
:
args
:=
new
(
DbArgs
)
args
:=
new
(
DbArgs
)
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
(
req
.
Params
,
&
args
);
err
!=
nil
{
...
...
xeth/miner_agent.go
0 → 100644
View file @
ab6311c1
package
xeth
import
(
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/miner"
)
type
Agent
struct
{
work
*
types
.
Block
currentWork
*
types
.
Block
quit
chan
struct
{}
workCh
chan
*
types
.
Block
returnCh
chan
<-
miner
.
Work
}
func
NewAgent
()
*
Agent
{
agent
:=
&
Agent
{}
go
agent
.
run
()
return
agent
}
func
(
a
*
Agent
)
Work
()
chan
<-
*
types
.
Block
{
return
a
.
workCh
}
func
(
a
*
Agent
)
SetWorkCh
(
returnCh
chan
<-
miner
.
Work
)
{
a
.
returnCh
=
returnCh
}
func
(
a
*
Agent
)
Start
()
{
a
.
quit
=
make
(
chan
struct
{})
a
.
workCh
=
make
(
chan
*
types
.
Block
,
1
)
}
func
(
a
*
Agent
)
Stop
()
{
close
(
a
.
quit
)
close
(
a
.
workCh
)
}
func
(
a
*
Agent
)
GetHashRate
()
int64
{
return
0
}
func
(
a
*
Agent
)
run
()
{
out
:
for
{
select
{
case
<-
a
.
quit
:
break
out
case
work
:=
<-
a
.
workCh
:
a
.
work
=
work
}
}
}
func
(
a
*
Agent
)
GetWork
()
[
3
]
string
{
// TODO return HashNoNonce, DAGSeedHash, Difficulty
var
res
[
3
]
string
// XXX Wait here untill work != nil ?.
if
a
.
work
!=
nil
{
res
[
0
]
=
a
.
work
.
HashNoNonce
()
.
Hex
()
// Header Hash No Nonce
res
[
1
]
=
common
.
Hash
{}
.
Hex
()
// DAG Seed
res
[
2
]
=
common
.
Hash
{}
.
Hex
()
// Difficulty
}
return
res
}
func
(
a
*
Agent
)
SubmitWork
(
nonce
uint64
,
mixDigest
,
seedHash
common
.
Hash
)
bool
{
// Return true or false, but does not indicate if the PoW was correct
// Make sure the external miner was working on the right hash
if
a
.
currentWork
!=
nil
&&
a
.
work
!=
nil
&&
a
.
currentWork
.
Hash
()
==
a
.
work
.
Hash
()
{
a
.
returnCh
<-
miner
.
Work
{
a
.
currentWork
.
Number
()
.
Uint64
(),
nonce
,
mixDigest
.
Bytes
(),
seedHash
.
Bytes
()}
return
true
}
return
false
}
xeth/xeth.go
View file @
ab6311c1
...
@@ -100,6 +100,9 @@ type XEth struct {
...
@@ -100,6 +100,9 @@ type XEth struct {
// regmut sync.Mutex
// regmut sync.Mutex
// register map[string][]*interface{} // TODO improve return type
// register map[string][]*interface{} // TODO improve return type
// Miner agent
agent
*
Agent
}
}
// New creates an XEth that uses the given frontend.
// New creates an XEth that uses the given frontend.
...
@@ -117,7 +120,10 @@ func New(eth Backend, frontend Frontend) *XEth {
...
@@ -117,7 +120,10 @@ func New(eth Backend, frontend Frontend) *XEth {
frontend
:
frontend
,
frontend
:
frontend
,
logs
:
make
(
map
[
int
]
*
logFilter
),
logs
:
make
(
map
[
int
]
*
logFilter
),
messages
:
make
(
map
[
int
]
*
whisperFilter
),
messages
:
make
(
map
[
int
]
*
whisperFilter
),
agent
:
NewAgent
(),
}
}
eth
.
Miner
()
.
Register
(
xeth
.
agent
)
if
frontend
==
nil
{
if
frontend
==
nil
{
xeth
.
frontend
=
dummyFrontend
{}
xeth
.
frontend
=
dummyFrontend
{}
}
}
...
@@ -164,6 +170,8 @@ func (self *XEth) stop() {
...
@@ -164,6 +170,8 @@ func (self *XEth) stop() {
func
(
self
*
XEth
)
DefaultGas
()
*
big
.
Int
{
return
defaultGas
}
func
(
self
*
XEth
)
DefaultGas
()
*
big
.
Int
{
return
defaultGas
}
func
(
self
*
XEth
)
DefaultGasPrice
()
*
big
.
Int
{
return
defaultGasPrice
}
func
(
self
*
XEth
)
DefaultGasPrice
()
*
big
.
Int
{
return
defaultGasPrice
}
func
(
self
*
XEth
)
RemoteMining
()
*
Agent
{
return
self
.
agent
}
func
(
self
*
XEth
)
AtStateNum
(
num
int64
)
*
XEth
{
func
(
self
*
XEth
)
AtStateNum
(
num
int64
)
*
XEth
{
chain
:=
self
.
Backend
()
.
ChainManager
()
chain
:=
self
.
Backend
()
.
ChainManager
()
var
block
*
types
.
Block
var
block
*
types
.
Block
...
...
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