From 5129cdc4f04889d3f21cadba5a246d62391301a6 Mon Sep 17 00:00:00 2001
From: Felix Lange <fjl@twurst.com>
Date: Wed, 24 Mar 2021 12:32:39 +0100
Subject: [PATCH] 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
---
 cmd/devp2p/nodesetcmd.go | 6 +++---
 les/enr_entry.go         | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/cmd/devp2p/nodesetcmd.go b/cmd/devp2p/nodesetcmd.go
index ba97405ab..33de1fdf3 100644
--- a/cmd/devp2p/nodesetcmd.go
+++ b/cmd/devp2p/nodesetcmd.go
@@ -173,7 +173,7 @@ func ethFilter(args []string) (nodeFilter, error) {
 	f := func(n nodeJSON) bool {
 		var eth struct {
 			ForkID forkid.ID
-			_      []rlp.RawValue `rlp:"tail"`
+			Tail   []rlp.RawValue `rlp:"tail"`
 		}
 		if n.N.Load(enr.WithEntry("eth", &eth)) != nil {
 			return false
@@ -186,7 +186,7 @@ func ethFilter(args []string) (nodeFilter, error) {
 func lesFilter(args []string) (nodeFilter, error) {
 	f := func(n nodeJSON) bool {
 		var les struct {
-			_ []rlp.RawValue `rlp:"tail"`
+			Tail []rlp.RawValue `rlp:"tail"`
 		}
 		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) {
 	f := func(n nodeJSON) bool {
 		var snap struct {
-			_ []rlp.RawValue `rlp:"tail"`
+			Tail []rlp.RawValue `rlp:"tail"`
 		}
 		return n.N.Load(enr.WithEntry("snap", &snap)) == nil
 	}
diff --git a/les/enr_entry.go b/les/enr_entry.go
index 892c3530d..307313fb1 100644
--- a/les/enr_entry.go
+++ b/les/enr_entry.go
@@ -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.
 type ethEntry struct {
 	ForkID forkid.ID
-	_      []rlp.RawValue `rlp:"tail"`
+	Tail   []rlp.RawValue `rlp:"tail"`
 }
 
 func (ethEntry) ENRKey() string { return "eth" }
-- 
GitLab