@fireproof/core 0.0.4 → 0.0.6

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,36 +425,24 @@ 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
443
  // todo do these since heads make sense?
457
444
  sinceHead = [...head0, ...head2]
458
- toSync = await findUnknownSortedEvents(
459
- blocks,
460
- sinceHead,
461
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
462
- )
445
+ toSync = await testFindEventsToSync(blocks, sinceHead)
463
446
  // console.log('need', toSync.map(b => b.value.data))
464
447
  // assert.equal(toSync.length, 2) // 0
465
448
  // assert.equal(toSync[0].cid.toString(), event1.cid.toString())
@@ -477,36 +460,30 @@ describe('Clock', () => {
477
460
 
478
461
  const event0 = await EventBlock.create(seqEventData(), parents0)
479
462
  await blocks.put(event0.cid, event0.bytes)
480
- head = await advance(blocks, head, event0.cid)
463
+ head = await testAdvance(blocks, head, event0.cid)
481
464
 
482
465
  const event1 = await EventBlock.create(seqEventData(), parents0)
483
466
  await blocks.put(event1.cid, event1.bytes)
484
- head = await advance(blocks, head, event1.cid)
467
+ head = await testAdvance(blocks, head, event1.cid)
485
468
 
486
469
  const event2 = await EventBlock.create(seqEventData(), parents0)
487
470
  await blocks.put(event2.cid, event2.bytes)
488
- head = await advance(blocks, head, event2.cid)
471
+ head = await testAdvance(blocks, head, event2.cid)
489
472
 
490
473
  const event3 = await EventBlock.create(seqEventData(), [event0.cid, event1.cid])
491
474
  await blocks.put(event3.cid, event3.bytes)
492
- head = await advance(blocks, head, event3.cid)
475
+ head = await testAdvance(blocks, head, event3.cid)
493
476
  // const parentz = head
494
477
 
495
478
  const event4 = await EventBlock.create(seqEventData(), [event2.cid])
496
479
  await blocks.put(event4.cid, event4.bytes)
497
- head = await advance(blocks, head, event4.cid)
480
+ head = await testAdvance(blocks, head, event4.cid)
498
481
 
499
482
  // console.log('add two events with some shared parents')
500
483
  // for await (const line of vis(blocks, head)) console.log(line)
501
484
  assert.equal(head.length, 2)
502
485
  assert.equal(head[0].toString(), event3.cid.toString())
503
486
  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
487
  })
511
488
 
