multiaddr implementation (binary + string representation of network addresses)
A standard way to represent addresses that
- support any standard network protocol
- are self-describing
- have a binary packed format
- have a nice string representation
- encapsulate well
import{multiaddr}from'@multiformats/multiaddr'constaddr=multiaddr("/ip4/127.0.0.1/udp/1234")// Multiaddr(/ip4/127.0.0.1/udp/1234)constaddr=multiaddr("/ip4/127.0.0.1/udp/1234")// Multiaddr(/ip4/127.0.0.1/udp/1234)addr.bytes// <Uint8Array 04 7f 00 00 01 11 04 d2>addr.toString()// '/ip4/127.0.0.1/udp/1234'addr.protos()// [// {code: 4, name: 'ip4', size: 32},// {code: 273, name: 'udp', size: 16}// ]// gives you an object that is friendly with what Node.js core modules expect for addressesaddr.nodeAddress()// {// family: 4,// port: 1234,// address: "127.0.0.1"// }addr.encapsulate('/sctp/5678')// Multiaddr(/ip4/127.0.0.1/udp/1234/sctp/5678)DNSADDR is a spec that allows storing a TXT DNS record that contains a Multiaddr.
To resolve DNSADDR addresses, call the .resolve() function the multiaddr, optionally passing a DNS resolver.
DNSADDR addresses can resolve to multiple multiaddrs, since there is no limit to the number of TXT records that can be stored.
import{multiaddr,resolvers}from'@multiformats/multiaddr'import{dnsaddr}from'@multiformats/multiaddr/resolvers'resolvers.set('dnsaddr',dnsaddr)constma=multiaddr('/dnsaddr/bootstrap.libp2p.io')// resolve with a 5s timeoutconstresolved=awaitma.resolve({signal: AbortSignal.timeout(5000)})console.info(awaitma.resolve(resolved)// [Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...')...]See the docs for @multiformats/dns for a full breakdown of how to specify multiple resolvers or resolvers that can be used for specific TLDs.
import{multiaddr}from'@multiformats/multiaddr'import{dns}from'@multiformats/dns'import{dnsJsonOverHttps}from'@multiformats/dns/resolvers'constresolver=dns({'.': dnsJsonOverHttps('https://cloudflare-dns.com/dns-query')})constma=multiaddr('/dnsaddr/bootstrap.libp2p.io')constresolved=awaitma.resolve({dns: resolver})console.info(resolved)// [Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...'), Multiaddr('/ip4/147.75...')...]$ npm i @multiformats/multiaddrLoading this module through a script tag will make it's exports available as MultiformatsMultiaddr in the global namespace.
<scriptsrc="https://unpkg.com/@multiformats/multiaddr/dist/index.min.js"></script>Licensed under either of
- Apache 2.0, (LICENSE-APACHE / http://www.apache.org/licenses/LICENSE-2.0)
- MIT (LICENSE-MIT / http://opensource.org/licenses/MIT)
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.