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.

    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

    View Source
    const MaxRecordAge = time.Hour * 36

      MaxRecordAge specifies the maximum time that any node will hold onto a record from the time its received. This does not apply to any other forms of validity that the record may contain. For example, a record may contain an ipns entry with an EOL saying its valid until the year 2020 (a great time in the future). For that record to stick around it must be rebroadcasted more frequently than once every 'MaxRecordAge'

      View Source
      const NumBootstrapQueries = 5

        NumBootstrapQueries defines the number of random dht queries to do to collect members of the routing table.

        Variables

        View Source
        var AlphaValue = 3

          Alpha is the concurrency factor for asynchronous requests.

          View Source
          var CloserPeerCount = KValue

            The number of closer peers to send on requests.

            View Source
            var DefaultBootstrapConfig = BootstrapConfig{
            
            	Queries: 1,
            
            	Period: time.Duration(5 * time.Minute),
            
            	Timeout: time.Duration(10 * time.Second),
            }
            View Source
            var ErrReadTimeout = fmt.Errorf("timed out reading response")
            View Source
            var KValue = 20

              K is the maximum number of requests to perform before returning failure.

              View Source
              var PoolSize = 6

                Pool size is the number of nodes used for group find/set RPC calls

                View Source
                var ProtocolDHT protocol.ID = "/ipfs/dht"

                Functions

                This section is empty.

                Types

                type BootstrapConfig

                type BootstrapConfig struct {
                	Queries int           // how many queries to run per period
                	Period  time.Duration // how often to run periodi cbootstrap.
                	Timeout time.Duration // how long to wait for a bootstrao query to run
                }

                  BootstrapConfig specifies parameters used bootstrapping the DHT.

                  Note there is a tradeoff between the bootstrap period and the number of queries. We could support a higher period with less queries.

                  type IpfsDHT

                  type IpfsDHT struct {
                  	Validator record.Validator // record validator funcs
                  	Selector  record.Selector  // record selection funcs
                  	// 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 NewDHT

                    func NewDHT(ctx context.Context, h host.Host, dstore ds.Batching) *IpfsDHT

                      NewDHT creates a new DHT object with the given peer as the 'local' host

                      func (*IpfsDHT) Bootstrap

                      func (dht *IpfsDHT) Bootstrap(ctx context.Context) error

                        Bootstrap ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.

                        As opposed to BootstrapWithConfig, Bootstrap satisfies the routing interface

                        func (*IpfsDHT) BootstrapOnSignal

                        func (dht *IpfsDHT) BootstrapOnSignal(cfg BootstrapConfig, signal <-chan time.Time) (goprocess.Process, error)

                          SignalBootstrap ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.

                          SignalBootstrap returns a process, so the user can stop it.

                          func (*IpfsDHT) BootstrapWithConfig

                          func (dht *IpfsDHT) BootstrapWithConfig(config BootstrapConfig) (goprocess.Process, error)

                            BootstrapWithConfig ensures the dht routing table remains healthy as peers come and go. it builds up a list of peers by requesting random peer IDs. The Bootstrap process will run a number of queries each time, and run every time signal fires. These parameters are configurable.

                            BootstrapWithConfig returns a process, so the user can stop it.

                            func (*IpfsDHT) Close

                            func (dht *IpfsDHT) Close() error

                              Close calls Process Close

                              func (*IpfsDHT) Context

                              func (dht *IpfsDHT) Context() context.Context

                                Context return dht's context

                                func (*IpfsDHT) FindLocal

                                func (dht *IpfsDHT) FindLocal(id peer.ID) pstore.PeerInfo

                                  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) FindPeer

                                  func (dht *IpfsDHT) FindPeer(ctx context.Context, id peer.ID) (pstore.PeerInfo, error)

                                    FindPeer searches for a peer with given ID.

                                    func (*IpfsDHT) FindPeersConnectedToPeer

                                    func (dht *IpfsDHT) FindPeersConnectedToPeer(ctx context.Context, id peer.ID) (<-chan pstore.PeerInfo, error)

                                      FindPeersConnectedToPeer searches for peers directly connected to a given peer.

                                      func (*IpfsDHT) FindProviders

                                      func (dht *IpfsDHT) FindProviders(ctx context.Context, key key.Key) ([]pstore.PeerInfo, error)

                                        FindProviders searches until the context expires.

                                        func (*IpfsDHT) FindProvidersAsync

                                        func (dht *IpfsDHT) FindProvidersAsync(ctx context.Context, key key.Key, count int) <-chan pstore.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) GetClosestPeers

                                          func (dht *IpfsDHT) GetClosestPeers(ctx context.Context, key key.Key) (<-chan peer.ID, error)

                                            Kademlia 'node lookup' operation. Returns a channel of the K closest peers to the given key

                                            func (*IpfsDHT) GetPublicKey

                                            func (dht *IpfsDHT) GetPublicKey(ctx context.Context, p peer.ID) (ci.PubKey, error)

                                            func (*IpfsDHT) GetValue

                                            func (dht *IpfsDHT) GetValue(ctx context.Context, key key.Key) ([]byte, error)

                                              GetValue searches for the value corresponding to given Key.

                                              func (*IpfsDHT) GetValues

                                              func (dht *IpfsDHT) GetValues(ctx context.Context, key key.Key, nvals int) ([]routing.RecvdVal, error)

                                              func (*IpfsDHT) Process

                                              func (dht *IpfsDHT) Process() goprocess.Process

                                                Process return dht's process

                                                func (*IpfsDHT) Provide

                                                func (dht *IpfsDHT) Provide(ctx context.Context, key key.Key) error

                                                  Provide makes this node announce that it can provide a value for the given key

                                                  func (*IpfsDHT) PutValue

                                                  func (dht *IpfsDHT) PutValue(ctx context.Context, key key.Key, value []byte) error

                                                    PutValue adds value corresponding to given Key. This is the top level "Store" operation of the DHT

                                                    func (*IpfsDHT) Update

                                                    func (dht *IpfsDHT) Update(ctx context.Context, p peer.ID)

                                                      Update signals the routingTable to Update its last-seen status on the given peer.

                                                      Directories

                                                      Path Synopsis
                                                      Package dht_pb is a generated protocol buffer package.
                                                      Package dht_pb is a generated protocol buffer package.