@fireproof/core 0.0.5 → 0.0.7

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.
@@ -1,19 +1,18 @@
1
1
  /* global describe, it */
2
2
  // import { describe, it } from 'mocha'
3
3
  import assert from 'node:assert'
4
- import {
5
- advance,
6
- EventBlock,
7
- findCommonAncestorWithSortedEvents,
8
- findUnknownSortedEvents,
9
- decodeEventBlock,
10
- findEventsToSync
11
- } from '../src/clock.js'
4
+ import { advance, EventBlock, decodeEventBlock, findEventsToSync as findEventsWithProofToSync } from '../src/clock.js'
12
5
  // import { vis } from '../src/clock.js'
13
6
  import { Blockstore, seqEventData, setSeq } from './helpers.js'
14
7
 
8
+ const testAdvance = async (blocks, oldHead, event) => {
9
+ const { head } = await advance(blocks, oldHead, event)
10
+ return head
11
+ }
12
+
13
+ const testFindEventsToSync = async (blocks, head) => (await findEventsWithProofToSync(blocks, head)).events
14
+
15
15
  async function visHead (blocks, head) {
16
- // const values =
17
16
  head.map(async (cid) => {
18
17
  const block = await blocks.get(cid)
19
18
  return (await decodeEventBlock(block.bytes)).value?.data?.value
@@ -24,7 +23,7 @@ async function visHead (blocks, head) {
24
23
  async function makeNext (blocks, parent, eventData) {
25
24
  const event = await EventBlock.create(eventData, parent)
26
25
  await blocks.put(event.cid, event.bytes)
27
- const head = await advance(blocks, parent, event.cid)
26
+ const head = await testAdvance(blocks, parent, event.cid)
28
27
  return { event, head }
29
28
  }
30
29
 
@@ -35,18 +34,14 @@ describe('Clock', () => {
35
34
  const event = await EventBlock.create({})
36
35
 
37
36
  await blocks.put(event.cid, event.bytes)
38
- const head = await advance(blocks, [], event.cid)
37
+ const head = await testAdvance(blocks, [], event.cid)
39
38
 
40
39
  // for await (const line of vis(blocks, head)) console.log(line)
41
40
  assert.equal(head.length, 1)
42
41
  assert.equal(head[0].toString(), event.cid.toString())
43
42
 
44
43
  const sinceHead = head
45
- const toSync = await findUnknownSortedEvents(
46
- blocks,
47
- sinceHead,
48
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
49
- )
44
+ const toSync = await testFindEventsToSync(blocks, sinceHead)
50
45
  assert.equal(toSync.length, 0)
51
46
  })
52
47
 
@@ -70,7 +65,7 @@ describe('Clock', () => {
70
65
  assert.equal(head1.length, 1)
71
66
  assert.equal(head1[0].toString(), event1.cid.toString())
72
67
 
73
- const toSync1 = await findEventsToSync(blocks, head1)
68
+ const toSync1 = await testFindEventsToSync(blocks, head1)
74
69
 
75
70
  assert.equal(toSync1.length, 0)
76
71
 
@@ -82,10 +77,10 @@ describe('Clock', () => {
82
77
  assert.equal(head2.length, 1)
83
78
  assert.equal(head2[0].toString(), event2.cid.toString())
84
79
 
85
- const toSync2 = await findEventsToSync(blocks, head2)
80
+ const toSync2 = await testFindEventsToSync(blocks, head2)
86
81
  assert.equal(toSync2.length, 0)
87
82
 
88
- const toSync1b = await findEventsToSync(blocks, [...head2, ...head0])
83
+ const toSync1b = await testFindEventsToSync(blocks, [...head2, ...head0])
89
84
 
90
85
  assert.equal(toSync1b.length, 2)
91
86
  assert.equal(toSync1b[0].value.data.value, 'event1bob')
@@ -100,13 +95,13 @@ describe('Clock', () => {
100
95
  assert.equal(head3.length, 1)
101
96
  assert.equal(head3[0].toString(), event3.cid.toString())
102
97
 
103
- const toSync3 = await findEventsToSync(blocks, [...head3, ...head0])
98
+ const toSync3 = await testFindEventsToSync(blocks, [...head3, ...head0])
104
99
  assert.equal(toSync3.length, 3)
105
100
  assert.equal(toSync3[0].value.data.value, 'event1bob')
106
101
  assert.equal(toSync3[1].value.data.value, 'event2carol')
107
102
  assert.equal(toSync3[2].value.data.value, 'event3dave')
108
103
 
109
- const toSync3B = await findEventsToSync(blocks, [...head3, ...head1])
104
+ const toSync3B = await testFindEventsToSync(blocks, [...head3, ...head1])
110
105
  assert.equal(toSync3B.length, 2)
111
106
  assert.equal(toSync3B[0].value.data.value, 'event2carol')
112
107
  assert.equal(toSync3B[1].value.data.value, 'event3dave')
@@ -119,28 +114,28 @@ describe('Clock', () => {
119
114
  assert.equal(head4.length, 1)
120
115
  assert.equal(head4[0].toString(), event4.cid.toString())
121
116
 
122
- const toSync4 = await findEventsToSync(blocks, [...head4, ...head0])
117
+ const toSync4 = await testFindEventsToSync(blocks, [...head4, ...head0])
123
118
  assert.equal(toSync4.length, 4)
124
119
  assert.equal(toSync4[0].value.data.value, 'event1bob')
125
120
  assert.equal(toSync4[1].value.data.value, 'event2carol')
126
121
  assert.equal(toSync4[2].value.data.value, 'event3dave')
127
122
  assert.equal(toSync4[3].value.data.value, 'event4eve')
128
123
 
129
- const toSync4B = await findEventsToSync(blocks, [...head4, ...head1])
124
+ const toSync4B = await testFindEventsToSync(blocks, [...head4, ...head1])
130
125
 
131
126
  assert.equal(toSync4B.length, 3)
132
127
  assert.equal(toSync4B[0].value.data.value, 'event2carol')
133
128
  assert.equal(toSync4B[1].value.data.value, 'event3dave')
134
129
  assert.equal(toSync4B[2].value.data.value, 'event4eve')
135
130
 
136
- const toSync4C = await findEventsToSync(blocks, [...head4, ...head2])
131
+ const toSync4C = await testFindEventsToSync(blocks, [...head4, ...head2])
137
132
 
138
133
  assert.equal(toSync4C.length, 2)
139
134
  assert.equal(toSync4C[0].value.data.value, 'event3dave')
140
135
  assert.equal(toSync4C[1].value.data.value, 'event4eve')
141
136
 
142
137
  // don't ask if you already know
143
- // const toSync4D = await findEventsToSync(blocks, [...head4, ...head3])
138
+ // const toSync4D = await testFindEventsToSync(blocks, [...head4, ...head3])
144
139
  // assert.equal(toSync4D.length, 0)
145
140
 
146
141
  /*
@@ -150,7 +145,7 @@ describe('Clock', () => {
150
145
 
151
146
  assert.equal(head5.length, 1)
152
147
  assert.equal(head5[0].toString(), event5.cid.toString())
153
- const toSync5 = await findEventsToSync(blocks, [...head5, ...head0])
148
+ const toSync5 = await testFindEventsToSync(blocks, [...head5, ...head0])
154
149
  assert.equal(toSync5.length, 5)
155
150
  assert.equal(toSync5[0].value.data.value, 'event1bob')
156
151
  assert.equal(toSync5[1].value.data.value, 'event2carol')
@@ -158,7 +153,7 @@ describe('Clock', () => {
158
153
  assert.equal(toSync5[3].value.data.value, 'event4eve')
159
154
  assert.equal(toSync5[4].value.data.value, 'event5frank')
160
155
 
161
- const toSync5B = await findEventsToSync(blocks, [...head5, ...head1])
156
+ const toSync5B = await testFindEventsToSync(blocks, [...head5, ...head1])
162
157
 
163
158
  assert.equal(toSync5B.length, 4)
164
159
  assert.equal(toSync5B[0].value.data.value, 'event2carol')
@@ -166,18 +161,18 @@ describe('Clock', () => {
166
161
  assert.equal(toSync5B[2].value.data.value, 'event4eve')
167
162
  assert.equal(toSync5B[3].value.data.value, 'event5frank')
168
163
 
169
- const toSync5C = await findEventsToSync(blocks, [...head5, ...head2])
164
+ const toSync5C = await testFindEventsToSync(blocks, [...head5, ...head2])
170
165
  assert(toSync5C.length > 0, 'should have 3 events, has ' + toSync5C.length)
171
166
  assert.equal(toSync5C[0].value.data.value, 'event3dave')
172
167
  assert.equal(toSync5C[1].value.data.value, 'event4eve')
173
168
  assert.equal(toSync5C[2].value.data.value, 'event5frank')
174
169
 
175
- const toSync5D = await findEventsToSync(blocks, [...head5, ...head3])
170
+ const toSync5D = await testFindEventsToSync(blocks, [...head5, ...head3])
176
171
  assert.equal(toSync5D.length, 2) // 4
177
172
  assert.equal(toSync5D[0].value.data.value, 'event4eve')
178
173
  assert.equal(toSync5D[1].value.data.value, 'event5frank')
179
174
 
180
- const toSync5E = await findEventsToSync(blocks, [...head5, ...head4])
175
+ const toSync5E = await testFindEventsToSync(blocks, [...head5, ...head4])
181
176
  assert.equal(toSync5E.length, 1) // 5
182
177
  assert.equal(toSync5E[0].value.data.value, 'event5frank')
183
178
 
@@ -189,7 +184,7 @@ describe('Clock', () => {
189
184
  assert.equal(head6.length, 1)
190
185
  assert.equal(head6[0].toString(), event6.cid.toString())
191
186
 
192
- const toSync6 = await findEventsToSync(blocks, [...head6, ...head0])
187
+ const toSync6 = await testFindEventsToSync(blocks, [...head6, ...head0])
193
188
  assert.equal(toSync6.length, 6) // 1
194
189
  assert.equal(toSync6[0].value.data.value, 'event1bob')
195
190
  assert.equal(toSync6[1].value.data.value, 'event2carol')
@@ -198,7 +193,7 @@ describe('Clock', () => {
198
193
  assert.equal(toSync6[4].value.data.value, 'event5frank')
199
194
  assert.equal(toSync6[5].value.data.value, 'event6grace')
200
195
 
201
- const toSync6B = await findEventsToSync(blocks, [...head6, ...head1])
196
+ const toSync6B = await testFindEventsToSync(blocks, [...head6, ...head1])
202
197
  assert.equal(toSync6B.length, 5) // 2
203
198
  assert.equal(toSync6B[0].value.data.value, 'event2carol')
204
199
  assert.equal(toSync6B[1].value.data.value, 'event3dave')
@@ -206,25 +201,25 @@ describe('Clock', () => {
206
201
  assert.equal(toSync6B[3].value.data.value, 'event5frank')
207
202
  assert.equal(toSync6B[4].value.data.value, 'event6grace')
208
203
 
209
- const toSync6C = await findEventsToSync(blocks, [...head6, ...head2])
204
+ const toSync6C = await testFindEventsToSync(blocks, [...head6, ...head2])
210
205
  assert.equal(toSync6C.length, 4) // 3
211
206
  assert.equal(toSync6C[0].value.data.value, 'event3dave')
212
207
  assert.equal(toSync6C[1].value.data.value, 'event4eve')
213
208
  assert.equal(toSync6C[2].value.data.value, 'event5frank')
214
209
  assert.equal(toSync6C[3].value.data.value, 'event6grace')
215
210
 
216
- const toSync6D = await findEventsToSync(blocks, [...head6, ...head3])
211
+ const toSync6D = await testFindEventsToSync(blocks, [...head6, ...head3])
217
212
  assert.equal(toSync6D.length, 3) // 4
218
213
  assert.equal(toSync6D[0].value.data.value, 'event4eve')
219
214
  assert.equal(toSync6D[1].value.data.value, 'event5frank')
220
215
  assert.equal(toSync6D[2].value.data.value, 'event6grace')
221
216
 
222
- const toSync6E = await findEventsToSync(blocks, [...head6, ...head4])
217
+ const toSync6E = await testFindEventsToSync(blocks, [...head6, ...head4])
223
218
  assert.equal(toSync6E.length, 2) // 5
224
219
  assert.equal(toSync6E[0].value.data.value, 'event5frank')
225
220
  assert.equal(toSync6E[1].value.data.value, 'event6grace')
226
221
 
227
- const toSync6F = await findEventsToSync(blocks, [...head6, ...head5])
222
+ const toSync6F = await testFindEventsToSync(blocks, [...head6, ...head5])
228
223
  assert.equal(toSync6F.length, 1)
229
224
  assert.equal(toSync6F[0].value.data.value, 'event6grace')
230
225
 
@@ -236,7 +231,7 @@ describe('Clock', () => {
236
231
  assert.equal(head7.length, 1)
237
232
  assert.equal(head7[0].toString(), event7.cid.toString())
238
233
 
239
- const toSync7 = await findEventsToSync(blocks, [...head7, ...head0])
234
+ const toSync7 = await testFindEventsToSync(blocks, [...head7, ...head0])
240
235
  assert.equal(toSync7.length, 7)
241
236
  assert.equal(toSync7[0].value.data.value, 'event1bob')
242
237
  assert.equal(toSync7[1].value.data.value, 'event2carol')
@@ -246,7 +241,7 @@ describe('Clock', () => {
246
241
  assert.equal(toSync7[5].value.data.value, 'event6grace')
247
242
  assert.equal(toSync7[6].value.data.value, 'event7holly')
248
243
 
249
- const toSync7B = await findEventsToSync(blocks, [...head7, ...head1])
244
+ const toSync7B = await testFindEventsToSync(blocks, [...head7, ...head1])
250
245
  assert.equal(toSync7B.length, 6)
251
246
  assert.equal(toSync7B[0].value.data.value, 'event2carol')
252
247
  assert.equal(toSync7B[1].value.data.value, 'event3dave')
@@ -254,7 +249,7 @@ describe('Clock', () => {
254
249
  assert.equal(toSync7B[3].value.data.value, 'event5frank')
255
250
  assert.equal(toSync7B[4].value.data.value, 'event6grace')
256
251
 
257
- const toSync7C = await findEventsToSync(blocks, [...head7, ...head2])
252
+ const toSync7C = await testFindEventsToSync(blocks, [...head7, ...head2])
258
253
  assert.equal(toSync7C.length, 5)
259
254
  assert.equal(toSync7C[0].value.data.value, 'event3dave')
260
255
  assert.equal(toSync7C[1].value.data.value, 'event4eve')
@@ -262,20 +257,20 @@ describe('Clock', () => {
262
257
  assert.equal(toSync7C[3].value.data.value, 'event6grace')
263
258
  assert.equal(toSync7C[4].value.data.value, 'event7holly')
264
259
 
265
- const toSync7D = await findEventsToSync(blocks, [...head7, ...head3])
260
+ const toSync7D = await testFindEventsToSync(blocks, [...head7, ...head3])
266
261
  assert.equal(toSync7D.length, 4)
267
262
  assert.equal(toSync7D[0].value.data.value, 'event4eve')
268
263
  assert.equal(toSync7D[1].value.data.value, 'event5frank')
269
264
  assert.equal(toSync7D[2].value.data.value, 'event6grace')
270
265
  assert.equal(toSync7D[3].value.data.value, 'event7holly')
271
266
 
272
- const toSync7E = await findEventsToSync(blocks, [...head7, ...head4])
267
+ const toSync7E = await testFindEventsToSync(blocks, [...head7, ...head4])
273
268
  assert.equal(toSync7E.length, 3)
274
269
  assert.equal(toSync7E[0].value.data.value, 'event5frank')
275
270
  assert.equal(toSync7E[1].value.data.value, 'event6grace')
276
271
  assert.equal(toSync7E[2].value.data.value, 'event7holly')
277
272
 
278
- const toSync7F = await findEventsToSync(blocks, [...head7, ...head5])
273
+ const toSync7F = await testFindEventsToSync(blocks, [...head7, ...head5])
279
274
  assert.equal(toSync7F.length, 2)
280
275
  assert.equal(toSync7F[0].value.data.value, 'event6grace')
281
276
  assert.equal(toSync7F[1].value.data.value, 'event7holly')
@@ -288,7 +283,7 @@ describe('Clock', () => {
288
283
  assert.equal(head8.length, 1)
289
284
  assert.equal(head8[0].toString(), event8.cid.toString())
290
285
 
291
- const toSync8 = await findEventsToSync(blocks, [...head8, ...head0])
286
+ const toSync8 = await testFindEventsToSync(blocks, [...head8, ...head0])
292
287
  assert.equal(toSync8.length, 8)
293
288
  assert.equal(toSync8[0].value.data.value, 'event1bob')
294
289
  assert.equal(toSync8[1].value.data.value, 'event2carol')
@@ -299,7 +294,7 @@ describe('Clock', () => {
299
294
  assert.equal(toSync8[6].value.data.value, 'event7holly')
300
295
  assert.equal(toSync8[7].value.data.value, 'event8isaac')
301
296
 
302
- const toSync8B = await findEventsToSync(blocks, [...head8, ...head1])
297
+ const toSync8B = await testFindEventsToSync(blocks, [...head8, ...head1])
303
298
  assert.equal(toSync8B.length, 7)
304
299
  assert.equal(toSync8B[0].value.data.value, 'event2carol')
305
300
  assert.equal(toSync8B[1].value.data.value, 'event3dave')
@@ -309,7 +304,7 @@ describe('Clock', () => {
309
304
  assert.equal(toSync8B[5].value.data.value, 'event7holly')
310
305
  assert.equal(toSync8B[6].value.data.value, 'event8isaac')
311
306
 
312
- const toSync8C = await findEventsToSync(blocks, [...head8, ...head2])
307
+ const toSync8C = await testFindEventsToSync(blocks, [...head8, ...head2])
313
308
  assert.equal(toSync8C.length, 6) // 3
314
309
  assert.equal(toSync8C[0].value.data.value, 'event3dave')
315
310
  assert.equal(toSync8C[1].value.data.value, 'event4eve')
@@ -318,7 +313,7 @@ describe('Clock', () => {
318
313
  assert.equal(toSync8C[4].value.data.value, 'event7holly')
319
314
  assert.equal(toSync8C[5].value.data.value, 'event8isaac')
320
315
 
321
- const toSync8D = await findEventsToSync(blocks, [...head8, ...head3])
316
+ const toSync8D = await testFindEventsToSync(blocks, [...head8, ...head3])
322
317
  assert.equal(toSync8D.length, 5) // 4
323
318
  assert.equal(toSync8D[0].value.data.value, 'event4eve')
324
319
  assert.equal(toSync8D[1].value.data.value, 'event5frank')
@@ -326,14 +321,14 @@ describe('Clock', () => {
326
321
  assert.equal(toSync8D[3].value.data.value, 'event7holly')
327
322
  assert.equal(toSync8D[4].value.data.value, 'event8isaac')
328
323
 
329
- const toSync8E = await findEventsToSync(blocks, [...head8, ...head4])
324
+ const toSync8E = await testFindEventsToSync(blocks, [...head8, ...head4])
330
325
  assert.equal(toSync8E.length, 4) // 5
331
326
  assert.equal(toSync8E[0].value.data.value, 'event5frank')
332
327
  assert.equal(toSync8E[1].value.data.value, 'event6grace')
333
328
  assert.equal(toSync8E[2].value.data.value, 'event7holly')
334
329
  assert.equal(toSync8E[3].value.data.value, 'event8isaac')
335
330
 
336
- const toSync8F = await findEventsToSync(blocks, [...head8, ...head5])
331
+ const toSync8F = await testFindEventsToSync(blocks, [...head8, ...head5])
337
332
  assert.equal(toSync8F.length, 3) // 6
338
333
  assert.equal(toSync8F[0].value.data.value, 'event6grace')
339
334
  assert.equal(toSync8F[1].value.data.value, 'event7holly')
@@ -347,7 +342,7 @@ describe('Clock', () => {
347
342
  assert.equal(head9.length, 1)
348
343
  assert.equal(head9[0].toString(), event9.cid.toString())
349
344
 
350
- const toSync9 = await findEventsToSync(blocks, [...head9, ...head0])
345
+ const toSync9 = await testFindEventsToSync(blocks, [...head9, ...head0])
351
346
  assert.equal(toSync9.length, 9)
352
347
  assert.equal(toSync9[0].value.data.value, 'event1bob')
353
348
  assert.equal(toSync9[1].value.data.value, 'event2carol')
@@ -359,7 +354,7 @@ describe('Clock', () => {
359
354
  assert.equal(toSync9[7].value.data.value, 'event8isaac')
360
355
  assert.equal(toSync9[8].value.data.value, 'event9jen')
361
356
 
362
- const toSync9B = await findEventsToSync(blocks, [...head9, ...head1])
357
+ const toSync9B = await testFindEventsToSync(blocks, [...head9, ...head1])
363
358
  assert.equal(toSync9B.length, 8)
364
359
  assert.equal(toSync9B[0].value.data.value, 'event2carol')
365
360
  assert.equal(toSync9B[1].value.data.value, 'event3dave')
@@ -370,7 +365,7 @@ describe('Clock', () => {
370
365
  assert.equal(toSync9B[6].value.data.value, 'event8isaac')
371
366
  assert.equal(toSync9B[7].value.data.value, 'event9jen')
372
367
 
373
- const toSync9C = await findEventsToSync(blocks, [...head9, ...head2])
368
+ const toSync9C = await testFindEventsToSync(blocks, [...head9, ...head2])
374
369
  assert.equal(toSync9C.length, 7)
375
370
  assert.equal(toSync9C[0].value.data.value, 'event3dave')
376
371
  assert.equal(toSync9C[1].value.data.value, 'event4eve')
@@ -380,7 +375,7 @@ describe('Clock', () => {
380
375
  assert.equal(toSync9C[5].value.data.value, 'event8isaac')
381
376
  assert.equal(toSync9C[6].value.data.value, 'event9jen')
382
377
 
383
- const toSync9D = await findEventsToSync(blocks, [...head9, ...head3])
378
+ const toSync9D = await testFindEventsToSync(blocks, [...head9, ...head3])
384
379
  assert.equal(toSync9D.length, 6)
385
380
  assert.equal(toSync9D[0].value.data.value, 'event4eve')
386
381
  assert.equal(toSync9D[1].value.data.value, 'event5frank')
@@ -389,7 +384,7 @@ describe('Clock', () => {
389
384
  assert.equal(toSync9D[4].value.data.value, 'event8isaac')
390
385
  assert.equal(toSync9D[5].value.data.value, 'event9jen')
391
386
 
392
- const toSync9E = await findEventsToSync(blocks, [...head9, ...head4])
387
+ const toSync9E = await testFindEventsToSync(blocks, [...head9, ...head4])
393
388
  assert.equal(toSync9E.length, 5)
394
389
  assert.equal(toSync9E[0].value.data.value, 'event5frank')
395
390
  assert.equal(toSync9E[1].value.data.value, 'event6grace')
@@ -407,7 +402,7 @@ describe('Clock', () => {
407
402
  await blocks.put(root.cid, root.bytes)
408
403
 
409
404
  /** @type {import('../src/clock').EventLink<any>[]} */
410
- let head = await advance(blocks, [], root.cid)
405
+ let head = await testAdvance(blocks, [], root.cid)
411
406
  assert.equal(head.length, 1)
412
407
  assert.equal(head[0], root.cid)
413
408
 
@@ -416,12 +411,12 @@ describe('Clock', () => {
416
411
  const event0 = await EventBlock.create(seqEventData(), parents)
417
412
  await blocks.put(event0.cid, event0.bytes)
418
413
 
419
- head = await advance(blocks, parents, event0.cid)
414
+ head = await testAdvance(blocks, parents, event0.cid)
420
415
  const head0 = head
421
416
 
422
417
  const event1 = await EventBlock.create(seqEventData(), parents)
423
418
  await blocks.put(event1.cid, event1.bytes)
424
- head = await advance(blocks, head, event1.cid)
419
+ head = await testAdvance(blocks, head, event1.cid)
425
420
  const head1 = head
426
421
 
427
422
  // for await (const line of vis(blocks, head)) console.log(line)
@@ -430,40 +425,23 @@ describe('Clock', () => {
430
425
  assert.equal(head[1].toString(), event1.cid.toString())
431
426
 
432
427
  let sinceHead = head1
433
- let toSync = await findUnknownSortedEvents(
434
- blocks,
435
- sinceHead,
436
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
437
- )
428
+ let toSync = await testFindEventsToSync(blocks, sinceHead)
438
429
  // assert.equal(toSync.length, 1) // 0
439
430
  // assert.equal(toSync[0].cid.toString(), event0.cid.toString())
440
431
 
441
432
  const event2 = await EventBlock.create(seqEventData(), head1)
442
433
  await blocks.put(event2.cid, event2.bytes)
443
- head = await advance(blocks, head, event2.cid)
434
+ head = await testAdvance(blocks, head, event2.cid)
444
435
  const head2 = head
445
436
 
446
437
  assert.equal(head.length, 1)
447
438
 
448
439
  sinceHead = head2
449
- toSync = await findUnknownSortedEvents(
450
- blocks,
451
- sinceHead,
452
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
453
- )
440
+ toSync = await testFindEventsToSync(blocks, sinceHead)
454
441
  assert.equal(toSync.length, 0)
455
442
 
456
- // todo do these since heads make sense?
457
443
  sinceHead = [...head0, ...head2]
458
- toSync = await findUnknownSortedEvents(
459
- blocks,
460
- sinceHead,
461
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
462
- )
463
- // console.log('need', toSync.map(b => b.value.data))
464
- // assert.equal(toSync.length, 2) // 0
465
- // assert.equal(toSync[0].cid.toString(), event1.cid.toString())
466
- // assert.equal(toSync[1].cid.toString(), event2.cid.toString())
444
+ toSync = await testFindEventsToSync(blocks, sinceHead)
467
445
  })
468
446
 
469
447
  it('add two events with some shared parents', async () => {
@@ -477,36 +455,30 @@ describe('Clock', () => {
477
455
 
478
456
  const event0 = await EventBlock.create(seqEventData(), parents0)
479
457
  await blocks.put(event0.cid, event0.bytes)
480
- head = await advance(blocks, head, event0.cid)
458
+ head = await testAdvance(blocks, head, event0.cid)
481
459
 
482
460
  const event1 = await EventBlock.create(seqEventData(), parents0)
483
461
  await blocks.put(event1.cid, event1.bytes)
484
- head = await advance(blocks, head, event1.cid)
462
+ head = await testAdvance(blocks, head, event1.cid)
485
463
 
486
464
  const event2 = await EventBlock.create(seqEventData(), parents0)
487
465
  await blocks.put(event2.cid, event2.bytes)
488
- head = await advance(blocks, head, event2.cid)
466
+ head = await testAdvance(blocks, head, event2.cid)
489
467
 
490
468
  const event3 = await EventBlock.create(seqEventData(), [event0.cid, event1.cid])
491
469
  await blocks.put(event3.cid, event3.bytes)
492
- head = await advance(blocks, head, event3.cid)
470
+ head = await testAdvance(blocks, head, event3.cid)
493
471
  // const parentz = head
494
472
 
495
473
  const event4 = await EventBlock.create(seqEventData(), [event2.cid])
496
474
  await blocks.put(event4.cid, event4.bytes)
497
- head = await advance(blocks, head, event4.cid)
475
+ head = await testAdvance(blocks, head, event4.cid)
498
476
 
499
477
  // console.log('add two events with some shared parents')
500
478
  // for await (const line of vis(blocks, head)) console.log(line)
501
479
  assert.equal(head.length, 2)
502
480
  assert.equal(head[0].toString(), event3.cid.toString())
503
481
  assert.equal(head[1].toString(), event4.cid.toString())
504
- // console.log('since', parentz)
505
- // for await (const block of since(blocks, parentz)) {
506
- // if (block?.value) console.log(block.value.data)
507
- // }
508
- // const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(blocks, parentz)
509
- // console.log('findCommonAncestorWithSortedEvents', ancestor, sorted.map(b => b.value.data))
510
482
  })
511
483
 
512
484
  it('converge when multi-root', async () => {
@@ -521,63 +493,63 @@ describe('Clock', () => {
521
493
 
522
494
  const event0 = await EventBlock.create(seqEventData(), parents0)
523
495
  await blocks.put(event0.cid, event0.bytes)
524
- head = await advance(blocks, head, event0.cid)
496
+ head = await testAdvance(blocks, head, event0.cid)
525
497
 
526
498
  const event1 = await EventBlock.create(seqEventData(), parents0)
527
499
  await blocks.put(event1.cid, event1.bytes)
528
- head = await advance(blocks, head, event1.cid)
500
+ head = await testAdvance(blocks, head, event1.cid)
529
501
 
530
502
  const event1head = head
531
503
 
532
504
  const event2 = await EventBlock.create(seqEventData(), event1head)
533
505
  await blocks.put(event2.cid, event2.bytes)
534
- head = await advance(blocks, head, event2.cid)
506
+ head = await testAdvance(blocks, head, event2.cid)
535
507
 
536
508
  const event3 = await EventBlock.create(seqEventData(), event1head)
537
509
  await blocks.put(event3.cid, event3.bytes)
538
- head = await advance(blocks, head, event3.cid)
510
+ head = await testAdvance(blocks, head, event3.cid)
539
511
 
540
512
  const event3head = head
541
513
 
542
514
  const event4 = await EventBlock.create(seqEventData(), event1head)
543
515
  await blocks.put(event4.cid, event4.bytes)
544
- head = await advance(blocks, head, event4.cid)
516
+ head = await testAdvance(blocks, head, event4.cid)
545
517
  const event4head = head
546
518
  await visHead(blocks, event4head)
547
519
 
548
520
  const event5 = await EventBlock.create(seqEventData(), event3head)
549
521
  await blocks.put(event5.cid, event5.bytes)
550
- head = await advance(blocks, head, event5.cid)
522
+ head = await testAdvance(blocks, head, event5.cid)
551
523
  const event5head = head
552
524
  await visHead(blocks, event5head)
553
525
 
554
526
  const event6 = await EventBlock.create(seqEventData(), event5head)
555
527
  await blocks.put(event6.cid, event6.bytes)
556
- head = await advance(blocks, head, event6.cid)
528
+ head = await testAdvance(blocks, head, event6.cid)
557
529
  const event6head = head
558
530
  await visHead(blocks, event6head)
559
531
 
560
532
  const event7 = await EventBlock.create(seqEventData(), event6head)
561
533
  await blocks.put(event7.cid, event7.bytes)
562
- head = await advance(blocks, head, event7.cid)
534
+ head = await testAdvance(blocks, head, event7.cid)
563
535
  const event7head = head
564
536
  await visHead(blocks, event7head)
565
537
 
566
538
  const event8 = await EventBlock.create(seqEventData(), event7head)
567
539
  await blocks.put(event8.cid, event8.bytes)
568
- head = await advance(blocks, head, event8.cid)
540
+ head = await testAdvance(blocks, head, event8.cid)
569
541
  const event8head = head
570
542
  await visHead(blocks, event8head)
571
543
 
572
544
  const event9 = await EventBlock.create(seqEventData(), event7head)
573
545
  await blocks.put(event9.cid, event9.bytes)
574
- head = await advance(blocks, head, event9.cid)
546
+ head = await testAdvance(blocks, head, event9.cid)
575
547
  const event9head = head
576
548
  await visHead(blocks, event9head)
577
549
 
578
550
  const event10 = await EventBlock.create(seqEventData(), event9head)
579
551
  await blocks.put(event10.cid, event10.bytes)
580
- head = await advance(blocks, head, event10.cid)
552
+ head = await testAdvance(blocks, head, event10.cid)
581
553
  const event10head = head
582
554
  await visHead(blocks, event10head)
583
555
 
@@ -587,26 +559,7 @@ describe('Clock', () => {
587
559
  assert.equal(event10head.length, 1)
588
560
  assert.equal(event10head[0].toString(), event10.cid.toString())
589
561
 
590
- // todo do these roots make sense?
591
- // const { ancestor, sorted } = await findCommonAncestorWithSortedEvents(blocks, [event5.cid, event2.cid])
592
- // const toSync = await findUnknownSortedEvents(blocks, [event5.cid, event2.cid], { ancestor, sorted })
593
- // assert.equal(toSync.length, 0)
594
- // assert.equal(toSync[0].value.data.value, 'event3')
595
- // assert.equal(toSync[1].value.data.value, 'event5')
596
-
597
- // todo do these roots make sense?
598
- // const ancestorWithSorted = await findCommonAncestorWithSortedEvents(blocks, [event6.cid, event2.cid])
599
- // const toSync2 = await findUnknownSortedEvents(blocks, [event6.cid, event2.cid], ancestorWithSorted)
600
- // assert.equal(toSync2.length, 0)
601
-
602
- // assert.equal(toSync2[0].value.data.value, 'event3')
603
- // assert.equal(toSync2[1].value.data.value, 'event5')
604
- // assert.equal(toSync2[2].value.data.value, 'event4')
605
- // assert.equal(toSync2[3].value.data.value, 'event6')
606
- // const ancestorBlock = await blocks.get(ancestor)
607
- // const ancestorDecoded = await decodeEventBlock(ancestorBlock.bytes)
608
- const ancestorWithSorted2 = await findCommonAncestorWithSortedEvents(blocks, [event7.cid, event10.cid])
609
- const toSync3 = await findUnknownSortedEvents(blocks, [event7.cid, event10.cid], ancestorWithSorted2)
562
+ const toSync3 = await testFindEventsToSync(blocks, [event7.cid, event10.cid])
610
563
  assert.equal(toSync3[0].value.data.value, 'event9')
611
564
  assert.equal(toSync3[1].value.data.value, 'event8')
612
565
  assert.equal(toSync3[2].value.data.value, 'event10')
@@ -623,36 +576,36 @@ describe('Clock', () => {
623
576
 
624
577
  const event0 = await EventBlock.create(seqEventData(), parents0)
625
578
  await blocks.put(event0.cid, event0.bytes)
626
- head = await advance(blocks, head, event0.cid)
579
+ head = await testAdvance(blocks, head, event0.cid)
627
580
 
628
581
  const event1 = await EventBlock.create(seqEventData(), parents0)
629
582
  await blocks.put(event1.cid, event1.bytes)
630
- head = await advance(blocks, head, event1.cid)
583
+ head = await testAdvance(blocks, head, event1.cid)
631
584
 
632
585
  const event1head = head
633
586
 
634
587
  const event2 = await EventBlock.create(seqEventData(), event1head)
635
588
  await blocks.put(event2.cid, event2.bytes)
636
- head = await advance(blocks, head, event2.cid)
589
+ head = await testAdvance(blocks, head, event2.cid)
637
590
 
638
591
  const event3 = await EventBlock.create(seqEventData(), event1head)
639
592
  await blocks.put(event3.cid, event3.bytes)
640
- head = await advance(blocks, head, event3.cid)
593
+ head = await testAdvance(blocks, head, event3.cid)
641
594
 
642
595
  const event4 = await EventBlock.create(seqEventData(), event1head)
643
596
  await blocks.put(event4.cid, event4.bytes)
644
- head = await advance(blocks, head, event4.cid)
597
+ head = await testAdvance(blocks, head, event4.cid)
645
598
 
646
599
  const parents2 = head
647
600
 
648
601
  const event5 = await EventBlock.create(seqEventData(), parents2)
649
602
  await blocks.put(event5.cid, event5.bytes)
650
- head = await advance(blocks, head, event5.cid)
603
+ head = await testAdvance(blocks, head, event5.cid)
651
604
 
652
605
  // now very old one
653
606
  const event6 = await EventBlock.create(seqEventData(), parents0)
654
607
  await blocks.put(event6.cid, event6.bytes)
655
- head = await advance(blocks, head, event6.cid)
608
+ head = await testAdvance(blocks, head, event6.cid)
656
609
 
657
610
  // for await (const line of vis(blocks, head)) console.log(line)
658
611
  assert.equal(head.length, 2)
@@ -675,7 +628,7 @@ describe('Clock', () => {
675
628
  const event1 = await EventBlock.create(seqEventData(), [event0.cid])
676
629
  await blocks.put(event1.cid, event1.bytes)
677
630
 
678
- head = await advance(blocks, head, event1.cid)
631
+ head = await testAdvance(blocks, head, event1.cid)
679
632
 
680
633
  // for await (const line of vis(blocks, head)) console.log(line)
681
634
  assert.equal(head.length, 1)
@@ -688,15 +641,11 @@ describe('Clock', () => {
688
641
  // alice
689
642
  const root = await EventBlock.create(seqEventData('alice'))
690
643
  await blocks.put(root.cid, root.bytes)
691
- let head = await advance(blocks, [], root.cid)
644
+ let head = await testAdvance(blocks, [], root.cid)
692
645
  const roothead = head
693
646
  // db root
694
647
  let sinceHead = [...roothead]
695
- let toSync = await findUnknownSortedEvents(
696
- blocks,
697
- sinceHead,
698
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
699
- )
648
+ let toSync = await testFindEventsToSync(blocks, sinceHead)
700
649
  assert.equal(toSync.length, 0) // we use all docs for first query in Fireproof
701
650
 
702
651
  // create bob
@@ -704,70 +653,42 @@ describe('Clock', () => {
704
653
  await blocks.put(event0.cid, event0.bytes)
705
654
  // console.log('new event0', event0.cid)
706
655
 
707
- head = await advance(blocks, head, event0.cid)
656
+ head = await testAdvance(blocks, head, event0.cid)
708
657
 
709
658
  const event0head = head
710
659
  sinceHead = event0head
711
- toSync = await findUnknownSortedEvents(
712
- blocks,
713
- sinceHead,
714
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
715
- )
660
+ toSync = await testFindEventsToSync(blocks, sinceHead)
716
661
  assert.equal(toSync.length, 0)
717
662
 
718
663
  sinceHead = [...roothead, ...event0head]
719
- toSync = await findUnknownSortedEvents(
720
- blocks,
721
- sinceHead,
722
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
723
- )
664
+ toSync = await testFindEventsToSync(blocks, sinceHead)
724
665
  assert.equal(toSync.length, 1)
725
666
 
726
667
  // create carol
727
668
  const event1 = await EventBlock.create(seqEventData('carol'), head)
728
669
  await blocks.put(event1.cid, event1.bytes)
729
- head = await advance(blocks, head, event1.cid)
670
+ head = await testAdvance(blocks, head, event1.cid)
730
671
  const event1head = head
731
672
 
732
673
  sinceHead = [...event0head, ...event1head]
733
- // sinceHead = event0head
734
- const sigil = await findCommonAncestorWithSortedEvents(blocks, sinceHead)
735
- // console.log('ancestor', (await decodeEventBlock((await blocks.get(sigil.ancestor)).bytes)).value)
736
-
737
- toSync = await findUnknownSortedEvents(blocks, sinceHead, sigil)
738
-
674
+ toSync = await testFindEventsToSync(blocks, sinceHead)
739
675
  assert.equal(toSync.length, 1)
740
-
741
- // for await (const line of vis(blocks, head)) console.log(line)
742
-
743
676
  sinceHead = [...event1head, ...roothead]
744
- toSync = await findUnknownSortedEvents(
745
- blocks,
746
- sinceHead,
747
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
748
- )
677
+ toSync = await testFindEventsToSync(blocks, sinceHead)
749
678
 
750
679
  assert.equal(toSync.length, 2)
751
680
 
752
681
  const event2 = await EventBlock.create(seqEventData('xxx'), head)
753
682
  await blocks.put(event2.cid, event2.bytes)
754
- head = await advance(blocks, head, event2.cid)
683
+ head = await testAdvance(blocks, head, event2.cid)
755
684
  const event2head = head
756
685
 
757
686
  sinceHead = [...event2head, ...event0head]
758
- toSync = await findUnknownSortedEvents(
759
- blocks,
760
- sinceHead,
761
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
762
- )
687
+ toSync = await testFindEventsToSync(blocks, sinceHead)
763
688
  assert.equal(toSync.length, 2)
764
689
 
765
690
  sinceHead = [...event2head, ...event1head]
766
- toSync = await findUnknownSortedEvents(
767
- blocks,
768
- sinceHead,
769
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
770
- )
691
+ toSync = await testFindEventsToSync(blocks, sinceHead)
771
692
  assert.equal(toSync.length, 1)
772
693
  })
773
694
  })