@streamr/dht 100.0.0-testnet-two.1 → 100.0.0-testnet-two.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/dist/package.json +5 -5
  2. package/dist/src/connection/ConnectionLockHandler.d.ts +11 -11
  3. package/dist/src/connection/ConnectionLockHandler.js.map +1 -1
  4. package/dist/src/connection/ConnectionLockRpcLocal.d.ts +3 -3
  5. package/dist/src/connection/ConnectionManager.d.ts +5 -4
  6. package/dist/src/connection/ConnectionManager.js +32 -36
  7. package/dist/src/connection/ConnectionManager.js.map +1 -1
  8. package/dist/src/connection/ManagedConnection.d.ts +2 -2
  9. package/dist/src/connection/simulator/Simulator.js.map +1 -1
  10. package/dist/src/connection/simulator/SimulatorConnection.js +21 -22
  11. package/dist/src/connection/simulator/SimulatorConnection.js.map +1 -1
  12. package/dist/src/connection/simulator/SimulatorConnector.js +4 -3
  13. package/dist/src/connection/simulator/SimulatorConnector.js.map +1 -1
  14. package/dist/src/connection/webrtc/NodeWebrtcConnection.js +11 -8
  15. package/dist/src/connection/webrtc/NodeWebrtcConnection.js.map +1 -1
  16. package/dist/src/connection/webrtc/WebrtcConnector.js +1 -1
  17. package/dist/src/connection/webrtc/WebrtcConnector.js.map +1 -1
  18. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.d.ts +2 -2
  19. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js +1 -1
  20. package/dist/src/connection/webrtc/WebrtcConnectorRpcLocal.js.map +1 -1
  21. package/dist/src/connection/websocket/WebsocketConnector.js +6 -5
  22. package/dist/src/connection/websocket/WebsocketConnector.js.map +1 -1
  23. package/dist/src/dht/DhtNode.d.ts +9 -8
  24. package/dist/src/dht/DhtNode.js +26 -22
  25. package/dist/src/dht/DhtNode.js.map +1 -1
  26. package/dist/src/dht/DhtNodeRpcLocal.d.ts +2 -1
  27. package/dist/src/dht/DhtNodeRpcLocal.js +2 -1
  28. package/dist/src/dht/DhtNodeRpcLocal.js.map +1 -1
  29. package/dist/src/dht/DhtNodeRpcRemote.d.ts +6 -5
  30. package/dist/src/dht/DhtNodeRpcRemote.js +9 -7
  31. package/dist/src/dht/DhtNodeRpcRemote.js.map +1 -1
  32. package/dist/src/dht/ExternalApiRpcLocal.d.ts +3 -3
  33. package/dist/src/dht/ExternalApiRpcLocal.js +3 -2
  34. package/dist/src/dht/ExternalApiRpcLocal.js.map +1 -1
  35. package/dist/src/dht/ExternalApiRpcRemote.d.ts +3 -2
  36. package/dist/src/dht/ExternalApiRpcRemote.js +3 -2
  37. package/dist/src/dht/ExternalApiRpcRemote.js.map +1 -1
  38. package/dist/src/dht/PeerManager.d.ts +9 -9
  39. package/dist/src/dht/PeerManager.js +35 -30
  40. package/dist/src/dht/PeerManager.js.map +1 -1
  41. package/dist/src/dht/contact/Contact.d.ts +2 -2
  42. package/dist/src/dht/contact/ContactList.d.ts +7 -7
  43. package/dist/src/dht/contact/ContactList.js.map +1 -1
  44. package/dist/src/dht/contact/RandomContactList.d.ts +4 -4
  45. package/dist/src/dht/contact/RandomContactList.js +2 -3
  46. package/dist/src/dht/contact/RandomContactList.js.map +1 -1
  47. package/dist/src/dht/contact/RpcRemote.d.ts +1 -4
  48. package/dist/src/dht/contact/RpcRemote.js +1 -5
  49. package/dist/src/dht/contact/RpcRemote.js.map +1 -1
  50. package/dist/src/dht/contact/SortedContactList.d.ts +13 -13
  51. package/dist/src/dht/contact/SortedContactList.js +5 -5
  52. package/dist/src/dht/contact/SortedContactList.js.map +1 -1
  53. package/dist/src/dht/discovery/DiscoverySession.d.ts +3 -2
  54. package/dist/src/dht/discovery/DiscoverySession.js +9 -9
  55. package/dist/src/dht/discovery/DiscoverySession.js.map +1 -1
  56. package/dist/src/dht/discovery/PeerDiscovery.d.ts +3 -1
  57. package/dist/src/dht/discovery/PeerDiscovery.js +18 -10
  58. package/dist/src/dht/discovery/PeerDiscovery.js.map +1 -1
  59. package/dist/src/dht/recursive-operation/RecursiveOperationManager.d.ts +3 -3
  60. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js +15 -14
  61. package/dist/src/dht/recursive-operation/RecursiveOperationManager.js.map +1 -1
  62. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js +2 -2
  63. package/dist/src/dht/recursive-operation/RecursiveOperationRpcRemote.js.map +1 -1
  64. package/dist/src/dht/recursive-operation/RecursiveOperationSession.d.ts +2 -1
  65. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js +6 -6
  66. package/dist/src/dht/recursive-operation/RecursiveOperationSession.js.map +1 -1
  67. package/dist/src/dht/routing/Router.d.ts +2 -2
  68. package/dist/src/dht/routing/Router.js +2 -2
  69. package/dist/src/dht/routing/Router.js.map +1 -1
  70. package/dist/src/dht/routing/RouterRpcLocal.js +3 -3
  71. package/dist/src/dht/routing/RouterRpcLocal.js.map +1 -1
  72. package/dist/src/dht/routing/RouterRpcRemote.js +4 -2
  73. package/dist/src/dht/routing/RouterRpcRemote.js.map +1 -1
  74. package/dist/src/dht/routing/RoutingSession.d.ts +3 -3
  75. package/dist/src/dht/routing/RoutingSession.js +4 -4
  76. package/dist/src/dht/routing/RoutingSession.js.map +1 -1
  77. package/dist/src/dht/store/LocalDataStore.d.ts +6 -9
  78. package/dist/src/dht/store/LocalDataStore.js +27 -32
  79. package/dist/src/dht/store/LocalDataStore.js.map +1 -1
  80. package/dist/src/dht/store/StoreManager.d.ts +3 -3
  81. package/dist/src/dht/store/StoreManager.js +26 -23
  82. package/dist/src/dht/store/StoreManager.js.map +1 -1
  83. package/dist/src/dht/store/StoreRpcLocal.d.ts +2 -1
  84. package/dist/src/dht/store/StoreRpcLocal.js +10 -8
  85. package/dist/src/dht/store/StoreRpcLocal.js.map +1 -1
  86. package/dist/src/exports.d.ts +2 -0
  87. package/dist/src/exports.js +6 -1
  88. package/dist/src/exports.js.map +1 -1
  89. package/dist/src/helpers/AddressTools.js +2 -0
  90. package/dist/src/helpers/AddressTools.js.map +1 -1
  91. package/dist/src/helpers/PeerID.d.ts +2 -2
  92. package/dist/src/helpers/PeerID.js +3 -3
  93. package/dist/src/helpers/PeerID.js.map +1 -1
  94. package/dist/src/helpers/peerIdFromPeerDescriptor.d.ts +2 -2
  95. package/dist/src/helpers/peerIdFromPeerDescriptor.js +2 -3
  96. package/dist/src/helpers/peerIdFromPeerDescriptor.js.map +1 -1
  97. package/dist/src/identifiers.d.ts +6 -0
  98. package/dist/src/identifiers.js +23 -0
  99. package/dist/src/identifiers.js.map +1 -0
  100. package/package.json +5 -5
  101. package/src/connection/ConnectionLockHandler.ts +15 -15
  102. package/src/connection/ConnectionLockRpcLocal.ts +3 -3
  103. package/src/connection/ConnectionManager.ts +36 -46
  104. package/src/connection/ManagedConnection.ts +2 -2
  105. package/src/connection/simulator/Simulator.ts +2 -2
  106. package/src/connection/simulator/SimulatorConnection.ts +21 -23
  107. package/src/connection/simulator/SimulatorConnector.ts +6 -5
  108. package/src/connection/webrtc/BrowserWebrtcConnection.ts +0 -4
  109. package/src/connection/webrtc/NodeWebrtcConnection.ts +11 -10
  110. package/src/connection/webrtc/WebrtcConnector.ts +2 -3
  111. package/src/connection/webrtc/WebrtcConnectorRpcLocal.ts +2 -3
  112. package/src/connection/websocket/WebsocketConnector.ts +9 -9
  113. package/src/dht/DhtNode.ts +36 -35
  114. package/src/dht/DhtNodeRpcLocal.ts +3 -2
  115. package/src/dht/DhtNodeRpcRemote.ts +14 -12
  116. package/src/dht/ExternalApiRpcLocal.ts +15 -6
  117. package/src/dht/ExternalApiRpcRemote.ts +5 -4
  118. package/src/dht/PeerManager.ts +43 -38
  119. package/src/dht/contact/Contact.ts +2 -2
  120. package/src/dht/contact/ContactList.ts +7 -7
  121. package/src/dht/contact/RandomContactList.ts +6 -6
  122. package/src/dht/contact/RpcRemote.ts +0 -8
  123. package/src/dht/contact/SortedContactList.ts +22 -22
  124. package/src/dht/discovery/DiscoverySession.ts +16 -14
  125. package/src/dht/discovery/PeerDiscovery.ts +34 -12
  126. package/src/dht/recursive-operation/RecursiveOperationManager.ts +17 -17
  127. package/src/dht/recursive-operation/RecursiveOperationRpcRemote.ts +2 -2
  128. package/src/dht/recursive-operation/RecursiveOperationSession.ts +11 -11
  129. package/src/dht/routing/Router.ts +5 -5
  130. package/src/dht/routing/RouterRpcLocal.ts +3 -3
  131. package/src/dht/routing/RouterRpcRemote.ts +4 -4
  132. package/src/dht/routing/RoutingSession.ts +6 -8
  133. package/src/dht/store/LocalDataStore.ts +31 -40
  134. package/src/dht/store/StoreManager.ts +31 -31
  135. package/src/dht/store/StoreRpcLocal.ts +11 -9
  136. package/src/exports.ts +2 -0
  137. package/src/helpers/AddressTools.ts +2 -0
  138. package/src/helpers/PeerID.ts +4 -4
  139. package/src/helpers/peerIdFromPeerDescriptor.ts +4 -6
  140. package/src/identifiers.ts +20 -0
  141. package/test/RandomGraphSimulation.ts +3 -2
  142. package/test/benchmark/Find.test.ts +4 -3
  143. package/test/benchmark/KademliaCorrectness.test.ts +4 -4
  144. package/test/benchmark/SortedContactListBenchmark.test.ts +15 -14
  145. package/test/benchmark/kademlia-simulation/Contact.ts +7 -8
  146. package/test/benchmark/kademlia-simulation/KademliaSimulation.ts +2 -2
  147. package/test/benchmark/kademlia-simulation/SimulationNode.ts +10 -11
  148. package/test/data/generateGroundTruthData.ts +5 -4
  149. package/test/end-to-end/Layer0Webrtc-Layer1.test.ts +2 -2
  150. package/test/end-to-end/RecoveryFromFailedAutoCertification.test.ts +1 -1
  151. package/test/end-to-end/memory-leak.test.ts +3 -2
  152. package/test/integration/ConnectionManager.test.ts +3 -3
  153. package/test/integration/DhtJoinPeerDiscovery.test.ts +2 -1
  154. package/test/integration/DhtNodeExternalAPI.test.ts +7 -7
  155. package/test/integration/DhtNodeRpcRemote.test.ts +3 -2
  156. package/test/integration/Find.test.ts +3 -3
  157. package/test/integration/Layer1-scale.test.ts +3 -3
  158. package/test/integration/Mock-Layer1-Layer0.test.ts +6 -5
  159. package/test/integration/ReplicateData.test.ts +38 -30
  160. package/test/integration/RouteMessage.test.ts +9 -10
  161. package/test/integration/RouterRpcRemote.test.ts +1 -1
  162. package/test/integration/ScaleDownDht.test.ts +4 -4
  163. package/test/integration/SimultaneousConnections.test.ts +7 -14
  164. package/test/integration/Store.test.ts +17 -7
  165. package/test/integration/StoreAndDelete.test.ts +11 -10
  166. package/test/integration/StoreOnDhtWithTwoNodes.test.ts +7 -6
  167. package/test/integration/StoreRpcRemote.test.ts +3 -5
  168. package/test/unit/AddressTools.test.ts +4 -0
  169. package/test/unit/LocalDataStore.test.ts +41 -41
  170. package/test/unit/PeerManager.test.ts +7 -8
  171. package/test/unit/RandomContactList.test.ts +3 -3
  172. package/test/unit/RecursiveOperationManager.test.ts +2 -1
  173. package/test/unit/RecursiveOperationSession.test.ts +2 -3
  174. package/test/unit/Router.test.ts +2 -2
  175. package/test/unit/RoutingSession.test.ts +2 -2
  176. package/test/unit/SortedContactList.test.ts +6 -6
  177. package/test/unit/StoreManager.test.ts +26 -23
  178. package/test/utils/customMatchers.ts +3 -2
  179. package/test/utils/mock/mockDataEntry.ts +8 -6
  180. package/test/utils/utils.ts +4 -4
  181. package/dist/src/helpers/nodeId.d.ts +0 -6
  182. package/dist/src/helpers/nodeId.js +0 -31
  183. package/dist/src/helpers/nodeId.js.map +0 -1
  184. package/src/helpers/nodeId.ts +0 -28
