Skip to content

Commit 563e256

Browse files
feat(SPV-742): adjust to some comments
1 parent 0439f2f commit 563e256

File tree

6 files changed

+94
-153
lines changed

6 files changed

+94
-153
lines changed

config/defaults.go

-2
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,6 @@ func getP2PDefaults() *P2PConfig {
7272
UserAgentName: ApplicationName,
7373
UserAgentVersion: Version(),
7474
Experimental: false,
75-
MaxOutboundConnections: 8,
76-
MaxInboundConnections: 8,
7775
}
7876
}
7977

internal/transports/p2p/network/address_book.go

+16-13
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
"github.com/bitcoin-sv/block-headers-service/internal/transports/p2p/peer"
1010
"github.com/bitcoin-sv/block-headers-service/internal/wire"
11+
"golang.org/x/exp/maps"
1112
)
1213

1314
// AddressBook represents a collection of known network addresses.
@@ -16,11 +17,11 @@ type AddressBook struct {
1617
addrs []*knownAddress // addrs is a slice containing known addresses
1718
addrsLookup map[string]int // addrLookup is a map for fast lookup of addresses, maps address key to index in addrs slice
1819
mu sync.Mutex
19-
addrFitlerFn func(*wire.NetAddress) bool
20+
addrFilterFn func(*wire.NetAddress) bool
2021
}
2122

