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
42628ba7
Commit
42628ba7
authored
Feb 09, 2018
by
gluk256
Committed by
Péter Szilágyi
Feb 09, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
whisper: bloom filter refactoring (#16046)
* whisper: bloom filter refactoring * whisper: fixed full node
parent
ccf80835
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
21 additions
and
16 deletions
+21
-16
peer.go
whisper/whisperv6/peer.go
+20
-10
whisper.go
whisper/whisperv6/whisper.go
+1
-6
No files found.
whisper/whisperv6/peer.go
View file @
42628ba7
...
...
@@ -36,7 +36,8 @@ type Peer struct {
trusted
bool
powRequirement
float64
bloomFilter
[]
byte
// may contain nil in case of full node
bloomFilter
[]
byte
fullNode
bool
known
*
set
.
Set
// Messages already known by the peer to avoid wasting bandwidth
...
...
@@ -53,6 +54,8 @@ func newPeer(host *Whisper, remote *p2p.Peer, rw p2p.MsgReadWriter) *Peer {
powRequirement
:
0.0
,
known
:
set
.
New
(),
quit
:
make
(
chan
struct
{}),
bloomFilter
:
makeFullNodeBloom
(),
fullNode
:
true
,
}
}
...
...
@@ -118,11 +121,7 @@ func (peer *Peer) handshake() error {
if
sz
!=
bloomFilterSize
&&
sz
!=
0
{
return
fmt
.
Errorf
(
"peer [%x] sent bad status message: wrong bloom filter size %d"
,
peer
.
ID
(),
sz
)
}
if
isFullNode
(
bloom
)
{
peer
.
bloomFilter
=
nil
}
else
{
peer
.
bloomFilter
=
bloom
}
peer
.
setBloomFilter
(
bloom
)
}
}
...
...
@@ -226,10 +225,21 @@ func (peer *Peer) notifyAboutBloomFilterChange(bloom []byte) error {
}
func
(
peer
*
Peer
)
bloomMatch
(
env
*
Envelope
)
bool
{
if
peer
.
bloomFilter
==
nil
{
// no filter - full node, accepts all envelops
return
true
return
peer
.
fullNode
||
bloomFilterMatch
(
peer
.
bloomFilter
,
env
.
Bloom
())
}
func
(
peer
*
Peer
)
setBloomFilter
(
bloom
[]
byte
)
{
peer
.
bloomFilter
=
bloom
peer
.
fullNode
=
isFullNode
(
bloom
)
if
peer
.
fullNode
&&
peer
.
bloomFilter
==
nil
{
peer
.
bloomFilter
=
makeFullNodeBloom
()
}
}
return
bloomFilterMatch
(
peer
.
bloomFilter
,
env
.
Bloom
())
func
makeFullNodeBloom
()
[]
byte
{
bloom
:=
make
([]
byte
,
bloomFilterSize
)
for
i
:=
0
;
i
<
bloomFilterSize
;
i
++
{
bloom
[
i
]
=
0xFF
}
return
bloom
}
whisper/whisperv6/whisper.go
View file @
42628ba7
...
...
@@ -710,11 +710,7 @@ func (whisper *Whisper) runMessageLoop(p *Peer, rw p2p.MsgReadWriter) error {
log
.
Warn
(
"failed to decode bloom filter exchange message, peer will be disconnected"
,
"peer"
,
p
.
peer
.
ID
(),
"err"
,
err
)
return
errors
.
New
(
"invalid bloom filter exchange message"
)
}
if
isFullNode
(
bloom
)
{
p
.
bloomFilter
=
nil
}
else
{
p
.
bloomFilter
=
bloom
}
p
.
setBloomFilter
(
bloom
)
case
p2pMessageCode
:
// peer-to-peer message, sent directly to peer bypassing PoW checks, etc.
// this message is not supposed to be forwarded to other peers, and
...
...
@@ -1049,7 +1045,6 @@ func isFullNode(bloom []byte) bool {
func
bloomFilterMatch
(
filter
,
sample
[]
byte
)
bool
{
if
filter
==
nil
{
// full node, accepts all messages
return
true
}
...
...
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