@@ -1,7 +1,7 @@
1
1
  import { RpcCommunicator } from '@streamr/proto-rpc'
2
2
  import { Logger } from '@streamr/utils'
3
3
  import { v4 } from 'uuid'
4
- import { NodeID } from '../helpers/nodeId'
4
+ import { DhtAddress, DhtAddressRaw, getRawFromDhtAddress } from '../identifiers'
5
5
  import { getNodeIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
6
6
  import {
7
7
  ClosestPeersRequest,
@@ -16,7 +16,7 @@ const logger = new Logger(module)
16
16
 
17
17
  // Fields required by objects stored in the k-bucket library
18
18
  export interface KBucketContact {
19
- id: Uint8Array
19
+ id: DhtAddressRaw
20
20
  vectorClock: number
21
21
  }
22
22
 
@@ -24,7 +24,8 @@ export class DhtNodeRpcRemote extends RpcRemote<DhtNodeRpcClient> implements KBu
24
24
 
25
25
  private static counter = 0
26
26
  public vectorClock: number
27
- public readonly id: Uint8Array
27
+ public readonly id: DhtAddressRaw
28
+ private readonly serviceId: ServiceID
28
29
 
29
30
  constructor(
30
31
  localPeerDescriptor: PeerDescriptor,
@@ -33,28 +34,29 @@ export class DhtNodeRpcRemote extends RpcRemote<DhtNodeRpcClient> implements KBu
33
34
  rpcCommunicator: RpcCommunicator,
34
35
  rpcRequestTimeout?: number
35
36
  ) {
36
- super(localPeerDescriptor, peerDescriptor, serviceId, rpcCommunicator, DhtNodeRpcClient, rpcRequestTimeout)
37
+ super(localPeerDescriptor, peerDescriptor, rpcCommunicator, DhtNodeRpcClient, rpcRequestTimeout)
37
38
  this.id = this.getPeerDescriptor().nodeId
38
39
  this.vectorClock = DhtNodeRpcRemote.counter++
40
+ this.serviceId = serviceId
39
41
  }
40
42
 
41
- async getClosestPeers(nodeId: Uint8Array): Promise<PeerDescriptor[]> {
42
- logger.trace(`Requesting getClosestPeers on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
43
+ async getClosestPeers(nodeId: DhtAddress): Promise<PeerDescriptor[]> {
44
+ logger.trace(`Requesting getClosestPeers on ${this.serviceId} from ${this.getNodeId()}`)
43
45
  const request: ClosestPeersRequest = {
44
- nodeId,
46
+ nodeId: getRawFromDhtAddress(nodeId),
45
47
  requestId: v4()
46
48
  }
47
49
  try {
48
50
  const peers = await this.getClient().getClosestPeers(request, this.formDhtRpcOptions())
49
51
  return peers.peers
50
52
  } catch (err) {
51
- logger.trace(`getClosestPeers error ${this.getServiceId()}`, { err })
53
+ logger.trace(`getClosestPeers error ${this.serviceId}`, { err })
52
54
  throw err
53
55
  }
54
56
  }
55
57
 
56
58
  async ping(): Promise<boolean> {
57
- logger.trace(`Requesting ping on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
59
+ logger.trace(`Requesting ping on ${this.serviceId} from ${this.getNodeId()}`)
58
60
  const request: PingRequest = {
59
61
  requestId: v4()
60
62
  }
@@ -65,13 +67,13 @@ export class DhtNodeRpcRemote extends RpcRemote<DhtNodeRpcClient> implements KBu
65
67
  return true
66
68
  }
67
69
  } catch (err) {
68
- logger.trace(`ping failed on ${this.getServiceId()} to ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}: ${err}`)
70
+ logger.trace(`ping failed on ${this.serviceId} to ${this.getNodeId()}: ${err}`)
69
71
  }
70
72
  return false
71
73
  }
72
74
 
73
75
  leaveNotice(): void {
74
- logger.trace(`Sending leaveNotice on ${this.getServiceId()} from ${getNodeIdFromPeerDescriptor(this.getPeerDescriptor())}`)
76
+ logger.trace(`Sending leaveNotice on ${this.serviceId} from ${this.getNodeId()}`)
75
77
  const options = this.formDhtRpcOptions({
76
78
  notification: true
77
79
  })
@@ -80,7 +82,7 @@ export class DhtNodeRpcRemote extends RpcRemote<DhtNodeRpcClient> implements KBu
80
82
  })
