@optimystic/db-p2p 1.0.0-beta.2 → 1.0.0
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.
- package/dist/src/cluster/block-transfer-service.d.ts +73 -1
- package/dist/src/cluster/block-transfer-service.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer-service.js +70 -3
- package/dist/src/cluster/block-transfer-service.js.map +1 -1
- package/dist/src/cluster/block-transfer.d.ts +16 -1
- package/dist/src/cluster/block-transfer.d.ts.map +1 -1
- package/dist/src/cluster/block-transfer.js +73 -72
- package/dist/src/cluster/block-transfer.js.map +1 -1
- package/dist/src/cluster/client.d.ts +4 -6
- package/dist/src/cluster/client.d.ts.map +1 -1
- package/dist/src/cluster/client.js +8 -13
- package/dist/src/cluster/client.js.map +1 -1
- package/dist/src/cluster/cluster-policy.d.ts +2 -1
- package/dist/src/cluster/cluster-policy.d.ts.map +1 -1
- package/dist/src/cluster/cluster-policy.js.map +1 -1
- package/dist/src/cluster/cluster-repo.d.ts +172 -17
- package/dist/src/cluster/cluster-repo.d.ts.map +1 -1
- package/dist/src/cluster/cluster-repo.js +553 -149
- package/dist/src/cluster/cluster-repo.js.map +1 -1
- package/dist/src/cluster/commit-proof.js +2 -2
- package/dist/src/cluster/race-resolution.d.ts +51 -7
- package/dist/src/cluster/race-resolution.d.ts.map +1 -1
- package/dist/src/cluster/race-resolution.js +71 -7
- package/dist/src/cluster/race-resolution.js.map +1 -1
- package/dist/src/cluster/rebalance-monitor.d.ts +67 -5
- package/dist/src/cluster/rebalance-monitor.d.ts.map +1 -1
- package/dist/src/cluster/rebalance-monitor.js +120 -26
- package/dist/src/cluster/rebalance-monitor.js.map +1 -1
- package/dist/src/cluster/spread-on-churn.d.ts.map +1 -1
- package/dist/src/cluster/spread-on-churn.js +34 -47
- package/dist/src/cluster/spread-on-churn.js.map +1 -1
- package/dist/src/cohort-topic/host.d.ts.map +1 -1
- package/dist/src/cohort-topic/host.js +8 -6
- package/dist/src/cohort-topic/host.js.map +1 -1
- package/dist/src/cohort-topic/membership-source.js +1 -1
- package/dist/src/cohort-topic/membership-source.js.map +1 -1
- package/dist/src/cohort-topic/peer-codec.d.ts.map +1 -1
- package/dist/src/cohort-topic/peer-codec.js +5 -2
- package/dist/src/cohort-topic/peer-codec.js.map +1 -1
- package/dist/src/cohort-topic/stream-util.d.ts +24 -3
- package/dist/src/cohort-topic/stream-util.d.ts.map +1 -1
- package/dist/src/cohort-topic/stream-util.js +36 -3
- package/dist/src/cohort-topic/stream-util.js.map +1 -1
- package/dist/src/cohort-topic/topic-router.d.ts +9 -0
- package/dist/src/cohort-topic/topic-router.d.ts.map +1 -1
- package/dist/src/cohort-topic/topic-router.js +12 -2
- package/dist/src/cohort-topic/topic-router.js.map +1 -1
- package/dist/src/dispute/client.d.ts.map +1 -1
- package/dist/src/dispute/client.js +15 -3
- package/dist/src/dispute/client.js.map +1 -1
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/libp2p-key-network.d.ts +78 -17
- package/dist/src/libp2p-key-network.d.ts.map +1 -1
- package/dist/src/libp2p-key-network.js +241 -147
- package/dist/src/libp2p-key-network.js.map +1 -1
- package/dist/src/libp2p-node-base.d.ts +35 -1
- package/dist/src/libp2p-node-base.d.ts.map +1 -1
- package/dist/src/libp2p-node-base.js +151 -26
- package/dist/src/libp2p-node-base.js.map +1 -1
- package/dist/src/libp2p-node-rn.d.ts +2 -2
- package/dist/src/libp2p-node-rn.d.ts.map +1 -1
- package/dist/src/libp2p-node-rn.js.map +1 -1
- package/dist/src/libp2p-node.d.ts +2 -2
- package/dist/src/libp2p-node.d.ts.map +1 -1
- package/dist/src/libp2p-node.js.map +1 -1
- package/dist/src/logger.d.ts.map +1 -1
- package/dist/src/logger.js +19 -7
- package/dist/src/logger.js.map +1 -1
- package/dist/src/matchmaking/query-transport.d.ts +3 -4
- package/dist/src/matchmaking/query-transport.d.ts.map +1 -1
- package/dist/src/matchmaking/query-transport.js +9 -9
- package/dist/src/matchmaking/query-transport.js.map +1 -1
- package/dist/src/network/network-manager-service.d.ts +10 -5
- package/dist/src/network/network-manager-service.d.ts.map +1 -1
- package/dist/src/network/network-manager-service.js +11 -2
- package/dist/src/network/network-manager-service.js.map +1 -1
- package/dist/src/network/relay-reservation.d.ts +170 -0
- package/dist/src/network/relay-reservation.d.ts.map +1 -0
- package/dist/src/network/relay-reservation.js +527 -0
- package/dist/src/network/relay-reservation.js.map +1 -0
- package/dist/src/pend-validation.d.ts +3 -2
- package/dist/src/pend-validation.d.ts.map +1 -1
- package/dist/src/pend-validation.js +3 -2
- package/dist/src/pend-validation.js.map +1 -1
- package/dist/src/protocol-client.d.ts +8 -1
- package/dist/src/protocol-client.d.ts.map +1 -1
- package/dist/src/protocol-client.js +11 -0
- package/dist/src/protocol-client.js.map +1 -1
- package/dist/src/reactivity/forwarder-host.d.ts +2 -1
- package/dist/src/reactivity/forwarder-host.d.ts.map +1 -1
- package/dist/src/reactivity/forwarder-host.js +2 -1
- package/dist/src/reactivity/forwarder-host.js.map +1 -1
- package/dist/src/reactivity/origination-manager.d.ts +3 -3
- package/dist/src/reactivity/origination-manager.js +3 -3
- package/dist/src/reactivity/recover-transport.d.ts +22 -14
- package/dist/src/reactivity/recover-transport.d.ts.map +1 -1
- package/dist/src/reactivity/recover-transport.js +32 -19
- package/dist/src/reactivity/recover-transport.js.map +1 -1
- package/dist/src/reactivity/subscription-manager.d.ts +2 -2
- package/dist/src/reactivity/topic-bytes.d.ts +6 -7
- package/dist/src/reactivity/topic-bytes.d.ts.map +1 -1
- package/dist/src/reactivity/topic-bytes.js +8 -9
- package/dist/src/reactivity/topic-bytes.js.map +1 -1
- package/dist/src/repo/client.d.ts +5 -2
- package/dist/src/repo/client.d.ts.map +1 -1
- package/dist/src/repo/client.js +49 -40
- package/dist/src/repo/client.js.map +1 -1
- package/dist/src/repo/cluster-coordinator.d.ts +119 -5
- package/dist/src/repo/cluster-coordinator.d.ts.map +1 -1
- package/dist/src/repo/cluster-coordinator.js +181 -29
- package/dist/src/repo/cluster-coordinator.js.map +1 -1
- package/dist/src/repo/coordinator-repo.d.ts +259 -76
- package/dist/src/repo/coordinator-repo.d.ts.map +1 -1
- package/dist/src/repo/coordinator-repo.js +716 -328
- package/dist/src/repo/coordinator-repo.js.map +1 -1
- package/dist/src/repo/i-under-replication-ledger.d.ts +87 -0
- package/dist/src/repo/i-under-replication-ledger.d.ts.map +1 -0
- package/dist/src/repo/i-under-replication-ledger.js +2 -0
- package/dist/src/repo/i-under-replication-ledger.js.map +1 -0
- package/dist/src/repo/kv-under-replication-ledger.d.ts +91 -0
- package/dist/src/repo/kv-under-replication-ledger.d.ts.map +1 -0
- package/dist/src/repo/kv-under-replication-ledger.js +287 -0
- package/dist/src/repo/kv-under-replication-ledger.js.map +1 -0
- package/dist/src/repo/responsibility.d.ts +37 -0
- package/dist/src/repo/responsibility.d.ts.map +1 -0
- package/dist/src/repo/responsibility.js +37 -0
- package/dist/src/repo/responsibility.js.map +1 -0
- package/dist/src/repo/service.d.ts +44 -15
- package/dist/src/repo/service.d.ts.map +1 -1
- package/dist/src/repo/service.js +64 -27
- package/dist/src/repo/service.js.map +1 -1
- package/dist/src/repo/stuck-reservation.d.ts +127 -0
- package/dist/src/repo/stuck-reservation.d.ts.map +1 -0
- package/dist/src/repo/stuck-reservation.js +179 -0
- package/dist/src/repo/stuck-reservation.js.map +1 -0
- package/dist/src/repo/under-replication-drain.d.ts +208 -0
- package/dist/src/repo/under-replication-drain.d.ts.map +1 -0
- package/dist/src/repo/under-replication-drain.js +461 -0
- package/dist/src/repo/under-replication-drain.js.map +1 -0
- package/dist/src/rn.d.ts +5 -0
- package/dist/src/rn.d.ts.map +1 -1
- package/dist/src/rn.js +5 -0
- package/dist/src/rn.js.map +1 -1
- package/dist/src/storage/block-latch.d.ts +3 -2
- package/dist/src/storage/block-latch.d.ts.map +1 -1
- package/dist/src/storage/block-latch.js +7 -4
- package/dist/src/storage/block-latch.js.map +1 -1
- package/dist/src/storage/block-storage.d.ts +45 -3
- package/dist/src/storage/block-storage.d.ts.map +1 -1
- package/dist/src/storage/block-storage.js +156 -9
- package/dist/src/storage/block-storage.js.map +1 -1
- package/dist/src/storage/i-block-storage.d.ts +57 -5
- package/dist/src/storage/i-block-storage.d.ts.map +1 -1
- package/dist/src/storage/i-block-storage.js.map +1 -1
- package/dist/src/storage/pending-claim.d.ts +167 -0
- package/dist/src/storage/pending-claim.d.ts.map +1 -0
- package/dist/src/storage/pending-claim.js +156 -0
- package/dist/src/storage/pending-claim.js.map +1 -0
- package/dist/src/storage/raw-store-codec.d.ts +13 -0
- package/dist/src/storage/raw-store-codec.d.ts.map +1 -1
- package/dist/src/storage/raw-store-codec.js +24 -3
- package/dist/src/storage/raw-store-codec.js.map +1 -1
- package/dist/src/storage/restoration-coordinator.d.ts.map +1 -1
- package/dist/src/storage/restoration-coordinator.js +2 -1
- package/dist/src/storage/restoration-coordinator.js.map +1 -1
- package/dist/src/storage/ring-shift-coordinator.d.ts.map +1 -1
- package/dist/src/storage/ring-shift-coordinator.js +3 -3
- package/dist/src/storage/ring-shift-coordinator.js.map +1 -1
- package/dist/src/storage/storage-repo.d.ts +137 -5
- package/dist/src/storage/storage-repo.d.ts.map +1 -1
- package/dist/src/storage/storage-repo.js +273 -68
- package/dist/src/storage/storage-repo.js.map +1 -1
- package/dist/src/storage/struct.d.ts +58 -0
- package/dist/src/storage/struct.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.d.ts +92 -11
- package/dist/src/testing/mesh-harness.d.ts.map +1 -1
- package/dist/src/testing/mesh-harness.js +246 -103
- package/dist/src/testing/mesh-harness.js.map +1 -1
- package/package.json +2 -2
- package/readme.md +27 -3
- package/src/cluster/block-transfer-service.ts +132 -4
- package/src/cluster/block-transfer.ts +79 -84
- package/src/cluster/client.ts +115 -119
- package/src/cluster/cluster-policy.ts +2 -1
- package/src/cluster/cluster-repo.ts +3115 -2671
- package/src/cluster/commit-proof.ts +2 -2
- package/src/cluster/race-resolution.ts +76 -7
- package/src/cluster/rebalance-monitor.ts +677 -539
- package/src/cluster/spread-on-churn.ts +34 -54
- package/src/cohort-topic/host.ts +8 -6
- package/src/cohort-topic/membership-source.ts +1 -1
- package/src/cohort-topic/peer-codec.ts +34 -31
- package/src/cohort-topic/stream-util.ts +39 -4
- package/src/cohort-topic/topic-router.ts +12 -2
- package/src/dispute/client.ts +17 -7
- package/src/index.ts +64 -59
- package/src/libp2p-key-network.ts +1377 -1253
- package/src/libp2p-node-base.ts +186 -27
- package/src/libp2p-node-rn.ts +31 -30
- package/src/libp2p-node.ts +37 -36
- package/src/logger.ts +20 -7
- package/src/matchmaking/query-transport.ts +9 -9
- package/src/network/network-manager-service.ts +16 -5
- package/src/network/relay-reservation.ts +636 -0
- package/src/pend-validation.ts +3 -2
- package/src/protocol-client.ts +13 -1
- package/src/reactivity/forwarder-host.ts +2 -1
- package/src/reactivity/origination-manager.ts +3 -3
- package/src/reactivity/recover-transport.ts +39 -22
- package/src/reactivity/subscription-manager.ts +2 -2
- package/src/reactivity/topic-bytes.ts +35 -37
- package/src/repo/client.ts +172 -173
- package/src/repo/cluster-coordinator.ts +1296 -1113
- package/src/repo/coordinator-repo.ts +3087 -2687
- package/src/repo/i-under-replication-ledger.ts +89 -0
- package/src/repo/kv-under-replication-ledger.ts +302 -0
- package/src/repo/responsibility.ts +48 -0
- package/src/repo/service.ts +76 -39
- package/src/repo/stuck-reservation.ts +224 -0
- package/src/repo/under-replication-drain.ts +582 -0
- package/src/rn.ts +74 -69
- package/src/storage/block-latch.ts +7 -4
- package/src/storage/block-storage.ts +161 -10
- package/src/storage/i-block-storage.ts +60 -5
- package/src/storage/pending-claim.ts +200 -0
- package/src/storage/raw-store-codec.ts +26 -3
- package/src/storage/restoration-coordinator.ts +212 -211
- package/src/storage/ring-shift-coordinator.ts +271 -271
- package/src/storage/storage-repo.ts +311 -73
- package/src/storage/struct.ts +58 -0
- package/src/testing/mesh-harness.ts +329 -115
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { NetworkTransactor } from '@optimystic/db-core';
|
|
1
|
+
import { NetworkTransactor, routingKeyForBlock } from '@optimystic/db-core';
|
|
2
|
+
import { DigitreeStore, assembleCohort, hashKey, hashPeerId } from 'p2p-fret';
|
|
2
3
|
import { peerIdFromPrivateKey } from '@libp2p/peer-id';
|
|
3
|
-
import { generateKeyPair } from '@libp2p/crypto/keys';
|
|
4
|
+
import { generateKeyPair, generateKeyPairFromSeed } from '@libp2p/crypto/keys';
|
|
4
5
|
import { ClusterMember, clusterMember } from '../cluster/cluster-repo.js';
|
|
5
6
|
import { createReconcileBlock } from '../cluster/reconcile-block.js';
|
|
6
7
|
import { resolveClusterPolicy } from '../cluster/cluster-policy.js';
|
|
@@ -9,7 +10,6 @@ import { MemoryRawStorage } from '../storage/memory-storage.js';
|
|
|
9
10
|
import { BlockStorage } from '../storage/block-storage.js';
|
|
10
11
|
import { serveBlockArchive, servableProof } from '../storage/block-archive.js';
|
|
11
12
|
import { coordinatorRepo } from '../repo/coordinator-repo.js';
|
|
12
|
-
import { sortPeersByDistance } from '../routing/responsibility.js';
|
|
13
13
|
import { toString as u8ToString } from 'uint8arrays';
|
|
14
14
|
class MockPeerNetwork {
|
|
15
15
|
async connect(_peerId, _protocol) {
|
|
@@ -17,14 +17,26 @@ class MockPeerNetwork {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
/**
|
|
20
|
-
* Mock IKeyNetwork that
|
|
21
|
-
*
|
|
22
|
-
*
|
|
20
|
+
* Mock IKeyNetwork that places a block where production does, by construction: it ranks the mesh's nodes
|
|
21
|
+
* with FRET's own `assembleCohort` over a ring (`DigitreeStore`) holding every node at its real ring
|
|
22
|
+
* coordinate (`hashPeerId`), the walk `Libp2pKeyPeerNetwork` asks FRET for. Like production it hashes the
|
|
23
|
+
* routing key exactly once. Every mesh node serves, so the network-membership scoping production layers on
|
|
24
|
+
* top never removes anyone, and a cohort is simply the nearest `responsibilityK` in walk order.
|
|
25
|
+
* `test/mesh-harness-cohort-parity.spec.ts` pins the two answers equal.
|
|
26
|
+
*
|
|
27
|
+
* - `findCluster`: the nearest `responsibilityK` nodes, nearest first. Nothing is added: a node is in a
|
|
28
|
+
* block's cohort only when it is among the nearest, as in production.
|
|
29
|
+
* - `findCoordinator`: the first non-excluded node of the whole ring's walk, which is the cohort's first
|
|
30
|
+
* member unless excluded, else the next nearest node, cohort member or not. That mirrors production's
|
|
31
|
+
* connected-peer fallback: a pick outside the cohort is a routing hop, not a placement.
|
|
23
32
|
*/
|
|
24
33
|
class MockMeshKeyNetwork {
|
|
25
34
|
nodes;
|
|
26
35
|
responsibilityK;
|
|
27
36
|
failures;
|
|
37
|
+
/** The ring, built on first lookup (node ids hash asynchronously, and `nodes` fills after construction)
|
|
38
|
+
* and rebuilt only if the node count changes; a restarted node keeps its identity and so its position. */
|
|
39
|
+
ring;
|
|
28
40
|
constructor(nodes, responsibilityK, failures = {}) {
|
|
29
41
|
this.nodes = nodes;
|
|
30
42
|
this.responsibilityK = responsibilityK;
|
|
@@ -32,8 +44,7 @@ class MockMeshKeyNetwork {
|
|
|
32
44
|
}
|
|
33
45
|
async findCoordinator(key, options) {
|
|
34
46
|
const excluded = new Set((options?.excludedPeers ?? []).map(p => p.toString()));
|
|
35
|
-
const
|
|
36
|
-
const pick = sorted.find(n => !excluded.has(n.peerId.toString()));
|
|
47
|
+
const pick = (await this.nearest(key, this.nodes.length)).find(n => !excluded.has(n.peerId.toString()));
|
|
37
48
|
if (!pick) {
|
|
38
49
|
throw new Error('No coordinator available for key (all candidates excluded)');
|
|
39
50
|
}
|
|
@@ -43,11 +54,8 @@ class MockMeshKeyNetwork {
|
|
|
43
54
|
if (this.failures.findClusterFails) {
|
|
44
55
|
return {};
|
|
45
56
|
}
|
|
46
|
-
const sorted = this.sortedByDistance(key);
|
|
47
|
-
const k = Math.min(this.responsibilityK, sorted.length);
|
|
48
|
-
const selected = sorted.slice(0, k);
|
|
49
57
|
const peers = {};
|
|
50
|
-
for (const node of
|
|
58
|
+
for (const node of await this.nearest(key, this.responsibilityK)) {
|
|
51
59
|
peers[node.peerId.toString()] = {
|
|
52
60
|
multiaddrs: ['/ip4/127.0.0.1/tcp/8000'],
|
|
53
61
|
publicKey: u8ToString(node.peerId.publicKey.raw, 'base64url')
|
|
@@ -55,13 +63,29 @@ class MockMeshKeyNetwork {
|
|
|
55
63
|
}
|
|
56
64
|
return peers;
|
|
57
65
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
/** The `wants` nodes nearest `key`'s ring coordinate, nearest first. */
|
|
67
|
+
async nearest(key, wants) {
|
|
68
|
+
const { store, byId } = await this.ringStore();
|
|
69
|
+
const ids = assembleCohort(store, await hashKey(key), Math.min(wants, byId.size));
|
|
70
|
+
return ids.map(id => byId.get(id));
|
|
71
|
+
}
|
|
72
|
+
ringStore() {
|
|
73
|
+
if (this.ring?.size !== this.nodes.length) {
|
|
74
|
+
const members = [...this.nodes];
|
|
75
|
+
this.ring = {
|
|
76
|
+
size: members.length,
|
|
77
|
+
ready: (async () => {
|
|
78
|
+
const store = new DigitreeStore();
|
|
79
|
+
const byId = new Map();
|
|
80
|
+
for (const node of members) {
|
|
81
|
+
store.upsert(node.peerId.toString(), await hashPeerId(node.peerId));
|
|
82
|
+
byId.set(node.peerId.toString(), node);
|
|
83
|
+
}
|
|
84
|
+
return { store, byId };
|
|
85
|
+
})()
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return this.ring.ready;
|
|
65
89
|
}
|
|
66
90
|
}
|
|
67
91
|
/**
|
|
@@ -121,6 +145,14 @@ export function resolveMeshPolicy(options) {
|
|
|
121
145
|
}
|
|
122
146
|
});
|
|
123
147
|
}
|
|
148
|
+
/** The 32-byte Ed25519 seed for node `index` of a `keySeed` mesh. */
|
|
149
|
+
function meshKeySeed(keySeed, index) {
|
|
150
|
+
const seed = new Uint8Array(32);
|
|
151
|
+
const view = new DataView(seed.buffer);
|
|
152
|
+
view.setUint32(0, keySeed);
|
|
153
|
+
view.setUint32(4, index);
|
|
154
|
+
return seed;
|
|
155
|
+
}
|
|
124
156
|
/**
|
|
125
157
|
* Creates N interconnected mesh nodes with real components and mock transport.
|
|
126
158
|
* ClusterClient calls route directly to target ClusterMember instances.
|
|
@@ -143,33 +175,51 @@ export async function createMesh(nodeCount, options) {
|
|
|
143
175
|
// `repair-fault-tolerance` advisory then fires once instead of N times.
|
|
144
176
|
const policy = resolveMeshPolicy(options);
|
|
145
177
|
// Generate key pairs for all nodes
|
|
146
|
-
const keyPairs = await Promise.all(Array.from({ length: nodeCount }, async () => {
|
|
147
|
-
const privateKey =
|
|
178
|
+
const keyPairs = await Promise.all(Array.from({ length: nodeCount }, async (_, i) => {
|
|
179
|
+
const privateKey = options.keySeed === undefined
|
|
180
|
+
? await generateKeyPair('Ed25519')
|
|
181
|
+
: await generateKeyPairFromSeed('Ed25519', meshKeySeed(options.keySeed, i));
|
|
148
182
|
return { peerId: peerIdFromPrivateKey(privateKey), privateKey };
|
|
149
183
|
}));
|
|
150
|
-
// Build nodes array (partially — coordinatorRepo added after keyNetwork is ready)
|
|
151
184
|
const nodes = [];
|
|
152
185
|
const peerNetwork = new MockPeerNetwork();
|
|
153
186
|
// One real reconcile callback per node, shared between the member's commit-path `reconcileBlock`
|
|
154
187
|
// and the coordinator's read-path `acquireBlockFromCohort` — production shares one instance
|
|
155
|
-
// (`libp2p-node-base.ts`), and a spec must not be able to tell the two paths apart. Built
|
|
156
|
-
//
|
|
157
|
-
//
|
|
188
|
+
// (`libp2p-node-base.ts`), and a spec must not be able to tell the two paths apart. Built with the
|
|
189
|
+
// member, consumed again by the coordinator, so it is stashed here keyed by peer id rather than
|
|
190
|
+
// widened onto the public `MeshNode` type.
|
|
158
191
|
const reconcileByPeer = new Map();
|
|
192
|
+
/** What outlives a node instance, by peer id: the raw storage it was built over, and its index
|
|
193
|
+
* (`validatorFactory` is invoked with it again on restart). */
|
|
194
|
+
const durableByPeer = new Map();
|
|
195
|
+
/** The CURRENT instance's lifetime, by peer id — flipped to stopped by {@link Mesh.restart}. */
|
|
196
|
+
const lifetimeByPeer = new Map();
|
|
159
197
|
// The mesh key network is built BEFORE the members: each member's `deriveExpectedCluster` (the
|
|
160
|
-
// admission gate's view) needs a per-node key network
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
|
|
198
|
+
// admission gate's view) needs a per-node key network, and constructing it here beats a late-bound
|
|
199
|
+
// slot a closure could fire on before it is filled. Safe because `nodes` is captured by reference
|
|
200
|
+
// and only consulted at call time, after the array is fully populated.
|
|
201
|
+
//
|
|
202
|
+
// `wrapKeyNetwork` is applied HERE, before `makeNodeKeyNetwork` closes over `keyNetwork` below and
|
|
203
|
+
// before any `deriveExpectedCluster` closure is built — every one of them reads the `keyNetwork`
|
|
204
|
+
// binding, so a wrapper assigned to it here is what every node's coordinator, cluster member and the
|
|
205
|
+
// returned `Mesh.keyNetwork` all observe. Reassigning `mesh.keyNetwork` after this function returns
|
|
206
|
+
// only reaches whoever reads that property later (the transactor); it is too late for the rest.
|
|
207
|
+
const sharedKeyNetwork = new MockMeshKeyNetwork(nodes, options.responsibilityK, failures);
|
|
208
|
+
const keyNetwork = options.wrapKeyNetwork ? options.wrapKeyNetwork(sharedKeyNetwork) : sharedKeyNetwork;
|
|
164
209
|
/**
|
|
165
210
|
* One node's own view of the key network — what `Libp2pKeyPeerNetwork` gives a real node:
|
|
166
|
-
* - `findCluster`
|
|
167
|
-
*
|
|
211
|
+
* - `findCluster` is the shared cohort, which holds this node only when it is among the block's
|
|
212
|
+
* nearest `responsibilityK`, so the node's coordinator judges its own responsibility as a real
|
|
213
|
+
* node's does;
|
|
168
214
|
* - under a simulated partition (`failures.partitionSides`), a caller inside a side sees only
|
|
169
215
|
* its side's members of the cohort — the caller-aware filtering lives here, in the per-node
|
|
170
|
-
* wrapper, precisely so `IKeyNetwork` itself needs no "who is asking" parameter.
|
|
171
|
-
*
|
|
172
|
-
*
|
|
216
|
+
* wrapper, precisely so `IKeyNetwork` itself needs no "who is asking" parameter. A side holding
|
|
217
|
+
* none of the cohort sees an empty view, so a node there is not responsible for the block (and
|
|
218
|
+
* the empty-view guard in `cluster-repo.admitMembership` treats such a view as unconfident rather
|
|
219
|
+
* than as a reference set).
|
|
220
|
+
* The SAME instance serves both the member's admission derivation and the node's coordinator, so
|
|
221
|
+
* the two sides of a node can never see different topologies. It holds no state, so a restarted
|
|
222
|
+
* node keeps it.
|
|
173
223
|
*/
|
|
174
224
|
const makeNodeKeyNetwork = (selfPeerId) => {
|
|
175
225
|
const selfStr = selfPeerId.toString();
|
|
@@ -184,24 +234,17 @@ export async function createMesh(nodeCount, options) {
|
|
|
184
234
|
delete peers[id];
|
|
185
235
|
}
|
|
186
236
|
}
|
|
187
|
-
if (!(selfStr in peers)) {
|
|
188
|
-
peers[selfStr] = {
|
|
189
|
-
multiaddrs: ['/ip4/127.0.0.1/tcp/8000'],
|
|
190
|
-
publicKey: u8ToString(selfPeerId.publicKey.raw, 'base64url')
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
237
|
return peers;
|
|
194
238
|
}
|
|
195
239
|
};
|
|
196
240
|
};
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
: new MemoryRawStorage();
|
|
241
|
+
/**
|
|
242
|
+
* Build `meshNode`'s storage repo and cluster member over its durable raw storage, assigning both
|
|
243
|
+
* onto the node. Run once per node at assembly, and again by {@link Mesh.restart}.
|
|
244
|
+
*/
|
|
245
|
+
const buildMember = (meshNode, lifetime) => {
|
|
246
|
+
const { peerId, privateKey } = meshNode;
|
|
247
|
+
const { rawStorage, index } = durableByPeer.get(peerId.toString());
|
|
205
248
|
const storageRepo = new StorageRepo((blockId) => new BlockStorage(blockId, rawStorage));
|
|
206
249
|
// Active reconciliation: when a member commits a block it never pended (cohort drift), or a
|
|
207
250
|
// reader holds a corroborated revision it cannot promote locally, pull the committed revision
|
|
@@ -209,9 +252,12 @@ export async function createMesh(nodeCount, options) {
|
|
|
209
252
|
// distinct peers must agree on the target `(rev, actionId)` AND on the block content, or the
|
|
210
253
|
// pass declines, persisting nothing. `reputation` is omitted — no reputation subsystem in the
|
|
211
254
|
// harness.
|
|
255
|
+
const fetchArchive = makeFetchArchive(nodes, peerId.toString(), failures);
|
|
212
256
|
const reconcileBlock = createReconcileBlock({
|
|
213
257
|
selfPeerId: peerId.toString(),
|
|
214
|
-
|
|
258
|
+
// A stopped instance fetches nothing — the production fetch swallows a failed dial into
|
|
259
|
+
// the same `undefined`.
|
|
260
|
+
fetchArchive: async (peerIdStr, blockId) => lifetime.stopped ? undefined : await fetchArchive(peerIdStr, blockId),
|
|
215
261
|
// Production shape: a proof reconcile verified against the agreed bytes is persisted so
|
|
216
262
|
// the repaired replica serves it onward.
|
|
217
263
|
saveReplicatedBlock: (blockId, block, source, verifiedProof) => storageRepo.saveReplicatedBlock(blockId, block, source, verifiedProof),
|
|
@@ -220,30 +266,19 @@ export async function createMesh(nodeCount, options) {
|
|
|
220
266
|
repairCorroborationClusterSize: policy.repairCorroborationClusterSize
|
|
221
267
|
});
|
|
222
268
|
reconcileByPeer.set(peerId.toString(), reconcileBlock);
|
|
223
|
-
const nodeKeyNetwork =
|
|
224
|
-
nodeKeyNetworkByPeer.set(peerId.toString(), nodeKeyNetwork);
|
|
225
|
-
// The node object exists before its member so the admission derivation below can hand the
|
|
226
|
-
// finished MeshNode to spec-supplied callbacks; `clusterMember`/`coordinatorRepo` are
|
|
227
|
-
// assigned as they are built (member just below, coordinator in phase 2) and the closures
|
|
228
|
-
// only run at vote time, long after both are in place.
|
|
229
|
-
const meshNode = {
|
|
230
|
-
peerId,
|
|
231
|
-
privateKey,
|
|
232
|
-
storageRepo,
|
|
233
|
-
clusterMember: undefined,
|
|
234
|
-
coordinatorRepo: undefined
|
|
235
|
-
};
|
|
269
|
+
const nodeKeyNetwork = meshNode.keyNetwork;
|
|
236
270
|
// Member-side cluster derivation for the membership admission gate — the production shape
|
|
237
271
|
// (`libp2p-node-base.deriveExpectedCluster`): the SAME per-node key network the coordinator
|
|
238
|
-
// selects its cohort from, plus a network-size confidence.
|
|
239
|
-
//
|
|
272
|
+
// selects its cohort from, plus a network-size confidence. A responsible member is in its own
|
|
273
|
+
// cohort, so its view is never empty; `meshConfidence` is the FRET stand-in (default 1, i.e.
|
|
240
274
|
// confident — a partition spec collapses it per side).
|
|
241
275
|
const deriveExpectedCluster = options.deriveExpectedCluster
|
|
242
276
|
? (blockId) => options.deriveExpectedCluster(meshNode, blockId)
|
|
243
277
|
: async (blockId) => ({
|
|
244
|
-
peers: await nodeKeyNetwork.findCluster(
|
|
278
|
+
peers: await nodeKeyNetwork.findCluster(routingKeyForBlock(blockId)) ?? {},
|
|
245
279
|
confidence: options.meshConfidence?.(meshNode) ?? 1
|
|
246
280
|
});
|
|
281
|
+
meshNode.storageRepo = storageRepo;
|
|
247
282
|
meshNode.clusterMember = clusterMember({
|
|
248
283
|
storageRepo,
|
|
249
284
|
peerNetwork,
|
|
@@ -254,11 +289,12 @@ export async function createMesh(nodeCount, options) {
|
|
|
254
289
|
deriveExpectedCluster,
|
|
255
290
|
// Absent by default: `undefined` here is identical to omitting the field, and
|
|
256
291
|
// `validatePendOperations` then skips the validation step entirely.
|
|
257
|
-
validator: options.validatorFactory?.(index, peerId)
|
|
292
|
+
validator: options.validatorFactory?.(index, peerId),
|
|
293
|
+
onCommittedHolders: options.onCommittedHolders && ((committed) => options.onCommittedHolders(meshNode, committed))
|
|
258
294
|
});
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
//
|
|
295
|
+
};
|
|
296
|
+
// Cluster traffic to a node, resolved per call: a delivery always reaches the target's CURRENT
|
|
297
|
+
// member, so a restarted node answers with its new instance.
|
|
262
298
|
const createClusterClient = (targetPeerId) => {
|
|
263
299
|
const target = nodes.find(n => n.peerId.equals(targetPeerId));
|
|
264
300
|
if (!target) {
|
|
@@ -266,6 +302,7 @@ export async function createMesh(nodeCount, options) {
|
|
|
266
302
|
}
|
|
267
303
|
return {
|
|
268
304
|
async update(record) {
|
|
305
|
+
failures.onClusterDelivery?.(targetPeerId.toString(), record);
|
|
269
306
|
if (failures.failingPeers?.has(targetPeerId.toString())) {
|
|
270
307
|
throw new Error(`Peer ${targetPeerId.toString()} is unreachable`);
|
|
271
308
|
}
|
|
@@ -273,7 +310,13 @@ export async function createMesh(nodeCount, options) {
|
|
|
273
310
|
}
|
|
274
311
|
};
|
|
275
312
|
};
|
|
276
|
-
|
|
313
|
+
/**
|
|
314
|
+
* Build `node`'s coordinator over its (already built) storage repo and member. It reaches the other
|
|
315
|
+
* nodes only at call time, never at construction. Run once per node at assembly, and again by
|
|
316
|
+
* {@link Mesh.restart}.
|
|
317
|
+
*/
|
|
318
|
+
const buildCoordinator = (node, lifetime) => {
|
|
319
|
+
const stoppedError = () => new Error(`${node.peerId.toString()} was restarted; this instance is stopped`);
|
|
277
320
|
// Per-node callback: reports the queried peer's latest revision, and NOTHING else. It used to
|
|
278
321
|
// also write the peer's block into local storage ("simulate data sync"), which made every
|
|
279
322
|
// read-repair assertion on this harness observe a convergence the production callback does not
|
|
@@ -281,6 +324,8 @@ export async function createMesh(nodeCount, options) {
|
|
|
281
324
|
// existed to expose. Transfer now happens where it does in production: through
|
|
282
325
|
// `acquireBlockFromCohort` below, gated on a corroborated revision.
|
|
283
326
|
const clusterLatestCallback = async (peerId, blockId, context) => {
|
|
327
|
+
if (lifetime.stopped)
|
|
328
|
+
throw stoppedError();
|
|
284
329
|
// Silence: the peer never answers. REJECTS, mirroring what a dial failure does to the
|
|
285
330
|
// production callback — the coordinator must count this as "did not answer", never as
|
|
286
331
|
// an absent claim (a resolved `undefined` remains the peer answering "I hold nothing").
|
|
@@ -303,17 +348,29 @@ export async function createMesh(nodeCount, options) {
|
|
|
303
348
|
const proof = await servableProof(target.storageRepo, blockId, latest);
|
|
304
349
|
return proof ? { ...latest, proof } : latest;
|
|
305
350
|
};
|
|
306
|
-
// The node's own
|
|
307
|
-
//
|
|
308
|
-
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
//
|
|
312
|
-
//
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
351
|
+
// The node's own (partition-aware) key-network view — the SAME instance the member's admission
|
|
352
|
+
// derivation reads, matching real Libp2pKeyPeerNetwork behavior.
|
|
353
|
+
const nodeKeyNetwork = node.keyNetwork;
|
|
354
|
+
const factory = coordinatorRepo(nodeKeyNetwork,
|
|
355
|
+
// A stopped instance's cluster traffic fails at send — checked per delivery rather than when
|
|
356
|
+
// the client is made, because `ClusterCoordinator` also sends from a commit-retry timer that
|
|
357
|
+
// can fire long after a restart.
|
|
358
|
+
(targetPeerId) => {
|
|
359
|
+
const client = createClusterClient(targetPeerId);
|
|
360
|
+
return {
|
|
361
|
+
async update(record) {
|
|
362
|
+
if (lifetime.stopped)
|
|
363
|
+
throw stoppedError();
|
|
364
|
+
return await client.update(record);
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
},
|
|
368
|
+
// The SAME resolved policy the member was built from, spread the way `libp2p-node-base`
|
|
369
|
+
// spreads it into its coordinator factory — carrying `repairCorroborationClusterSize` (the
|
|
370
|
+
// repair floor's yardstick, DEFAULT_CLUSTER_SIZE when the mesh declared nothing), the
|
|
371
|
+
// production `minAbsoluteClusterSize` (2, not the coordinator's own fallback of 3), and the
|
|
372
|
+
// `allowUnvalidatedSmallCluster` gate — ARMED (false) unless the mesh opted out at its call
|
|
373
|
+
// site.
|
|
317
374
|
{ ...policy });
|
|
318
375
|
node.coordinatorRepo = factory({
|
|
319
376
|
storageRepo: node.storageRepo,
|
|
@@ -322,31 +379,126 @@ export async function createMesh(nodeCount, options) {
|
|
|
322
379
|
clusterLatestCallback,
|
|
323
380
|
// The read path's transfer mechanism — the SAME instance the member uses on the commit
|
|
324
381
|
// path, mirroring how `libp2p-node-base` shares one `reconcileBlock` between both.
|
|
325
|
-
acquireBlockFromCohort: reconcileByPeer.get(node.peerId.toString())
|
|
382
|
+
acquireBlockFromCohort: reconcileByPeer.get(node.peerId.toString()),
|
|
383
|
+
onCommittedHolders: options.onCommittedHolders && ((committed) => options.onCommittedHolders(node, committed))
|
|
326
384
|
});
|
|
385
|
+
};
|
|
386
|
+
// Phase 1: storage + cluster members, in key-pair order (the order `validatorFactory` indexes by).
|
|
387
|
+
for (const [index, { peerId, privateKey }] of keyPairs.entries()) {
|
|
388
|
+
const peerIdStr = peerId.toString();
|
|
389
|
+
durableByPeer.set(peerIdStr, {
|
|
390
|
+
rawStorage: options.rawStorageFactory ? options.rawStorageFactory(index) : new MemoryRawStorage(),
|
|
391
|
+
index
|
|
392
|
+
});
|
|
393
|
+
const lifetime = { stopped: false };
|
|
394
|
+
lifetimeByPeer.set(peerIdStr, lifetime);
|
|
395
|
+
// The node object exists before its member so the admission derivation can hand the finished
|
|
396
|
+
// MeshNode to spec-supplied callbacks; `storageRepo`/`clusterMember` are assigned by
|
|
397
|
+
// `buildMember` just below and `coordinatorRepo` in phase 2, and those closures only run at
|
|
398
|
+
// vote time, long after all three are in place.
|
|
399
|
+
const meshNode = {
|
|
400
|
+
peerId,
|
|
401
|
+
privateKey,
|
|
402
|
+
keyNetwork: makeNodeKeyNetwork(peerId),
|
|
403
|
+
storageRepo: undefined,
|
|
404
|
+
clusterMember: undefined,
|
|
405
|
+
coordinatorRepo: undefined
|
|
406
|
+
};
|
|
407
|
+
buildMember(meshNode, lifetime);
|
|
408
|
+
nodes.push(meshNode);
|
|
327
409
|
}
|
|
328
|
-
|
|
410
|
+
// Phase 2: coordinator repos, once every member exists.
|
|
411
|
+
for (const node of nodes) {
|
|
412
|
+
buildCoordinator(node, lifetimeByPeer.get(node.peerId.toString()));
|
|
413
|
+
}
|
|
414
|
+
const restart = (node) => {
|
|
415
|
+
const peerIdStr = node.peerId.toString();
|
|
416
|
+
if (!nodes.includes(node)) {
|
|
417
|
+
throw new Error(`restart: ${peerIdStr} is not a node of this mesh`);
|
|
418
|
+
}
|
|
419
|
+
// NOTE: this severs the old instance's traffic to OTHER nodes, not its in-process path to its own
|
|
420
|
+
// member and storage repo, which still write the shared raw storage if called. After a restart
|
|
421
|
+
// between transactions only one thing could reach it: a scheduled commit retry aimed at the
|
|
422
|
+
// coordinator's OWN member, which exists only when that member threw while applying the broadcast —
|
|
423
|
+
// a local fault no spec injects today. If a spec ever does, or restarts a node MID-transaction,
|
|
424
|
+
// sever the old coordinator's local member too.
|
|
425
|
+
lifetimeByPeer.get(peerIdStr).stopped = true;
|
|
426
|
+
node.clusterMember.dispose();
|
|
427
|
+
const lifetime = { stopped: false };
|
|
428
|
+
lifetimeByPeer.set(peerIdStr, lifetime);
|
|
429
|
+
buildMember(node, lifetime);
|
|
430
|
+
buildCoordinator(node, lifetime);
|
|
431
|
+
};
|
|
432
|
+
return { nodes, failures, keyNetwork, restart };
|
|
329
433
|
}
|
|
330
434
|
/**
|
|
331
435
|
* The nodes the key network keeps OUT of `blockId`'s cohort — peers that receive none of the
|
|
332
436
|
* block's cluster traffic, and so hold none of its content until something repairs them.
|
|
333
437
|
*
|
|
334
|
-
*
|
|
335
|
-
* from run to run: in a 3-node `responsibilityK: 1` mesh,
|
|
336
|
-
* peer about a third of the time, and then it receives the
|
|
337
|
-
* needs a genuinely non-responsible node has to ask the routing
|
|
438
|
+
* Unless the mesh is seeded (`keySeed`), peer ids are generated fresh per mesh, so which node is
|
|
439
|
+
* responsible for a given block is random from run to run: in a 3-node `responsibilityK: 1` mesh,
|
|
440
|
+
* `nodes[1]` is the block's sole responsible peer about a third of the time, and then it receives the
|
|
441
|
+
* writer's commit directly. A test that needs a genuinely non-responsible node has to ask the routing
|
|
442
|
+
* layer rather than assume an index.
|
|
338
443
|
*/
|
|
339
444
|
export async function nonResponsibleNodes(mesh, blockId) {
|
|
340
|
-
const cohort = await mesh.keyNetwork.findCluster(
|
|
445
|
+
const cohort = await mesh.keyNetwork.findCluster(routingKeyForBlock(blockId));
|
|
341
446
|
return mesh.nodes.filter(node => !(node.peerId.toString() in cohort));
|
|
342
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* The nodes the key network places in `blockId`'s cohort, nearest first — the complement of
|
|
450
|
+
* {@link nonResponsibleNodes}. A node outside this list refuses a write for the block through its own
|
|
451
|
+
* coordinator (`CoordinatorRepo` checks responsibility), so a spec that writes through one node's
|
|
452
|
+
* coordinator directly picks that node from here rather than by index.
|
|
453
|
+
*/
|
|
454
|
+
export async function responsibleNodes(mesh, blockId) {
|
|
455
|
+
const cohort = Object.keys(await mesh.keyNetwork.findCluster(routingKeyForBlock(blockId)));
|
|
456
|
+
return cohort.map(id => mesh.nodes.find(node => node.peerId.toString() === id));
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* The first `count` ids of the form `${prefix}-${i}` whose cohort includes `node` — for a spec that needs
|
|
460
|
+
* several blocks one node is responsible for (a multi-block pend through that node's coordinator, or
|
|
461
|
+
* sequential writes it coordinates alone). In a `responsibilityK: 1` mesh these are blocks the node is
|
|
462
|
+
* the SOLE responsible peer for. Throws after `maxCandidates` ids rather than looping on a node whose ring
|
|
463
|
+
* arc no id lands in.
|
|
464
|
+
*/
|
|
465
|
+
export async function blockIdsInCohortOf(mesh, node, count, prefix, maxCandidates = 10_000) {
|
|
466
|
+
const nodeId = node.peerId.toString();
|
|
467
|
+
const ids = [];
|
|
468
|
+
for (let i = 0; ids.length < count && i < maxCandidates; i++) {
|
|
469
|
+
const id = `${prefix}-${i}`;
|
|
470
|
+
if (nodeId in await mesh.keyNetwork.findCluster(routingKeyForBlock(id)))
|
|
471
|
+
ids.push(id);
|
|
472
|
+
}
|
|
473
|
+
if (ids.length < count) {
|
|
474
|
+
throw new Error(`blockIdsInCohortOf: only ${ids.length} of ${count} ids with prefix ${prefix} place ${nodeId} in their cohort`);
|
|
475
|
+
}
|
|
476
|
+
return ids;
|
|
477
|
+
}
|
|
343
478
|
/**
|
|
344
479
|
* Builds a NetworkTransactor over a mesh. All nodes share the same mock
|
|
345
480
|
* infrastructure so a single transactor routes to every peer via `getRepo`.
|
|
481
|
+
* It runs on no node (no `localPeerId`), so a coverage tie between cohort
|
|
482
|
+
* members goes to the nearest — a client-only writer's shape.
|
|
346
483
|
* Suitable for solo-mesh tests; for multi-node tests prefer
|
|
347
484
|
* `buildNetworkTransactors` to label "which node is driving".
|
|
348
485
|
*/
|
|
349
|
-
export const buildNetworkTransactor = (mesh, options = {}) =>
|
|
486
|
+
export const buildNetworkTransactor = (mesh, options = {}) => meshTransactor(mesh, options, undefined);
|
|
487
|
+
/**
|
|
488
|
+
* Builds one NetworkTransactor per mesh node, keyed by peer-id string. Each
|
|
489
|
+
* transactor shares the mesh's key network and peer→repo map, and runs on its
|
|
490
|
+
* node the way a production node's transactor does (`localPeerId`): when that
|
|
491
|
+
* node is in a block's cohort and ties another member on coverage, it
|
|
492
|
+
* coordinates the write itself. Reads and retries still route by proximity.
|
|
493
|
+
*/
|
|
494
|
+
export const buildNetworkTransactors = (mesh, options = {}) => {
|
|
495
|
+
const transactors = new Map();
|
|
496
|
+
for (const node of mesh.nodes) {
|
|
497
|
+
transactors.set(node.peerId.toString(), meshTransactor(mesh, options, node));
|
|
498
|
+
}
|
|
499
|
+
return transactors;
|
|
500
|
+
};
|
|
501
|
+
function meshTransactor(mesh, options, localNode) {
|
|
350
502
|
const repoByPeer = new Map();
|
|
351
503
|
for (const node of mesh.nodes) {
|
|
352
504
|
const repo = node.coordinatorRepo;
|
|
@@ -355,25 +507,16 @@ export const buildNetworkTransactor = (mesh, options = {}) => {
|
|
|
355
507
|
return new NetworkTransactor({
|
|
356
508
|
timeoutMs: options.timeoutMs ?? 5_000,
|
|
357
509
|
abortOrCancelTimeoutMs: options.abortOrCancelTimeoutMs ?? 5_000,
|
|
510
|
+
// NOTE: every transactor, `localNode`'s included, reads the unpartitioned shared view, not `localNode.keyNetwork`;
|
|
511
|
+
// no spec drives `partitionSides` through a node's transactor today. If one does, pass the node's own view.
|
|
358
512
|
keyNetwork: mesh.keyNetwork,
|
|
359
513
|
getRepo: (peerId) => {
|
|
360
514
|
const repo = repoByPeer.get(peerId.toString());
|
|
361
515
|
if (!repo)
|
|
362
516
|
throw new Error(`Unknown peer ${peerId.toString()}`);
|
|
363
517
|
return repo;
|
|
364
|
-
}
|
|
518
|
+
},
|
|
519
|
+
localPeerId: localNode?.peerId
|
|
365
520
|
});
|
|
366
|
-
}
|
|
367
|
-
/**
|
|
368
|
-
* Builds one NetworkTransactor per mesh node, keyed by peer-id string. Each
|
|
369
|
-
* transactor shares the mesh's key network and peer→repo map — the separate
|
|
370
|
-
* instances exist so tests can semantically say "driven by node A".
|
|
371
|
-
*/
|
|
372
|
-
export const buildNetworkTransactors = (mesh, options = {}) => {
|
|
373
|
-
const transactors = new Map();
|
|
374
|
-
for (const node of mesh.nodes) {
|
|
375
|
-
transactors.set(node.peerId.toString(), buildNetworkTransactor(mesh, options));
|
|
376
|
-
}
|
|
377
|
-
return transactors;
|
|
378
|
-
};
|
|
521
|
+
}
|
|
379
522
|
//# sourceMappingURL=mesh-harness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-harness.js","sourceRoot":"","sources":["../../../src/testing/mesh-harness.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mesh-harness.js","sourceRoot":"","sources":["../../../src/testing/mesh-harness.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@optimystic/db-p2p",
|
|
3
|
-
"version": "1.0.0
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "P2P database functionality for Optimystic",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"@multiformats/multiaddr": "^13.0.1",
|
|
87
87
|
"@noble/curves": "^2.0.1",
|
|
88
88
|
"@noble/hashes": "^2.0.1",
|
|
89
|
-
"@optimystic/db-core": "^1.0.0
|
|
89
|
+
"@optimystic/db-core": "^1.0.0",
|
|
90
90
|
"async-mutex": "^0.5.0",
|
|
91
91
|
"debug": "^4.4.3",
|
|
92
92
|
"it-all": "^3.0.9",
|