512
489
  it('converge when multi-root', async () => {
@@ -521,63 +498,63 @@ describe('Clock', () => {
521
498
 
522
499
  const event0 = await EventBlock.create(seqEventData(), parents0)
523
500
  await blocks.put(event0.cid, event0.bytes)
524
- head = await advance(blocks, head, event0.cid)
501
+ head = await testAdvance(blocks, head, event0.cid)
525
502
 
526
503
  const event1 = await EventBlock.create(seqEventData(), parents0)
527
504
  await blocks.put(event1.cid, event1.bytes)
528
- head = await advance(blocks, head, event1.cid)
505
+ head = await testAdvance(blocks, head, event1.cid)
529
506
 
530
507
  const event1head = head
531
508
 
532
509
  const event2 = await EventBlock.create(seqEventData(), event1head)
533
510
  await blocks.put(event2.cid, event2.bytes)
534
- head = await advance(blocks, head, event2.cid)
511
+ head = await testAdvance(blocks, head, event2.cid)
535
512
 
536
513
  const event3 = await EventBlock.create(seqEventData(), event1head)
537
514
  await blocks.put(event3.cid, event3.bytes)
538
- head = await advance(blocks, head, event3.cid)
515
+ head = await testAdvance(blocks, head, event3.cid)
539
516
 
540
517
  const event3head = head
541
518
 
542
519
  const event4 = await EventBlock.create(seqEventData(), event1head)
543
520
  await blocks.put(event4.cid, event4.bytes)
544
- head = await advance(blocks, head, event4.cid)
521
+ head = await testAdvance(blocks, head, event4.cid)
545
522
  const event4head = head
546
523
  await visHead(blocks, event4head)
547
524
 
548
525
  const event5 = await EventBlock.create(seqEventData(), event3head)
549
526
  await blocks.put(event5.cid, event5.bytes)
550
- head = await advance(blocks, head, event5.cid)
527
+ head = await testAdvance(blocks, head, event5.cid)
551
528
  const event5head = head
552
529
  await visHead(blocks, event5head)
553
530
 
554
531
  const event6 = await EventBlock.create(seqEventData(), event5head)
555
532
  await blocks.put(event6.cid, event6.bytes)
556
- head = await advance(blocks, head, event6.cid)
533
+ head = await testAdvance(blocks, head, event6.cid)
557
534
  const event6head = head
558
535
  await visHead(blocks, event6head)
559
536
 
560
537
  const event7 = await EventBlock.create(seqEventData(), event6head)
561
538
  await blocks.put(event7.cid, event7.bytes)
562
- head = await advance(blocks, head, event7.cid)
539
+ head = await testAdvance(blocks, head, event7.cid)
563
540
  const event7head = head
564
541
  await visHead(blocks, event7head)
565
542
 
566
543
  const event8 = await EventBlock.create(seqEventData(), event7head)
567
544
  await blocks.put(event8.cid, event8.bytes)
568
- head = await advance(blocks, head, event8.cid)
545
+ head = await testAdvance(blocks, head, event8.cid)
569
546
  const event8head = head
570
547
  await visHead(blocks, event8head)
571
548
 
572
549
  const event9 = await EventBlock.create(seqEventData(), event7head)
573
550
  await blocks.put(event9.cid, event9.bytes)
574
- head = await advance(blocks, head, event9.cid)
551
+ head = await testAdvance(blocks, head, event9.cid)
575
552
  const event9head = head
576
553
  await visHead(blocks, event9head)
577
554
 
578
555
  const event10 = await EventBlock.create(seqEventData(), event9head)
579
556
  await blocks.put(event10.cid, event10.bytes)
580
- head = await advance(blocks, head, event10.cid)
557
+ head = await testAdvance(blocks, head, event10.cid)
581
558
  const event10head = head
582
559
  await visHead(blocks, event10head)
583
560
 
@@ -587,26 +564,7 @@ describe('Clock', () => {
587
564
  assert.equal(event10head.length, 1)
588
565
  assert.equal(event10head[0].toString(), event10.cid.toString())
589
566
 
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)
567
+ const toSync3 = await testFindEventsToSync(blocks, [event7.cid, event10.cid])
610
568
  assert.equal(toSync3[0].value.data.value, 'event9')
611
569
  assert.equal(toSync3[1].value.data.value, 'event8')
612
570
  assert.equal(toSync3[2].value.data.value, 'event10')
@@ -623,36 +581,36 @@ describe('Clock', () => {
623
581
 
624
582
  const event0 = await EventBlock.create(seqEventData(), parents0)
625
583
  await blocks.put(event0.cid, event0.bytes)
626
- head = await advance(blocks, head, event0.cid)
584
+ head = await testAdvance(blocks, head, event0.cid)
627
585
 
628
586
  const event1 = await EventBlock.create(seqEventData(), parents0)
629
587
  await blocks.put(event1.cid, event1.bytes)
630
- head = await advance(blocks, head, event1.cid)
588
+ head = await testAdvance(blocks, head, event1.cid)
631
589
 
632
590
  const event1head = head
633
591
 
634
592
  const event2 = await EventBlock.create(seqEventData(), event1head)
635
593
  await blocks.put(event2.cid, event2.bytes)
636
- head = await advance(blocks, head, event2.cid)
594
+ head = await testAdvance(blocks, head, event2.cid)
637
595
 
638
596
  const event3 = await EventBlock.create(seqEventData(), event1head)
639
597
  await blocks.put(event3.cid, event3.bytes)
640
- head = await advance(blocks, head, event3.cid)
598
+ head = await testAdvance(blocks, head, event3.cid)
641
599
 
642
600
  const event4 = await EventBlock.create(seqEventData(), event1head)
643
601
  await blocks.put(event4.cid, event4.bytes)
644
- head = await advance(blocks, head, event4.cid)
602
+ head = await testAdvance(blocks, head, event4.cid)
645
603
 
646
604
  const parents2 = head
647
605
 
648
606
  const event5 = await EventBlock.create(seqEventData(), parents2)
649
607
  await blocks.put(event5.cid, event5.bytes)
650
- head = await advance(blocks, head, event5.cid)
608
+ head = await testAdvance(blocks, head, event5.cid)
651
609
 
652
610
  // now very old one
653
611
  const event6 = await EventBlock.create(seqEventData(), parents0)
654
612
  await blocks.put(event6.cid, event6.bytes)
655
- head = await advance(blocks, head, event6.cid)
613
+ head = await testAdvance(blocks, head, event6.cid)
656
614
 
657
615
  // for await (const line of vis(blocks, head)) console.log(line)
658
616
  assert.equal(head.length, 2)
@@ -675,7 +633,7 @@ describe('Clock', () => {
675
633
  const event1 = await EventBlock.create(seqEventData(), [event0.cid])
676
634
  await blocks.put(event1.cid, event1.bytes)
677
635
 
678
- head = await advance(blocks, head, event1.cid)
636
+ head = await testAdvance(blocks, head, event1.cid)
679
637
 
680
638
  // for await (const line of vis(blocks, head)) console.log(line)
681
639
  assert.equal(head.length, 1)
@@ -688,15 +646,11 @@ describe('Clock', () => {
688
646
  // alice
689
647
  const root = await EventBlock.create(seqEventData('alice'))
690
648
  await blocks.put(root.cid, root.bytes)
691
- let head = await advance(blocks, [], root.cid)
649
+ let head = await testAdvance(blocks, [], root.cid)
692
650
  const roothead = head
693
651
  // db root
694
652
  let sinceHead = [...roothead]
695
- let toSync = await findUnknownSortedEvents(
696
- blocks,
697
- sinceHead,
698
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
699
- )
653
+ let toSync = await testFindEventsToSync(blocks, sinceHead)
700
654
  assert.equal(toSync.length, 0) // we use all docs for first query in Fireproof
701
655
 
702
656
  // create bob
@@ -704,70 +658,42 @@ describe('Clock', () => {
704
658
  await blocks.put(event0.cid, event0.bytes)
705
659
  // console.log('new event0', event0.cid)
706
660
 
707
- head = await advance(blocks, head, event0.cid)
661
+ head = await testAdvance(blocks, head, event0.cid)
708
662
 
709
663
  const event0head = head
710
664
  sinceHead = event0head
711
- toSync = await findUnknownSortedEvents(
712
- blocks,
713
- sinceHead,
714
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
715
- )
665
+ toSync = await testFindEventsToSync(blocks, sinceHead)
716
666
  assert.equal(toSync.length, 0)
717
667
 
718
668
  sinceHead = [...roothead, ...event0head]
719
- toSync = await findUnknownSortedEvents(
720
- blocks,
721
- sinceHead,
722
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
723
- )
669
+ toSync = await testFindEventsToSync(blocks, sinceHead)
724
670
  assert.equal(toSync.length, 1)
725
671
 
726
672
  // create carol
727
673
  const event1 = await EventBlock.create(seqEventData('carol'), head)
728
674
  await blocks.put(event1.cid, event1.bytes)
729
- head = await advance(blocks, head, event1.cid)
675
+ head = await testAdvance(blocks, head, event1.cid)
730
676
  const event1head = head
731
677
 
732
678
  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
-
679
+ toSync = await testFindEventsToSync(blocks, sinceHead)
739
680
  assert.equal(toSync.length, 1)
740
-
741
- // for await (const line of vis(blocks, head)) console.log(line)
742
-
743
681
  sinceHead = [...event1head, ...roothead]
744
- toSync = await findUnknownSortedEvents(
745
- blocks,
746
- sinceHead,
747
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
748
- )
682
+ toSync = await testFindEventsToSync(blocks, sinceHead)
749
683
 
750
684
  assert.equal(toSync.length, 2)
751
685
 
752
686
  const event2 = await EventBlock.create(seqEventData('xxx'), head)
753
687
  await blocks.put(event2.cid, event2.bytes)
754
- head = await advance(blocks, head, event2.cid)
688
+ head = await testAdvance(blocks, head, event2.cid)
755
689
  const event2head = head
756
690
 
757
691
  sinceHead = [...event2head, ...event0head]
758
- toSync = await findUnknownSortedEvents(
759
- blocks,
760
- sinceHead,
761
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
762
- )
692
+ toSync = await testFindEventsToSync(blocks, sinceHead)
763
693
  assert.equal(toSync.length, 2)
764
694
 
765
695
  sinceHead = [...event2head, ...event1head]
766
- toSync = await findUnknownSortedEvents(
767
- blocks,
768
- sinceHead,
769
- await findCommonAncestorWithSortedEvents(blocks, sinceHead)
770
- )
696
+ toSync = await testFindEventsToSync(blocks, sinceHead)
771
697
  assert.equal(toSync.length, 1)
772
698
  })
773
699
  })