@fireproof/core-base 0.22.0-keybag → 0.23.1-dev-issue-1057
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/LICENSE.md +197 -228
- package/README.md +269 -0
- package/apply-head-queue.js.map +1 -1
- package/bundle-not-impl.js.map +1 -1
- package/compact-strategies.js +3 -0
- package/compact-strategies.js.map +1 -1
- package/crdt-clock.d.ts +1 -1
- package/crdt-clock.js +2 -0
- package/crdt-clock.js.map +1 -1
- package/crdt-helpers.js.map +1 -1
- package/crdt.js.map +1 -1
- package/database.js.map +1 -1
- package/index.js.map +1 -1
- package/indexer-helpers.js.map +1 -1
- package/indexer.js +1 -0
- package/indexer.js.map +1 -1
- package/ledger.js.map +1 -1
- package/package.json +11 -11
- package/version.js.map +1 -1
- package/write-queue.js.map +1 -1
- package/apply-head-queue.ts +0 -72
- package/bundle-not-impl.ts +0 -4
- package/compact-strategies.ts +0 -95
- package/crdt-clock.ts +0 -192
- package/crdt-helpers.ts +0 -408
- package/crdt.ts +0 -275
- package/database.ts +0 -200
- package/index.ts +0 -15
- package/indexer-helpers.ts +0 -263
- package/indexer.ts +0 -360
- package/ledger.ts +0 -345
- package/tsconfig.json +0 -18
- package/version.ts +0 -3
- package/write-queue.ts +0 -93
package/ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAU,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElG,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAGL,qBAAqB,EAarB,KAAK,GACN,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE/H,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,OAAO,GAAG,IAAI,eAAe,EAAU,CAAC;AAE9C,MAAM,UAAU,aAAa,CAAC,KAAgB,EAAE,IAAY,EAAE,IAAiB;
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../jsr/ledger.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fireproof/core-base",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.1-dev-issue-1057",
|
|
4
4
|
"description": "Live ledger for the web.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./index.js",
|
|
@@ -31,24 +31,24 @@
|
|
|
31
31
|
"url": "https://github.com/fireproof-storage/fireproof/issues"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@adviser/cement": "^0.4.
|
|
35
|
-
"@fireproof/core-blockstore": "0.
|
|
36
|
-
"@fireproof/core-keybag": "0.
|
|
37
|
-
"@fireproof/core-runtime": "0.
|
|
38
|
-
"@fireproof/core-types-base": "0.
|
|
39
|
-
"@fireproof/core-types-blockstore": "0.
|
|
40
|
-
"@fireproof/core-types-protocols-cloud": "0.
|
|
41
|
-
"@fireproof/vendor": "0.
|
|
34
|
+
"@adviser/cement": "^0.4.23",
|
|
35
|
+
"@fireproof/core-blockstore": "0.23.1-dev-issue-1057",
|
|
36
|
+
"@fireproof/core-keybag": "0.23.1-dev-issue-1057",
|
|
37
|
+
"@fireproof/core-runtime": "0.23.1-dev-issue-1057",
|
|
38
|
+
"@fireproof/core-types-base": "0.23.1-dev-issue-1057",
|
|
39
|
+
"@fireproof/core-types-blockstore": "0.23.1-dev-issue-1057",
|
|
40
|
+
"@fireproof/core-types-protocols-cloud": "0.23.1-dev-issue-1057",
|
|
41
|
+
"@fireproof/vendor": "0.23.1-dev-issue-1057",
|
|
42
42
|
"@ipld/dag-cbor": "^9.2.4",
|
|
43
43
|
"@web3-storage/pail": "^0.6.2",
|
|
44
44
|
"charwise": "^3.0.1",
|
|
45
45
|
"prolly-trees": "^1.0.4"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@fireproof/core-cli": "0.
|
|
48
|
+
"@fireproof/core-cli": "0.23.1-dev-issue-1057",
|
|
49
49
|
"@types/node": "^24.1.0"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
|
-
"build": "tsc"
|
|
52
|
+
"build": "core-cli tsc"
|
|
53
53
|
}
|
|
54
54
|
}
|
package/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC;IACzC,kBAAkB,EAAE,MAAM;CAC3B,CAAC,CAAC,CAAC,CAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../jsr/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC;IACzC,kBAAkB,EAAE,MAAM;CAC3B,CAAC,CAAC,CAAC,CAAW,CAAC"}
|
package/write-queue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-queue.js","sourceRoot":"","sources":["write-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAML,qBAAqB,GAEtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,MAAM,EAAU,MAAM,iBAAiB,CAAC;AAWjD,MAAM,cAAc;IACD,IAAI,CAAmB;IAEvB,KAAK,GAAwB,EAAE,CAAC;IAChC,MAAM,CAAoB;IACnC,YAAY,GAAG,KAAK,CAAC;IACZ,MAAM,CAAS;IAEhC,YAAY,KAAgB,EAAE,MAAyB,EAAE,IAAsB;
|
|
1
|
+
{"version":3,"file":"write-queue.js","sourceRoot":"","sources":["../jsr/write-queue.ts"],"names":[],"mappings":"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"}
|
package/apply-head-queue.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Logger } from "@adviser/cement";
|
|
2
|
-
import { ClockHead, DocTypes, DocUpdate } from "@fireproof/core-types-base";
|
|
3
|
-
|
|
4
|
-
type ApplyHeadWorkerFunction = (newHead: ClockHead, prevHead: ClockHead, localUpdates: boolean) => Promise<void>;
|
|
5
|
-
|
|
6
|
-
interface ApplyHeadTask<T extends DocTypes> {
|
|
7
|
-
readonly newHead: ClockHead;
|
|
8
|
-
readonly prevHead: ClockHead;
|
|
9
|
-
readonly updates?: DocUpdate<T>[];
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export interface ApplyHeadQueue<T extends DocTypes> {
|
|
13
|
-
push(task: ApplyHeadTask<T>): AsyncGenerator<
|
|
14
|
-
{
|
|
15
|
-
readonly updates: DocUpdate<T>[];
|
|
16
|
-
readonly all: boolean;
|
|
17
|
-
},
|
|
18
|
-
void,
|
|
19
|
-
unknown
|
|
20
|
-
>;
|
|
21
|
-
size(): number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export function applyHeadQueue<T extends DocTypes>(worker: ApplyHeadWorkerFunction, logger: Logger): ApplyHeadQueue<T> {
|
|
25
|
-
const queue: ApplyHeadTask<T>[] = [];
|
|
26
|
-
let isProcessing = false;
|
|
27
|
-
|
|
28
|
-
async function* process() {
|
|
29
|
-
if (isProcessing || queue.length === 0) return;
|
|
30
|
-
isProcessing = true;
|
|
31
|
-
const allUpdates: DocUpdate<T>[] = [];
|
|
32
|
-
try {
|
|
33
|
-
while (queue.length > 0) {
|
|
34
|
-
queue.sort((a, b) => (b.updates ? 1 : -1));
|
|
35
|
-
const task = queue.shift();
|
|
36
|
-
if (!task) continue;
|
|
37
|
-
|
|
38
|
-
await worker(task.newHead, task.prevHead, task.updates !== undefined).catch((e) => {
|
|
39
|
-
throw logger.Error().Err(e).Msg("int_applyHead worker error").AsError();
|
|
40
|
-
});
|
|
41
|
-
// console.timeEnd('int_applyHead worker')
|
|
42
|
-
|
|
43
|
-
if (task.updates) {
|
|
44
|
-
allUpdates.push(...task.updates);
|
|
45
|
-
}
|
|
46
|
-
// Yield the updates if there are no tasks with updates left in the queue or the current task has updates
|
|
47
|
-
if (!queue.some((t) => t.updates) || task.updates) {
|
|
48
|
-
const allTasksHaveUpdates = queue.every((task) => task.updates !== null);
|
|
49
|
-
yield { updates: allUpdates, all: allTasksHaveUpdates };
|
|
50
|
-
allUpdates.length = 0;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} finally {
|
|
54
|
-
isProcessing = false;
|
|
55
|
-
const generator = process();
|
|
56
|
-
let result = await generator.next();
|
|
57
|
-
while (!result.done) {
|
|
58
|
-
result = await generator.next();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
return {
|
|
64
|
-
push(task: ApplyHeadTask<T>): AsyncGenerator<{ updates: DocUpdate<T>[]; all: boolean }, void, unknown> {
|
|
65
|
-
queue.push(task);
|
|
66
|
-
return process();
|
|
67
|
-
},
|
|
68
|
-
size() {
|
|
69
|
-
return queue.length;
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
|
-
}
|
package/bundle-not-impl.ts
DELETED
package/compact-strategies.ts
DELETED
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { CompactStrategyContext, TransactionMeta } from "@fireproof/core-types-base";
|
|
2
|
-
import { anyBlock2FPBlock } from "@fireproof/core-blockstore/loader-helpers.js";
|
|
3
|
-
import { clockChangesSince, getAllEntries, toPailFetcher } from "./crdt-helpers.js";
|
|
4
|
-
import { vis } from "@web3-storage/pail/clock";
|
|
5
|
-
import { root } from "@web3-storage/pail/crdt";
|
|
6
|
-
import { registerCompactStrategy, timerEnd, timerStart } from "@fireproof/core-runtime";
|
|
7
|
-
|
|
8
|
-
registerCompactStrategy({
|
|
9
|
-
name: "fireproof",
|
|
10
|
-
compact: async (ctx: CompactStrategyContext) => {
|
|
11
|
-
const head = ctx.clock?.head || [];
|
|
12
|
-
timerStart(ctx, "compact head");
|
|
13
|
-
for (const cid of head) {
|
|
14
|
-
const bl = await ctx.get(cid);
|
|
15
|
-
if (!bl) throw ctx.logger.Error().Ref("cid", cid).Msg("Missing head block").AsError();
|
|
16
|
-
}
|
|
17
|
-
timerEnd(ctx, "compact head");
|
|
18
|
-
|
|
19
|
-
// for await (const blk of blocks.entries()) {
|
|
20
|
-
// const bl = await blockLog.get(blk.cid)
|
|
21
|
-
// if (!bl) throw new Error('Missing tblock: ' + blk.cid.toString())
|
|
22
|
-
// }
|
|
23
|
-
|
|
24
|
-
// todo maybe remove
|
|
25
|
-
// for await (const blk of blocks.loader!.entries()) {
|
|
26
|
-
// const bl = await blockLog.get(blk.cid)
|
|
27
|
-
// if (!bl) throw new Error('Missing db block: ' + blk.cid.toString())
|
|
28
|
-
// }
|
|
29
|
-
|
|
30
|
-
timerStart(ctx, "compact all entries");
|
|
31
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
32
|
-
for await (const _entry of getAllEntries(ctx, head, ctx.logger)) {
|
|
33
|
-
// result.push(entry)
|
|
34
|
-
// void 1;
|
|
35
|
-
// continue;
|
|
36
|
-
}
|
|
37
|
-
timerEnd(ctx, "compact all entries");
|
|
38
|
-
|
|
39
|
-
// timerStart("compact crdt entries")
|
|
40
|
-
// for await (const [, link] of entries(blockLog, head)) {
|
|
41
|
-
// const bl = await blockLog.get(link)
|
|
42
|
-
// if (!bl) throw new Error('Missing entry block: ' + link.toString())
|
|
43
|
-
// }
|
|
44
|
-
// timerEnd("compact crdt entries")
|
|
45
|
-
|
|
46
|
-
timerStart(ctx, "compact clock vis");
|
|
47
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
48
|
-
for await (const _line of vis(toPailFetcher(ctx), head)) {
|
|
49
|
-
void 1;
|
|
50
|
-
}
|
|
51
|
-
timerEnd(ctx, "compact clock vis");
|
|
52
|
-
|
|
53
|
-
timerStart(ctx, "compact root");
|
|
54
|
-
const result = await root(toPailFetcher(ctx), head);
|
|
55
|
-
timerEnd(ctx, "compact root");
|
|
56
|
-
|
|
57
|
-
timerStart(ctx, "compact root blocks");
|
|
58
|
-
for (const block of [...result.additions, ...result.removals]) {
|
|
59
|
-
ctx.loggedBlocks.putSync(await anyBlock2FPBlock(block));
|
|
60
|
-
}
|
|
61
|
-
timerEnd(ctx, "compact root blocks");
|
|
62
|
-
|
|
63
|
-
timerStart(ctx, "compact changes");
|
|
64
|
-
await clockChangesSince(ctx, head, [], {}, ctx.logger);
|
|
65
|
-
timerEnd(ctx, "compact changes");
|
|
66
|
-
|
|
67
|
-
return { head: ctx.clock?.head } as TransactionMeta;
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
registerCompactStrategy({
|
|
72
|
-
name: "full",
|
|
73
|
-
compact: async (ctx: CompactStrategyContext) => {
|
|
74
|
-
if (!ctx.lastTxMeta) {
|
|
75
|
-
throw ctx.logger.Error().Msg("no lastTxMeta").AsError();
|
|
76
|
-
}
|
|
77
|
-
for await (const blk of ctx.loader.entries(false)) {
|
|
78
|
-
ctx.loggedBlocks.putSync(blk);
|
|
79
|
-
}
|
|
80
|
-
for (const t of ctx.transactions) {
|
|
81
|
-
for await (const blk of t.entries()) {
|
|
82
|
-
ctx.loggedBlocks.putSync(blk);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
return ctx.lastTxMeta as TransactionMeta;
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
registerCompactStrategy({
|
|
90
|
-
name: "no-op",
|
|
91
|
-
compact: async () => {
|
|
92
|
-
// do nothing
|
|
93
|
-
return {} as TransactionMeta;
|
|
94
|
-
},
|
|
95
|
-
});
|
package/crdt-clock.ts
DELETED
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
import { advance } from "@web3-storage/pail/clock";
|
|
2
|
-
import { root } from "@web3-storage/pail/crdt";
|
|
3
|
-
import { Logger } from "@adviser/cement";
|
|
4
|
-
|
|
5
|
-
import { clockChangesSince, toPailFetcher } from "./crdt-helpers.js";
|
|
6
|
-
import {
|
|
7
|
-
type DocUpdate,
|
|
8
|
-
type ClockHead,
|
|
9
|
-
type DocTypes,
|
|
10
|
-
type VoidFn,
|
|
11
|
-
type UnReg,
|
|
12
|
-
type SuperThis,
|
|
13
|
-
type BaseBlockstore,
|
|
14
|
-
type CarTransaction,
|
|
15
|
-
PARAM,
|
|
16
|
-
} from "@fireproof/core-types-base";
|
|
17
|
-
import { applyHeadQueue, ApplyHeadQueue } from "./apply-head-queue.js";
|
|
18
|
-
import { ensureLogger } from "@fireproof/core-runtime";
|
|
19
|
-
import { anyBlock2FPBlock } from "@fireproof/core-blockstore";
|
|
20
|
-
|
|
21
|
-
export class CRDTClockImpl {
|
|
22
|
-
// todo: track local and remote clocks independently, merge on read
|
|
23
|
-
// that way we can drop the whole remote if we need to
|
|
24
|
-
// should go with making sure the local clock only references locally available blockstore on write
|
|
25
|
-
readonly head: ClockHead = [];
|
|
26
|
-
|
|
27
|
-
readonly zoomers = new Map<string, VoidFn>();
|
|
28
|
-
readonly watchers = new Map<string, (updates: DocUpdate<DocTypes>[]) => void>();
|
|
29
|
-
readonly emptyWatchers = new Map<string, VoidFn>();
|
|
30
|
-
|
|
31
|
-
readonly blockstore: BaseBlockstore; // ready blockstore
|
|
32
|
-
|
|
33
|
-
readonly applyHeadQueue: ApplyHeadQueue<DocTypes>;
|
|
34
|
-
transaction?: CarTransaction;
|
|
35
|
-
|
|
36
|
-
async ready(): Promise<void> {
|
|
37
|
-
/* no-op */
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async close() {
|
|
41
|
-
/* no-op */
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
readonly logger: Logger;
|
|
45
|
-
readonly sthis: SuperThis;
|
|
46
|
-
constructor(blockstore: BaseBlockstore) {
|
|
47
|
-
this.sthis = blockstore.sthis;
|
|
48
|
-
this.blockstore = blockstore;
|
|
49
|
-
this.logger = ensureLogger(blockstore.sthis, "CRDTClock");
|
|
50
|
-
this.applyHeadQueue = applyHeadQueue(this.int_applyHead.bind(this), this.logger);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
setHead(head: ClockHead) {
|
|
54
|
-
// this.head = head;
|
|
55
|
-
this.head.splice(0, this.head.length, ...head);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async applyHead(newHead: ClockHead, prevHead: ClockHead, updates?: DocUpdate<DocTypes>[]): Promise<void> {
|
|
59
|
-
for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({
|
|
60
|
-
newHead,
|
|
61
|
-
prevHead,
|
|
62
|
-
updates,
|
|
63
|
-
})) {
|
|
64
|
-
return this.processUpdates(updatesAcc, all, prevHead);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
async processUpdates(updatesAcc: DocUpdate<DocTypes>[], all: boolean, prevHead: ClockHead) {
|
|
69
|
-
let internalUpdates = updatesAcc;
|
|
70
|
-
if (this.watchers.size && !all) {
|
|
71
|
-
const changes = await clockChangesSince<DocTypes>(this.blockstore, this.head, prevHead, {}, this.logger);
|
|
72
|
-
internalUpdates = changes.result;
|
|
73
|
-
}
|
|
74
|
-
this.zoomers.forEach((fn) => fn());
|
|
75
|
-
this.notifyWatchers(internalUpdates || []);
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
notifyWatchers(updates: DocUpdate<DocTypes>[]) {
|
|
79
|
-
updates = updates.filter((update) => update.id !== PARAM.GENESIS_CID);
|
|
80
|
-
if (!updates.length) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
this.emptyWatchers.forEach((fn) => fn());
|
|
84
|
-
this.watchers.forEach((fn) => fn(updates || []));
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
onTick(fn: (updates: DocUpdate<DocTypes>[]) => void): UnReg {
|
|
88
|
-
const key = this.sthis.timeOrderedNextId().str;
|
|
89
|
-
this.watchers.set(key, fn);
|
|
90
|
-
return () => {
|
|
91
|
-
this.watchers.delete(key);
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
onTock(fn: VoidFn): UnReg {
|
|
96
|
-
const key = this.sthis.timeOrderedNextId().str;
|
|
97
|
-
this.emptyWatchers.set(key, fn);
|
|
98
|
-
return () => {
|
|
99
|
-
this.emptyWatchers.delete(key);
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
onZoom(fn: VoidFn): UnReg {
|
|
104
|
-
const key = this.sthis.timeOrderedNextId().str;
|
|
105
|
-
this.zoomers.set(key, fn);
|
|
106
|
-
return () => {
|
|
107
|
-
this.zoomers.delete(key);
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
async int_applyHead(newHead: ClockHead, prevHead: ClockHead, localUpdates: boolean) {
|
|
112
|
-
// if (!(this.head && prevHead && newHead)) {
|
|
113
|
-
// throw new Error("missing head");
|
|
114
|
-
// }
|
|
115
|
-
|
|
116
|
-
const noLoader = !localUpdates;
|
|
117
|
-
|
|
118
|
-
// console.log("int_applyHead", this.applyHeadQueue.size(), this.head, newHead, prevHead, localUpdates);
|
|
119
|
-
const ogHead = sortClockHead(this.head);
|
|
120
|
-
newHead = sortClockHead(newHead);
|
|
121
|
-
if (compareClockHeads(ogHead, newHead)) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const ogPrev = sortClockHead(prevHead);
|
|
125
|
-
if (compareClockHeads(ogHead, ogPrev)) {
|
|
126
|
-
this.setHead(newHead);
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// const noLoader = this.head.length === 1 && !updates?.length
|
|
131
|
-
if (!this.blockstore) {
|
|
132
|
-
throw this.logger.Error().Msg("missing blockstore").AsError();
|
|
133
|
-
}
|
|
134
|
-
await validateBlocks(this.logger, newHead, this.blockstore);
|
|
135
|
-
if (!this.transaction) {
|
|
136
|
-
this.transaction = this.blockstore.openTransaction({ noLoader, add: false });
|
|
137
|
-
}
|
|
138
|
-
const tblocks = this.transaction;
|
|
139
|
-
|
|
140
|
-
const advancedHead = await advanceBlocks(this.logger, newHead, tblocks, this.head);
|
|
141
|
-
const result = await root(toPailFetcher(tblocks), advancedHead);
|
|
142
|
-
|
|
143
|
-
const fpBlocks = await Promise.all(result.additions.map(anyBlock2FPBlock));
|
|
144
|
-
for (const fp of fpBlocks) {
|
|
145
|
-
tblocks.putSync(fp);
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
// for (const block of [
|
|
149
|
-
// ...result.additions,
|
|
150
|
-
// // ...result.removals
|
|
151
|
-
// ]) {
|
|
152
|
-
// tblocks.putSync(await anyBlock2FPBlock(block));
|
|
153
|
-
// }
|
|
154
|
-
if (!noLoader) {
|
|
155
|
-
await this.blockstore.commitTransaction(tblocks, { head: advancedHead }, { add: false, noLoader });
|
|
156
|
-
this.transaction = undefined;
|
|
157
|
-
}
|
|
158
|
-
this.setHead(advancedHead);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
// Helper functions
|
|
163
|
-
function sortClockHead(clockHead: ClockHead) {
|
|
164
|
-
return clockHead.sort((a, b) => a.toString().localeCompare(b.toString()));
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
async function validateBlocks(logger: Logger, newHead: ClockHead, blockstore?: BaseBlockstore) {
|
|
168
|
-
if (!blockstore) throw logger.Error().Msg("missing blockstore");
|
|
169
|
-
newHead.map(async (cid) => {
|
|
170
|
-
const got = await blockstore.get(cid);
|
|
171
|
-
if (!got) {
|
|
172
|
-
throw logger.Error().Str("cid", cid.toString()).Msg("int_applyHead missing block").AsError();
|
|
173
|
-
}
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
function compareClockHeads(head1: ClockHead, head2: ClockHead) {
|
|
178
|
-
return head1.toString() === head2.toString();
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
async function advanceBlocks(logger: Logger, newHead: ClockHead, tblocks: CarTransaction, head: ClockHead) {
|
|
182
|
-
for (const cid of newHead) {
|
|
183
|
-
try {
|
|
184
|
-
head = await advance(toPailFetcher(tblocks), head, cid);
|
|
185
|
-
} catch (e) {
|
|
186
|
-
logger.Error().Err(e).Msg("failed to advance head");
|
|
187
|
-
// console.log('failed to advance head:', cid.toString(), e)
|
|
188
|
-
// continue;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
return head;
|
|
192
|
-
}
|