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
d3f018fd
Unverified
Commit
d3f018fd
authored
3 years ago
by
Péter Szilágyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
eth: drop eth/65, the last non-reqid protocol version
parent
1b5582ac
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
179 additions
and
609 deletions
+179
-609
suite_test.go
cmd/devp2p/internal/ethtest/suite_test.go
+1
-1
downloader.go
eth/downloader/downloader.go
+2
-2
downloader_test.go
eth/downloader/downloader_test.go
+2
-93
peer.go
eth/downloader/peer.go
+4
-4
handler.go
eth/handler.go
+1
-4
handler_eth_test.go
eth/handler_eth_test.go
+21
-17
handler.go
eth/protocols/eth/handler.go
+15
-32
handler_test.go
eth/protocols/eth/handler_test.go
+47
-87
handlers.go
eth/protocols/eth/handlers.go
+0
-107
handshake_test.go
eth/protocols/eth/handshake_test.go
+0
-1
peer.go
eth/protocols/eth/peer.go
+66
-142
protocol.go
eth/protocols/eth/protocol.go
+15
-19
sync.go
eth/sync.go
+4
-98
sync_test.go
eth/sync_test.go
+0
-1
client_handler.go
les/client_handler.go
+1
-1
No files found.
cmd/devp2p/internal/ethtest/suite_test.go
View file @
d3f018fd
...
...
@@ -45,7 +45,7 @@ func TestEthSuite(t *testing.T) {
if
err
!=
nil
{
t
.
Fatalf
(
"could not create new test suite: %v"
,
err
)
}
for
_
,
test
:=
range
suite
.
AllEth
Tests
()
{
for
_
,
test
:=
range
suite
.
Eth66
Tests
()
{
t
.
Run
(
test
.
Name
,
func
(
t
*
testing
.
T
)
{
result
:=
utesting
.
RunTAP
([]
utesting
.
Test
{{
Name
:
test
.
Name
,
Fn
:
test
.
Fn
}},
os
.
Stdout
)
if
result
[
0
]
.
Failed
{
...
...
This diff is collapsed.
Click to expand it.
eth/downloader/downloader.go
View file @
d3f018fd
...
...
@@ -448,8 +448,8 @@ func (d *Downloader) syncWithPeer(p *peerConnection, hash common.Hash, td *big.I
d
.
mux
.
Post
(
DoneEvent
{
latest
})
}
}()
if
p
.
version
<
eth
.
ETH6
5
{
return
fmt
.
Errorf
(
"%w: advertized %d < required %d"
,
errTooOld
,
p
.
version
,
eth
.
ETH6
5
)
if
p
.
version
<
eth
.
ETH6
6
{
return
fmt
.
Errorf
(
"%w: advertized %d < required %d"
,
errTooOld
,
p
.
version
,
eth
.
ETH6
6
)
}
mode
:=
d
.
getMode
()
...
...
This diff is collapsed.
Click to expand it.
eth/downloader/downloader_test.go
View file @
d3f018fd
This diff is collapsed.
Click to expand it.
eth/downloader/peer.go
View file @
d3f018fd
...
...
@@ -413,7 +413,7 @@ func (ps *peerSet) HeaderIdlePeers() ([]*peerConnection, int) {
throughput
:=
func
(
p
*
peerConnection
)
int
{
return
p
.
rates
.
Capacity
(
eth
.
BlockHeadersMsg
,
time
.
Second
)
}
return
ps
.
idlePeers
(
eth
.
ETH6
5
,
eth
.
ETH66
,
idle
,
throughput
)
return
ps
.
idlePeers
(
eth
.
ETH6
6
,
eth
.
ETH66
,
idle
,
throughput
)
}
// BodyIdlePeers retrieves a flat list of all the currently body-idle peers within
...
...
@@ -425,7 +425,7 @@ func (ps *peerSet) BodyIdlePeers() ([]*peerConnection, int) {
throughput
:=
func
(
p
*
peerConnection
)
int
{
return
p
.
rates
.
Capacity
(
eth
.
BlockBodiesMsg
,
time
.
Second
)
}
return
ps
.
idlePeers
(
eth
.
ETH6
5
,
eth
.
ETH66
,
idle
,
throughput
)
return
ps
.
idlePeers
(
eth
.
ETH6
6
,
eth
.
ETH66
,
idle
,
throughput
)
}
// ReceiptIdlePeers retrieves a flat list of all the currently receipt-idle peers
...
...
@@ -437,7 +437,7 @@ func (ps *peerSet) ReceiptIdlePeers() ([]*peerConnection, int) {
throughput
:=
func
(
p
*
peerConnection
)
int
{
return
p
.
rates
.
Capacity
(
eth
.
ReceiptsMsg
,
time
.
Second
)
}
return
ps
.
idlePeers
(
eth
.
ETH6
5
,
eth
.
ETH66
,
idle
,
throughput
)
return
ps
.
idlePeers
(
eth
.
ETH6
6
,
eth
.
ETH66
,
idle
,
throughput
)
}
// NodeDataIdlePeers retrieves a flat list of all the currently node-data-idle
...
...
@@ -449,7 +449,7 @@ func (ps *peerSet) NodeDataIdlePeers() ([]*peerConnection, int) {
throughput
:=
func
(
p
*
peerConnection
)
int
{
return
p
.
rates
.
Capacity
(
eth
.
NodeDataMsg
,
time
.
Second
)
}
return
ps
.
idlePeers
(
eth
.
ETH6
5
,
eth
.
ETH66
,
idle
,
throughput
)
return
ps
.
idlePeers
(
eth
.
ETH6
6
,
eth
.
ETH66
,
idle
,
throughput
)
}
// idlePeers retrieves a flat list of all currently idle peers satisfying the
...
...
This diff is collapsed.
Click to expand it.
eth/handler.go
View file @
d3f018fd
...
...
@@ -117,7 +117,6 @@ type handler struct {
whitelist
map
[
uint64
]
common
.
Hash
// channels for fetcher, syncer, txsyncLoop
txsyncCh
chan
*
txsync
quitSync
chan
struct
{}
chainSync
*
chainSyncer
...
...
@@ -140,7 +139,6 @@ func newHandler(config *handlerConfig) (*handler, error) {
chain
:
config
.
Chain
,
peers
:
newPeerSet
(),
whitelist
:
config
.
Whitelist
,
txsyncCh
:
make
(
chan
*
txsync
),
quitSync
:
make
(
chan
struct
{}),
}
if
config
.
Sync
==
downloader
.
FullSync
{
...
...
@@ -408,9 +406,8 @@ func (h *handler) Start(maxPeers int) {
go
h
.
minedBroadcastLoop
()
// start sync handlers
h
.
wg
.
Add
(
2
)
h
.
wg
.
Add
(
1
)
go
h
.
chainSync
.
loop
()
go
h
.
txsyncLoop64
()
// TODO(karalabe): Legacy initial tx echange, drop with eth/64.
}
func
(
h
*
handler
)
Stop
()
{
...
...
This diff is collapsed.
Click to expand it.
eth/handler_eth_test.go
View file @
d3f018fd
...
...
@@ -80,7 +80,6 @@ func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error {
// Tests that peers are correctly accepted (or rejected) based on the advertised
// fork IDs in the protocol handshake.
func
TestForkIDSplit65
(
t
*
testing
.
T
)
{
testForkIDSplit
(
t
,
eth
.
ETH65
)
}
func
TestForkIDSplit66
(
t
*
testing
.
T
)
{
testForkIDSplit
(
t
,
eth
.
ETH66
)
}
func
testForkIDSplit
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -236,7 +235,6 @@ func testForkIDSplit(t *testing.T, protocol uint) {
}
// Tests that received transactions are added to the local pool.
func
TestRecvTransactions65
(
t
*
testing
.
T
)
{
testRecvTransactions
(
t
,
eth
.
ETH65
)
}
func
TestRecvTransactions66
(
t
*
testing
.
T
)
{
testRecvTransactions
(
t
,
eth
.
ETH66
)
}
func
testRecvTransactions
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -294,7 +292,6 @@ func testRecvTransactions(t *testing.T, protocol uint) {
}
// This test checks that pending transactions are sent.
func
TestSendTransactions65
(
t
*
testing
.
T
)
{
testSendTransactions
(
t
,
eth
.
ETH65
)
}
func
TestSendTransactions66
(
t
*
testing
.
T
)
{
testSendTransactions
(
t
,
eth
.
ETH66
)
}
func
testSendTransactions
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -306,7 +303,7 @@ func testSendTransactions(t *testing.T, protocol uint) {
insert
:=
make
([]
*
types
.
Transaction
,
100
)
for
nonce
:=
range
insert
{
tx
:=
types
.
NewTransaction
(
uint64
(
nonce
),
common
.
Address
{},
big
.
NewInt
(
0
),
100000
,
big
.
NewInt
(
0
),
make
([]
byte
,
txsyncPackSize
/
1
0
))
tx
:=
types
.
NewTransaction
(
uint64
(
nonce
),
common
.
Address
{},
big
.
NewInt
(
0
),
100000
,
big
.
NewInt
(
0
),
make
([]
byte
,
1024
0
))
tx
,
_
=
types
.
SignTx
(
tx
,
types
.
HomesteadSigner
{},
testKey
)
insert
[
nonce
]
=
tx
...
...
@@ -380,7 +377,6 @@ func testSendTransactions(t *testing.T, protocol uint) {
// Tests that transactions get propagated to all attached peers, either via direct
// broadcasts or via announcements/retrievals.
func
TestTransactionPropagation65
(
t
*
testing
.
T
)
{
testTransactionPropagation
(
t
,
eth
.
ETH65
)
}
func
TestTransactionPropagation66
(
t
*
testing
.
T
)
{
testTransactionPropagation
(
t
,
eth
.
ETH66
)
}
func
testTransactionPropagation
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -521,8 +517,8 @@ func testCheckpointChallenge(t *testing.T, syncmode downloader.SyncMode, checkpo
defer
p2pLocal
.
Close
()
defer
p2pRemote
.
Close
()
local
:=
eth
.
NewPeer
(
eth
.
ETH6
5
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
1
},
""
,
nil
,
p2pLocal
),
p2pLocal
,
handler
.
txpool
)
remote
:=
eth
.
NewPeer
(
eth
.
ETH6
5
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
2
},
""
,
nil
,
p2pRemote
),
p2pRemote
,
handler
.
txpool
)
local
:=
eth
.
NewPeer
(
eth
.
ETH6
6
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
1
},
""
,
nil
,
p2pLocal
),
p2pLocal
,
handler
.
txpool
)
remote
:=
eth
.
NewPeer
(
eth
.
ETH6
6
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
2
},
""
,
nil
,
p2pRemote
),
p2pRemote
,
handler
.
txpool
)
defer
local
.
Close
()
defer
remote
.
Close
()
...
...
@@ -543,30 +539,39 @@ func testCheckpointChallenge(t *testing.T, syncmode downloader.SyncMode, checkpo
if
err
:=
remote
.
Handshake
(
1
,
td
,
head
.
Hash
(),
genesis
.
Hash
(),
forkid
.
NewIDWithChain
(
handler
.
chain
),
forkid
.
NewFilter
(
handler
.
chain
));
err
!=
nil
{
t
.
Fatalf
(
"failed to run protocol handshake"
)
}
// Connect a new peer and check that we receive the checkpoint challenge.
if
checkpoint
{
if
err
:=
remote
.
ExpectRequestHeadersByNumber
(
response
.
Number
.
Uint64
(),
1
,
0
,
false
);
err
!=
nil
{
t
.
Fatalf
(
"challenge mismatch: %v"
,
err
)
msg
,
err
:=
p2pRemote
.
ReadMsg
()
if
err
!=
nil
{
t
.
Fatalf
(
"failed to read checkpoint challenge: %v"
,
err
)
}
request
:=
new
(
eth
.
GetBlockHeadersPacket66
)
if
err
:=
msg
.
Decode
(
request
);
err
!=
nil
{
t
.
Fatalf
(
"failed to decode checkpoint challenge: %v"
,
err
)
}
query
:=
request
.
GetBlockHeadersPacket
if
query
.
Origin
.
Number
!=
response
.
Number
.
Uint64
()
||
query
.
Amount
!=
1
||
query
.
Skip
!=
0
||
query
.
Reverse
{
t
.
Fatalf
(
"challenge mismatch: have [%d, %d, %d, %v] want [%d, %d, %d, %v]"
,
query
.
Origin
.
Number
,
query
.
Amount
,
query
.
Skip
,
query
.
Reverse
,
response
.
Number
.
Uint64
(),
1
,
0
,
false
)
}
// Create a block to reply to the challenge if no timeout is simulated.
if
!
timeout
{
if
empty
{
if
err
:=
remote
.
SendBlockHeaders
(
[]
*
types
.
Header
{});
err
!=
nil
{
if
err
:=
remote
.
ReplyBlockHeaders
(
request
.
RequestId
,
[]
*
types
.
Header
{});
err
!=
nil
{
t
.
Fatalf
(
"failed to answer challenge: %v"
,
err
)
}
}
else
if
match
{
if
err
:=
remote
.
SendBlockHeaders
(
[]
*
types
.
Header
{
response
});
err
!=
nil
{
if
err
:=
remote
.
ReplyBlockHeaders
(
request
.
RequestId
,
[]
*
types
.
Header
{
response
});
err
!=
nil
{
t
.
Fatalf
(
"failed to answer challenge: %v"
,
err
)
}
}
else
{
if
err
:=
remote
.
SendBlockHeaders
(
[]
*
types
.
Header
{{
Number
:
response
.
Number
}});
err
!=
nil
{
if
err
:=
remote
.
ReplyBlockHeaders
(
request
.
RequestId
,
[]
*
types
.
Header
{{
Number
:
response
.
Number
}});
err
!=
nil
{
t
.
Fatalf
(
"failed to answer challenge: %v"
,
err
)
}
}
}
}
// Wait until the test timeout passes to ensure proper cleanup
time
.
Sleep
(
syncChallengeTimeout
+
300
*
time
.
Millisecond
)
...
...
@@ -619,8 +624,8 @@ func testBroadcastBlock(t *testing.T, peers, bcasts int) {
defer
sourcePipe
.
Close
()
defer
sinkPipe
.
Close
()
sourcePeer
:=
eth
.
NewPeer
(
eth
.
ETH6
5
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
byte
(
i
)},
""
,
nil
,
sourcePipe
),
sourcePipe
,
nil
)
sinkPeer
:=
eth
.
NewPeer
(
eth
.
ETH6
5
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
0
},
""
,
nil
,
sinkPipe
),
sinkPipe
,
nil
)
sourcePeer
:=
eth
.
NewPeer
(
eth
.
ETH6
6
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
byte
(
i
)},
""
,
nil
,
sourcePipe
),
sourcePipe
,
nil
)
sinkPeer
:=
eth
.
NewPeer
(
eth
.
ETH6
6
,
p2p
.
NewPeerPipe
(
enode
.
ID
{
0
},
""
,
nil
,
sinkPipe
),
sinkPipe
,
nil
)
defer
sourcePeer
.
Close
()
defer
sinkPeer
.
Close
()
...
...
@@ -671,7 +676,6 @@ func testBroadcastBlock(t *testing.T, peers, bcasts int) {
// Tests that a propagated malformed block (uncles or transactions don't match
// with the hashes in the header) gets discarded and not broadcast forward.
func
TestBroadcastMalformedBlock65
(
t
*
testing
.
T
)
{
testBroadcastMalformedBlock
(
t
,
eth
.
ETH65
)
}
func
TestBroadcastMalformedBlock66
(
t
*
testing
.
T
)
{
testBroadcastMalformedBlock
(
t
,
eth
.
ETH66
)
}
func
testBroadcastMalformedBlock
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
This diff is collapsed.
Click to expand it.
eth/protocols/eth/handler.go
View file @
d3f018fd
...
...
@@ -171,39 +171,21 @@ type Decoder interface {
Time
()
time
.
Time
}
var
eth65
=
map
[
uint64
]
msgHandler
{
GetBlockHeadersMsg
:
handleGetBlockHeaders
,
BlockHeadersMsg
:
handleBlockHeaders
,
GetBlockBodiesMsg
:
handleGetBlockBodies
,
BlockBodiesMsg
:
handleBlockBodies
,
GetNodeDataMsg
:
handleGetNodeData
,
NodeDataMsg
:
handleNodeData
,
GetReceiptsMsg
:
handleGetReceipts
,
ReceiptsMsg
:
handleReceipts
,
NewBlockHashesMsg
:
handleNewBlockhashes
,
NewBlockMsg
:
handleNewBlock
,
TransactionsMsg
:
handleTransactions
,
NewPooledTransactionHashesMsg
:
handleNewPooledTransactionHashes
,
GetPooledTransactionsMsg
:
handleGetPooledTransactions
,
PooledTransactionsMsg
:
handlePooledTransactions
,
}
var
eth66
=
map
[
uint64
]
msgHandler
{
NewBlockHashesMsg
:
handleNewBlockhashes
,
NewBlockMsg
:
handleNewBlock
,
TransactionsMsg
:
handleTransactions
,
NewPooledTransactionHashesMsg
:
handleNewPooledTransactionHashes
,
// eth66 messages with request-id
GetBlockHeadersMsg
:
handleGetBlockHeaders66
,
BlockHeadersMsg
:
handleBlockHeaders66
,
GetBlockBodiesMsg
:
handleGetBlockBodies66
,
BlockBodiesMsg
:
handleBlockBodies66
,
GetNodeDataMsg
:
handleGetNodeData66
,
NodeDataMsg
:
handleNodeData66
,
GetReceiptsMsg
:
handleGetReceipts66
,
ReceiptsMsg
:
handleReceipts66
,
GetPooledTransactionsMsg
:
handleGetPooledTransactions66
,
PooledTransactionsMsg
:
handlePooledTransactions66
,
GetBlockHeadersMsg
:
handleGetBlockHeaders66
,
BlockHeadersMsg
:
handleBlockHeaders66
,
GetBlockBodiesMsg
:
handleGetBlockBodies66
,
BlockBodiesMsg
:
handleBlockBodies66
,
GetNodeDataMsg
:
handleGetNodeData66
,
NodeDataMsg
:
handleNodeData66
,
GetReceiptsMsg
:
handleGetReceipts66
,
ReceiptsMsg
:
handleReceipts66
,
GetPooledTransactionsMsg
:
handleGetPooledTransactions66
,
PooledTransactionsMsg
:
handlePooledTransactions66
,
}
// handleMessage is invoked whenever an inbound message is received from a remote
...
...
@@ -219,10 +201,11 @@ func handleMessage(backend Backend, peer *Peer) error {
}
defer
msg
.
Discard
()
var
handlers
=
eth65
if
peer
.
Version
()
>=
ETH66
{
handlers
=
eth66
}
var
handlers
=
eth66
//if peer.Version() >= ETH67 { // Left in as a sample when new protocol is added
// handlers = eth67
//}
// Track the amount of time it takes to serve the request and run the handler
if
metrics
.
Enabled
{
h
:=
fmt
.
Sprintf
(
"%s/%s/%d/%#02x"
,
p2p
.
HandleHistName
,
ProtocolName
,
peer
.
Version
(),
msg
.
Code
)
...
...
This diff is collapsed.
Click to expand it.
eth/protocols/eth/handler_test.go
View file @
d3f018fd
...
...
@@ -110,7 +110,6 @@ func (b *testBackend) Handle(*Peer, Packet) error {
}
// Tests that block headers can be retrieved from a remote chain based on user queries.
func
TestGetBlockHeaders65
(
t
*
testing
.
T
)
{
testGetBlockHeaders
(
t
,
ETH65
)
}
func
TestGetBlockHeaders66
(
t
*
testing
.
T
)
{
testGetBlockHeaders
(
t
,
ETH66
)
}
func
testGetBlockHeaders
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -254,44 +253,30 @@ func testGetBlockHeaders(t *testing.T, protocol uint) {
headers
=
append
(
headers
,
backend
.
chain
.
GetBlockByHash
(
hash
)
.
Header
())
}
// Send the hash request and verify the response
if
protocol
<=
ETH65
{
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
tt
.
query
)
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
headers
);
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
}
else
{
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
GetBlockHeadersPacket66
{
RequestId
:
123
,
GetBlockHeadersPacket
:
tt
.
query
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
BlockHeadersPacket66
{
RequestId
:
123
,
BlockHeadersPacket
:
headers
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
GetBlockHeadersPacket66
{
RequestId
:
123
,
GetBlockHeadersPacket
:
tt
.
query
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
BlockHeadersPacket66
{
RequestId
:
123
,
BlockHeadersPacket
:
headers
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
// If the test used number origins, repeat with hashes as the too
if
tt
.
query
.
Origin
.
Hash
==
(
common
.
Hash
{})
{
if
origin
:=
backend
.
chain
.
GetBlockByNumber
(
tt
.
query
.
Origin
.
Number
);
origin
!=
nil
{
tt
.
query
.
Origin
.
Hash
,
tt
.
query
.
Origin
.
Number
=
origin
.
Hash
(),
0
if
protocol
<=
ETH65
{
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
tt
.
query
)
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
headers
);
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
}
else
{
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
GetBlockHeadersPacket66
{
RequestId
:
456
,
GetBlockHeadersPacket
:
tt
.
query
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
BlockHeadersPacket66
{
RequestId
:
456
,
BlockHeadersPacket
:
headers
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
p2p
.
Send
(
peer
.
app
,
GetBlockHeadersMsg
,
GetBlockHeadersPacket66
{
RequestId
:
456
,
GetBlockHeadersPacket
:
tt
.
query
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockHeadersMsg
,
BlockHeadersPacket66
{
RequestId
:
456
,
BlockHeadersPacket
:
headers
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: headers mismatch: %v"
,
i
,
err
)
}
}
}
...
...
@@ -299,7 +284,6 @@ func testGetBlockHeaders(t *testing.T, protocol uint) {
}
// Tests that block contents can be retrieved from a remote chain based on their hashes.
func
TestGetBlockBodies65
(
t
*
testing
.
T
)
{
testGetBlockBodies
(
t
,
ETH65
)
}
func
TestGetBlockBodies66
(
t
*
testing
.
T
)
{
testGetBlockBodies
(
t
,
ETH66
)
}
func
testGetBlockBodies
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -369,28 +353,20 @@ func testGetBlockBodies(t *testing.T, protocol uint) {
}
}
// Send the hash request and verify the response
if
protocol
<=
ETH65
{
p2p
.
Send
(
peer
.
app
,
GetBlockBodiesMsg
,
hashes
)
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockBodiesMsg
,
bodies
);
err
!=
nil
{
t
.
Errorf
(
"test %d: bodies mismatch: %v"
,
i
,
err
)
}
}
else
{
p2p
.
Send
(
peer
.
app
,
GetBlockBodiesMsg
,
GetBlockBodiesPacket66
{
RequestId
:
123
,
GetBlockBodiesPacket
:
hashes
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockBodiesMsg
,
BlockBodiesPacket66
{
RequestId
:
123
,
BlockBodiesPacket
:
bodies
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: bodies mismatch: %v"
,
i
,
err
)
}
p2p
.
Send
(
peer
.
app
,
GetBlockBodiesMsg
,
GetBlockBodiesPacket66
{
RequestId
:
123
,
GetBlockBodiesPacket
:
hashes
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
BlockBodiesMsg
,
BlockBodiesPacket66
{
RequestId
:
123
,
BlockBodiesPacket
:
bodies
,
});
err
!=
nil
{
t
.
Errorf
(
"test %d: bodies mismatch: %v"
,
i
,
err
)
}
}
}
// Tests that the state trie nodes can be retrieved based on hashes.
func
TestGetNodeData65
(
t
*
testing
.
T
)
{
testGetNodeData
(
t
,
ETH65
)
}
func
TestGetNodeData66
(
t
*
testing
.
T
)
{
testGetNodeData
(
t
,
ETH66
)
}
func
testGetNodeData
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -449,14 +425,10 @@ func testGetNodeData(t *testing.T, protocol uint) {
}
it
.
Release
()
if
protocol
<=
ETH65
{
p2p
.
Send
(
peer
.
app
,
GetNodeDataMsg
,
hashes
)
}
else
{
p2p
.
Send
(
peer
.
app
,
GetNodeDataMsg
,
GetNodeDataPacket66
{
RequestId
:
123
,
GetNodeDataPacket
:
hashes
,
})
}
p2p
.
Send
(
peer
.
app
,
GetNodeDataMsg
,
GetNodeDataPacket66
{
RequestId
:
123
,
GetNodeDataPacket
:
hashes
,
})
msg
,
err
:=
peer
.
app
.
ReadMsg
()
if
err
!=
nil
{
t
.
Fatalf
(
"failed to read node data response: %v"
,
err
)
...
...
@@ -464,18 +436,14 @@ func testGetNodeData(t *testing.T, protocol uint) {
if
msg
.
Code
!=
NodeDataMsg
{
t
.
Fatalf
(
"response packet code mismatch: have %x, want %x"
,
msg
.
Code
,
NodeDataMsg
)
}
var
data
[][]
byte
if
protocol
<=
ETH65
{
if
err
:=
msg
.
Decode
(
&
data
);
err
!=
nil
{
t
.
Fatalf
(
"failed to decode response node data: %v"
,
err
)
}
}
else
{
var
res
NodeDataPacket66
if
err
:=
msg
.
Decode
(
&
res
);
err
!=
nil
{
t
.
Fatalf
(
"failed to decode response node data: %v"
,
err
)
}
data
=
res
.
NodeDataPacket
var
(
data
[][]
byte
res
NodeDataPacket66
)
if
err
:=
msg
.
Decode
(
&
res
);
err
!=
nil
{
t
.
Fatalf
(
"failed to decode response node data: %v"
,
err
)
}
data
=
res
.
NodeDataPacket
// Verify that all hashes correspond to the requested data, and reconstruct a state tree
for
i
,
want
:=
range
hashes
{
if
hash
:=
crypto
.
Keccak256Hash
(
data
[
i
]);
hash
!=
want
{
...
...
@@ -506,7 +474,6 @@ func testGetNodeData(t *testing.T, protocol uint) {
}
// Tests that the transaction receipts can be retrieved based on hashes.
func
TestGetBlockReceipts65
(
t
*
testing
.
T
)
{
testGetBlockReceipts
(
t
,
ETH65
)
}
func
TestGetBlockReceipts66
(
t
*
testing
.
T
)
{
testGetBlockReceipts
(
t
,
ETH66
)
}
func
testGetBlockReceipts
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
@@ -566,21 +533,14 @@ func testGetBlockReceipts(t *testing.T, protocol uint) {
receipts
=
append
(
receipts
,
backend
.
chain
.
GetReceiptsByHash
(
block
.
Hash
()))
}
// Send the hash request and verify the response
if
protocol
<=
ETH65
{
p2p
.
Send
(
peer
.
app
,
GetReceiptsMsg
,
hashes
)
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
ReceiptsMsg
,
receipts
);
err
!=
nil
{
t
.
Errorf
(
"receipts mismatch: %v"
,
err
)
}
}
else
{
p2p
.
Send
(
peer
.
app
,
GetReceiptsMsg
,
GetReceiptsPacket66
{
RequestId
:
123
,
GetReceiptsPacket
:
hashes
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
ReceiptsMsg
,
ReceiptsPacket66
{
RequestId
:
123
,
ReceiptsPacket
:
receipts
,
});
err
!=
nil
{
t
.
Errorf
(
"receipts mismatch: %v"
,
err
)
}
p2p
.
Send
(
peer
.
app
,
GetReceiptsMsg
,
GetReceiptsPacket66
{
RequestId
:
123
,
GetReceiptsPacket
:
hashes
,
})
if
err
:=
p2p
.
ExpectMsg
(
peer
.
app
,
ReceiptsMsg
,
ReceiptsPacket66
{
RequestId
:
123
,
ReceiptsPacket
:
receipts
,
});
err
!=
nil
{
t
.
Errorf
(
"receipts mismatch: %v"
,
err
)
}
}
This diff is collapsed.
Click to expand it.
eth/protocols/eth/handlers.go
View file @
d3f018fd
...
...
@@ -27,17 +27,6 @@ import (
"github.com/ethereum/go-ethereum/trie"
)
// handleGetBlockHeaders handles Block header query, collect the requested headers and reply
func
handleGetBlockHeaders
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the complex header query
var
query
GetBlockHeadersPacket
if
err
:=
msg
.
Decode
(
&
query
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
response
:=
answerGetBlockHeadersQuery
(
backend
,
&
query
,
peer
)
return
peer
.
SendBlockHeaders
(
response
)
}
// handleGetBlockHeaders66 is the eth/66 version of handleGetBlockHeaders
func
handleGetBlockHeaders66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the complex header query
...
...
@@ -135,16 +124,6 @@ func answerGetBlockHeadersQuery(backend Backend, query *GetBlockHeadersPacket, p
return
headers
}
func
handleGetBlockBodies
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the block body retrieval message
var
query
GetBlockBodiesPacket
if
err
:=
msg
.
Decode
(
&
query
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
response
:=
answerGetBlockBodiesQuery
(
backend
,
query
,
peer
)
return
peer
.
SendBlockBodiesRLP
(
response
)
}
func
handleGetBlockBodies66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the block body retrieval message
var
query
GetBlockBodiesPacket66
...
...
@@ -174,16 +153,6 @@ func answerGetBlockBodiesQuery(backend Backend, query GetBlockBodiesPacket, peer
return
bodies
}
func
handleGetNodeData
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the trie node data retrieval message
var
query
GetNodeDataPacket
if
err
:=
msg
.
Decode
(
&
query
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
response
:=
answerGetNodeDataQuery
(
backend
,
query
,
peer
)
return
peer
.
SendNodeData
(
response
)
}
func
handleGetNodeData66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the trie node data retrieval message
var
query
GetNodeDataPacket66
...
...
@@ -223,16 +192,6 @@ func answerGetNodeDataQuery(backend Backend, query GetNodeDataPacket, peer *Peer
return
nodes
}
func
handleGetReceipts
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the block receipts retrieval message
var
query
GetReceiptsPacket
if
err
:=
msg
.
Decode
(
&
query
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
response
:=
answerGetReceiptsQuery
(
backend
,
query
,
peer
)
return
peer
.
SendReceiptsRLP
(
response
)
}
func
handleGetReceipts66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the block receipts retrieval message
var
query
GetReceiptsPacket66
...
...
@@ -312,15 +271,6 @@ func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error {
return
backend
.
Handle
(
peer
,
ann
)
}
func
handleBlockHeaders
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of headers arrived to one of our previous requests
res
:=
new
(
BlockHeadersPacket
)
if
err
:=
msg
.
Decode
(
res
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
return
backend
.
Handle
(
peer
,
res
)
}
func
handleBlockHeaders66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of headers arrived to one of our previous requests
res
:=
new
(
BlockHeadersPacket66
)
...
...
@@ -332,15 +282,6 @@ func handleBlockHeaders66(backend Backend, msg Decoder, peer *Peer) error {
return
backend
.
Handle
(
peer
,
&
res
.
BlockHeadersPacket
)
}
func
handleBlockBodies
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of block bodies arrived to one of our previous requests
res
:=
new
(
BlockBodiesPacket
)
if
err
:=
msg
.
Decode
(
res
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
return
backend
.
Handle
(
peer
,
res
)
}
func
handleBlockBodies66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of block bodies arrived to one of our previous requests
res
:=
new
(
BlockBodiesPacket66
)
...
...
@@ -352,15 +293,6 @@ func handleBlockBodies66(backend Backend, msg Decoder, peer *Peer) error {
return
backend
.
Handle
(
peer
,
&
res
.
BlockBodiesPacket
)
}
func
handleNodeData
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of node state data arrived to one of our previous requests
res
:=
new
(
NodeDataPacket
)
if
err
:=
msg
.
Decode
(
res
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
return
backend
.
Handle
(
peer
,
res
)
}
func
handleNodeData66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of node state data arrived to one of our previous requests
res
:=
new
(
NodeDataPacket66
)
...
...
@@ -372,15 +304,6 @@ func handleNodeData66(backend Backend, msg Decoder, peer *Peer) error {
return
backend
.
Handle
(
peer
,
&
res
.
NodeDataPacket
)
}
func
handleReceipts
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of receipts arrived to one of our previous requests
res
:=
new
(
ReceiptsPacket
)
if
err
:=
msg
.
Decode
(
res
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
return
backend
.
Handle
(
peer
,
res
)
}
func
handleReceipts66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// A batch of receipts arrived to one of our previous requests
res
:=
new
(
ReceiptsPacket66
)
...
...
@@ -409,16 +332,6 @@ func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer)
return
backend
.
Handle
(
peer
,
ann
)
}
func
handleGetPooledTransactions
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the pooled transactions retrieval message
var
query
GetPooledTransactionsPacket
if
err
:=
msg
.
Decode
(
&
query
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
hashes
,
txs
:=
answerGetPooledTransactions
(
backend
,
query
,
peer
)
return
peer
.
SendPooledTransactionsRLP
(
hashes
,
txs
)
}
func
handleGetPooledTransactions66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Decode the pooled transactions retrieval message
var
query
GetPooledTransactionsPacket66
...
...
@@ -477,26 +390,6 @@ func handleTransactions(backend Backend, msg Decoder, peer *Peer) error {
return
backend
.
Handle
(
peer
,
&
txs
)
}
func
handlePooledTransactions
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Transactions arrived, make sure we have a valid and fresh chain to handle them
if
!
backend
.
AcceptTxs
()
{
return
nil
}
// Transactions can be processed, parse all of them and deliver to the pool
var
txs
PooledTransactionsPacket
if
err
:=
msg
.
Decode
(
&
txs
);
err
!=
nil
{
return
fmt
.
Errorf
(
"%w: message %v: %v"
,
errDecode
,
msg
,
err
)
}
for
i
,
tx
:=
range
txs
{
// Validate and mark the remote transaction
if
tx
==
nil
{
return
fmt
.
Errorf
(
"%w: transaction %d is nil"
,
errDecode
,
i
)
}
peer
.
markTransaction
(
tx
.
Hash
())
}
return
backend
.
Handle
(
peer
,
&
txs
)
}
func
handlePooledTransactions66
(
backend
Backend
,
msg
Decoder
,
peer
*
Peer
)
error
{
// Transactions arrived, make sure we have a valid and fresh chain to handle them
if
!
backend
.
AcceptTxs
()
{
...
...
This diff is collapsed.
Click to expand it.
eth/protocols/eth/handshake_test.go
View file @
d3f018fd
...
...
@@ -27,7 +27,6 @@ import (
)
// Tests that handshake failures are detected and reported correctly.
func
TestHandshake65
(
t
*
testing
.
T
)
{
testHandshake
(
t
,
ETH65
)
}
func
TestHandshake66
(
t
*
testing
.
T
)
{
testHandshake
(
t
,
ETH66
)
}
func
testHandshake
(
t
*
testing
.
T
,
protocol
uint
)
{
...
...
This diff is collapsed.
Click to expand it.
eth/protocols/eth/peer.go
View file @
d3f018fd
This diff is collapsed.
Click to expand it.
eth/protocols/eth/protocol.go
View file @
d3f018fd
...
...
@@ -30,7 +30,6 @@ import (
// Constants to match up protocol versions and messages
const
(
ETH65
=
65
ETH66
=
66
)
...
...
@@ -40,31 +39,28 @@ const ProtocolName = "eth"
// ProtocolVersions are the supported versions of the `eth` protocol (first
// is primary).
var
ProtocolVersions
=
[]
uint
{
ETH66
,
ETH65
}
var
ProtocolVersions
=
[]
uint
{
ETH66
}
// protocolLengths are the number of implemented message corresponding to
// different protocol versions.
var
protocolLengths
=
map
[
uint
]
uint64
{
ETH66
:
17
,
ETH65
:
17
}
var
protocolLengths
=
map
[
uint
]
uint64
{
ETH66
:
17
}
// maxMessageSize is the maximum cap on the size of a protocol message.
const
maxMessageSize
=
10
*
1024
*
1024
const
(
// Protocol messages in eth/64
StatusMsg
=
0x00
NewBlockHashesMsg
=
0x01
TransactionsMsg
=
0x02
GetBlockHeadersMsg
=
0x03
BlockHeadersMsg
=
0x04
GetBlockBodiesMsg
=
0x05
BlockBodiesMsg
=
0x06
NewBlockMsg
=
0x07
GetNodeDataMsg
=
0x0d
NodeDataMsg
=
0x0e
GetReceiptsMsg
=
0x0f
ReceiptsMsg
=
0x10
// Protocol messages overloaded in eth/65
StatusMsg
=
0x00
NewBlockHashesMsg
=
0x01
TransactionsMsg
=
0x02
GetBlockHeadersMsg
=
0x03
BlockHeadersMsg
=
0x04
GetBlockBodiesMsg
=
0x05
BlockBodiesMsg
=
0x06
NewBlockMsg
=
0x07
GetNodeDataMsg
=
0x0d
NodeDataMsg
=
0x0e
GetReceiptsMsg
=
0x0f
ReceiptsMsg
=
0x10
NewPooledTransactionHashesMsg
=
0x08
GetPooledTransactionsMsg
=
0x09
PooledTransactionsMsg
=
0x0a
...
...
@@ -128,7 +124,7 @@ type GetBlockHeadersPacket struct {
Reverse
bool
// Query direction (false = rising towards latest, true = falling towards genesis)
}
// GetBlockHeadersPacket represents a block header query over eth/66
// GetBlockHeadersPacket
66
represents a block header query over eth/66
type
GetBlockHeadersPacket66
struct
{
RequestId
uint64
*
GetBlockHeadersPacket
...
...
This diff is collapsed.
Click to expand it.
eth/sync.go
View file @
d3f018fd
...
...
@@ -18,7 +18,6 @@ package eth
import
(
"math/big"
"math/rand"
"sync/atomic"
"time"
...
...
@@ -28,23 +27,13 @@ import (
"github.com/ethereum/go-ethereum/eth/downloader"
"github.com/ethereum/go-ethereum/eth/protocols/eth"
"github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p/enode"
)
const
(
forceSyncCycle
=
10
*
time
.
Second
// Time interval to force syncs, even if few peers are available
defaultMinSyncPeers
=
5
// Amount of peers desired to start syncing
// This is the target size for the packs of transactions sent by txsyncLoop64.
// A pack can get larger than this if a single transactions exceeds this size.
txsyncPackSize
=
100
*
1024
)
type
txsync
struct
{
p
*
eth
.
Peer
txs
[]
*
types
.
Transaction
}
// syncTransactions starts sending all currently pending transactions to the given peer.
func
(
h
*
handler
)
syncTransactions
(
p
*
eth
.
Peer
)
{
// Assemble the set of transaction to broadcast or announce to the remote
...
...
@@ -64,94 +53,11 @@ func (h *handler) syncTransactions(p *eth.Peer) {
// The eth/65 protocol introduces proper transaction announcements, so instead
// of dripping transactions across multiple peers, just send the entire list as
// an announcement and let the remote side decide what they need (likely nothing).
if
p
.
Version
()
>=
eth
.
ETH65
{
hashes
:=
make
([]
common
.
Hash
,
len
(
txs
))
for
i
,
tx
:=
range
txs
{
hashes
[
i
]
=
tx
.
Hash
()
}
p
.
AsyncSendPooledTransactionHashes
(
hashes
)
return
}
// Out of luck, peer is running legacy protocols, drop the txs over
select
{
case
h
.
txsyncCh
<-
&
txsync
{
p
:
p
,
txs
:
txs
}
:
case
<-
h
.
quitSync
:
}
}
// txsyncLoop64 takes care of the initial transaction sync for each new
// connection. When a new peer appears, we relay all currently pending
// transactions. In order to minimise egress bandwidth usage, we send
// the transactions in small packs to one peer at a time.
func
(
h
*
handler
)
txsyncLoop64
()
{
defer
h
.
wg
.
Done
()
var
(
pending
=
make
(
map
[
enode
.
ID
]
*
txsync
)
sending
=
false
// whether a send is active
pack
=
new
(
txsync
)
// the pack that is being sent
done
=
make
(
chan
error
,
1
)
// result of the send
)
// send starts a sending a pack of transactions from the sync.
send
:=
func
(
s
*
txsync
)
{
if
s
.
p
.
Version
()
>=
eth
.
ETH65
{
panic
(
"initial transaction syncer running on eth/65+"
)
}
// Fill pack with transactions up to the target size.
size
:=
common
.
StorageSize
(
0
)
pack
.
p
=
s
.
p
pack
.
txs
=
pack
.
txs
[
:
0
]
for
i
:=
0
;
i
<
len
(
s
.
txs
)
&&
size
<
txsyncPackSize
;
i
++
{
pack
.
txs
=
append
(
pack
.
txs
,
s
.
txs
[
i
])
size
+=
s
.
txs
[
i
]
.
Size
()
}
// Remove the transactions that will be sent.
s
.
txs
=
s
.
txs
[
:
copy
(
s
.
txs
,
s
.
txs
[
len
(
pack
.
txs
)
:
])]
if
len
(
s
.
txs
)
==
0
{
delete
(
pending
,
s
.
p
.
Peer
.
ID
())
}
// Send the pack in the background.
s
.
p
.
Log
()
.
Trace
(
"Sending batch of transactions"
,
"count"
,
len
(
pack
.
txs
),
"bytes"
,
size
)
sending
=
true
go
func
()
{
done
<-
pack
.
p
.
SendTransactions
(
pack
.
txs
)
}()
}
// pick chooses the next pending sync.
pick
:=
func
()
*
txsync
{
if
len
(
pending
)
==
0
{
return
nil
}
n
:=
rand
.
Intn
(
len
(
pending
))
+
1
for
_
,
s
:=
range
pending
{
if
n
--
;
n
==
0
{
return
s
}
}
return
nil
}
for
{
select
{
case
s
:=
<-
h
.
txsyncCh
:
pending
[
s
.
p
.
Peer
.
ID
()]
=
s
if
!
sending
{
send
(
s
)
}
case
err
:=
<-
done
:
sending
=
false
// Stop tracking peers that cause send failures.
if
err
!=
nil
{
pack
.
p
.
Log
()
.
Debug
(
"Transaction send failed"
,
"err"
,
err
)
delete
(
pending
,
pack
.
p
.
Peer
.
ID
())
}
// Schedule the next send.
if
s
:=
pick
();
s
!=
nil
{
send
(
s
)
}
case
<-
h
.
quitSync
:
return
}
hashes
:=
make
([]
common
.
Hash
,
len
(
txs
))
for
i
,
tx
:=
range
txs
{
hashes
[
i
]
=
tx
.
Hash
()
}
p
.
AsyncSendPooledTransactionHashes
(
hashes
)
}
// chainSyncer coordinates blockchain sync components.
...
...
This diff is collapsed.
Click to expand it.
eth/sync_test.go
View file @
d3f018fd
...
...
@@ -28,7 +28,6 @@ import (
)
// Tests that fast sync is disabled after a successful sync cycle.
func
TestFastSyncDisabling65
(
t
*
testing
.
T
)
{
testFastSyncDisabling
(
t
,
eth
.
ETH65
)
}
func
TestFastSyncDisabling66
(
t
*
testing
.
T
)
{
testFastSyncDisabling
(
t
,
eth
.
ETH66
)
}
// Tests that fast sync gets disabled as soon as a real block is successfully
...
...
This diff is collapsed.
Click to expand it.
les/client_handler.go
View file @
d3f018fd
...
...
@@ -472,7 +472,7 @@ func (d *downloaderPeerNotify) registerPeer(p *serverPeer) {
handler
:
h
,
peer
:
p
,
}
h
.
downloader
.
RegisterLightPeer
(
p
.
id
,
eth
.
ETH6
5
,
pc
)
h
.
downloader
.
RegisterLightPeer
(
p
.
id
,
eth
.
ETH6
6
,
pc
)
}
func
(
d
*
downloaderPeerNotify
)
unregisterPeer
(
p
*
serverPeer
)
{
...
...
This diff is collapsed.
Click to expand it.
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