mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-08-19 10:22:23 +00:00
adding quic field to enr
This commit is contained in:
parent
83e70aa3d0
commit
94500ae52b
4 changed files with 49 additions and 9 deletions
|
|
@ -298,7 +298,7 @@ func (ln *LocalNode) sign() {
|
||||||
panic(fmt.Errorf("enode: can't verify local record: %v", err))
|
panic(fmt.Errorf("enode: can't verify local record: %v", err))
|
||||||
}
|
}
|
||||||
ln.cur.Store(n)
|
ln.cur.Store(n)
|
||||||
log.Info("New local node record", "seq", ln.seq, "id", n.ID(), "ip", n.IPAddr(), "udp", n.UDP(), "tcp", n.TCP())
|
log.Info("New local node record", "seq", ln.seq, "id", n.ID(), "ip", n.IPAddr(), "udp", n.UDP(), "tcp", n.TCP(), "quic", n.QUIC())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ln *LocalNode) bumpSeq() {
|
func (ln *LocalNode) bumpSeq() {
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ type Node struct {
|
||||||
ip netip.Addr
|
ip netip.Addr
|
||||||
udp uint16
|
udp uint16
|
||||||
tcp uint16
|
tcp uint16
|
||||||
|
quic uint16
|
||||||
}
|
}
|
||||||
|
|
||||||
// New wraps a node record. The record must be valid according to the given
|
// New wraps a node record. The record must be valid according to the given
|
||||||
|
|
@ -105,6 +106,7 @@ func (n *Node) setIP4(ip netip.Addr) {
|
||||||
n.ip = ip
|
n.ip = ip
|
||||||
n.Load((*enr.UDP)(&n.udp))
|
n.Load((*enr.UDP)(&n.udp))
|
||||||
n.Load((*enr.TCP)(&n.tcp))
|
n.Load((*enr.TCP)(&n.tcp))
|
||||||
|
n.Load((*enr.QUIC)(&n.quic))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Node) setIP6(ip netip.Addr) {
|
func (n *Node) setIP6(ip netip.Addr) {
|
||||||
|
|
@ -119,6 +121,9 @@ func (n *Node) setIP6(ip netip.Addr) {
|
||||||
if err := n.Load((*enr.TCP6)(&n.tcp)); err != nil {
|
if err := n.Load((*enr.TCP6)(&n.tcp)); err != nil {
|
||||||
n.Load((*enr.TCP)(&n.tcp))
|
n.Load((*enr.TCP)(&n.tcp))
|
||||||
}
|
}
|
||||||
|
if err := n.Load((*enr.QUIC6)(&n.quic)); err != nil {
|
||||||
|
n.Load((*enr.QUIC)(&n.quic))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MustParse parses a node record or enode:// URL. It panics if the input is invalid.
|
// MustParse parses a node record or enode:// URL. It panics if the input is invalid.
|
||||||
|
|
@ -184,6 +189,11 @@ func (n *Node) TCP() int {
|
||||||
return int(n.tcp)
|
return int(n.tcp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QUIC returns the QUIC port of the node.
|
||||||
|
func (n *Node) QUIC() int {
|
||||||
|
return int(n.quic)
|
||||||
|
}
|
||||||
|
|
||||||
// UDPEndpoint returns the announced UDP endpoint.
|
// UDPEndpoint returns the announced UDP endpoint.
|
||||||
func (n *Node) UDPEndpoint() (netip.AddrPort, bool) {
|
func (n *Node) UDPEndpoint() (netip.AddrPort, bool) {
|
||||||
if !n.ip.IsValid() || n.ip.IsUnspecified() || n.udp == 0 {
|
if !n.ip.IsValid() || n.ip.IsUnspecified() || n.udp == 0 {
|
||||||
|
|
@ -200,6 +210,14 @@ func (n *Node) TCPEndpoint() (netip.AddrPort, bool) {
|
||||||
return netip.AddrPortFrom(n.ip, n.tcp), true
|
return netip.AddrPortFrom(n.ip, n.tcp), true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// QUICEndpoint returns the announced QUIC endpoint.
|
||||||
|
func (n *Node) QUICEndpoint() (netip.AddrPort, bool) {
|
||||||
|
if !n.ip.IsValid() || n.ip.IsUnspecified() || n.quic == 0 {
|
||||||
|
return netip.AddrPort{}, false
|
||||||
|
}
|
||||||
|
return netip.AddrPortFrom(n.ip, n.quic), true
|
||||||
|
}
|
||||||
|
|
||||||
// Pubkey returns the secp256k1 public key of the node, if present.
|
// Pubkey returns the secp256k1 public key of the node, if present.
|
||||||
func (n *Node) Pubkey() *ecdsa.PublicKey {
|
func (n *Node) Pubkey() *ecdsa.PublicKey {
|
||||||
var key ecdsa.PublicKey
|
var key ecdsa.PublicKey
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ func TestNodeEndpoints(t *testing.T) {
|
||||||
wantIP netip.Addr
|
wantIP netip.Addr
|
||||||
wantUDP int
|
wantUDP int
|
||||||
wantTCP int
|
wantTCP int
|
||||||
|
wantQUIC int
|
||||||
}
|
}
|
||||||
tests := []endpointTest{
|
tests := []endpointTest{
|
||||||
{
|
{
|
||||||
|
|
@ -98,6 +99,14 @@ func TestNodeEndpoints(t *testing.T) {
|
||||||
return SignNull(&r, id)
|
return SignNull(&r, id)
|
||||||
}(),
|
}(),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "quic-only",
|
||||||
|
node: func() *Node {
|
||||||
|
var r enr.Record
|
||||||
|
r.Set(enr.QUIC(9000))
|
||||||
|
return SignNull(&r, id)
|
||||||
|
}(),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "ipv4-only-loopback",
|
name: "ipv4-only-loopback",
|
||||||
node: func() *Node {
|
node: func() *Node {
|
||||||
|
|
@ -222,6 +231,9 @@ func TestNodeEndpoints(t *testing.T) {
|
||||||
if test.wantTCP != test.node.TCP() {
|
if test.wantTCP != test.node.TCP() {
|
||||||
t.Errorf("node has wrong TCP port %d, want %d", test.node.TCP(), test.wantTCP)
|
t.Errorf("node has wrong TCP port %d, want %d", test.node.TCP(), test.wantTCP)
|
||||||
}
|
}
|
||||||
|
if test.wantQUIC != test.node.QUIC() {
|
||||||
|
t.Errorf("node has wrong QUIC port %d, want %d", test.node.QUIC(), test.wantQUIC)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -77,6 +77,16 @@ type UDP6 uint16
|
||||||
|
|
||||||
func (v UDP6) ENRKey() string { return "udp6" }
|
func (v UDP6) ENRKey() string { return "udp6" }
|
||||||
|
|
||||||
|
// QUIC is the "quic" key, which holds the QUIC port of the node.
|
||||||
|
type QUIC uint16
|
||||||
|
|
||||||
|
func (v QUIC) ENRKey() string { return "quic" }
|
||||||
|
|
||||||
|
// QUIC6 is the "quic6" key, which holds the IPv6-specific quic6 port of the node.
|
||||||
|
type QUIC6 uint16
|
||||||
|
|
||||||
|
func (v QUIC6) ENRKey() string { return "quic6" }
|
||||||
|
|
||||||
// ID is the "id" key, which holds the name of the identity scheme.
|
// ID is the "id" key, which holds the name of the identity scheme.
|
||||||
type ID string
|
type ID string
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue