mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-07-08 13:52:32 +00:00

* [NOD-510] Change coinbase flags to kaspad. * [NOD-510] Removed superfluous spaces after periods in comments. * [NOD-510] Rename btcd -> kaspad in the root folder. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Rename BtcEncode -> KaspaEncode and BtcDecode -> KaspaDecode. * [NOD-510] Continue renaming btcd -> kaspad. * [NOD-510] Rename btcjson -> kaspajson. * [NOD-510] Rename file names inside kaspajson. * [NOD-510] Rename kaspajson -> jsonrpc. * [NOD-510] Finish renaming in addrmgr. * [NOD-510] Rename package btcec to ecc. * [NOD-510] Finish renaming stuff in blockdag. * [NOD-510] Rename stuff in cmd. * [NOD-510] Rename stuff in config. * [NOD-510] Rename stuff in connmgr. * [NOD-510] Rename stuff in dagconfig. * [NOD-510] Rename stuff in database. * [NOD-510] Rename stuff in docker. * [NOD-510] Rename stuff in integration. * [NOD-510] Rename jsonrpc to rpcmodel. * [NOD-510] Rename stuff in limits. * [NOD-510] Rename stuff in logger. * [NOD-510] Rename stuff in mempool. * [NOD-510] Rename stuff in mining. * [NOD-510] Rename stuff in netsync. * [NOD-510] Rename stuff in peer. * [NOD-510] Rename stuff in release. * [NOD-510] Rename stuff in rpcclient. * [NOD-510] Rename stuff in server. * [NOD-510] Rename stuff in signal. * [NOD-510] Rename stuff in txscript. * [NOD-510] Rename stuff in util. * [NOD-510] Rename stuff in wire. * [NOD-510] Fix failing tests. * [NOD-510] Fix merge errors. * [NOD-510] Fix go vet errors. * [NOD-510] Remove merged file that's no longer relevant. * [NOD-510] Add a comment above Op0. * [NOD-510] Fix some comments referencing Bitcoin Core. * [NOD-510] Fix some more comments referencing Bitcoin Core. * [NOD-510] Fix bitcoin -> kaspa. * [NOD-510] Fix more bitcoin -> kaspa. * [NOD-510] Fix comments, remove DisconnectBlock in addrindex. * [NOD-510] Rename KSPD to KASD. * [NOD-510] Fix comments and user agent.
39 lines
1.9 KiB
Go
39 lines
1.9 KiB
Go
// Copyright (c) 2014 The btcsuite developers
|
|
// Use of this source code is governed by an ISC
|
|
// license that can be found in the LICENSE file.
|
|
|
|
/*
|
|
Package addrmgr implements concurrency safe Kaspa address manager.
|
|
|
|
Address Manager Overview
|
|
|
|
In order maintain the peer-to-peer Kaspa network, there needs to be a source
|
|
of addresses to connect to as nodes come and go. The Kaspa protocol provides
|
|
the getaddr and addr messages to allow peers to communicate known addresses with
|
|
each other. However, there needs to a mechanism to store those results and
|
|
select peers from them. It is also important to note that remote peers can't
|
|
be trusted to send valid peers nor attempt to provide you with only peers they
|
|
control with malicious intent.
|
|
|
|
With that in mind, this package provides a concurrency safe address manager for
|
|
caching and selecting peers in a non-deterministic manner. The general idea is
|
|
the caller adds addresses to the address manager and notifies it when addresses
|
|
are connected, known good, and attempted. The caller also requests addresses as
|
|
it needs them.
|
|
|
|
The address manager internally segregates the addresses into groups and
|
|
non-deterministically selects groups in a cryptographically random manner. This
|
|
reduce the chances multiple addresses from the same nets are selected which
|
|
generally helps provide greater peer diversity, and perhaps more importantly,
|
|
drastically reduces the chances an attacker is able to coerce your peer into
|
|
only connecting to nodes they control.
|
|
|
|
The address manager also understands routability and Tor addresses and tries
|
|
hard to only return routable addresses. In addition, it uses the information
|
|
provided by the caller about connected, known good, and attempted addresses to
|
|
periodically purge peers which no longer appear to be good peers as well as
|
|
bias the selection toward known good peers. The general idea is to make a best
|
|
effort at only providing usable addresses.
|
|
*/
|
|
package addrmgr
|