81
83
  }
82
84
 
83
- getNodeId(): NodeID {
85
+ getNodeId(): DhtAddress {
84
86
  return getNodeIdFromPeerDescriptor(this.getPeerDescriptor())
85
87
  }
86
88
  }
@@ -11,19 +11,20 @@ import { ServerCallContext } from '@protobuf-ts/runtime-rpc'
11
11
  import { DhtCallContext } from '../rpc-protocol/DhtCallContext'
12
12
  import { RecursiveOperationResult } from './recursive-operation/RecursiveOperationManager'
13
13
  import { Any } from '../proto/google/protobuf/any'
14
- import { NodeID } from '../helpers/nodeId'
14
+ import { DhtAddress } from '../identifiers'
15
15
  import { getNodeIdFromPeerDescriptor } from '../helpers/peerIdFromPeerDescriptor'
16
+ import { getDhtAddressFromRaw } from '../identifiers'
16
17
 
17
18
  interface ExternalApiRpcLocalConfig {
18
19
  executeRecursiveOperation: (
19
- targetId: Uint8Array,
20
+ targetId: DhtAddress,
20
21
  operation: RecursiveOperation,
21
22
  excludedPeer: PeerDescriptor
22
23
  ) => Promise<RecursiveOperationResult>
23
24
  storeDataToDht: (
24
- key: Uint8Array,
25
+ key: DhtAddress,
25
26
  data: Any,
26
- creator: NodeID
27
+ creator: DhtAddress
27
28
  ) => Promise<PeerDescriptor[]>
28
29
  }
