@typeberry/lib 0.7.0-4f16a18 → 0.7.0-fcf0085

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/lib",
3
- "version": "0.7.0-4f16a18",
3
+ "version": "0.7.0-fcf0085",
4
4
  "description": "Typeberry Library",
5
5
  "main": "./bin/lib/index.js",
6
6
  "types": "./bin/lib/index.d.ts",
@@ -3,7 +3,7 @@ export type SubDb = lmdb.Database<Uint8Array, lmdb.Key>;
3
3
  /** A thin abstraction over lmdb database interface. */
4
4
  export declare class LmdbRoot {
5
5
  readonly db: lmdb.RootDatabase<Uint8Array, lmdb.Key>;
6
- static new(dbPath: string, readOnly?: boolean): LmdbRoot;
6
+ static new(dbPath: string, readOnly?: boolean, ephemeral?: boolean): LmdbRoot;
7
7
  private constructor();
8
8
  /** Open a sub-database under the same path. */
9
9
  subDb(name: string): SubDb;
@@ -1 +1 @@
1
- {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAExD,uDAAuD;AACvD,qBAAa,QAAQ;IACnB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAErD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAQ;IAI3C,OAAO;IASP,+CAA+C;IAC/C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAI1B,gDAAgD;IAC1C,KAAK;CAGZ"}
1
+ {"version":3,"file":"root.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAExD,uDAAuD;AACvD,qBAAa,QAAQ;IACnB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAErD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,UAAQ,EAAE,SAAS,UAAQ;IAI9D,OAAO;IAcP,+CAA+C;IAC/C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAI1B,gDAAgD;IAC1C,KAAK;CAGZ"}
@@ -2,12 +2,17 @@ import * as lmdb from "lmdb";
2
2
  /** A thin abstraction over lmdb database interface. */
3
3
  export class LmdbRoot {
4
4
  db;
5
- static new(dbPath, readOnly = false) {
6
- return new LmdbRoot(dbPath, readOnly);
5
+ static new(dbPath, readOnly = false, ephemeral = false) {
6
+ return new LmdbRoot(dbPath, readOnly, ephemeral);
7
7
  }
8
- constructor(dbPath, readOnly = false) {
8
+ constructor(dbPath, readOnly = false, ephemeral = false) {
9
9
  this.db = lmdb.open(dbPath, {
10
- compression: true,
10
+ // For ephemeral databases (e.g. the fuzz target, which wipes on every reset)
11
+ // durability is pointless, so we skip fsync and skip compressing the large
12
+ // per-block leaf blobs. Both are pure overhead there and dominate the cost.
13
+ // This trades disk space (uncompressed) and crash-durability for speed.
14
+ compression: !ephemeral,
15
+ noSync: ephemeral,
11
16
  keyEncoding: "binary",
12
17
  encoding: "binary",
13
18
  readOnly,
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/fuzz-proto/v1/types.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,10 @@ export class Version extends WithDebug {
22
22
  static tryFromString(str) {
23
23
  const parse = (v) => tryAsU8(Number(v));
24
24
  try {
25
- const [major, minor, patch] = str.trim().split(".").map(parse);
25
+ // strip any semver pre-release / build metadata (e.g. "-15ccd70", "+build.42")
26
+ // so that only `major.minor.patch` is parsed.
27
+ const core = str.trim().split(/[-+]/)[0];
28
+ const [major, minor, patch] = core.split(".").map(parse);
26
29
  return Version.create({
27
30
  major,
28
31
  minor,
@@ -41,6 +41,18 @@ describe("Fuzzer V1 Data Structures", () => {
41
41
  assert.strictEqual(version.minor, 2);
42
42
  assert.strictEqual(version.patch, 3);
43
43
  });
44
+ it("should ignore the git hash / pre-release suffix", () => {
45
+ const version = Version.tryFromString("0.7.0-15ccd70");
46
+ assert.strictEqual(version.major, 0);
47
+ assert.strictEqual(version.minor, 7);
48
+ assert.strictEqual(version.patch, 0);
49
+ });
50
+ it("should ignore the build metadata suffix", () => {
51
+ const version = Version.tryFromString("1.2.3+build.42");
52
+ assert.strictEqual(version.major, 1);
53
+ assert.strictEqual(version.minor, 2);
54
+ assert.strictEqual(version.patch, 3);
55
+ });
44
56
  });
45
57
  describe("PeerInfo", () => {
46
58
  it("should encode and decode peer info with features", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"main-fuzz.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-fuzz.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAOF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASpF;AAED,iFAAiF;AACjF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAgB,cAAc;;;;EAM7B;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,uBAiGxF"}
1
+ {"version":3,"file":"main-fuzz.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-fuzz.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,WAAW,EAAmB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAOrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIjD,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,SAAS,CAAC;IACzB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,uBAAuB,EAAE,OAAO,CAAC;CAClC,CAAC;AAOF;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CASpF;AAED,iFAAiF;AACjF,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D;AAED,wBAAgB,cAAc;;;;EAM7B;AAED,wBAAsB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,uBAwGxF"}
@@ -41,7 +41,7 @@ export function getFuzzDetails() {
41
41
  return {
42
42
  nodeName: "@typeberry/jam",
43
43
  nodeVersion: fuzzV1.Version.tryFromString(version),
44
- gpVersion: fuzzV1.Version.tryFromString(CURRENT_VERSION.split("-")[0]),
44
+ gpVersion: fuzzV1.Version.tryFromString(CURRENT_VERSION),
45
45
  };
46
46
  }
47
47
  export async function mainFuzz(fuzzConfig, withRelPath) {
@@ -80,24 +80,32 @@ export async function mainFuzz(fuzzConfig, withRelPath) {
80
80
  runningNode = null;
81
81
  await finish;
82
82
  }
83
- const buildNode = (databaseBasePath) => mainImporter({
84
- ...config,
85
- node: {
86
- ...config.node,
87
- databaseBasePath,
88
- chainSpec: {
89
- ...config.node.chainSpec,
90
- genesisHeader: Encoder.encodeObject(Header.Codec, header, chainSpec),
91
- genesisState: new Map(state),
83
+ const buildNode = (databaseBasePath) => {
84
+ // Enable state/blocks pruning only when running in memory.
85
+ // For disk backend, we store everything.
86
+ const isPersistent = databaseBasePath !== undefined;
87
+ return mainImporter({
88
+ ...config,
89
+ node: {
90
+ ...config.node,
91
+ databaseBasePath,
92
+ chainSpec: {
93
+ ...config.node.chainSpec,
94
+ genesisHeader: Encoder.encodeObject(Header.Codec, header, chainSpec),
95
+ genesisState: new Map(state),
96
+ },
92
97
  },
93
- },
94
- ancestry,
95
- network: null,
96
- }, withRelPath, {
97
- initGenesisFromAncestry: fuzzConfig.initGenesisFromAncestry,
98
- dummyFinalityDepth: 10_000,
99
- pruneBlocks: true,
100
- });
98
+ ancestry,
99
+ network: null,
100
+ }, withRelPath, {
101
+ initGenesisFromAncestry: fuzzConfig.initGenesisFromAncestry,
102
+ dummyFinalityDepth: isPersistent ? 0 : 10_000,
103
+ pruneBlocks: !isPersistent,
104
+ // The fuzz db is wiped on every reset, so durability is pointless:
105
+ // skip fsync + compression to cut the per-block leaf write cost.
106
+ ephemeralDb: isPersistent,
107
+ });
108
+ };
101
109
  if (fuzzDbBase !== undefined) {
102
110
  // Each reset starts a fresh session from the genesis the fuzzer just sent,
103
111
  // so the on-disk db must be empty: otherwise initializeDatabase sees an
@@ -4,6 +4,8 @@ export type ImporterOptions = {
4
4
  initGenesisFromAncestry?: boolean;
5
5
  dummyFinalityDepth?: number;
6
6
  pruneBlocks?: boolean;
7
+ /** Open the LMDB database without fsync/compression. Only safe for throwaway dbs (e.g. fuzzing). */
8
+ ephemeralDb?: boolean;
7
9
  };
8
10
  export declare function mainImporter(config: JamConfig, withRelPath: (v: string) => string, options?: ImporterOptions): Promise<NodeApi>;
9
11
  //# sourceMappingURL=main-importer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"main-importer.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-importer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAgFlB"}
1
+ {"version":3,"file":"main-importer.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main-importer.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC,MAAM,MAAM,eAAe,GAAG;IAC5B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,oGAAoG;IACpG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAsB,YAAY,CAChC,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,OAAO,CAAC,CAiFlB"}
@@ -37,6 +37,7 @@ export async function mainImporter(config, withRelPath, options = {}) {
37
37
  blake2b,
38
38
  dbPath,
39
39
  workerParams,
40
+ ephemeral: options.ephemeralDb ?? false,
40
41
  });
41
42
  // Initialize the database with genesis state and block if there isn't one.
42
43
  logger.info `🛢️ Opening database at ${dbPath}`;
@@ -13,13 +13,15 @@ export declare class LmdbWorkerConfig<T = void> implements WorkerConfig<T, Block
13
13
  readonly dbPath: string;
14
14
  readonly blake2b: Blake2b;
15
15
  readonly ports: Map<string, ThreadPort>;
16
- static new<T>({ nodeName, chainSpec, workerParams, dbPath, blake2b, ports, }: {
16
+ readonly ephemeral: boolean;
17
+ static new<T>({ nodeName, chainSpec, workerParams, dbPath, blake2b, ports, ephemeral, }: {
17
18
  nodeName: string;
18
19
  chainSpec: ChainSpec;
19
20
  workerParams: T;
20
21
  dbPath: string;
21
22
  blake2b: Blake2b;
22
23
  ports?: Map<string, ThreadPort>;
24
+ ephemeral?: boolean;
23
25
  }): LmdbWorkerConfig<T>;
24
26
  /** Restore node config from a transferable config object. */
25
27
  static fromTransferable<T>(decodeParams: Decode<T>, config: TransferableConfig): Promise<LmdbWorkerConfig<T>>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/api-node/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/api-node/config.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,9 @@ export class LmdbWorkerConfig {
12
12
  dbPath;
13
13
  blake2b;
14
14
  ports;
15
- static new({ nodeName, chainSpec, workerParams, dbPath, blake2b, ports = new Map(), }) {
16
- return new LmdbWorkerConfig(nodeName, chainSpec, workerParams, dbPath, blake2b, ports);
15
+ ephemeral;
16
+ static new({ nodeName, chainSpec, workerParams, dbPath, blake2b, ports = new Map(), ephemeral = false, }) {
17
+ return new LmdbWorkerConfig(nodeName, chainSpec, workerParams, dbPath, blake2b, ports, ephemeral);
17
18
  }
18
19
  /** Restore node config from a transferable config object. */
19
20
  static async fromTransferable(decodeParams, config) {
@@ -30,16 +31,21 @@ export class LmdbWorkerConfig {
30
31
  ports,
31
32
  });
32
33
  }
33
- constructor(nodeName, chainSpec, workerParams, dbPath, blake2b, ports) {
34
+ constructor(nodeName, chainSpec, workerParams, dbPath, blake2b, ports,
35
+ // When set, the underlying LMDB skips fsync and compression. Only safe for
36
+ // throwaway databases (the fuzz target wipes on reset). Not transferred to
37
+ // worker threads, so the durable main node path always gets the default.
38
+ ephemeral = false) {
34
39
  this.nodeName = nodeName;
35
40
  this.chainSpec = chainSpec;
36
41
  this.workerParams = workerParams;
37
42
  this.dbPath = dbPath;
38
43
  this.blake2b = blake2b;
39
44
  this.ports = ports;
45
+ this.ephemeral = ephemeral;
40
46
  }
41
47
  openDatabase(options = { readonly: true }) {
42
- const lmdb = LmdbRoot.new(this.dbPath, options.readonly);
48
+ const lmdb = LmdbRoot.new(this.dbPath, options.readonly, this.ephemeral);
43
49
  return {
44
50
  getBlocksDb: () => LmdbBlocks.new(this.chainSpec, lmdb),
45
51
  getStatesDb: () => LmdbStates.new(this.chainSpec, this.blake2b, lmdb),