@typeberry/lib 0.10.0 → 0.11.0-411c828
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/package.json +3 -5
- package/packages/configs/index.d.ts +9 -0
- package/packages/configs/index.d.ts.map +1 -1
- package/packages/configs/typeberry-default.json +4 -1
- package/packages/configs/typeberry-dev-full.json +3 -0
- package/packages/configs/typeberry-dev-tiny.json +3 -0
- package/packages/jam/config-node/index.d.ts +1 -0
- package/packages/jam/config-node/index.d.ts.map +1 -1
- package/packages/jam/config-node/index.js +1 -0
- package/packages/jam/config-node/node-config.d.ts +5 -11
- package/packages/jam/config-node/node-config.d.ts.map +1 -1
- package/packages/jam/config-node/node-config.js +9 -25
- package/packages/jam/config-node/node-config.test.js +11 -6
- package/packages/jam/config-node/rpc.d.ts +11 -0
- package/packages/jam/config-node/rpc.d.ts.map +1 -0
- package/packages/jam/config-node/rpc.js +16 -0
- package/packages/jam/database/states.d.ts +1 -8
- package/packages/jam/database/states.d.ts.map +1 -1
- package/packages/jam/database/value-refs.d.ts +4 -5
- package/packages/jam/database/value-refs.d.ts.map +1 -1
- package/packages/jam/database-fjall/blocks.d.ts +1 -0
- package/packages/jam/database-fjall/blocks.d.ts.map +1 -1
- package/packages/jam/database-fjall/blocks.js +8 -3
- package/packages/jam/database-fjall/hybrid-states.d.ts +10 -4
- package/packages/jam/database-fjall/hybrid-states.d.ts.map +1 -1
- package/packages/jam/database-fjall/hybrid-states.js +22 -6
- package/packages/jam/database-fjall/root.d.ts +2 -0
- package/packages/jam/database-fjall/root.d.ts.map +1 -1
- package/packages/jam/database-fjall/root.js +8 -1
- package/packages/jam/database-fjall/root.test.d.ts +2 -0
- package/packages/jam/database-fjall/root.test.d.ts.map +1 -0
- package/packages/jam/database-fjall/root.test.js +23 -0
- package/packages/jam/database-fjall/states.d.ts +1 -0
- package/packages/jam/database-fjall/states.d.ts.map +1 -1
- package/packages/jam/database-fjall/states.js +6 -3
- package/packages/jam/node/export.d.ts.map +1 -1
- package/packages/jam/node/export.js +8 -17
- package/packages/jam/node/jam-config.d.ts +5 -1
- package/packages/jam/node/jam-config.d.ts.map +1 -1
- package/packages/jam/node/jam-config.js +6 -2
- package/packages/jam/node/main-fuzz.d.ts.map +1 -1
- package/packages/jam/node/main-fuzz.js +59 -39
- package/packages/jam/node/main-importer.d.ts +6 -11
- package/packages/jam/node/main-importer.d.ts.map +1 -1
- package/packages/jam/node/main-importer.js +15 -29
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +6 -16
- package/packages/jam/rpc/index.d.ts +3 -0
- package/packages/jam/rpc/index.d.ts.map +1 -0
- package/packages/jam/rpc/index.js +2 -0
- package/packages/jam/rpc/src/handlers/best-block.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/best-block.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/best-block.js +15 -0
- package/packages/jam/rpc/src/handlers/finalized-block.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/finalized-block.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/finalized-block.js +7 -0
- package/packages/jam/rpc/src/handlers/list-services.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/list-services.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/list-services.js +15 -0
- package/packages/jam/rpc/src/handlers/not-implemented.d.ts +4 -0
- package/packages/jam/rpc/src/handlers/not-implemented.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/not-implemented.js +4 -0
- package/packages/jam/rpc/src/handlers/parameters.d.ts +7 -0
- package/packages/jam/rpc/src/handlers/parameters.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/parameters.js +53 -0
- package/packages/jam/rpc/src/handlers/parent.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/parent.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/parent.js +25 -0
- package/packages/jam/rpc/src/handlers/service-data.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/service-data.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/service-data.js +21 -0
- package/packages/jam/rpc/src/handlers/service-preimage.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/service-preimage.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/service-preimage.js +23 -0
- package/packages/jam/rpc/src/handlers/service-request.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/service-request.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/service-request.js +23 -0
- package/packages/jam/rpc/src/handlers/service-value.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/service-value.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/service-value.js +23 -0
- package/packages/jam/rpc/src/handlers/state-root.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/state-root.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/state-root.js +14 -0
- package/packages/jam/rpc/src/handlers/statistics.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/statistics.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/statistics.js +16 -0
- package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-best-block.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-best-block.js +8 -0
- package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-finalized-block.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-finalized-block.js +8 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-data.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-data.js +13 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-preimage.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-preimage.js +13 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-request.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-request.js +13 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-value.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-service-value.js +13 -0
- package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts +6 -0
- package/packages/jam/rpc/src/handlers/subscribe-statistics.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/subscribe-statistics.js +13 -0
- package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts +8 -0
- package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/typeberry/refine-work-package.js +68 -0
- package/packages/jam/rpc/src/handlers/unsubscribe.d.ts +4 -0
- package/packages/jam/rpc/src/handlers/unsubscribe.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers/unsubscribe.js +3 -0
- package/packages/jam/rpc/src/handlers.d.ts +3 -0
- package/packages/jam/rpc/src/handlers.d.ts.map +1 -0
- package/packages/jam/rpc/src/handlers.js +60 -0
- package/packages/jam/rpc/src/server.d.ts +31 -0
- package/packages/jam/rpc/src/server.d.ts.map +1 -0
- package/packages/jam/rpc/src/server.js +179 -0
- package/packages/jam/rpc/src/subscription-manager.d.ts +20 -0
- package/packages/jam/rpc/src/subscription-manager.d.ts.map +1 -0
- package/packages/jam/rpc/src/subscription-manager.js +74 -0
- package/packages/jam/rpc/test/e2e-server.d.ts +3 -0
- package/packages/jam/rpc/test/e2e-server.d.ts.map +1 -0
- package/packages/jam/rpc/test/e2e-server.js +30 -0
- package/packages/jam/rpc/test/e2e-setup.d.ts +2 -0
- package/packages/jam/rpc/test/e2e-setup.d.ts.map +1 -0
- package/packages/jam/rpc/test/e2e-setup.js +126 -0
- package/packages/jam/rpc/test/e2e.d.ts +2 -0
- package/packages/jam/rpc/test/e2e.d.ts.map +1 -0
- package/packages/jam/rpc/test/e2e.js +326 -0
- package/packages/jam/state-merkleization/index.d.ts +1 -1
- package/packages/jam/state-merkleization/index.js +1 -1
- package/packages/workers/api-node/config.d.ts +14 -46
- package/packages/workers/api-node/config.d.ts.map +1 -1
- package/packages/workers/api-node/config.js +31 -96
- package/packages/workers/api-node/config.test.js +82 -63
- package/packages/workers/importer/main.d.ts +2 -0
- package/packages/workers/importer/main.d.ts.map +1 -1
- package/packages/workers/importer/main.js +1 -1
- package/packages/jam/database-lmdb/blocks.d.ts +0 -24
- package/packages/jam/database-lmdb/blocks.d.ts.map +0 -1
- package/packages/jam/database-lmdb/blocks.js +0 -82
- package/packages/jam/database-lmdb/hybrid-states.d.ts +0 -56
- package/packages/jam/database-lmdb/hybrid-states.d.ts.map +0 -1
- package/packages/jam/database-lmdb/hybrid-states.js +0 -149
- package/packages/jam/database-lmdb/hybrid-states.test.d.ts +0 -2
- package/packages/jam/database-lmdb/hybrid-states.test.d.ts.map +0 -1
- package/packages/jam/database-lmdb/hybrid-states.test.js +0 -180
- package/packages/jam/database-lmdb/index.d.ts +0 -5
- package/packages/jam/database-lmdb/index.d.ts.map +0 -1
- package/packages/jam/database-lmdb/index.js +0 -4
- package/packages/jam/database-lmdb/root.d.ts +0 -26
- package/packages/jam/database-lmdb/root.d.ts.map +0 -1
- package/packages/jam/database-lmdb/root.js +0 -53
- package/packages/jam/database-lmdb/states.d.ts +0 -76
- package/packages/jam/database-lmdb/states.d.ts.map +0 -1
- package/packages/jam/database-lmdb/states.js +0 -145
- package/packages/jam/database-lmdb/states.test.d.ts +0 -2
- package/packages/jam/database-lmdb/states.test.d.ts.map +0 -1
- package/packages/jam/database-lmdb/states.test.js +0 -202
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typeberry/lib",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0-411c828",
|
|
4
4
|
"description": "Typeberry Library",
|
|
5
5
|
"main": "./bin/lib/index.js",
|
|
6
6
|
"types": "./bin/lib/index.d.ts",
|
|
@@ -152,8 +152,6 @@
|
|
|
152
152
|
"#@typeberry/lib/*": "./bin/lib/*",
|
|
153
153
|
"#@typeberry/pvm": "./bin/pvm/index.js",
|
|
154
154
|
"#@typeberry/pvm/*": "./bin/pvm/*",
|
|
155
|
-
"#@typeberry/rpc": "./bin/rpc/index.js",
|
|
156
|
-
"#@typeberry/rpc/*": "./bin/rpc/*",
|
|
157
155
|
"#@typeberry/test-runner": "./bin/test-runner/index.js",
|
|
158
156
|
"#@typeberry/test-runner/*": "./bin/test-runner/*",
|
|
159
157
|
"#@typeberry/configs": "./packages/configs/index.js",
|
|
@@ -216,8 +214,6 @@
|
|
|
216
214
|
"#@typeberry/database/*": "./packages/jam/database/*",
|
|
217
215
|
"#@typeberry/database-fjall": "./packages/jam/database-fjall/index.js",
|
|
218
216
|
"#@typeberry/database-fjall/*": "./packages/jam/database-fjall/*",
|
|
219
|
-
"#@typeberry/database-lmdb": "./packages/jam/database-lmdb/index.js",
|
|
220
|
-
"#@typeberry/database-lmdb/*": "./packages/jam/database-lmdb/*",
|
|
221
217
|
"#@typeberry/executor": "./packages/jam/executor/index.js",
|
|
222
218
|
"#@typeberry/executor/*": "./packages/jam/executor/*",
|
|
223
219
|
"#@typeberry/fuzz-proto": "./packages/jam/fuzz-proto/index.js",
|
|
@@ -230,6 +226,8 @@
|
|
|
230
226
|
"#@typeberry/jamnp-s/*": "./packages/jam/jamnp-s/*",
|
|
231
227
|
"#@typeberry/node": "./packages/jam/node/index.js",
|
|
232
228
|
"#@typeberry/node/*": "./packages/jam/node/*",
|
|
229
|
+
"#@typeberry/rpc": "./packages/jam/rpc/index.js",
|
|
230
|
+
"#@typeberry/rpc/*": "./packages/jam/rpc/*",
|
|
233
231
|
"#@typeberry/rpc-client": "./packages/jam/rpc-client/index.js",
|
|
234
232
|
"#@typeberry/rpc-client/*": "./packages/jam/rpc-client/*",
|
|
235
233
|
"#@typeberry/rpc-validation": "./packages/jam/rpc-validation/index.js",
|
|
@@ -33,6 +33,9 @@ export declare const configs: {
|
|
|
33
33
|
};
|
|
34
34
|
};
|
|
35
35
|
database_base_path: string;
|
|
36
|
+
rpc: {
|
|
37
|
+
port: number;
|
|
38
|
+
};
|
|
36
39
|
};
|
|
37
40
|
devTiny: {
|
|
38
41
|
$schema: string;
|
|
@@ -67,6 +70,9 @@ export declare const configs: {
|
|
|
67
70
|
ff000000000000000000000000000000000000000000000000000000000000: string;
|
|
68
71
|
};
|
|
69
72
|
};
|
|
73
|
+
rpc: {
|
|
74
|
+
port: number;
|
|
75
|
+
};
|
|
70
76
|
};
|
|
71
77
|
devFull: {
|
|
72
78
|
$schema: string;
|
|
@@ -96,6 +102,9 @@ export declare const configs: {
|
|
|
96
102
|
"10000000000000000000000000000000000000000000000000000000000000": string;
|
|
97
103
|
};
|
|
98
104
|
};
|
|
105
|
+
rpc: {
|
|
106
|
+
port: number;
|
|
107
|
+
};
|
|
99
108
|
};
|
|
100
109
|
};
|
|
101
110
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/configs/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/configs/index.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAInB,CAAC"}
|
|
@@ -34,5 +34,8 @@
|
|
|
34
34
|
"ff000000000000000000000000000000000000000000000000000000000000": "00d1b097b4410b3a63446d7c57d093972a9744fcd2d74f4a5e2ec163610e6d6327ffffffffffffffff0a000000000000000a000000000000003418020000000000ffffffffffffffff04000000000000000000000000000000"
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
|
-
"database_base_path": "./database"
|
|
37
|
+
"database_base_path": "./database",
|
|
38
|
+
"rpc": {
|
|
39
|
+
"port": 19800
|
|
40
|
+
}
|
|
38
41
|
}
|
|
@@ -25,5 +25,8 @@
|
|
|
25
25
|
"0f000000000000000000000000000000000000000000000000000000000000": "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
26
26
|
"10000000000000000000000000000000000000000000000000000000000000": "00"
|
|
27
27
|
}
|
|
28
|
+
},
|
|
29
|
+
"rpc": {
|
|
30
|
+
"port": 19800
|
|
28
31
|
}
|
|
29
32
|
}
|
|
@@ -30,5 +30,8 @@
|
|
|
30
30
|
"10000000000000000000000000000000000000000000000000000000000000": "00",
|
|
31
31
|
"ff000000000000000000000000000000000000000000000000000000000000": "00d1b097b4410b3a63446d7c57d093972a9744fcd2d74f4a5e2ec163610e6d6327ffffffffffffffff0a000000000000000a000000000000003418020000000000ffffffffffffffff04000000000000000000000000000000"
|
|
32
32
|
}
|
|
33
|
+
},
|
|
34
|
+
"rpc": {
|
|
35
|
+
"port": 19800
|
|
33
36
|
}
|
|
34
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/config-node/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/config-node/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { PvmBackend } from "#@typeberry/config";
|
|
|
2
2
|
import { type FromJson } from "#@typeberry/json-parser";
|
|
3
3
|
import { AuthorshipOptions } from "./authorship.js";
|
|
4
4
|
import { JipChainSpec } from "./jip-chain-spec.js";
|
|
5
|
+
import { RpcOptions } from "./rpc.js";
|
|
5
6
|
/** Development config. Will accept unsealed blocks for now. */
|
|
6
7
|
export declare const DEV_TINY_CONFIG = "dev";
|
|
7
8
|
export declare const DEV_FULL_CONFIG = "dev-full";
|
|
@@ -19,22 +20,15 @@ export declare enum KnownChainSpec {
|
|
|
19
20
|
/** Full chain spec. */
|
|
20
21
|
Full = "full"
|
|
21
22
|
}
|
|
22
|
-
/** Persistent regular-node database backend. */
|
|
23
|
-
export declare enum RegularStateBackend {
|
|
24
|
-
/** @deprecated lmdb remains available as an explicit fallback, but fjall is the default backend. */
|
|
25
|
-
Lmdb = "lmdb",
|
|
26
|
-
Fjall = "fjall"
|
|
27
|
-
}
|
|
28
23
|
export declare const knownChainSpecFromJson: FromJson<KnownChainSpec>;
|
|
29
|
-
export declare const regularStateBackendFromJson: FromJson<RegularStateBackend>;
|
|
30
24
|
type NodeConfigurationJson = {
|
|
31
25
|
$schema: string;
|
|
32
26
|
version: number;
|
|
33
27
|
flavor: KnownChainSpec;
|
|
34
28
|
chain_spec: JipChainSpec;
|
|
35
29
|
database_base_path?: string;
|
|
36
|
-
state_backend?: RegularStateBackend;
|
|
37
30
|
authorship: AuthorshipOptions;
|
|
31
|
+
rpc?: RpcOptions;
|
|
38
32
|
};
|
|
39
33
|
export declare class NodeConfiguration {
|
|
40
34
|
readonly $schema: string;
|
|
@@ -43,11 +37,11 @@ export declare class NodeConfiguration {
|
|
|
43
37
|
readonly chainSpec: JipChainSpec;
|
|
44
38
|
/** If database path is not provided, we load an in-memory db. */
|
|
45
39
|
readonly databaseBasePath: string | undefined;
|
|
46
|
-
/** Persistent database backend used when `databaseBasePath` is set. */
|
|
47
|
-
readonly stateBackend: RegularStateBackend;
|
|
48
40
|
readonly authorship: AuthorshipOptions;
|
|
41
|
+
/** Optional RPC server configuration. When present, an in-process RPC server is started. */
|
|
42
|
+
readonly rpc: RpcOptions | undefined;
|
|
49
43
|
static fromJson: import("@typeberry/json-parser").FromJsonWithParser<unknown, NodeConfiguration>;
|
|
50
|
-
static new({ $schema, version, flavor, chain_spec, database_base_path,
|
|
44
|
+
static new({ $schema, version, flavor, chain_spec, database_base_path, authorship, rpc }: NodeConfigurationJson): NodeConfiguration;
|
|
51
45
|
private constructor();
|
|
52
46
|
}
|
|
53
47
|
export declare function loadConfig(config: string[], withRelPath: (p: string) => string): NodeConfiguration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/config-node/node-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,KAAK,QAAQ,EAAuB,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/config-node/node-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,KAAK,QAAQ,EAAuB,MAAM,wBAAwB,CAAC;AAG5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAItC,+DAA+D;AAC/D,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,eAAe,aAAa,CAAC;AAE1C,2BAA2B;AAC3B,eAAO,MAAM,cAAc,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa;;;;CAIzB,CAAC;AAEF,0BAA0B;AAC1B,oBAAY,cAAc;IACxB,uBAAuB;IACvB,IAAI,SAAS;IACb,uBAAuB;IACvB,IAAI,SAAS;CACd;AAED,eAAO,MAAM,sBAAsB,EAS7B,QAAQ,CAAC,cAAc,CAAC,CAAC;AAE/B,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,GAAG,CAAC,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,qBAAa,iBAAiB;aA8BV,OAAO,EAAE,MAAM;aACf,OAAO,EAAE,MAAM;aACf,MAAM,EAAE,cAAc;aACtB,SAAS,EAAE,YAAY;IACvC,iEAAiE;aACjD,gBAAgB,EAAE,MAAM,GAAG,SAAS;aACpC,UAAU,EAAE,iBAAiB;IAC7C,4FAA4F;aAC5E,GAAG,EAAE,UAAU,GAAG,SAAS;IArC7C,MAAM,CAAC,QAAQ,kFAWb;IAEF,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,qBAAqB;IAe/G,OAAO;CAWR;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,iBAAiB,CAuDlG"}
|
|
@@ -7,6 +7,7 @@ import { Logger } from "#@typeberry/logger";
|
|
|
7
7
|
import { isBrowser } from "#@typeberry/utils";
|
|
8
8
|
import { AuthorshipOptions } from "./authorship.js";
|
|
9
9
|
import { JipChainSpec } from "./jip-chain-spec.js";
|
|
10
|
+
import { RpcOptions } from "./rpc.js";
|
|
10
11
|
const logger = Logger.new(import.meta.filename, "config");
|
|
11
12
|
/** Development config. Will accept unsealed blocks for now. */
|
|
12
13
|
export const DEV_TINY_CONFIG = "dev";
|
|
@@ -26,13 +27,6 @@ export var KnownChainSpec;
|
|
|
26
27
|
/** Full chain spec. */
|
|
27
28
|
KnownChainSpec["Full"] = "full";
|
|
28
29
|
})(KnownChainSpec || (KnownChainSpec = {}));
|
|
29
|
-
/** Persistent regular-node database backend. */
|
|
30
|
-
export var RegularStateBackend;
|
|
31
|
-
(function (RegularStateBackend) {
|
|
32
|
-
/** @deprecated lmdb remains available as an explicit fallback, but fjall is the default backend. */
|
|
33
|
-
RegularStateBackend["Lmdb"] = "lmdb";
|
|
34
|
-
RegularStateBackend["Fjall"] = "fjall";
|
|
35
|
-
})(RegularStateBackend || (RegularStateBackend = {}));
|
|
36
30
|
export const knownChainSpecFromJson = json.fromString((input, ctx) => {
|
|
37
31
|
switch (input) {
|
|
38
32
|
case KnownChainSpec.Tiny:
|
|
@@ -43,51 +37,41 @@ export const knownChainSpecFromJson = json.fromString((input, ctx) => {
|
|
|
43
37
|
throw Error(`unknown network flavor: ${input} at ${ctx}`);
|
|
44
38
|
}
|
|
45
39
|
});
|
|
46
|
-
export const regularStateBackendFromJson = json.fromString((input, ctx) => {
|
|
47
|
-
switch (input) {
|
|
48
|
-
case RegularStateBackend.Lmdb:
|
|
49
|
-
return RegularStateBackend.Lmdb;
|
|
50
|
-
case RegularStateBackend.Fjall:
|
|
51
|
-
return RegularStateBackend.Fjall;
|
|
52
|
-
default:
|
|
53
|
-
throw Error(`unknown state backend: ${input} at ${ctx}`);
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
40
|
export class NodeConfiguration {
|
|
57
41
|
$schema;
|
|
58
42
|
version;
|
|
59
43
|
flavor;
|
|
60
44
|
chainSpec;
|
|
61
45
|
databaseBasePath;
|
|
62
|
-
stateBackend;
|
|
63
46
|
authorship;
|
|
47
|
+
rpc;
|
|
64
48
|
static fromJson = json.object({
|
|
65
49
|
$schema: "string",
|
|
66
50
|
version: "number",
|
|
67
51
|
flavor: knownChainSpecFromJson,
|
|
68
52
|
chain_spec: JipChainSpec.fromJson,
|
|
69
53
|
database_base_path: json.optional("string"),
|
|
70
|
-
state_backend: json.optional(regularStateBackendFromJson),
|
|
71
54
|
authorship: AuthorshipOptions.fromJson,
|
|
55
|
+
rpc: json.optional(RpcOptions.fromJson),
|
|
72
56
|
}, NodeConfiguration.new);
|
|
73
|
-
static new({ $schema, version, flavor, chain_spec, database_base_path,
|
|
57
|
+
static new({ $schema, version, flavor, chain_spec, database_base_path, authorship, rpc }) {
|
|
74
58
|
if (version !== 1) {
|
|
75
59
|
throw new Error("Only version=1 config is supported.");
|
|
76
60
|
}
|
|
77
|
-
return new NodeConfiguration($schema, version, flavor, chain_spec, database_base_path ?? undefined,
|
|
61
|
+
return new NodeConfiguration($schema, version, flavor, chain_spec, database_base_path ?? undefined, authorship, rpc ?? undefined);
|
|
78
62
|
}
|
|
79
63
|
constructor($schema, version, flavor, chainSpec,
|
|
80
64
|
/** If database path is not provided, we load an in-memory db. */
|
|
81
|
-
databaseBasePath,
|
|
82
|
-
/**
|
|
83
|
-
|
|
65
|
+
databaseBasePath, authorship,
|
|
66
|
+
/** Optional RPC server configuration. When present, an in-process RPC server is started. */
|
|
67
|
+
rpc) {
|
|
84
68
|
this.$schema = $schema;
|
|
85
69
|
this.version = version;
|
|
86
70
|
this.flavor = flavor;
|
|
87
71
|
this.chainSpec = chainSpec;
|
|
88
72
|
this.databaseBasePath = databaseBasePath;
|
|
89
|
-
this.stateBackend = stateBackend;
|
|
90
73
|
this.authorship = authorship;
|
|
74
|
+
this.rpc = rpc;
|
|
91
75
|
}
|
|
92
76
|
}
|
|
93
77
|
export function loadConfig(config, withRelPath) {
|
|
@@ -5,7 +5,8 @@ import { configs } from "#@typeberry/configs";
|
|
|
5
5
|
import polkajamConfig from "#@typeberry/configs/typeberry-polkajam-dev.json" with { type: "json" };
|
|
6
6
|
import { parseFromJson } from "#@typeberry/json-parser";
|
|
7
7
|
import { workspacePathFix } from "#@typeberry/utils";
|
|
8
|
-
import { KnownChainSpec, loadConfig, NodeConfiguration
|
|
8
|
+
import { KnownChainSpec, loadConfig, NodeConfiguration } from "./node-config.js";
|
|
9
|
+
import { RpcOptions } from "./rpc.js";
|
|
9
10
|
const withRelPath = workspacePathFix(`${import.meta.dirname}/../..`);
|
|
10
11
|
const NODE_CONFIG_TEST = {
|
|
11
12
|
$schema: "https://typeberry.dev/schemas/config-v1.schema.json",
|
|
@@ -40,12 +41,15 @@ describe("Importing Node Configuration", () => {
|
|
|
40
41
|
it("should read the database base path", () => {
|
|
41
42
|
assert.deepStrictEqual(config.databaseBasePath, "/tmp/jam-node-db");
|
|
42
43
|
});
|
|
43
|
-
it("defaults to
|
|
44
|
-
assert.deepStrictEqual(config.
|
|
44
|
+
it("defaults to no rpc config", () => {
|
|
45
|
+
assert.deepStrictEqual(config.rpc, undefined);
|
|
45
46
|
});
|
|
46
|
-
it("should read
|
|
47
|
-
const
|
|
48
|
-
assert.deepStrictEqual(
|
|
47
|
+
it("should read rpc config when present", () => {
|
|
48
|
+
const withRpc = parseFromJson({ ...NODE_CONFIG_TEST, rpc: { port: 9999 } }, NodeConfiguration.fromJson);
|
|
49
|
+
assert.deepStrictEqual(withRpc.rpc, RpcOptions.new({ port: 9999 }));
|
|
50
|
+
});
|
|
51
|
+
it("should reject unknown config keys", () => {
|
|
52
|
+
assert.throws(() => parseFromJson({ ...NODE_CONFIG_TEST, state_backend: "fjall" }, NodeConfiguration.fromJson));
|
|
49
53
|
});
|
|
50
54
|
it("should read the chain spec", () => {
|
|
51
55
|
assert.deepStrictEqual(config.chainSpec.id, "testnet");
|
|
@@ -74,6 +78,7 @@ describe("loadConfig", () => {
|
|
|
74
78
|
it("should load default config", () => {
|
|
75
79
|
const config = loadConfig(["default"], withRelPath);
|
|
76
80
|
assert.deepStrictEqual(config, parseFromJson(configs.default, NodeConfiguration.fromJson));
|
|
81
|
+
assert.deepStrictEqual(config.rpc, RpcOptions.new({ port: 19800 }));
|
|
77
82
|
});
|
|
78
83
|
it("should load dev config", () => {
|
|
79
84
|
const config = loadConfig(["dev"], withRelPath);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** RPC server options. */
|
|
2
|
+
export declare class RpcOptions {
|
|
3
|
+
/** Port for the JSON-RPC WebSocket server. */
|
|
4
|
+
readonly port: number;
|
|
5
|
+
static fromJson: import("@typeberry/json-parser").FromJsonWithParser<unknown, RpcOptions>;
|
|
6
|
+
static new({ port }: {
|
|
7
|
+
port: number;
|
|
8
|
+
}): RpcOptions;
|
|
9
|
+
private constructor();
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/config-node/rpc.ts"],"names":[],"mappings":"AAGA,0BAA0B;AAC1B,qBAAa,UAAU;IAanB,8CAA8C;aAC9B,IAAI,EAAE,MAAM;IAb9B,MAAM,CAAC,QAAQ,2EAKb;IAEF,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAIrC,OAAO;CAIR"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { json } from "#@typeberry/json-parser";
|
|
2
|
+
/** RPC server options. */
|
|
3
|
+
export class RpcOptions {
|
|
4
|
+
port;
|
|
5
|
+
static fromJson = json.object({
|
|
6
|
+
port: "number",
|
|
7
|
+
}, RpcOptions.new);
|
|
8
|
+
static new({ port }) {
|
|
9
|
+
return new RpcOptions(port);
|
|
10
|
+
}
|
|
11
|
+
constructor(
|
|
12
|
+
/** Port for the JSON-RPC WebSocket server. */
|
|
13
|
+
port) {
|
|
14
|
+
this.port = port;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -14,14 +14,7 @@ export interface InitStatesDb<T = State> {
|
|
|
14
14
|
/** Insert a pre-defined initial state directly into the database. */
|
|
15
15
|
insertInitialState(headerHash: HeaderHash, initialState: T): Promise<Result<OK, StateUpdateError>>;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Interface for accessing states stored in the database.
|
|
19
|
-
*
|
|
20
|
-
* NOTE that the design of this interface is heavily influenced
|
|
21
|
-
* by the LMDB implementation, so that we can implement it efficiently.
|
|
22
|
-
*
|
|
23
|
-
* See the documentation there for more detailed reasoning.
|
|
24
|
-
*/
|
|
17
|
+
/** Interface for accessing states stored in the database. */
|
|
25
18
|
export interface StatesDb<T extends State = State> {
|
|
26
19
|
/** Compute a state root for given state. */
|
|
27
20
|
getStateRoot(state: T): Promise<StateRootHash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,KAAK,EAAe,MAAM,kBAAkB,CAAC;AAE/F,OAAO,EAAe,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,0DAA0D;AAC1D,oBAAY,gBAAgB;IAC1B,oDAAoD;IACpD,QAAQ,IAAI;IACZ,iDAAiD;IACjD,MAAM,IAAI;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,qEAAqE;IACrE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACpG;AAED
|
|
1
|
+
{"version":3,"file":"states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAElE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,KAAK,KAAK,EAAe,MAAM,kBAAkB,CAAC;AAE/F,OAAO,EAAe,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,0DAA0D;AAC1D,oBAAY,gBAAgB;IAC1B,oDAAoD;IACpD,QAAQ,IAAI;IACZ,iDAAiD;IACjD,MAAM,IAAI;CACX;AAED,wFAAwF;AACxF,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,KAAK;IACrC,qEAAqE;IACrE,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;CACpG;AAED,6DAA6D;AAC7D,MAAM,WAAW,QAAQ,CAAC,CAAC,SAAS,KAAK,GAAG,KAAK;IAC/C,4CAA4C;IAC5C,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAE/C;;;;OAIG;IACH,iBAAiB,CACf,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEzC,gDAAgD;IAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvC;;;;;;;;OAQG;IACH,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IAE7C,4EAA4E;IAC5E,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAErC;;;;;OAKG;IACH,eAAe,CAAC,IAAI,MAAM,GAAG,IAAI,CAAC;IAElC,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,qBAAa,cAAe,YAAW,QAAQ,CAAC,aAAa,CAAC;IAQxC,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPzC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAmE;IACtF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS;IAI1B,OAAO;IAID,iBAAiB,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAgBlC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAKhE,6CAA6C;IACvC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAM7G,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAStD,eAAe,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,IAAI;IAI7C,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAI9B,KAAK;CACZ"}
|
|
@@ -10,10 +10,9 @@ export interface ValueDelta {
|
|
|
10
10
|
/**
|
|
11
11
|
* Synchronous, read-only view of the persisted refcounting state.
|
|
12
12
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* (LMDB transactions, fjall inserts + persist).
|
|
13
|
+
* fjall offers synchronous reads, so reads can go straight to the backing
|
|
14
|
+
* store. All writes go through `ValueRefsUpdate` batches instead, since
|
|
15
|
+
* persistent backends can only write asynchronously (fjall inserts + persist).
|
|
17
16
|
*/
|
|
18
17
|
export interface ValueRefsReader {
|
|
19
18
|
/** How many leaves of the finalized-tip state reference the value. Missing keys read as `0`. */
|
|
@@ -28,7 +27,7 @@ export interface ValueRefsReader {
|
|
|
28
27
|
*
|
|
29
28
|
* The backend is responsible for applying the batch using its own write
|
|
30
29
|
* primitive - ideally atomically with the state write that triggered it
|
|
31
|
-
* (one
|
|
30
|
+
* (one fjall persist).
|
|
32
31
|
*
|
|
33
32
|
* Counts are absolute values rather than increments, so applying the same
|
|
34
33
|
* update more than once (e.g. on crash-replay) is harmless.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-refs.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/value-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,sEAAsE;IACtE,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"value-refs.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/value-refs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,0EAA0E;AAC1E,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,sEAAsE;IACtE,OAAO,EAAE,SAAS,EAAE,CAAC;CACtB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3C,iGAAiG;IACjG,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IACzC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;CACtD;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,eAAe;IAC9B,kFAAkF;IAClF,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IACvC,gFAAgF;IAChF,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;IACrC,oDAAoD;IACpD,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,CAAC;IACtC,uDAAuD;IACvD,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,kFAAkF;IAClF,YAAY,EAAE,SAAS,EAAE,CAAC;CAC3B;AAED,+DAA+D;AAC/D,wBAAgB,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAQ9D;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,eAAe;IAEpD,yEAAyE;IACzE,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,eAAe;IAQjD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe;IAYhE;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,eAAe;IAoBvD;;;;;;;OAOG;IACH,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,eAAe;CAYxD;AA0ED;;;;;;GAMG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA2D;IACrF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2D;IACnF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgE;IAEvF,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAI1C,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAIxC,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS;IAIpD,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;CAUrC"}
|
|
@@ -12,6 +12,7 @@ export declare class FjallBlocks implements BlocksDb {
|
|
|
12
12
|
private readonly postStateRoots;
|
|
13
13
|
static open(chainSpec: ChainSpec, root: FjallRoot): Promise<FjallBlocks>;
|
|
14
14
|
private constructor();
|
|
15
|
+
private pendingPrune;
|
|
15
16
|
setPostStateRoot(hash: HeaderHash, postStateRoot: StateRootHash): Promise<void>;
|
|
16
17
|
getPostStateRoot(hash: HeaderHash): StateRootHash | null;
|
|
17
18
|
insertBlock(block: WithHash<HeaderHash, BlockView>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAuB,KAAK,SAAS,EAAgC,MAAM,WAAW,CAAC;AAK9F,kCAAkC;AAClC,qBAAa,WAAY,YAAW,QAAQ;IAWxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;WAdpB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAS9E,OAAO;
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAuB,KAAK,SAAS,EAAgC,MAAM,WAAW,CAAC;AAK9F,kCAAkC;AAClC,qBAAa,WAAY,YAAW,QAAQ;IAWxC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;WAdpB,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;IAS9E,OAAO;IAQP,OAAO,CAAC,YAAY,CAAuC;IAErD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQlD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxD,iBAAiB,IAAI,UAAU;IAQ/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAQ9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAY5B,KAAK;CAGZ"}
|
|
@@ -28,6 +28,7 @@ export class FjallBlocks {
|
|
|
28
28
|
this.extrinsics = extrinsics;
|
|
29
29
|
this.postStateRoots = postStateRoots;
|
|
30
30
|
}
|
|
31
|
+
pendingPrune = Promise.resolve();
|
|
31
32
|
async setPostStateRoot(hash, postStateRoot) {
|
|
32
33
|
await writable(this.postStateRoots, this.root).insert(hash.raw, postStateRoot.raw);
|
|
33
34
|
}
|
|
@@ -70,13 +71,17 @@ export class FjallBlocks {
|
|
|
70
71
|
return Decoder.decodeObject(Extrinsic.Codec.View, data, this.chainSpec);
|
|
71
72
|
}
|
|
72
73
|
markUnused(hash) {
|
|
73
|
-
|
|
74
|
+
this.pendingPrune = this.pendingPrune
|
|
75
|
+
.then(() => Promise.all([
|
|
74
76
|
writable(this.headers, this.root).remove(hash.raw),
|
|
75
77
|
writable(this.extrinsics, this.root).remove(hash.raw),
|
|
76
78
|
writable(this.postStateRoots, this.root).remove(hash.raw),
|
|
77
|
-
])
|
|
79
|
+
]))
|
|
80
|
+
.catch((e) => logger.warn `Failed to prune block ${hash}: ${e}`);
|
|
81
|
+
}
|
|
82
|
+
async close() {
|
|
83
|
+
await this.pendingPrune;
|
|
78
84
|
}
|
|
79
|
-
async close() { }
|
|
80
85
|
}
|
|
81
86
|
function writable(partition, root) {
|
|
82
87
|
if (root.readOnly) {
|
|
@@ -5,13 +5,13 @@ import type { Blake2b } from "#@typeberry/hash";
|
|
|
5
5
|
import type { ServicesUpdate, State } from "#@typeberry/state";
|
|
6
6
|
import { SerializedState, type StateEntries } from "#@typeberry/state-merkleization";
|
|
7
7
|
import { OK, Result } from "#@typeberry/utils";
|
|
8
|
-
import { type FjallRootOptions, type Partition } from "./root.js";
|
|
8
|
+
import { FjallRoot, type FjallRootOptions, type Partition } from "./root.js";
|
|
9
9
|
/**
|
|
10
10
|
* One open fjall keyspace together with its content-addressed `values`
|
|
11
11
|
* partition.
|
|
12
12
|
*
|
|
13
|
-
* Opening the keyspace is the slow part, so the fuzz target
|
|
14
|
-
* per run and
|
|
13
|
+
* Opening the keyspace is the slow part, so the fuzz target can open one root
|
|
14
|
+
* per run and reuse it for every reset (see `HybridSerializedStates.fromRoot`).
|
|
15
15
|
* The values partition is immutable - the key is the hash of the value - so it
|
|
16
16
|
* is fine that values pile up across resets, the unreferenced ones just sit
|
|
17
17
|
* there unused.
|
|
@@ -20,9 +20,13 @@ export declare class FjallValuesSession {
|
|
|
20
20
|
private readonly root;
|
|
21
21
|
/** Shared content-addressed values partition, reused across resets. */
|
|
22
22
|
readonly values: Partition;
|
|
23
|
+
/** Whether close() should release the underlying keyspace. */
|
|
24
|
+
private readonly ownsRoot;
|
|
23
25
|
private constructor();
|
|
24
26
|
/** Open (or create) the keyspace at `dbPath` and its `values` partition. */
|
|
25
27
|
static open(dbPath: string, options?: FjallRootOptions): Promise<FjallValuesSession>;
|
|
28
|
+
/** Wrap an already-open keyspace and open its `values` partition. */
|
|
29
|
+
static fromRoot(root: FjallRoot): Promise<FjallValuesSession>;
|
|
26
30
|
/** Flush the journal to disk (a no-op for ephemeral keyspaces). */
|
|
27
31
|
persist(): Promise<void>;
|
|
28
32
|
/** Size of the keyspace directory on disk, in bytes. */
|
|
@@ -44,7 +48,7 @@ export declare class FjallValuesSession {
|
|
|
44
48
|
* decided by in-memory refcounting (`ValueRefs`) driven by the importer's
|
|
45
49
|
* finality signal. Counts are not persisted: this db cannot resume from disk
|
|
46
50
|
* anyway (the leaf sets live in memory), so values left over by a previous run
|
|
47
|
-
* are never collected. An instance backed by a shared
|
|
51
|
+
* are never collected. An instance backed by a shared keyspace (fuzz reset
|
|
48
52
|
* reuse) only ever prunes values it inserted itself, since its refcounts start
|
|
49
53
|
* empty - values left behind by earlier resets stay untouched.
|
|
50
54
|
*/
|
|
@@ -61,6 +65,8 @@ export declare class HybridSerializedStates implements StatesDb<SerializedState<
|
|
|
61
65
|
ephemeral?: boolean;
|
|
62
66
|
cacheSizeBytes?: number;
|
|
63
67
|
}): Promise<HybridSerializedStates>;
|
|
68
|
+
/** Create a db over an already-open keyspace owned by the caller. */
|
|
69
|
+
static fromRoot(spec: ChainSpec, blake2b: Blake2b, root: FjallRoot): Promise<HybridSerializedStates>;
|
|
64
70
|
/**
|
|
65
71
|
* Wrap an already-open `FjallValuesSession` and reuse its keyspace.
|
|
66
72
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid-states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/hybrid-states.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACL,KAAK,YAAY,EAEjB,MAAM,EACN,KAAK,QAAQ,EACb,gBAAgB,EAKjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EAGlB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"hybrid-states.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/hybrid-states.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ const logger = Logger.new(import.meta.filename, "db");
|
|
|
10
10
|
* One open fjall keyspace together with its content-addressed `values`
|
|
11
11
|
* partition.
|
|
12
12
|
*
|
|
13
|
-
* Opening the keyspace is the slow part, so the fuzz target
|
|
14
|
-
* per run and
|
|
13
|
+
* Opening the keyspace is the slow part, so the fuzz target can open one root
|
|
14
|
+
* per run and reuse it for every reset (see `HybridSerializedStates.fromRoot`).
|
|
15
15
|
* The values partition is immutable - the key is the hash of the value - so it
|
|
16
16
|
* is fine that values pile up across resets, the unreferenced ones just sit
|
|
17
17
|
* there unused.
|
|
@@ -19,11 +19,15 @@ const logger = Logger.new(import.meta.filename, "db");
|
|
|
19
19
|
export class FjallValuesSession {
|
|
20
20
|
root;
|
|
21
21
|
values;
|
|
22
|
+
ownsRoot;
|
|
22
23
|
constructor(root,
|
|
23
24
|
/** Shared content-addressed values partition, reused across resets. */
|
|
24
|
-
values
|
|
25
|
+
values,
|
|
26
|
+
/** Whether close() should release the underlying keyspace. */
|
|
27
|
+
ownsRoot) {
|
|
25
28
|
this.root = root;
|
|
26
29
|
this.values = values;
|
|
30
|
+
this.ownsRoot = ownsRoot;
|
|
27
31
|
}
|
|
28
32
|
/** Open (or create) the keyspace at `dbPath` and its `values` partition. */
|
|
29
33
|
static async open(dbPath, options = {}) {
|
|
@@ -33,13 +37,18 @@ export class FjallValuesSession {
|
|
|
33
37
|
const root = await FjallRoot.open(dbPath, options);
|
|
34
38
|
try {
|
|
35
39
|
const values = await root.writablePartition("values");
|
|
36
|
-
return new FjallValuesSession(root, values);
|
|
40
|
+
return new FjallValuesSession(root, values, true);
|
|
37
41
|
}
|
|
38
42
|
catch (e) {
|
|
39
43
|
await root.close();
|
|
40
44
|
throw e;
|
|
41
45
|
}
|
|
42
46
|
}
|
|
47
|
+
/** Wrap an already-open keyspace and open its `values` partition. */
|
|
48
|
+
static async fromRoot(root) {
|
|
49
|
+
const values = await root.writablePartition("values");
|
|
50
|
+
return new FjallValuesSession(root, values, false);
|
|
51
|
+
}
|
|
43
52
|
/** Flush the journal to disk (a no-op for ephemeral keyspaces). */
|
|
44
53
|
async persist() {
|
|
45
54
|
await this.root.persist();
|
|
@@ -50,7 +59,9 @@ export class FjallValuesSession {
|
|
|
50
59
|
}
|
|
51
60
|
/** Release the keyspace handle (skips the sync-all fsync when ephemeral). */
|
|
52
61
|
async close() {
|
|
53
|
-
|
|
62
|
+
if (this.ownsRoot) {
|
|
63
|
+
await this.root.close();
|
|
64
|
+
}
|
|
54
65
|
}
|
|
55
66
|
}
|
|
56
67
|
/**
|
|
@@ -67,7 +78,7 @@ export class FjallValuesSession {
|
|
|
67
78
|
* decided by in-memory refcounting (`ValueRefs`) driven by the importer's
|
|
68
79
|
* finality signal. Counts are not persisted: this db cannot resume from disk
|
|
69
80
|
* anyway (the leaf sets live in memory), so values left over by a previous run
|
|
70
|
-
* are never collected. An instance backed by a shared
|
|
81
|
+
* are never collected. An instance backed by a shared keyspace (fuzz reset
|
|
71
82
|
* reuse) only ever prunes values it inserted itself, since its refcounts start
|
|
72
83
|
* empty - values left behind by earlier resets stay untouched.
|
|
73
84
|
*/
|
|
@@ -81,6 +92,11 @@ export class HybridSerializedStates {
|
|
|
81
92
|
// This instance owns the session it just opened, so its `close()` closes it.
|
|
82
93
|
return new HybridSerializedStates(spec, blake2b, session, true);
|
|
83
94
|
}
|
|
95
|
+
/** Create a db over an already-open keyspace owned by the caller. */
|
|
96
|
+
static async fromRoot(spec, blake2b, root) {
|
|
97
|
+
const session = await FjallValuesSession.fromRoot(root);
|
|
98
|
+
return new HybridSerializedStates(spec, blake2b, session, true);
|
|
99
|
+
}
|
|
84
100
|
/**
|
|
85
101
|
* Wrap an already-open `FjallValuesSession` and reuse its keyspace.
|
|
86
102
|
*
|
|
@@ -43,6 +43,8 @@ export declare class FjallRoot {
|
|
|
43
43
|
partition(name: string): Promise<FjallPartition>;
|
|
44
44
|
/** Open a writable partition, failing early when this root is read-only. */
|
|
45
45
|
writablePartition(name: string): Promise<Partition>;
|
|
46
|
+
/** Delete a writable partition and all of its data. */
|
|
47
|
+
deletePartition(name: string): Promise<void>;
|
|
46
48
|
/**
|
|
47
49
|
* Flush the journal to disk so prior writes survive a crash.
|
|
48
50
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/root.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAIzB,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAKpE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO;IAOP,2DAA2D;WAC9C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAWrF,sEAAsE;IACtE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,wDAAwD;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAItD,4EAA4E;IACtE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOzD;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;;;;OAMG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAQ5B,oFAAoF;IAC9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
1
|
+
{"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-fjall/root.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,SAAS,EAEd,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAIzB,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAC7C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,iBAAiB,CAAC;AAE3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAKpE;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF;;;;;;GAMG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,+EAA+E;IAC/E,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO;IAOP,2DAA2D;WAC9C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC;IAWrF,sEAAsE;IACtE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,wDAAwD;IAClD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAItD,4EAA4E;IACtE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAOzD,uDAAuD;IACjD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlD;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAU9B;;;;;;OAMG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAQ5B,oFAAoF;IAC9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -31,7 +31,7 @@ export class FjallRoot {
|
|
|
31
31
|
}
|
|
32
32
|
/** Open (or create) a fjall keyspace at the given path. */
|
|
33
33
|
static async open(dbPath, options = {}) {
|
|
34
|
-
// fjall-js
|
|
34
|
+
// fjall-js shares one engine per path. Readers must use the read-only
|
|
35
35
|
// wrapper surface; durability is driven explicitly through persist().
|
|
36
36
|
const config = {
|
|
37
37
|
path: dbPath,
|
|
@@ -55,6 +55,13 @@ export class FjallRoot {
|
|
|
55
55
|
}
|
|
56
56
|
return (await this.keyspace.partition(name));
|
|
57
57
|
}
|
|
58
|
+
/** Delete a writable partition and all of its data. */
|
|
59
|
+
async deletePartition(name) {
|
|
60
|
+
if (this.readOnly) {
|
|
61
|
+
throw new Error(`Cannot delete fjall partition '${name}' from a read-only keyspace.`);
|
|
62
|
+
}
|
|
63
|
+
await this.keyspace.deletePartition(name);
|
|
64
|
+
}
|
|
58
65
|
/**
|
|
59
66
|
* Flush the journal to disk so prior writes survive a crash.
|
|
60
67
|
*
|