libp2p
    Preparing search index...

    Module @libp2p/kad-dht

    This module implements the libp2p Kademlia spec in TypeScript.

    The Kademlia DHT allow for several operations such as finding peers, searching for providers of DHT records, etc.

    import { kadDHT } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    dht: kadDHT({
    // DHT options
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    The Amino DHT is a public-good DHT used by IPFS to fetch content, find peers, etc.

    If you are trying to access content on the public internet, this is the implementation you want.

    import { kadDHT, removePrivateAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    aminoDHT: kadDHT({
    protocol: '/ipfs/kad/1.0.0',
    peerInfoMapper: removePrivateAddressesMapper
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    This DHT only works with privately dialable peers.

    This is for use when peers are on the local area network.

    import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    lanDHT: kadDHT({
    protocol: '/ipfs/lan/kad/1.0.0',
    peerInfoMapper: removePublicAddressesMapper,
    clientMode: false
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    When using multiple DHTs, you should specify distinct datastore, metrics and log prefixes to ensure that data is kept separate for each instance.

    import { kadDHT, removePublicAddressesMapper, removePrivateAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    lanDHT: kadDHT({
    protocol: '/ipfs/lan/kad/1.0.0',
    peerInfoMapper: removePublicAddressesMapper,
    clientMode: false,
    logPrefix: 'libp2p:dht-lan',
    datastorePrefix: '/dht-lan',
    metricsPrefix: 'libp2p_dht_lan'
    }),
    aminoDHT: kadDHT({
    protocol: '/ipfs/kad/1.0.0',
    peerInfoMapper: removePrivateAddressesMapper,
    logPrefix: 'libp2p:dht-amino',
    datastorePrefix: '/dht-amino',
    metricsPrefix: 'libp2p_dht_amino'
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    @libp2p/kad-dht

    libp2p.io Discuss codecov CI

    JavaScript implementation of the Kad-DHT for libp2p

    About

    This module implements the libp2p Kademlia spec in TypeScript.

    The Kademlia DHT allow for several operations such as finding peers, searching for providers of DHT records, etc.

    import { kadDHT } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    dht: kadDHT({
    // DHT options
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    The Amino DHT is a public-good DHT used by IPFS to fetch content, find peers, etc.

    If you are trying to access content on the public internet, this is the implementation you want.

    import { kadDHT, removePrivateAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    aminoDHT: kadDHT({
    protocol: '/ipfs/kad/1.0.0',
    peerInfoMapper: removePrivateAddressesMapper
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    This DHT only works with privately dialable peers.

    This is for use when peers are on the local area network.

    import { kadDHT, removePublicAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    lanDHT: kadDHT({
    protocol: '/ipfs/lan/kad/1.0.0',
    peerInfoMapper: removePublicAddressesMapper,
    clientMode: false
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    When using multiple DHTs, you should specify distinct datastore, metrics and log prefixes to ensure that data is kept separate for each instance.

    import { kadDHT, removePublicAddressesMapper, removePrivateAddressesMapper } from '@libp2p/kad-dht'
    import { createLibp2p } from 'libp2p'
    import { peerIdFromString } from '@libp2p/peer-id'
    import { ping } from '@libp2p/ping'
    import { identify } from '@libp2p/identify'

    const node = await createLibp2p({
    services: {
    lanDHT: kadDHT({
    protocol: '/ipfs/lan/kad/1.0.0',
    peerInfoMapper: removePublicAddressesMapper,
    clientMode: false,
    logPrefix: 'libp2p:dht-lan',
    datastorePrefix: '/dht-lan',
    metricsPrefix: 'libp2p_dht_lan'
    }),
    aminoDHT: kadDHT({
    protocol: '/ipfs/kad/1.0.0',
    peerInfoMapper: removePrivateAddressesMapper,
    logPrefix: 'libp2p:dht-amino',
    datastorePrefix: '/dht-amino',
    metricsPrefix: 'libp2p_dht_amino'
    }),
    ping: ping(),
    identify: identify()
    }
    })

    const peerId = peerIdFromString('QmFoo')
    const peerInfo = await node.peerRouting.findPeer(peerId)

    console.info(peerInfo) // peer id, multiaddrs

    Install

    $ npm i @libp2p/kad-dht
    

    Loading this module through a script tag will make its exports available as Libp2pKadDht in the global namespace.

    <script src="https://unpkg.com/@libp2p/kad-dht/dist/index.min.js"></script>
    

    API Docs

    License

    Licensed under either of

    Contribution

    Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

    Namespaces

    MessageType

    Enumerations

    EventTypes
    MessageType

    Classes

    Record

    Interfaces

    AddPeerEvent
    DHTRecord
    DialPeerEvent
    DisjointPath
    FinalPeerEvent
    KadDHT
    KadDHTComponents
    KadDHTInit
    PathEndedEvent
    PeerInfoMapper
    PeerResponseEvent
    ProviderEvent
    ProvidersInit
    QueryErrorEvent
    ReProvideInit
    RoutingTable
    SelectFn
    SendQueryEvent
    SingleKadDHT
    ValidateFn
    ValueEvent

    Type Aliases

    DHTProgressEvents
    MessageName
    QueryEvent
    Selectors
    Validators

    Functions

    kadDHT
    passthroughMapper
    removePrivateAddressesMapper
    removePublicAddressesMapper