Skip to content

Commit 0316b60

Browse files
authored
Merge pull request #445 from ethpandaops/bbusa/api-enr
feat: add decoded enr info to consensus api
2 parents ceef7b4 + b8b762b commit 0316b60

File tree

4 files changed

+37
-5
lines changed

4 files changed

+37
-5
lines changed

docs/swagger.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,10 @@
443443
"enr": {
444444
"type": "string"
445445
},
446+
"enr_decoded": {
447+
"type": "object",
448+
"additionalProperties": true
449+
},
446450
"head_root": {
447451
"type": "string"
448452
},

docs/swagger.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ definitions:
1212
type: array
1313
enr:
1414
type: string
15+
enr_decoded:
16+
additionalProperties: true
17+
type: object
1518
head_root:
1619
type: string
1720
head_slot:

handlers/api/api_clients_cl.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ type APIConsensusClientNodeInfo struct {
1919
PeerID string `json:"peer_id"`
2020
NodeID string `json:"node_id"`
2121
ENR string `json:"enr"`
22+
ENRDecoded map[string]interface{} `json:"enr_decoded,omitempty"`
2223
HeadSlot uint64 `json:"head_slot"`
2324
HeadRoot string `json:"head_root"`
2425
Status string `json:"status"`
@@ -138,10 +139,19 @@ func getConsensusClientNodeInfo() ([]APIConsensusClientNodeInfo, error) {
138139
if utils.Config.Frontend.ShowSensitivePeerInfos {
139140
clientInfo.PeerID = nodeIdentity.PeerID
140141
clientInfo.ENR = nodeIdentity.Enr
141-
// Note: NodeID not available in the interface, using PeerID as fallback
142142
clientInfo.NodeID = nodeIdentity.PeerID
143143
}
144144

145+
if nodeIdentity.Enr != "" {
146+
if enrRecord, err := utils.DecodeENR(nodeIdentity.Enr); err == nil {
147+
if utils.Config.Frontend.ShowSensitivePeerInfos {
148+
clientInfo.ENRDecoded = utils.GetKeyValuesFromENR(enrRecord)
149+
} else {
150+
clientInfo.ENRDecoded = utils.GetKeyValuesFromENRFiltered(enrRecord)
151+
}
152+
}
153+
}
154+
145155
// Add metadata information (available regardless of sensitive info setting)
146156
if nodeIdentity.Metadata.Attnets != "" || nodeIdentity.Metadata.Syncnets != "" || nodeIdentity.Metadata.SeqNumber != nil || nodeIdentity.Metadata.CustodyGroupCount != nil {
147157
seqNumber := ""

utils/enr.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,18 +32,33 @@ func DecodeENR(raw string) (*enr.Record, error) {
3232
}
3333

3434
func GetKeyValuesFromENR(r *enr.Record) map[string]interface{} {
35+
return getKeyValuesFromENR(r, false)
36+
}
37+
38+
func GetKeyValuesFromENRFiltered(r *enr.Record) map[string]interface{} {
39+
return getKeyValuesFromENR(r, true)
40+
}
41+
42+
func getKeyValuesFromENR(r *enr.Record, filterSensitive bool) map[string]interface{} {
3543
fields := make(map[string]interface{})
36-
// Get sequence number
37-
fields["seq"] = r.Seq()
3844

39-
// Get signature
45+
sensitiveFields := map[string]bool{
46+
"ip": true,
47+
"ip6": true,
48+
}
49+
50+
fields["seq"] = r.Seq()
4051
fields["signature"] = "0x" + hex.EncodeToString(r.Signature())
4152

42-
// Get all key value pairs
4353
kv := r.AppendElements(nil)[1:]
4454
for i := 0; i < len(kv); i += 2 {
4555
key := kv[i].(string)
4656
val := kv[i+1].(rlp.RawValue)
57+
58+
if filterSensitive && sensitiveFields[key] {
59+
continue
60+
}
61+
4762
formatter := attrFormatters[key]
4863
if formatter == nil {
4964
formatter = formatAttrRaw

0 commit comments

Comments
 (0)