2223
// NewAddressBook creates and initializes a new AddressBook instance.
23-
func NewAdressBook(banDuration time.Duration, acceptLocalAddresses bool) *AddressBook {
24+
func NewAddressBook(banDuration time.Duration, acceptLocalAddresses bool) *AddressBook {
2425
// Set the address filter function based on whether local addresses are accepted
2526
addrFitlerFn := IsRoutable
2627
if acceptLocalAddresses {
@@ -32,7 +33,7 @@ func NewAdressBook(banDuration time.Duration, acceptLocalAddresses bool) *Addres
3233
addrs: make([]*knownAddress, 0, addressesInitCapacity),
3334
addrsLookup: make(map[string]int, addressesInitCapacity),
3435
banDuration: banDuration,
35-
addrFitlerFn: addrFitlerFn,
36+
addrFilterFn: addrFitlerFn,
3637
}
3738
}
3839

@@ -42,12 +43,12 @@ func (a *AddressBook) UpsertPeerAddr(p *peer.Peer) {
4243
defer a.mu.Unlock()
4344

4445
pa := p.GetPeerAddr()
45-
key, ka := a.internalFind(pa)
46+
key, ka := a.findAddr(pa)
4647

4748
if ka != nil {
4849
ka.peer = p
4950
} else {
50-
a.internalAddAddr(key, &knownAddress{addr: pa, peer: p})
51+
a.addAddr(key, &knownAddress{addr: pa, peer: p})
5152
}
5253
}
5354

@@ -57,14 +58,14 @@ func (a *AddressBook) UpsertAddrs(address []*wire.NetAddress) {
5758
defer a.mu.Unlock()
5859

5960
for _, addr := range address {
60-
if !a.addrFitlerFn(addr) {
61+
if !a.addrFilterFn(addr) {
6162
continue
6263
}
6364

64-
key, ka := a.internalFind(addr)
65+
key, ka := a.findAddr(addr)
6566
// If the address is not found, add it to the AddressBook.
6667
if ka == nil {
67-
a.internalAddAddr(key, &knownAddress{addr: addr})
68+
a.addAddr(key, &knownAddress{addr: addr})
6869
} else if addr.Timestamp.After(ka.addr.Timestamp) {
6970
// Otherwise, update the timestamp if the new one is newer.
7071
ka.addr.Timestamp = addr.Timestamp
@@ -77,18 +78,20 @@ func (a *AddressBook) BanAddr(addr *wire.NetAddress) {
7778
a.mu.Lock()
7879
defer a.mu.Unlock()
7980

80-
_, ka := a.internalFind(addr)
81+
_, ka := a.findAddr(addr)
8182
if ka != nil {
8283
now := time.Now()
8384
ka.banTimestamp = &now
8485
}
8586
}
8687

87-
// GetRndUnusedAddr returns a randomly chosen unused network address.
88-
func (a *AddressBook) GetRndUnusedAddr(tries uint) *wire.NetAddress {
88+
// GetRandUnusedAddr returns a randomly chosen unused network address.
89+
func (a *AddressBook) GetRandUnusedAddr(tries uint) *wire.NetAddress {
8990
a.mu.Lock()
9091
defer a.mu.Unlock()
9192

93+
v := maps.Values(a.addrsLookup)
94+
9295
alen := len(a.addrs)
9396
for i := uint(0); i < tries; i++ {
9497
// #nosec G404
@@ -105,7 +108,7 @@ func (a *AddressBook) GetRndUnusedAddr(tries uint) *wire.NetAddress {
105108
return nil
106109
}
107110

108-
func (a *AddressBook) internalFind(addr *wire.NetAddress) (string, *knownAddress) {
111+
func (a *AddressBook) findAddr(addr *wire.NetAddress) (string, *knownAddress) {
109112
key := addrKey(addr)
110113
addrIndex, ok := a.addrsLookup[key]
111114

@@ -115,7 +118,7 @@ func (a *AddressBook) internalFind(addr *wire.NetAddress) (string, *knownAddress
115118
return key, nil
116119
}
117120

118-
func (a *AddressBook) internalAddAddr(key string, addr *knownAddress) {
121+
func (a *AddressBook) addAddr(key string, addr *knownAddress) {
119122
newItemIndex := len(a.addrs)
120123

121124
a.addrs = append(a.addrs, addr)

internal/transports/p2p/network/address_book_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
func TestAddressBook_UpsertAddrs(t *testing.T) {
1313
t.Run("add new - accept local", func(t *testing.T) {
1414
// given
15-
sut := NewAdressBook(0, true)
15+
sut := NewAddressBook(0, true)
1616
local := &wire.NetAddress{
1717
IP: net.IPv4(127, 0, 0, 1),
1818
Port: 8333,
@@ -34,7 +34,7 @@ func TestAddressBook_UpsertAddrs(t *testing.T) {
3434

3535
t.Run("add new - do not accept local", func(t *testing.T) {
3636
// given
37-
sut := NewAdressBook(0, false)
37+
sut := NewAddressBook(0, false)
3838
local := &wire.NetAddress{
3939
IP: net.IPv4(127, 0, 0, 1),
4040
Port: 8333,
@@ -56,7 +56,7 @@ func TestAddressBook_UpsertAddrs(t *testing.T) {
5656

5757
t.Run("add existing", func(t *testing.T) {
5858
// given
59-
sut := NewAdressBook(0, true)
59+
sut := NewAddressBook(0, true)
6060
addr := &wire.NetAddress{
6161
IP: net.IPv4(18, 199, 12, 185),
6262
Port: 8333,
@@ -82,7 +82,7 @@ func TestAddressBook_UpsertAddrs(t *testing.T) {
8282
func TestAddressBook_BanAddr(t *testing.T) {
8383
t.Run("ban address", func(t *testing.T) {
8484
// given
85-
sut := NewAdressBook(1, false)
85+
sut := NewAddressBook(1, false)
8686

8787
addr := &wire.NetAddress{
8888
IP: net.IPv4(18, 199, 12, 185),
@@ -100,10 +100,10 @@ func TestAddressBook_BanAddr(t *testing.T) {
100100
})
101101
}
102102

103-
func TestAddressBook_GetRndUnusedAddr(t *testing.T) {
104-
t.Run("", func(t *testing.T) {
103+
func TestAddressBook_GetRandUnusedAddr(t *testing.T) {
104+
t.Run("get random address", func(t *testing.T) {
105105
// given
106-
sut := NewAdressBook(time.Hour, false)
106+
sut := NewAddressBook(time.Hour, false)
107107

108108
addr := &wire.NetAddress{
109109
IP: net.IPv4(18, 199, 12, 186),
@@ -121,7 +121,7 @@ func TestAddressBook_GetRndUnusedAddr(t *testing.T) {
121121
sut.BanAddr(addr2)
122122

123123
// when
124-
r := sut.GetRndUnusedAddr(100)
124+
r := sut.GetRandUnusedAddr(100)
125125

126126
// then
127127
require.Equal(t, addr, r)

internal/transports/p2p/network/network.go

-52
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package network
66

77
import (
8-
"fmt"
98
"net"
109

1110
"github.com/bitcoin-sv/block-headers-service/internal/wire"
@@ -238,54 +237,3 @@ func IsRoutableWithLocal(na *wire.NetAddress) bool {
238237
IsRFC4843(na) || IsRFC5737(na) || IsRFC6598(na) ||
239238
(IsRFC4193(na) && !IsOnionCatTor(na)))
240239
}
241-
242-
// GroupKey returns a string representing the network group an address is part
243-
// of. This is the /16 for IPv4, the /32 (/36 for he.net) for IPv6, the string
244-
// "local" for a local address, the string "tor:key" where key is the /4 of the
245-
// onion address for Tor address, and the string "unroutable" for an unroutable
246-
// address.
247-
func GroupKey(na *wire.NetAddress) string {
248-
if IsLocal(na) {
249-
return "local"
250-
}
251-
if !IsRoutable(na) {
252-
return "unroutable"
253-
}
254-
if IsIPv4(na) {
255-
return na.IP.Mask(net.CIDRMask(16, 32)).String()
256-
}
257-
if IsRFC6145(na) || IsRFC6052(na) {
258-
// last four bytes are the ip address
259-
ip := na.IP[12:16]
260-
return ip.Mask(net.CIDRMask(16, 32)).String()
261-
}
262-
263-
if IsRFC3964(na) {
264-
ip := na.IP[2:6]
265-
return ip.Mask(net.CIDRMask(16, 32)).String()
266-
267-
}
268-
if IsRFC4380(na) {
269-
// teredo tunnels have the last 4 bytes as the v4 address XOR
270-
// 0xff.
271-
ip := net.IP(make([]byte, 4))
272-
for i, ipByte := range na.IP[12:16] {
273-
ip[i] = ipByte ^ 0xff
274-
}
275-
return ip.Mask(net.CIDRMask(16, 32)).String()
276-
}
277-
if IsOnionCatTor(na) {
278-
// group is keyed off the first 4 bits of the actual onion key.
279-
return fmt.Sprintf("tor:%d", na.IP[6]&((1<<4)-1))
280-
}
281-
282-
// OK, so now we know ourselves to be a IPv6 address.
283-
// bitcoind uses /32 for everything, except for Hurricane Electric's
284-
// (he.net) IP range, which it uses /36 for.
285-
bits := 32
286-
if heNet.Contains(na.IP) {
287-
bits = 36
288-
}
289-
290-
return na.IP.Mask(net.CIDRMask(bits, 128)).String()
291-
}

0 commit comments

Comments
 (0)