cmd/devp2p: skip ENR field tails properly in nodeset filter (#22565)

In Geth v1.10, we changed the structure of the "les" ENR entry. As a result, the DHT crawler that creates the DNS lists
no longer recognizes the les nodes, which is fixed in this commit. 

* cmd/devp2p: skip ENR field tails properly in nodeset filter
* cmd/devp2p: fix tail decoder for snap as well
* les: fix tail decoding in "eth" ENR entry
This commit is contained in:
Felix Lange 2021-03-24 12:32:39 +01:00 committed by GitHub
parent e862cbff95
commit 5129cdc4f0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 4 additions and 4 deletions

@ -173,7 +173,7 @@ func ethFilter(args []string) (nodeFilter, error) {
f := func(n nodeJSON) bool { f := func(n nodeJSON) bool {
var eth struct { var eth struct {
ForkID forkid.ID ForkID forkid.ID
_ []rlp.RawValue `rlp:"tail"` Tail []rlp.RawValue `rlp:"tail"`
} }
if n.N.Load(enr.WithEntry("eth", &eth)) != nil { if n.N.Load(enr.WithEntry("eth", &eth)) != nil {
return false return false
@ -186,7 +186,7 @@ func ethFilter(args []string) (nodeFilter, error) {
func lesFilter(args []string) (nodeFilter, error) { func lesFilter(args []string) (nodeFilter, error) {
f := func(n nodeJSON) bool { f := func(n nodeJSON) bool {
var les struct { var les struct {
_ []rlp.RawValue `rlp:"tail"` Tail []rlp.RawValue `rlp:"tail"`
} }
return n.N.Load(enr.WithEntry("les", &les)) == nil return n.N.Load(enr.WithEntry("les", &les)) == nil
} }
@ -196,7 +196,7 @@ func lesFilter(args []string) (nodeFilter, error) {
func snapFilter(args []string) (nodeFilter, error) { func snapFilter(args []string) (nodeFilter, error) {
f := func(n nodeJSON) bool { f := func(n nodeJSON) bool {
var snap struct { var snap struct {
_ []rlp.RawValue `rlp:"tail"` Tail []rlp.RawValue `rlp:"tail"`
} }
return n.N.Load(enr.WithEntry("snap", &snap)) == nil return n.N.Load(enr.WithEntry("snap", &snap)) == nil
} }

@ -35,7 +35,7 @@ func (lesEntry) ENRKey() string { return "les" }
// ethEntry is the "eth" ENR entry. This is redeclared here to avoid depending on package eth. // ethEntry is the "eth" ENR entry. This is redeclared here to avoid depending on package eth.
type ethEntry struct { type ethEntry struct {
ForkID forkid.ID ForkID forkid.ID
_ []rlp.RawValue `rlp:"tail"` Tail []rlp.RawValue `rlp:"tail"`
} }
func (ethEntry) ENRKey() string { return "eth" } func (ethEntry) ENRKey() string { return "eth" }