Documentation
¶
Overview ¶
Package dht implements a distributed hash table that satisfies the ipfs routing interface. This DHT is modeled after kademlia with Coral and S/Kademlia modifications.
Index ¶
- Constants
- Variables
- func KeyForPublicKey(id peer.ID) u.Key
- func RecordBlobForSig(r *pb.Record) []byte
- func ValidatePublicKeyRecord(k u.Key, val []byte) error
- type IpfsDHT
- func (dht *IpfsDHT) Bootstrap(ctx context.Context, queries int) error
- func (dht *IpfsDHT) Connect(ctx context.Context, npeer peer.ID) error
- func (dht *IpfsDHT) FindLocal(id peer.ID) peer.PeerInfo
- func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (peer.PeerInfo, error)
- func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan peer.PeerInfo, error)
- func (dht *IpfsDHT) FindProviders(ctx context.Context, key u.Key) ([]peer.PeerInfo, error)
- func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key u.Key, count int) <-chan peer.PeerInfo
- func (dht *IpfsDHT) GetValue(ctx context.Context, key u.Key) ([]byte, error)
- func (dht *IpfsDHT) LocalPeer() peer.ID
- func (dht *IpfsDHT) Ping(ctx context.Context, p peer.ID) (time.Duration, error)
- func (dht *IpfsDHT) PingRoutine(t time.Duration)
- func (dht *IpfsDHT) Provide(ctx context.Context, key u.Key) error
- func (dht *IpfsDHT) PutValue(ctx context.Context, key u.Key, value []byte) error
- func (dht *IpfsDHT) Update(ctx context.Context, p peer.ID)
- type ProviderManager
- type ValidatorFunc
Constants ¶
const NumBootstrapQueries = 5
NumBootstrapQueries defines the number of random dht queries to do to collect members of the routing table.
Variables ¶
var AlphaValue = 3
Alpha is the concurrency factor for asynchronous requests.
var CloserPeerCount = 4
The number of closer peers to send on requests.
var ErrBadRecord = errors.New("bad dht record")
ErrBadRecord is returned any time a dht record is found to be incorrectly formatted or signed.
var ErrInvalidRecordType = errors.New("invalid record keytype")
ErrInvalidRecordType is returned if a DHTRecord keys prefix is not found in the Validator map of the DHT.
var KValue = 10
K is the maximum number of requests to perform before returning failure.
var PoolSize = 6
Pool size is the number of nodes used for group find/set RPC calls
var ProtocolDHT protocol.ID = "/ipfs/dht"
Functions ¶
func KeyForPublicKey ¶
KeyForPublicKey returns the key used to retrieve public keys from the dht.
func RecordBlobForSig ¶
RecordBlobForSig returns the blob protected by the record signature
Types ¶
type IpfsDHT ¶
type IpfsDHT struct { // record validator funcs Validators map[string]ValidatorFunc ctxgroup.ContextGroup // contains filtered or unexported fields }
IpfsDHT is an implementation of Kademlia with Coral and S/Kademlia modifications. It is used to implement the base IpfsRouting module.
func (*IpfsDHT) Connect ¶
Connect to a new peer at the given address, ping and add to the routing table
func (*IpfsDHT) FindLocal ¶
FindLocal looks for a peer with a given ID connected to this dht and returns the peer and the table it was found in.
func (*IpfsDHT) FindPeersConnectedToPeer ¶
func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan peer.PeerInfo, error)
FindPeersConnectedToPeer searches for peers directly connected to a given peer.
func (*IpfsDHT) FindProviders ¶
FindProviders searches until the context expires.
func (*IpfsDHT) FindProvidersAsync ¶
func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key u.Key, count int) <-chan peer.PeerInfo
FindProvidersAsync is the same thing as FindProviders, but returns a channel. Peers will be returned on the channel as soon as they are found, even before the search query completes.
func (*IpfsDHT) GetValue ¶
GetValue searches for the value corresponding to given Key. If the search does not succeed, a multiaddr string of a closer peer is returned along with util.ErrSearchIncomplete
func (*IpfsDHT) PingRoutine ¶
PingRoutine periodically pings nearest neighbors.
func (*IpfsDHT) Provide ¶
Provide makes this node announce that it can provide a value for the given key
type ProviderManager ¶
type ProviderManager struct { ctxgroup.ContextGroup // contains filtered or unexported fields }
func NewProviderManager ¶
func NewProviderManager(ctx context.Context, local peer.ID) *ProviderManager
func (*ProviderManager) AddProvider ¶
func (pm *ProviderManager) AddProvider(k u.Key, val peer.ID)
func (*ProviderManager) GetLocal ¶
func (pm *ProviderManager) GetLocal() []u.Key