mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-03-30 15:08:33 +00:00

* [NOD-1079] Fix block rejects over "Already have block" (#783) * [NOD-1079] Return regular error instead of ruleError on already-have-block in ProcessBlock. * [NOD-1079] Fix bad implementation of IsSelectedTipKnown. * [NOD-1079] In shouldQueryPeerSelectedTips use selected DAG tip timestamp instead of past median time. * [NOD-1079] Remove redundant (and possibly buggy) clearing of sm.requestedBlocks. * [NOD-684] change simnet block rate to block per ms (#782) * [NOD-684] Get rid of dag.targetTimePerBlock and use finality duration in dag params * [NOD-684] Fix regtest genesis block * [NOD-684] Set simnet's TargetTimePerBlock to 1ms * [NOD-684] Shorten simnet finality duration * [NOD-684] Change isDAGCurrentMaxDiff to be written as number of blocks * [NOD-684] Fix NextBlockMinimumTime to be add one millisecond after past median time * [NOD-1004] Make AddrManager.getAddress use only 1 loop to check all address chances and pick one of them (#741) * [NOD-1004] Remove code duplication in Good(). * [NOD-1004] Remove some more code duplication in Good(). * [NOD-1004] Remove some more code duplication in Good(). * [NOD-1004] Remove code duplication in GetAddress(). * [NOD-1004] Remove code duplication in updateAddress. * [NOD-1004] Remove some more code duplication in updateAddress. * [NOD-1004] Remove redundant check in expireNew. * [NOD-1004] Remove superfluous existence check from updateAddress. * [NOD-1004] Make triedBucket use a slice instead of a list. * [NOD-1004] Remove code duplication in getAddress. * [NOD-1004] Remove infinite loops out of getAddress. * [NOD-1004] Made impossible branch panic. * [NOD-1004] Remove a mystery comment. * [NOD-1004] Remove an unnecessary sort. * [NOD-1004] Make AddressKey a type alias. * [NOD-1004] Added comment for AddressKey * [NOD-1004] Fix merge errors. * [NOD-1004] Fix merge errors. * [NOD-1004] Do some renaming. * [NOD-1004] Do some more renaming. * [NOD-1004] Rename AddrManager to AddressManager. * [NOD-1004] Rename AddrManager to AddressManager. * [NOD-1004] Do some more renaming. * [NOD-1004] Rename bucket to addressBucketArray. * [NOD-1004] Fix a comment. * [NOD-1004] Rename na to netAddress. * [NOD-1004] Bring back an existence check. * [NOD-1004] Fix an error message. * [NOD-1004] Fix a comment. * [NOD-1004] Use a boolean instead of -1. * [NOD-1004] Use a boolean instead of -1 in another place. Co-authored-by: Mike Zak <feanorr@gmail.com> * Fix merge errors. Co-authored-by: Ori Newman <orinewman1@gmail.com> Co-authored-by: Mike Zak <feanorr@gmail.com>
35 lines
1.8 KiB
Go
35 lines
1.8 KiB
Go
/*
|
|
Package addressmanager 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 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 addressmanager
|