29
30
 
@@ -37,13 +38,21 @@ export class ExternalApiRpcLocal implements IExternalApiRpc {
37
38
 
38
39
  async externalFindData(findDataRequest: ExternalFindDataRequest, context: ServerCallContext): Promise<ExternalFindDataResponse> {
39
40
  const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
40
- const result = await this.config.executeRecursiveOperation(findDataRequest.key, RecursiveOperation.FETCH_DATA, senderPeerDescriptor)
41
+ const result = await this.config.executeRecursiveOperation(
42
+ getDhtAddressFromRaw(findDataRequest.key),
43
+ RecursiveOperation.FETCH_DATA,
44
+ senderPeerDescriptor
45
+ )
41
46
  return ExternalFindDataResponse.create({ entries: result.dataEntries ?? [] })
42
47
  }
43
48
 
44
49
  async externalStoreData(request: ExternalStoreDataRequest, context: ServerCallContext): Promise<ExternalStoreDataResponse> {
45
50
  const senderPeerDescriptor = (context as DhtCallContext).incomingSourceDescriptor!
46
- const result = await this.config.storeDataToDht(request.key, request.data!, getNodeIdFromPeerDescriptor(senderPeerDescriptor))
51
+ const result = await this.config.storeDataToDht(
52
+ getDhtAddressFromRaw(request.key),
53
+ request.data!,
54
+ getNodeIdFromPeerDescriptor(senderPeerDescriptor)
55
+ )
47
56
  return ExternalStoreDataResponse.create({
48
57
  storers: result
49
58
  })
@@ -1,3 +1,4 @@
1
+ import { DhtAddress, getRawFromDhtAddress } from '../identifiers'
1
2
  import { Any } from '../proto/google/protobuf/any'
2
3
  import { DataEntry, ExternalFindDataRequest, ExternalStoreDataRequest, PeerDescriptor } from '../proto/packages/dht/protos/DhtRpc'
3
4
  import { ExternalApiRpcClient } from '../proto/packages/dht/protos/DhtRpc.client'
@@ -5,9 +6,9 @@ import { RpcRemote } from './contact/RpcRemote'
5
6
 
6
7
  export class ExternalApiRpcRemote extends RpcRemote<ExternalApiRpcClient> {
7
8
 
8
- async externalFindData(key: Uint8Array): Promise<DataEntry[]> {
9
+ async externalFindData(key: DhtAddress): Promise<DataEntry[]> {
9
10
  const request: ExternalFindDataRequest = {
10
- key
11
+ key: getRawFromDhtAddress(key)
11
12
  }
12
13
  const options = this.formDhtRpcOptions({
13
14
  // TODO use config option or named constant?
@@ -21,9 +22,9 @@ export class ExternalApiRpcRemote extends RpcRemote<ExternalApiRpcClient> {
21
22
  }
22
23
  }
23
24
 
24
- async storeData(key: Uint8Array, data: Any): Promise<PeerDescriptor[]> {
25
+ async storeData(key: DhtAddress, data: Any): Promise<PeerDescriptor[]> {
25
26
  const request: ExternalStoreDataRequest = {
26
- key,
27
+ key: getRawFromDhtAddress(key),
27
28
  data
28
29
  }
29
30
  const options = this.formDhtRpcOptions({
@@ -1,5 +1,5 @@
1
1
  import {
2
- Logger, hexToBinary
2
+ Logger
3
3
  } from '@streamr/utils'
4
4
  import KBucket from 'k-bucket'
5
5
  import {
@@ -13,7 +13,7 @@ import { RandomContactList } from './contact/RandomContactList'
13
13
  import { SortedContactList } from './contact/SortedContactList'
14
14
  import { ConnectionManager } from '../connection/ConnectionManager'
15
15
  import EventEmitter from 'eventemitter3'
16
- import { NodeID, areEqualNodeIds } from '../helpers/nodeId'
16
+ import { DhtAddress, DhtAddressRaw, getRawFromDhtAddress } from '../identifiers'
17
17
 
18
18
  const logger = new Logger(module)
19
19
 
@@ -21,7 +21,7 @@ interface PeerManagerConfig {
21
21
  numberOfNodesPerKBucket: number
22
22
  maxContactListSize: number
23
23
  peerDiscoveryQueryBatchSize: number
24
- localNodeId: NodeID
24
+ localNodeId: DhtAddress
25
25
  connectionManager: ConnectionManager
26
26
  isLayer0: boolean
27
27
  createDhtNodeRpcRemote: (peerDescriptor: PeerDescriptor) => DhtNodeRpcRemote
@@ -35,8 +35,8 @@ export interface PeerManagerEvents {
35
35
  kBucketEmpty: () => void
36
36
  }
37
37
 
38
- export const getDistance = (nodeId1: NodeID, nodeId2: NodeID): number => {
39
- return KBucket.distance(hexToBinary(nodeId1), hexToBinary(nodeId2))
38
+ export const getDistance = (nodeIdOrDataKeyRaw1: DhtAddressRaw, nodeIdOrDataKeyRaw2: DhtAddressRaw): number => {
39
+ return KBucket.distance(nodeIdOrDataKeyRaw1, nodeIdOrDataKeyRaw2)
40
40
  }
41
41
 
42
42
  export class PeerManager extends EventEmitter<PeerManagerEvents> {
@@ -50,7 +50,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
50
50
  // The kademlia k-bucket
51
51
  private bucket: KBucket<DhtNodeRpcRemote>
52
52
  // Nodes that are connected to this node on Layer0
53
- public readonly connections: Map<NodeID, DhtNodeRpcRemote> = new Map()
53
+ public readonly connections: Map<DhtAddress, DhtNodeRpcRemote> = new Map()
54
54
  // All nodes that we know about
55
55
  private contacts: SortedContactList<DhtNodeRpcRemote>
56
56
  private randomPeers: RandomContactList<DhtNodeRpcRemote>
@@ -61,7 +61,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
61
61
  super()
62
62
  this.config = config
63
63
  this.bucket = new KBucket<DhtNodeRpcRemote>({
64
- localNodeId: hexToBinary(this.config.localNodeId),
64
+ localNodeId: getRawFromDhtAddress(this.config.localNodeId),
65
65
  numberOfNodesPerKBucket: this.config.numberOfNodesPerKBucket,
66
66
  numberOfNodesToPing: this.config.numberOfNodesPerKBucket
67
67
  })
@@ -108,8 +108,9 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
108
108
  })
109
109
  sortingList.addContacts(oldContacts)
110
110
  const sortedContacts = sortingList.getAllContacts()
111
- this.config.connectionManager?.weakUnlockConnection(sortedContacts[sortedContacts.length - 1].getPeerDescriptor())
112
- this.bucket.remove(hexToBinary(sortedContacts[sortedContacts.length - 1].getNodeId()))
111
+ const removableNodeId = sortedContacts[sortedContacts.length - 1].getNodeId()
112
+ this.config.connectionManager?.weakUnlockConnection(removableNodeId)
113
+ this.bucket.remove(getRawFromDhtAddress(removableNodeId))
113
114
  this.bucket.add(newContact)
114
115
  }
115
116
 
@@ -117,8 +118,9 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
117
118
  if (this.stopped) {
118
119
  return
119
120
  }
120
- this.config.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
121
- logger.trace(`Removed contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
121
+ const nodeId = getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())
122
+ this.config.connectionManager?.weakUnlockConnection(nodeId)
123
+ logger.trace(`Removed contact ${nodeId}`)
122
124
  if (this.bucket.count() === 0) {
123
125
  this.emit('kBucketEmpty')
124
126
  }
@@ -128,26 +130,28 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
128
130
  if (this.stopped) {
129
131
  return
130
132
  }
131
- if (!areEqualNodeIds(contact.getNodeId(), this.config.localNodeId)) {
133
+ if (contact.getNodeId() !== this.config.localNodeId) {
134
+ const peerDescriptor = contact.getPeerDescriptor()
135
+ const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
132
136
  // Important to lock here, before the ping result is known
133
- this.config.connectionManager?.weakLockConnection(contact.getPeerDescriptor())
137
+ this.config.connectionManager?.weakLockConnection(nodeId)
134
138
  if (this.connections.has(contact.getNodeId())) {
135
- logger.trace(`Added new contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
139
+ logger.trace(`Added new contact ${nodeId}`)
136
140
  } else { // open connection by pinging
137
- logger.trace('starting ping ' + getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))
141
+ logger.trace('starting ping ' + nodeId)
138
142
  contact.ping().then((result) => {
139
143
  if (result) {
140
- logger.trace(`Added new contact ${getNodeIdFromPeerDescriptor(contact.getPeerDescriptor())}`)
144
+ logger.trace(`Added new contact ${nodeId}`)
141
145
  } else {
142
- logger.trace('ping failed ' + getNodeIdFromPeerDescriptor(contact.getPeerDescriptor()))
143
- this.config.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
144
- this.removeContact(contact.getPeerDescriptor())
146
+ logger.trace('ping failed ' + nodeId)
147
+ this.config.connectionManager?.weakUnlockConnection(nodeId)
148
+ this.removeContact(peerDescriptor)
145
149
  this.addClosestContactToBucket()
146
150
  }
147
151
  return
148
152
  }).catch((_e) => {
149
- this.config.connectionManager?.weakUnlockConnection(contact.getPeerDescriptor())
150
- this.removeContact(contact.getPeerDescriptor())
153
+ this.config.connectionManager?.weakUnlockConnection(nodeId)
154
+ this.removeContact(peerDescriptor)
151
155
  this.addClosestContactToBucket()
152
156
  })
153
157
  }
@@ -166,7 +170,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
166
170
 
167
171
  private getClosestActiveContactNotInBucket(): DhtNodeRpcRemote | undefined {
168
172
  for (const contactId of this.contacts.getContactIds()) {
169
- if (!this.bucket.get(hexToBinary(contactId)) && this.contacts.isActive(contactId)) {
173
+ if (!this.bucket.get(getRawFromDhtAddress(contactId)) && this.contacts.isActive(contactId)) {
170
174
  return this.contacts.getContact(contactId)!.contact
171
175
  }
172
176
  }
@@ -175,7 +179,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
175
179
 
176
180
  handleConnected(peerDescriptor: PeerDescriptor): void {
177
181
  const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
178
- if (areEqualNodeIds(nodeId, this.config.localNodeId)) {
182
+ if (nodeId === this.config.localNodeId) {
179
183
  logger.error('handleConnected() to self')
180
184
  }
181
185
  const rpcRemote = this.config.createDhtNodeRpcRemote(peerDescriptor)
@@ -185,19 +189,20 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
185
189
  } else {
186
190
  logger.trace('new connection not set to connections, there is already a connection with the peer ID')
187
191
  }
188
- logger.trace('connected: ' + getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + this.connections.size)
192
+ logger.trace('connected: ' + nodeId + ' ' + this.connections.size)
189
193
  }
190
194
 
191
195
  handleDisconnected(peerDescriptor: PeerDescriptor, gracefulLeave: boolean): void {
192
- logger.trace('disconnected: ' + getNodeIdFromPeerDescriptor(peerDescriptor))
193
- this.connections.delete(getNodeIdFromPeerDescriptor(peerDescriptor))
196
+ const nodeId = getNodeIdFromPeerDescriptor(peerDescriptor)
197
+ logger.trace('disconnected: ' + nodeId)
198
+ this.connections.delete(nodeId)
194
199
  if (this.config.isLayer0) {
195
200
  this.bucket.remove(peerDescriptor.nodeId)
196
201
  if (gracefulLeave === true) {
197
- logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
202
+ logger.trace(nodeId + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
198
203
  this.removeContact(peerDescriptor)
199
204
  } else {
200
- logger.trace(getNodeIdFromPeerDescriptor(peerDescriptor) + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
205
+ logger.trace(nodeId + ' ' + 'onTransportDisconnected with gracefulLeave ' + gracefulLeave)
201
206
  }
202
207
  }
203
208
  }
@@ -210,9 +215,9 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
210
215
  if (this.stopped) {
211
216
  return
212
217
  }
213
- logger.trace(`Removing contact ${getNodeIdFromPeerDescriptor(contact)}`)
214
218
  const nodeId = getNodeIdFromPeerDescriptor(contact)
215
- this.bucket.remove(hexToBinary(nodeId))
219
+ logger.trace(`Removing contact ${nodeId}`)
220
+ this.bucket.remove(getRawFromDhtAddress(nodeId))
216
221
  this.contacts.removeContact(nodeId)
217
222
  this.randomPeers.removeContact(nodeId)
218
223
  }
@@ -229,19 +234,19 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
229
234
  this.connections.clear()
230
235
  }
231
236
 
232
- getClosestNeighborsTo(referenceId: NodeID, limit?: number, excludedNodeIds?: Set<NodeID>): DhtNodeRpcRemote[] {
237
+ getClosestNeighborsTo(referenceId: DhtAddress, limit?: number, excludedNodeIds?: Set<DhtAddress>): DhtNodeRpcRemote[] {
233
238
  const closest = new SortedContactList<DhtNodeRpcRemote>({
234
239
  referenceId,
235
240
  allowToContainReferenceId: true,
236
241
  emitEvents: false,
237
242
  excludedNodeIds
238
243
  })
239
- this.bucket.toArray().map((contact) => closest.addContact(contact))
244
+ this.bucket.toArray().forEach((contact) => closest.addContact(contact))
240
245
  return closest.getClosestContacts(limit)
241
246
  }
242
247
 
243
248
  // TODO reduce copy-paste?
244
- getClosestContactsTo(referenceId: NodeID, limit?: number, excludedNodeIds?: Set<NodeID>): DhtNodeRpcRemote[] {
249
+ getClosestContactsTo(referenceId: DhtAddress, limit?: number, excludedNodeIds?: Set<DhtAddress>): DhtNodeRpcRemote[] {
245
250
  const closest = new SortedContactList<DhtNodeRpcRemote>({
246
251
  referenceId,
247
252
  allowToContainReferenceId: true,
@@ -253,7 +258,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
253
258
  return closest.getClosestContacts(limit)
254
259
  }
255
260
 
256
- getNumberOfContacts(excludedNodeIds?: Set<NodeID>): number {
261
+ getNumberOfContacts(excludedNodeIds?: Set<DhtAddress>): number {
257
262
  return this.contacts.getAllContacts().filter((contact) => {
258
263
  if (!excludedNodeIds) {
259
264
  return true
@@ -275,12 +280,12 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
275
280
  return this.bucket.toArray().map((rpcRemote: DhtNodeRpcRemote) => rpcRemote.getPeerDescriptor())
276
281
  }
277
282
 
278
- handlePeerActive(nodeId: NodeID): void {
283
+ handlePeerActive(nodeId: DhtAddress): void {
279
284
  this.contacts.setActive(nodeId)
280
285
  }
281
286
 
282
- handlePeerUnresponsive(nodeId: NodeID): void {
283
- this.bucket.remove(hexToBinary(nodeId))
287
+ handlePeerUnresponsive(nodeId: DhtAddress): void {
288
+ this.bucket.remove(getRawFromDhtAddress(nodeId))
284
289
  this.contacts.removeContact(nodeId)
285
290
  }
286
291
 
@@ -290,7 +295,7 @@ export class PeerManager extends EventEmitter<PeerManagerEvents> {
290
295
  }
291
296
  peerDescriptors.forEach((contact) => {
292
297
  const nodeId = getNodeIdFromPeerDescriptor(contact)
293
- if (!areEqualNodeIds(nodeId, this.config.localNodeId)) {
298
+ if (nodeId !== this.config.localNodeId) {
294
299
  logger.trace(`Adding new contact ${nodeId}`)
295
300
  const remote = this.config.createDhtNodeRpcRemote(contact)
296
301
  const isInBucket = (this.bucket.get(contact.nodeId) !== null)
@@ -1,6 +1,6 @@
1
1
  import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
2
2
  import { getNodeIdFromPeerDescriptor } from '../../helpers/peerIdFromPeerDescriptor'
3
- import { NodeID } from '../../helpers/nodeId'
3
+ import { DhtAddress } from '../../identifiers'
4
4
 
5
5
  export class Contact {
6
6
 
@@ -14,7 +14,7 @@ export class Contact {
14
14
  return this.peerDescriptor
15
15
  }
16
16
 
17
- public getNodeId(): NodeID {
17
+ public getNodeId(): DhtAddress {
18
18
  return getNodeIdFromPeerDescriptor(this.peerDescriptor)
19
19
  }
20
20
  }
@@ -1,5 +1,5 @@
1
1
  import EventEmitter from 'eventemitter3'
2
- import { NodeID } from '../../helpers/nodeId'
2
+ import { DhtAddress } from '../../identifiers'
3
3
 
4
4
  export class ContactState<C> {
5
5
  public contacted = false
@@ -16,17 +16,17 @@ export interface Events<C> {
16
16
  newContact: (newContact: C, closestContacts: C[]) => void
17
17
  }
18
18
 
19
- export class ContactList<C extends { getNodeId: () => NodeID }> extends EventEmitter<Events<C>> {
19
+ export class ContactList<C extends { getNodeId: () => DhtAddress }> extends EventEmitter<Events<C>> {
20
20
 
21
- protected contactsById: Map<NodeID, ContactState<C>> = new Map()
21
+ protected contactsById: Map<DhtAddress, ContactState<C>> = new Map()
22
22
  // TODO move this to SortedContactList
23
- protected contactIds: NodeID[] = []
24
- protected localNodeId: NodeID
23
+ protected contactIds: DhtAddress[] = []
24
+ protected localNodeId: DhtAddress
25
25
  protected maxSize: number
26
26
  protected defaultContactQueryLimit
27
27
 
28
28
  constructor(
29
- localNodeId: NodeID,
29
+ localNodeId: DhtAddress,
30
30
  maxSize: number,
31
31
  defaultContactQueryLimit = 20
32
32
  ) {
@@ -36,7 +36,7 @@ export class ContactList<C extends { getNodeId: () => NodeID }> extends EventEmi
36
36
  this.defaultContactQueryLimit = defaultContactQueryLimit
37
37
  }
38
38
 
39
- public getContact(id: NodeID): ContactState<C> | undefined {
39
+ public getContact(id: DhtAddress): ContactState<C> | undefined {
40
40
  return this.contactsById.get(id)
41
41
  }
42
42
 
@@ -1,12 +1,12 @@
1
- import { NodeID, areEqualNodeIds } from '../../helpers/nodeId'
1
+ import { DhtAddress } from '../../identifiers'
2
2
  import { ContactList, ContactState } from './ContactList'
3
3
 
4
- export class RandomContactList<C extends { getNodeId: () => NodeID }> extends ContactList<C> {
4
+ export class RandomContactList<C extends { getNodeId: () => DhtAddress }> extends ContactList<C> {
5
5
 
6
6
  private randomness: number
7
7
 
8
8
  constructor(
9
- localNodeId: NodeID,
9
+ localNodeId: DhtAddress,
10
10
  maxSize: number,
11
11
  randomness = 0.20,
12
12
  defaultContactQueryLimit?: number
@@ -16,7 +16,7 @@ export class RandomContactList<C extends { getNodeId: () => NodeID }> extends Co
16
16
  }
17
17
 
18
18
  addContact(contact: C): void {
19
- if (areEqualNodeIds(this.localNodeId, contact.getNodeId())) {
19
+ if (this.localNodeId === contact.getNodeId()) {
20
20
  return
21
21
  }
22
22
  if (!this.contactsById.has(contact.getNodeId())) {
@@ -37,10 +37,10 @@ export class RandomContactList<C extends { getNodeId: () => NodeID }> extends Co
37
37
  }
38
38
  }
39
39
 
40
- removeContact(id: NodeID): boolean {
40
+ removeContact(id: DhtAddress): boolean {
41
41
  if (this.contactsById.has(id)) {
42
42
  const removed = this.contactsById.get(id)!.contact
43
- const index = this.contactIds.findIndex((nodeId) => areEqualNodeIds(nodeId, id))
43
+ const index = this.contactIds.findIndex((nodeId) => (nodeId === id))
44
44
  this.contactIds.splice(index, 1)
45
45
  this.contactsById.delete(id)
46
46
  this.emit('contactRemoved', removed, this.getContacts())
@@ -4,7 +4,6 @@ import { ConnectionType } from '../../connection/IConnection'
4
4
  import { expectedConnectionType } from '../../helpers/Connectivity'
5
5
  import { PeerDescriptor } from '../../proto/packages/dht/protos/DhtRpc'
6
6
  import { DhtRpcOptions } from '../../rpc-protocol/DhtRpcOptions'
7
- import { ServiceID } from '../../types/ServiceID'
8
7
 
9
8
  // Should connect directly to the server, timeout can be low
10
9
  const WEBSOCKET_CLIENT_TIMEOUT = 5000
@@ -32,14 +31,12 @@ export abstract class RpcRemote<T extends ServiceInfo & ClassType> {
32
31
 
33
32
  private readonly localPeerDescriptor: PeerDescriptor
34
33
  private readonly remotePeerDescriptor: PeerDescriptor
35
- private readonly serviceId: ServiceID
36
34
  private readonly client: ProtoRpcClient<T>
37
35
  private readonly timeout?: number
38
36
 
39
37
  constructor(
40
38
  localPeerDescriptor: PeerDescriptor,
41
39
  remotePeerDescriptor: PeerDescriptor,
42
- serviceId: ServiceID,
43
40
  rpcCommunicator: RpcCommunicator,
44
41
  // eslint-disable-next-line @typescript-eslint/prefer-function-type
45
42
  clientClass: { new (clientTransport: ClientTransport): T },
@@ -48,7 +45,6 @@ export abstract class RpcRemote<T extends ServiceInfo & ClassType> {
48
45
  this.localPeerDescriptor = localPeerDescriptor
49
46
  this.remotePeerDescriptor = remotePeerDescriptor
50
47
  this.client = toProtoRpcClient(new clientClass(rpcCommunicator.getRpcClientTransport()))
51
- this.serviceId = serviceId
52
48
  this.timeout = timeout
53
49
  }
54
50
 
@@ -60,10 +56,6 @@ export abstract class RpcRemote<T extends ServiceInfo & ClassType> {
60
56
  return this.localPeerDescriptor
61
57
  }
62
58
 
63
- getServiceId(): ServiceID {
64
- return this.serviceId
65
- }
66
-
67
59
  getClient(): ProtoRpcClient<T> {
68
60
  return this.client
69
61
  }