diff --git a/packages/interface/src/peer-store/index.ts b/packages/interface/src/peer-store/index.ts index ba0a683c57..c4255fdb5b 100644 --- a/packages/interface/src/peer-store/index.ts +++ b/packages/interface/src/peer-store/index.ts @@ -13,7 +13,17 @@ export interface Address { /** * Obtained from a signed peer record */ - isCertified: boolean + isCertified?: true + + /** + * A timestamp of the last successful dial of this multiaddr + */ + lastSuccess?: number + + /** + * A timestamp of the last unsuccessful dial of this multiaddr + */ + lastFailure?: number } /** diff --git a/packages/libp2p/src/connection-manager/dial-queue.ts b/packages/libp2p/src/connection-manager/dial-queue.ts index 280e677c02..618ed0efcd 100644 --- a/packages/libp2p/src/connection-manager/dial-queue.ts +++ b/packages/libp2p/src/connection-manager/dial-queue.ts @@ -172,8 +172,7 @@ export class DialQueue { const { peerId, multiaddrs } = getPeerAddress(peerIdOrMultiaddr) const addrs: Address[] = multiaddrs.map(multiaddr => ({ - multiaddr, - isCertified: false + multiaddr })) // create abort conditions - need to do this before `calculateMultiaddrs` as we may be about to @@ -357,8 +356,7 @@ export class DialQueue { } return result.map(multiaddr => ({ - multiaddr, - isCertified: false + multiaddr })) }) )) @@ -386,12 +384,6 @@ export class DialQueue { for (const addr of filteredAddrs) { const maStr = addr.multiaddr.toString() - const existing = dedupedAddrs.get(maStr) - - if (existing != null) { - existing.isCertified = existing.isCertified || addr.isCertified || false - continue - } dedupedAddrs.set(maStr, addr) } @@ -504,10 +496,25 @@ export class DialQueue { // update dial status pendingDial.status = 'active' - const conn = await this.transportManager.dial(addr, { - ...options, - signal - }) + let conn: Connection + + try { + conn = await this.transportManager.dial(addr, { + ...options, + signal + }) + + // mark multiaddr dial as successful + await this._updateAddressStatus(conn.remotePeer, addr, true) + } catch (err: any) { + if (pendingDial.peerId != null) { + // mark multiaddr dial as failure + await this._updateAddressStatus(pendingDial.peerId, addr, false) + } + + // rethrow error + throw err + } if (controller.signal.aborted) { // another dial succeeded faster than this one @@ -554,7 +561,9 @@ export class DialQueue { signal.clear() }) - return deferred.promise + const connection = await deferred.promise + + return connection })) // dial succeeded or failed @@ -577,6 +586,25 @@ export class DialQueue { throw err } } + + /** + * Record the last dial success/failure status of the passed multiaddr + */ + private async _updateAddressStatus (peerId: PeerId, multiaddr: Multiaddr, success: boolean): Promise { + const addr: Address = { + multiaddr + } + + if (success) { + addr.lastSuccess = Date.now() + } else { + addr.lastFailure = Date.now() + } + + await this.peerStore.merge(peerId, { + addresses: [addr] + }) + } } /** diff --git a/packages/libp2p/src/identify/identify.ts b/packages/libp2p/src/identify/identify.ts index ea5fbcf796..bca04a8ae4 100644 --- a/packages/libp2p/src/identify/identify.ts +++ b/packages/libp2p/src/identify/identify.ts @@ -411,7 +411,6 @@ export class DefaultIdentifyService implements Startable, IdentifyService { if (message.listenAddrs.length > 0) { peer.addresses = message.listenAddrs.map(buf => ({ - isCertified: false, multiaddr: multiaddr(buf) })) } diff --git a/packages/libp2p/test/connection-manager/direct.spec.ts b/packages/libp2p/test/connection-manager/direct.spec.ts index 305ae4e524..bb90e75d5c 100644 --- a/packages/libp2p/test/connection-manager/direct.spec.ts +++ b/packages/libp2p/test/connection-manager/direct.spec.ts @@ -212,7 +212,7 @@ describe('dialing (direct, WebSockets)', () => { await connectionManager.openConnection(remoteComponents.peerId) const sortedAddresses = peerMultiaddrs - .map((m) => ({ multiaddr: m, isCertified: false })) + .map((m) => ({ multiaddr: m })) .sort(defaultAddressSort) expect(localTMDialStub.getCall(0).args[0].equals(sortedAddresses[0].multiaddr)) diff --git a/packages/libp2p/test/content-routing/content-routing.node.ts b/packages/libp2p/test/content-routing/content-routing.node.ts index 66967667ea..a88048094c 100644 --- a/packages/libp2p/test/content-routing/content-routing.node.ts +++ b/packages/libp2p/test/content-routing/content-routing.node.ts @@ -269,7 +269,6 @@ describe('content-routing', () => { await drain(node.contentRouting.findProviders(CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB'))) await expect(node.peerStore.get(providerPeerId)).to.eventually.have.property('addresses').that.deep.include({ - isCertified: false, multiaddr: result.multiaddrs[0] }) }) @@ -376,10 +375,8 @@ describe('content-routing', () => { await drain(node.contentRouting.findProviders(CID.parse('QmU621oD8AhHw6t25vVyfYKmL9VV3PTgc52FngEhTGACFB'))) await expect(node.peerStore.get(providerPeerId)).to.eventually.have.property('addresses').that.deep.include({ - isCertified: false, multiaddr: result1.multiaddrs[0] }).and.to.deep.include({ - isCertified: false, multiaddr: result2.multiaddrs[0] }) }) diff --git a/packages/libp2p/test/identify/index.spec.ts b/packages/libp2p/test/identify/index.spec.ts index ee64e175bd..b069d86137 100644 --- a/packages/libp2p/test/identify/index.spec.ts +++ b/packages/libp2p/test/identify/index.spec.ts @@ -448,7 +448,6 @@ describe('identify', () => { expect(peer.metadata.get('ProtocolVersion')).to.equalBytes(uint8ArrayFromString(message.protocolVersion)) expect(peer.protocols).to.deep.equal(message.protocols) expect(peer.addresses).to.deep.equal([{ - isCertified: false, multiaddr: multiaddr('/ip4/127.0.0.1/tcp/1234') }]) expect(peer.id.publicKey).to.equalBytes(remoteComponents.peerId.publicKey) diff --git a/packages/peer-store/src/pb/peer.proto b/packages/peer-store/src/pb/peer.proto index 01c3be1990..474153fdd9 100644 --- a/packages/peer-store/src/pb/peer.proto +++ b/packages/peer-store/src/pb/peer.proto @@ -26,6 +26,12 @@ message Address { // Flag to indicate if the address comes from a certified source optional bool isCertified = 2; + + // ms timestamp when we last succesfully dialed this address + optional uint64 lastSuccess = 3; + + // ms timestamp when we last failed to dial this address + optional uint64 lastFailure = 4; } message Tag { diff --git a/packages/peer-store/src/pb/peer.ts b/packages/peer-store/src/pb/peer.ts index 9ceb63f5ee..70ab8dd766 100644 --- a/packages/peer-store/src/pb/peer.ts +++ b/packages/peer-store/src/pb/peer.ts @@ -264,6 +264,8 @@ export namespace Peer { export interface Address { multiaddr: Uint8Array isCertified?: boolean + lastSuccess?: bigint + lastFailure?: bigint } export namespace Address { @@ -286,6 +288,16 @@ export namespace Address { w.bool(obj.isCertified) } + if (obj.lastSuccess != null) { + w.uint32(24) + w.uint64(obj.lastSuccess) + } + + if (obj.lastFailure != null) { + w.uint32(32) + w.uint64(obj.lastFailure) + } + if (opts.lengthDelimited !== false) { w.ldelim() } @@ -306,6 +318,12 @@ export namespace Address { case 2: obj.isCertified = reader.bool() break + case 3: + obj.lastSuccess = reader.uint64() + break + case 4: + obj.lastFailure = reader.uint64() + break default: reader.skipType(tag & 7) break diff --git a/packages/peer-store/src/utils/bytes-to-peer.ts b/packages/peer-store/src/utils/bytes-to-peer.ts index 3b723efcbe..a4ef476d64 100644 --- a/packages/peer-store/src/utils/bytes-to-peer.ts +++ b/packages/peer-store/src/utils/bytes-to-peer.ts @@ -2,7 +2,7 @@ import { peerIdFromPeerId } from '@libp2p/peer-id' import { multiaddr } from '@multiformats/multiaddr' import { Peer as PeerPB } from '../pb/peer.js' import type { PeerId } from '@libp2p/interface/peer-id' -import type { Peer, Tag } from '@libp2p/interface/peer-store' +import type { Address, Peer, Tag } from '@libp2p/interface/peer-store' export function bytesToPeer (peerId: PeerId, buf: Uint8Array): Peer { const peer = PeerPB.decode(buf) @@ -30,11 +30,24 @@ export function bytesToPeer (peerId: PeerId, buf: Uint8Array): Peer { return { ...peer, id: peerId, - addresses: peer.addresses.map(({ multiaddr: ma, isCertified }) => { - return { - multiaddr: multiaddr(ma), - isCertified: isCertified ?? false + addresses: peer.addresses.map(({ multiaddr: ma, isCertified, lastFailure, lastSuccess }) => { + const addr: Address = { + multiaddr: multiaddr(ma) } + + if (isCertified === true) { + addr.isCertified = true + } + + if (lastFailure != null) { + addr.lastFailure = Number(lastFailure) + } + + if (lastSuccess != null) { + addr.lastSuccess = Number(lastSuccess) + } + + return addr }), metadata: peer.metadata, peerRecordEnvelope: peer.peerRecordEnvelope ?? undefined, diff --git a/packages/peer-store/src/utils/dedupe-addresses.ts b/packages/peer-store/src/utils/dedupe-addresses.ts index d6f55d7120..473a26927a 100644 --- a/packages/peer-store/src/utils/dedupe-addresses.ts +++ b/packages/peer-store/src/utils/dedupe-addresses.ts @@ -26,17 +26,27 @@ export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: Addr continue } - const isCertified = addr.isCertified ?? false const maStr = addr.multiaddr.toString() - const existingAddr = addressMap.get(maStr) + let existingAddr = addressMap.get(maStr) - if (existingAddr != null) { - addr.isCertified = existingAddr.isCertified || isCertified - } else { - addressMap.set(maStr, { - multiaddr: addr.multiaddr, - isCertified - }) + if (existingAddr == null) { + existingAddr = { + multiaddr: addr.multiaddr + } + + addressMap.set(maStr, existingAddr) + } + + if (addr.isCertified === true) { + existingAddr.isCertified = true + } + + if (addr.lastFailure != null) { + existingAddr.lastFailure = Number(addr.lastFailure) + } + + if (addr.lastSuccess != null) { + existingAddr.lastSuccess = Number(addr.lastSuccess) } } @@ -44,8 +54,23 @@ export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: Addr .sort((a, b) => { return a.multiaddr.toString().localeCompare(b.multiaddr.toString()) }) - .map(({ isCertified, multiaddr }) => ({ - isCertified, - multiaddr: multiaddr.bytes - })) + .map(({ isCertified, multiaddr, lastFailure, lastSuccess }) => { + const addr: AddressPB = { + multiaddr: multiaddr.bytes + } + + if (isCertified) { + addr.isCertified = true + } + + if (lastFailure != null) { + addr.lastFailure = BigInt(lastFailure) + } + + if (lastSuccess != null) { + addr.lastSuccess = BigInt(lastSuccess) + } + + return addr + }) } diff --git a/packages/peer-store/src/utils/peer-data-to-datastore-peer.ts b/packages/peer-store/src/utils/peer-data-to-datastore-peer.ts index fa7ad930ed..7b945a4edc 100644 --- a/packages/peer-store/src/utils/peer-data-to-datastore-peer.ts +++ b/packages/peer-store/src/utils/peer-data-to-datastore-peer.ts @@ -20,7 +20,7 @@ export function toDatastorePeer (peerId: PeerId, data: PeerData): PeerPB { const output: PeerPB = { addresses: (data.addresses ?? []) - .concat((data.multiaddrs ?? []).map(multiaddr => ({ multiaddr, isCertified: false }))) + .concat((data.multiaddrs ?? []).map(multiaddr => ({ multiaddr }))) .filter(address => { if (!isMultiaddr(address.multiaddr)) { throw new CodeError('Invalid mulitaddr', codes.ERR_INVALID_PARAMETERS) @@ -36,9 +36,11 @@ export function toDatastorePeer (peerId: PeerId, data: PeerData): PeerPB { .sort((a, b) => { return a.multiaddr.toString().localeCompare(b.multiaddr.toString()) }) - .map(({ multiaddr, isCertified }) => ({ + .map(({ multiaddr, isCertified, lastFailure, lastSuccess }) => ({ multiaddr: multiaddr.bytes, - isCertified + isCertified, + lastFailure: lastFailure != null ? BigInt(lastFailure) : undefined, + lastSuccess: lastSuccess != null ? BigInt(lastSuccess) : undefined })), protocols: (data.protocols ?? []).sort(), metadata: new Map(), diff --git a/packages/peer-store/src/utils/to-peer-pb.ts b/packages/peer-store/src/utils/to-peer-pb.ts index 7270ad6f40..1f614f139c 100644 --- a/packages/peer-store/src/utils/to-peer-pb.ts +++ b/packages/peer-store/src/utils/to-peer-pb.ts @@ -40,7 +40,6 @@ export async function toPeerPB (peerId: PeerId, data: Partial, strateg if (data.multiaddrs != null) { addresses.push(...data.multiaddrs.map(multiaddr => ({ - isCertified: false, multiaddr }))) } @@ -80,7 +79,6 @@ export async function toPeerPB (peerId: PeerId, data: Partial, strateg if (strategy === 'merge') { if (data.multiaddrs != null) { addresses.push(...data.multiaddrs.map(multiaddr => ({ - isCertified: false, multiaddr }))) } diff --git a/packages/peer-store/test/merge.spec.ts b/packages/peer-store/test/merge.spec.ts index eefeec19c7..cb615b0acb 100644 --- a/packages/peer-store/test/merge.spec.ts +++ b/packages/peer-store/test/merge.spec.ts @@ -75,14 +75,11 @@ describe('merge', () => { }) expect(updated).to.have.property('addresses').that.deep.equals([{ - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }, { - multiaddr: addr3, - isCertified: false + multiaddr: addr3 }, { - multiaddr: addr2, - isCertified: false + multiaddr: addr2 }]) // other fields should be untouched @@ -244,4 +241,53 @@ describe('merge', () => { expect(updated).to.have.property('tags').that.deep.equals(original.tags) expect(updated).to.have.property('protocols').that.deep.equals(original.protocols) }) + + it('merges addresses', async () => { + const peer: PeerData = { + addresses: [{ + multiaddr: addr1, + isCertified: true + }, { + multiaddr: addr2, + lastFailure: 5 + }], + metadata: { + foo: Uint8Array.from([0, 1, 2]) + }, + tags: { + tag1: { value: 10 } + }, + protocols: [ + '/foo/bar' + ], + peerRecordEnvelope: Uint8Array.from([3, 4, 5]) + } + + const original = await peerStore.save(otherPeerId, peer) + const updated = await peerStore.merge(otherPeerId, { + addresses: [{ + multiaddr: addr1, + lastFailure: 10 + }, { + multiaddr: addr2, + lastSuccess: 10 + }] + }) + + expect(updated).to.have.property('addresses').that.deep.equals([{ + multiaddr: addr1, + isCertified: true, + lastFailure: 10 + }, { + multiaddr: addr2, + lastFailure: 5, + lastSuccess: 10 + }]) + + // other fields should be untouched + expect(updated).to.have.property('metadata').that.deep.equals(original.metadata) + expect(updated).to.have.property('tags').that.deep.equals(original.tags) + expect(updated).to.have.property('protocols').that.deep.equals(original.protocols) + expect(updated).to.have.property('peerRecordEnvelope').that.deep.equals(original.peerRecordEnvelope) + }) }) diff --git a/packages/peer-store/test/patch.spec.ts b/packages/peer-store/test/patch.spec.ts index 929425dcb9..938bfffbfd 100644 --- a/packages/peer-store/test/patch.spec.ts +++ b/packages/peer-store/test/patch.spec.ts @@ -76,8 +76,7 @@ describe('patch', () => { // upated field expect(updated).to.have.property('addresses').that.deep.equals([{ - multiaddr: addr3, - isCertified: false + multiaddr: addr3 }]) // other fields should be untouched diff --git a/packages/peer-store/test/save.spec.ts b/packages/peer-store/test/save.spec.ts index 23a7e29905..160018c9b9 100644 --- a/packages/peer-store/test/save.spec.ts +++ b/packages/peer-store/test/save.spec.ts @@ -66,7 +66,6 @@ describe('save', () => { expect(peer.addresses).to.deep.equal( supportedMultiaddrs.map((multiaddr) => ({ - isCertified: false, multiaddr })) ) @@ -230,11 +229,9 @@ describe('save', () => { const saved = await peerStore.save(otherPeerId, peer) expect(saved).to.have.property('addresses').that.deep.equals([{ - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }, { - multiaddr: addr2, - isCertified: false + multiaddr: addr2 }]) expect(saved).to.have.property('metadata').that.deep.equals( new Map([ diff --git a/packages/peer-store/test/utils/dedupe-addresses.spec.ts b/packages/peer-store/test/utils/dedupe-addresses.spec.ts index 233e576239..8f3f42e98d 100644 --- a/packages/peer-store/test/utils/dedupe-addresses.spec.ts +++ b/packages/peer-store/test/utils/dedupe-addresses.spec.ts @@ -18,39 +18,29 @@ describe('dedupe-addresses', () => { it('should dedupe addresses', async () => { expect(await dedupeFilterAndSortAddresses(peerId, async () => true, [{ - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }, { - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }, { - multiaddr: addr2, - isCertified: false + multiaddr: addr2 }])).to.deep.equal([{ - multiaddr: addr1.bytes, - isCertified: false + multiaddr: addr1.bytes }, { - multiaddr: addr2.bytes, - isCertified: false + multiaddr: addr2.bytes }]) }) it('should sort addresses', async () => { expect(await dedupeFilterAndSortAddresses(peerId, async () => true, [{ - multiaddr: addr2, - isCertified: false + multiaddr: addr2 }, { - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }, { - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }])).to.deep.equal([{ - multiaddr: addr1.bytes, - isCertified: false + multiaddr: addr1.bytes }, { - multiaddr: addr2.bytes, - isCertified: false + multiaddr: addr2.bytes }]) }) @@ -59,8 +49,7 @@ describe('dedupe-addresses', () => { multiaddr: addr1, isCertified: true }, { - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }])).to.deep.equal([{ multiaddr: addr1.bytes, isCertified: true @@ -72,8 +61,7 @@ describe('dedupe-addresses', () => { multiaddr: addr1, isCertified: true }, { - multiaddr: addr1, - isCertified: false + multiaddr: addr1 }])).to.deep.equal([]) }) }) diff --git a/packages/utils/API.md b/packages/utils/API.md index 3dbf66d3e6..6da79e94a4 100644 --- a/packages/utils/API.md +++ b/packages/utils/API.md @@ -1,29 +1,30 @@ # API -* [addressSort.publicAddressesFirst(addresses)](#addresssortpublicaddressesfirstaddresses) - * [Parameters](#parameters) - * [Returns](#returns) - * [Example](#example) -* [arrayEquals(a, b)](#arrayequalsa-b) - * [Parameters](#parameters) - * [Returns](#returns) - * [Example](#example) -* [multiaddr .isLoopback(ma)](#multiaddr-isloopbackma) - * [Parameters](#parameters-1) - * [Returns](#returns-1) - * [Example](#example-1) -* [multiaddr .isPrivate(ma)](#multiaddr-isprivatema) - * [Parameters](#parameters-2) - * [Returns](#returns-2) - * [Example](#example-2) -* [ipPortToMultiaddr(ip, port)](#ipporttomultiaddrip-port) - * [Parameters](#parameters-3) - * [Returns](#returns-3) - * [Example](#example-3) -* [streamToMaConnection(streamProperties, options)](#streamtomaconnectionstreamproperties-options) - * [Parameters](#parameters-4) - * [Returns](#returns-4) - * [Example](#example-4) +- [API](#api) + - [addressSort.publicAddressesFirst(addresses)](#addresssortpublicaddressesfirstaddresses) + - [Parameters](#parameters) + - [Returns](#returns) + - [Example](#example) + - [arrayEquals(a, b)](#arrayequalsa-b) + - [Parameters](#parameters-1) + - [Returns](#returns-1) + - [Example](#example-1) + - [multiaddr `.isLoopback(ma)`](#multiaddr-isloopbackma) + - [Parameters](#parameters-2) + - [Returns](#returns-2) + - [Example](#example-2) + - [multiaddr `.isPrivate(ma)`](#multiaddr-isprivatema) + - [Parameters](#parameters-3) + - [Returns](#returns-3) + - [Example](#example-3) + - [ipPortToMultiaddr(ip, port)](#ipporttomultiaddrip-port) + - [Parameters](#parameters-4) + - [Returns](#returns-4) + - [Example](#example-4) + - [streamToMaConnection(streamProperties, options)](#streamtomaconnectionstreamproperties-options) + - [Parameters](#parameters-5) + - [Returns](#returns-5) + - [Example](#example-5) ## addressSort.publicAddressesFirst(addresses) @@ -49,12 +50,10 @@ const { publicAddressesFirst } = require('libp2p-utils/src/address-sort') const addresses = [ { - multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000') }, { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000') } ] diff --git a/packages/utils/test/address-sort.spec.ts b/packages/utils/test/address-sort.spec.ts index b520ccccb2..41cf434616 100644 --- a/packages/utils/test/address-sort.spec.ts +++ b/packages/utils/test/address-sort.spec.ts @@ -8,12 +8,10 @@ describe('address-sort', () => { describe('public addresses first', () => { it('should sort public addresses first', () => { const publicAddress = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000') } const privateAddress = { - multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000') } const addresses = [ @@ -36,16 +34,14 @@ describe('address-sort', () => { isCertified: true } const publicAddress = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000') } const certifiedPrivateAddress = { multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4001'), isCertified: true } const privateAddress = { - multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000') } const addresses = [ @@ -68,12 +64,10 @@ describe('address-sort', () => { describe('circuit relay addresses last', () => { it('should sort circuit relay addresses last', () => { const publicAddress = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000') } const publicRelay = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm') } const addresses = [ @@ -96,32 +90,28 @@ describe('address-sort', () => { isCertified: true } const publicAddress = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000') } const certifiedPublicRelay = { multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), isCertified: true } const publicRelay = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm') } const certifiedPrivateAddress = { multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4001'), isCertified: true } const privateAddress = { - multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000'), - isCertified: false + multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000') } const certifiedPrivateRelay = { multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4001/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), isCertified: true } const privateRelay = { - multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), - isCertified: false + multiaddr: multiaddr('/ip4/127.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm') } const addresses = [ @@ -152,12 +142,10 @@ describe('address-sort', () => { it('should sort WebRTC over relay addresses before relay addresses', () => { const publicRelay = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm') } const webRTCOverRelay = { - multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/webrtc/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm'), - isCertified: false + multiaddr: multiaddr('/ip4/30.0.0.1/tcp/4000/p2p/QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN/p2p-circuit/webrtc/p2p/QmcrQZ6RJdpYuGvZqD5QEHAv6qX4BrQLJLQPQUrTrzdcgm') } const addresses = [