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
bfe5eb7f
Commit
bfe5eb7f
authored
Apr 10, 2017
by
Péter Szilágyi
Committed by
Felix Lange
Apr 10, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth: accept transactions when starting CPU mining (#13882)
parent
f32b72ca
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
18 additions
and
10 deletions
+18
-10
main.go
cmd/geth/main.go
+1
-1
api.go
eth/api.go
+2
-2
backend.go
eth/backend.go
+9
-1
handler.go
eth/handler.go
+4
-4
protocol_test.go
eth/protocol_test.go
+1
-1
sync.go
eth/sync.go
+1
-1
No files found.
cmd/geth/main.go
View file @
bfe5eb7f
...
...
@@ -301,7 +301,7 @@ func startNode(ctx *cli.Context, stack *node.Node) {
th
.
SetThreads
(
threads
)
}
}
if
err
:=
ethereum
.
StartMining
();
err
!=
nil
{
if
err
:=
ethereum
.
StartMining
(
true
);
err
!=
nil
{
utils
.
Fatalf
(
"Failed to start mining: %v"
,
err
)
}
}
...
...
eth/api.go
View file @
bfe5eb7f
...
...
@@ -103,7 +103,7 @@ func (api *PublicMinerAPI) SubmitWork(nonce types.BlockNonce, solution, digest c
// result[2], 32 bytes hex encoded boundary condition ("target"), 2^256/difficulty
func
(
api
*
PublicMinerAPI
)
GetWork
()
([
3
]
string
,
error
)
{
if
!
api
.
e
.
IsMining
()
{
if
err
:=
api
.
e
.
StartMining
();
err
!=
nil
{
if
err
:=
api
.
e
.
StartMining
(
false
);
err
!=
nil
{
return
[
3
]
string
{},
err
}
}
...
...
@@ -153,7 +153,7 @@ func (api *PrivateMinerAPI) Start(threads *int) error {
}
// Start the miner and return
if
!
api
.
e
.
IsMining
()
{
return
api
.
e
.
StartMining
()
return
api
.
e
.
StartMining
(
true
)
}
return
nil
}
...
...
eth/backend.go
View file @
bfe5eb7f
...
...
@@ -22,6 +22,7 @@ import (
"math/big"
"regexp"
"sync"
"sync/atomic"
"github.com/ethereum/go-ethereum/accounts"
"github.com/ethereum/go-ethereum/common"
...
...
@@ -326,12 +327,19 @@ func (self *Ethereum) SetEtherbase(etherbase common.Address) {
self
.
miner
.
SetEtherbase
(
etherbase
)
}
func
(
s
*
Ethereum
)
StartMining
()
error
{
func
(
s
*
Ethereum
)
StartMining
(
local
bool
)
error
{
eb
,
err
:=
s
.
Etherbase
()
if
err
!=
nil
{
log
.
Error
(
"Cannot start mining without etherbase"
,
"err"
,
err
)
return
fmt
.
Errorf
(
"etherbase missing: %v"
,
err
)
}
if
local
{
// If local (CPU) mining is started, we can disable the transaction rejection
// mechanism introduced to speed sync times. CPU mining on mainnet is ludicrous
// so noone will ever hit this path, whereas marking sync done on CPU mining
// will ensure that private networks work in single miner mode too.
atomic
.
StoreUint32
(
&
s
.
protocolManager
.
acceptTxs
,
1
)
}
go
s
.
miner
.
Start
(
eb
)
return
nil
}
...
...
eth/handler.go
View file @
bfe5eb7f
...
...
@@ -62,8 +62,8 @@ func errResp(code errCode, format string, v ...interface{}) error {
type
ProtocolManager
struct
{
networkId
int
fastSync
uint32
// Flag whether fast sync is enabled (gets disabled if we already have blocks)
synced
uint32
// Flag whether we're considered synchronised (enables transaction processing)
fastSync
uint32
// Flag whether fast sync is enabled (gets disabled if we already have blocks)
acceptTxs
uint32
// Flag whether we're considered synchronised (enables transaction processing)
txpool
txPool
blockchain
*
core
.
BlockChain
...
...
@@ -171,7 +171,7 @@ func NewProtocolManager(config *params.ChainConfig, fastSync bool, networkId int
return
blockchain
.
CurrentBlock
()
.
NumberU64
()
}
inserter
:=
func
(
blocks
types
.
Blocks
)
(
int
,
error
)
{
atomic
.
StoreUint32
(
&
manager
.
synced
,
1
)
// Mark initial sync done on any fetcher import
atomic
.
StoreUint32
(
&
manager
.
acceptTxs
,
1
)
// Mark initial sync done on any fetcher import
return
manager
.
blockchain
.
InsertChain
(
blocks
)
}
manager
.
fetcher
=
fetcher
.
New
(
blockchain
.
GetBlockByHash
,
validator
,
manager
.
BroadcastBlock
,
heighter
,
inserter
,
manager
.
removePeer
)
...
...
@@ -643,7 +643,7 @@ func (pm *ProtocolManager) handleMsg(p *peer) error {
case
msg
.
Code
==
TxMsg
:
// Transactions arrived, make sure we have a valid and fresh chain to handle them
if
atomic
.
LoadUint32
(
&
pm
.
synced
)
==
0
{
if
atomic
.
LoadUint32
(
&
pm
.
acceptTxs
)
==
0
{
break
}
// Transactions can be processed, parse all of them and deliver to the pool
...
...
eth/protocol_test.go
View file @
bfe5eb7f
...
...
@@ -94,7 +94,7 @@ func TestRecvTransactions63(t *testing.T) { testRecvTransactions(t, 63) }
func
testRecvTransactions
(
t
*
testing
.
T
,
protocol
int
)
{
txAdded
:=
make
(
chan
[]
*
types
.
Transaction
)
pm
:=
newTestProtocolManagerMust
(
t
,
false
,
0
,
nil
,
txAdded
)
pm
.
synced
=
1
// mark synced to accept transactions
pm
.
acceptTxs
=
1
// mark synced to accept transactions
p
,
_
:=
newTestPeer
(
"peer"
,
protocol
,
pm
,
true
)
defer
pm
.
Stop
()
defer
p
.
close
()
...
...
eth/sync.go
View file @
bfe5eb7f
...
...
@@ -188,7 +188,7 @@ func (pm *ProtocolManager) synchronise(peer *peer) {
if
err
:=
pm
.
downloader
.
Synchronise
(
peer
.
id
,
pHead
,
pTd
,
mode
);
err
!=
nil
{
return
}
atomic
.
StoreUint32
(
&
pm
.
synced
,
1
)
// Mark initial sync done
atomic
.
StoreUint32
(
&
pm
.
acceptTxs
,
1
)
// Mark initial sync done
if
head
:=
pm
.
blockchain
.
CurrentBlock
();
head
.
NumberU64
()
>
0
{
// We've completed a sync cycle, notify all peers of new state. This path is
// essential in star-topology networks where a gateway node needs to notify
...
...
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