mirror of
https://github.com/logos-messaging/enr-decoder.git
synced 2026-01-02 12:53:08 +00:00
91 lines
2.1 KiB
Go
91 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"flag"
|
|
"fmt"
|
|
"net/netip"
|
|
|
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
|
"github.com/ethereum/go-ethereum/p2p/enr"
|
|
wenr "github.com/waku-org/go-waku/waku/v2/protocol/enr"
|
|
)
|
|
|
|
func main() {
|
|
var enr = flag.String("enr", "", "enr to be decoded")
|
|
|
|
flag.Parse()
|
|
|
|
node, err := enode.Parse(enode.ValidSchemes, *enr)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fmt.Println("Decoded ENR:")
|
|
peerID, multiaddrs, err := wenr.Multiaddress(node)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
fmt.Println("===============================================================================")
|
|
fmt.Println("seq:", node.Record().Seq())
|
|
fmt.Println("signature:", "0x"+hex.EncodeToString(node.Record().Signature()))
|
|
fmt.Println("PeerID: ", peerID)
|
|
ip, err := GetValue(node.Record(), "ip")
|
|
if err != nil {
|
|
panic(err)
|
|
} else {
|
|
if len(ip) > 0 {
|
|
ipaddr, ok := netip.AddrFromSlice(ip)
|
|
if ok {
|
|
fmt.Println("ipv4:", ipaddr)
|
|
}
|
|
} else {
|
|
fmt.Println("ipv4: field has no value")
|
|
}
|
|
}
|
|
port, err := GetValue(node.Record(), "tcp")
|
|
if err != nil {
|
|
panic(err)
|
|
} else {
|
|
if len(port) > 0 {
|
|
fmt.Println("tcp:", binary.BigEndian.Uint16(port))
|
|
} else {
|
|
fmt.Println("ipv4: field has no value")
|
|
}
|
|
}
|
|
ReadAndPrintValue(node.Record(), "waku2")
|
|
ReadAndPrintValue(node.Record(), "rs")
|
|
ReadAndPrintValue(node.Record(), "rsv")
|
|
|
|
fmt.Println("Multiaddresses:")
|
|
for _, maddr := range multiaddrs {
|
|
fmt.Println(maddr)
|
|
}
|
|
fmt.Println("===============================================================================")
|
|
|
|
}
|
|
|
|
func GetValue(record *enr.Record, name string) ([]byte, error) {
|
|
var field []byte
|
|
if err := record.Load(enr.WithEntry(name, &field)); err != nil {
|
|
if enr.IsNotFound(err) {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
return field, nil
|
|
}
|
|
|
|
func ReadAndPrintValue(record *enr.Record, name string) {
|
|
var field []byte
|
|
if err := record.Load(enr.WithEntry(name, &field)); err != nil {
|
|
if enr.IsNotFound(err) {
|
|
fmt.Println(name, ":", "field contains no value")
|
|
return
|
|
}
|
|
panic(err)
|
|
}
|
|
fmt.Println(name, ":", "0x"+hex.EncodeToString(field))
|
|
}
|