@chainsafe/lodestar 1.36.0 → 1.37.0-dev.194afd5582

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/.git-data.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
- "branch": "HEAD",
3
- "commit": "c5e987ff2b8e3ef680385b133c5c52c27c95de64"
2
+ "branch": "unstable",
3
+ "commit": "194afd5582965f9742cccc7c0254e433498b25b2"
4
4
  }
@@ -1,6 +1,6 @@
1
1
  // MUST import this file first before anything and not import any Lodestar code.
2
- import { hasher as hashtreeHasher } from "#hashtree-hasher";
3
2
  import { setHasher } from "@chainsafe/persistent-merkle-tree";
3
+ import { hasher as hashtreeHasher } from "@chainsafe/persistent-merkle-tree/hasher/hashtree";
4
4
  // Without setting this first, persistent-merkle-tree will use noble instead
5
5
  setHasher(hashtreeHasher);
6
6
  //
@@ -1 +1 @@
1
- {"version":3,"file":"applyPreset.js","sourceRoot":"","sources":["../src/applyPreset.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAEhF,OAAO,EAAC,MAAM,IAAI,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAC,SAAS,EAAC,MAAM,mCAAmC,CAAC;AAE5D,4EAA4E;AAC5E,SAAS,CAAC,cAAc,CAAC,CAAC;AAE1B,EAAE;AACF,eAAe;AACf,EAAE;AACF,yGAAyG;AACzG,sDAAsD;AACtD,EAAE;AACF,qGAAqG;AACrG,+DAA+D;AAC/D,kEAAkE;AAClE,kEAAkE;AAClE,EAAE;AACF,4FAA4F;AAC5F,2CAA2C;AAE3C,+FAA+F;AAC/F,OAAO,EAAC,UAAU,EAAE,cAAc,EAAE,eAAe,EAAC,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAExC,MAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;AACtC,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACpC,MAAM,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AAE5C,+BAA+B;AAC/B,IAAI,MAAM,EAAE,CAAC;IACX,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC;AACvC,CAAC;AAED,8FAA8F;KACzF,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IACrC,QAAQ;AACV,CAAC;AAED,8BAA8B;KACzB,IAAI,OAAO,EAAE,CAAC;IACjB,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC;QACxC,sEAAsE;QACtE,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAC,uBAAuB,EAAE,IAAI,EAAC,CAAC,CAAC;IACvE,CAAC;SAAM,IAAI,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,QAAQ,CAAC;IACzC,CAAC;AACH,CAAC;AAED,mEAAmE;KAC9D,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACrC,sEAAsE;IACtE,eAAe,CAAC,UAAU,CAAC,OAAO,EAAE,EAAC,uBAAuB,EAAE,IAAI,EAAC,CAAC,CAAC;AACvE,CAAC;AAED,IAAI,UAAU,EAAE,CAAC;IACf,0DAA0D;IAC1D,4DAA4D;IAC5D,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,OAAe;IACjC,4BAA4B;IAC5B,0CAA0C;IAE1C,CAAC;QACC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,CAAC;QACC,MAAM,MAAM,GAAG,KAAK,OAAO,GAAG,CAAC;QAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAChE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"applyPreset.js","sourceRoot":"","sources":["../src/applyPreset.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chainsafe/lodestar",
3
- "version": "1.36.0",
3
+ "version": "1.37.0-dev.194afd5582",
4
4
  "description": "Command line interface for lodestar",
5
5
  "author": "ChainSafe Systems",
6
6
  "license": "Apache-2.0",
@@ -16,12 +16,6 @@
16
16
  "import": "./lib/index.js"
17
17
  }
18
18
  },
19
- "imports": {
20
- "#hashtree-hasher": {
21
- "bun": "./src/util/hasher_bun.ts",
22
- "import": "./lib/util/hasher_nodejs.js"
23
- }
24
- },
25
19
  "files": [
26
20
  "src",
27
21
  "lib",
@@ -75,18 +69,17 @@
75
69
  "@libp2p/crypto": "^5.0.15",
76
70
  "@libp2p/interface": "^2.7.0",
77
71
  "@libp2p/peer-id": "^5.1.0",
78
- "@lodestar/api": "^1.36.0",
79
- "@lodestar/beacon-node": "^1.36.0",
80
- "@lodestar/bun": "git+https://github.com/ChainSafe/lodestar-bun.git",
81
- "@lodestar/config": "^1.36.0",
82
- "@lodestar/db": "^1.36.0",
83
- "@lodestar/light-client": "^1.36.0",
84
- "@lodestar/logger": "^1.36.0",
85
- "@lodestar/params": "^1.36.0",
86
- "@lodestar/state-transition": "^1.36.0",
87
- "@lodestar/types": "^1.36.0",
88
- "@lodestar/utils": "^1.36.0",
89
- "@lodestar/validator": "^1.36.0",
72
+ "@lodestar/api": "1.37.0-dev.194afd5582",
73
+ "@lodestar/beacon-node": "1.37.0-dev.194afd5582",
74
+ "@lodestar/config": "1.37.0-dev.194afd5582",
75
+ "@lodestar/db": "1.37.0-dev.194afd5582",
76
+ "@lodestar/light-client": "1.37.0-dev.194afd5582",
77
+ "@lodestar/logger": "1.37.0-dev.194afd5582",
78
+ "@lodestar/params": "1.37.0-dev.194afd5582",
79
+ "@lodestar/state-transition": "1.37.0-dev.194afd5582",
80
+ "@lodestar/types": "1.37.0-dev.194afd5582",
81
+ "@lodestar/utils": "1.37.0-dev.194afd5582",
82
+ "@lodestar/validator": "1.37.0-dev.194afd5582",
90
83
  "@multiformats/multiaddr": "^12.1.3",
91
84
  "deepmerge": "^4.3.1",
92
85
  "ethers": "^6.7.0",
@@ -101,12 +94,12 @@
101
94
  "yargs": "^17.7.1"
102
95
  },
103
96
  "devDependencies": {
104
- "@lodestar/test-utils": "^1.36.0",
97
+ "@lodestar/test-utils": "1.37.0-dev.194afd5582",
105
98
  "@types/debug": "^4.1.7",
106
99
  "@types/inquirer": "^9.0.3",
107
100
  "@types/proper-lockfile": "^4.1.4",
108
101
  "@types/yargs": "^17.0.24",
109
102
  "fastify": "^5.2.1"
110
103
  },
111
- "gitHead": "c5e987ff2b8e3ef680385b133c5c52c27c95de64"
104
+ "gitHead": "4f60f9a851ef54e1388a18cd1e7cb9ec3ffbdfbb"
112
105
  }
@@ -1,7 +1,7 @@
1
1
  // MUST import this file first before anything and not import any Lodestar code.
2
2
 
3
- import {hasher as hashtreeHasher} from "#hashtree-hasher";
4
3
  import {setHasher} from "@chainsafe/persistent-merkle-tree";
4
+ import {hasher as hashtreeHasher} from "@chainsafe/persistent-merkle-tree/hasher/hashtree";
5
5
 
6
6
  // Without setting this first, persistent-merkle-tree will use noble instead
7
7
  setHasher(hashtreeHasher);
@@ -1,3 +0,0 @@
1
- import { Hasher } from "@chainsafe/persistent-merkle-tree";
2
- export declare const hasher: Hasher;
3
- //# sourceMappingURL=hasher_bun.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hasher_bun.d.ts","sourceRoot":"","sources":["../../src/util/hasher_bun.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,MAAM,EAKP,MAAM,mCAAmC,CAAC;AAwB3C,eAAO,MAAM,MAAM,EAAE,MAsEpB,CAAC"}
@@ -1,119 +0,0 @@
1
- import { byteArrayIntoHashObject } from "@chainsafe/as-sha256";
2
- import { doDigestNLevel, doMerkleizeBlockArray, doMerkleizeBlocksBytes, } from "@chainsafe/persistent-merkle-tree";
3
- import { hashtree } from "@lodestar/bun";
4
- const { digest2Bytes32, digest2Bytes32Into, hashInto } = hashtree;
5
- /**
6
- * Best SIMD implementation is in 512 bits = 64 bytes
7
- * If not, hashtree will make a loop inside
8
- * Given sha256 operates on a block of 4 bytes, we can hash 16 inputs at once
9
- * Each input is 64 bytes
10
- */
11
- const PARALLEL_FACTOR = 16;
12
- const MAX_INPUT_SIZE = PARALLEL_FACTOR * 64;
13
- const uint8Input = new Uint8Array(MAX_INPUT_SIZE);
14
- const uint32Input = new Uint32Array(uint8Input.buffer);
15
- const uint8Output = new Uint8Array(PARALLEL_FACTOR * 32);
16
- // having this will cause more memory to extract uint32
17
- // const uint32Output = new Uint32Array(uint8Output.buffer);
18
- // convenient reusable Uint8Array for hash64
19
- const hash64Input = uint8Input.subarray(0, 64);
20
- const hash64Output = uint8Output.subarray(0, 32);
21
- // size input array to 2 HashObject per computation * 32 bytes per object
22
- const destNodes = new Array(PARALLEL_FACTOR);
23
- export const hasher = {
24
- name: "hashtree-bun",
25
- hashInto,
26
- digest64(obj1, obj2) {
27
- return digest2Bytes32(obj1, obj2);
28
- },
29
- digest64Into: (obj1, obj2, output) => {
30
- digest2Bytes32Into(obj1, obj2, output);
31
- },
32
- digest64HashObjects(left, right, parent) {
33
- hashObjectsToUint32Array(left, right, uint32Input);
34
- hashInto(hash64Input, hash64Output);
35
- byteArrayIntoHashObject(hash64Output, 0, parent);
36
- },
37
- merkleizeBlocksBytes(blocksBytes, padFor, output, offset) {
38
- doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, hashInto);
39
- },
40
- merkleizeBlockArray(blocks, blockLimit, padFor, output, offset) {
41
- doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, hashInto, uint8Input);
42
- },
43
- digestNLevel(data, nLevel) {
44
- return doDigestNLevel(data, nLevel, hashInto);
45
- },
46
- executeHashComputations(hashComputations) {
47
- for (let level = hashComputations.length - 1; level >= 0; level--) {
48
- const hcArr = hashComputations[level];
49
- if (!hcArr) {
50
- // should not happen
51
- throw Error(`no hash computations for level ${level}`);
52
- }
53
- if (hcArr.length === 0) {
54
- // nothing to hash
55
- continue;
56
- }
57
- // hash every 16 inputs at once to avoid memory allocation
58
- let i = 0;
59
- for (const { src0, src1, dest } of hcArr) {
60
- if (!src0 || !src1 || !dest) {
61
- throw new Error(`Invalid HashComputation at index ${i}`);
62
- }
63
- const indexInBatch = i % PARALLEL_FACTOR;
64
- const offset = indexInBatch * 16;
65
- hashObjectToUint32Array(src0, uint32Input, offset);
66
- hashObjectToUint32Array(src1, uint32Input, offset + 8);
67
- destNodes[indexInBatch] = dest;
68
- if (indexInBatch === PARALLEL_FACTOR - 1) {
69
- hashInto(uint8Input, uint8Output);
70
- for (const [j, destNode] of destNodes.entries()) {
71
- byteArrayIntoHashObject(uint8Output, j * 32, destNode);
72
- }
73
- }
74
- i++;
75
- }
76
- const remaining = hcArr.length % PARALLEL_FACTOR;
77
- // we prepared data in input, now hash the remaining
78
- if (remaining > 0) {
79
- const remainingInput = uint8Input.subarray(0, remaining * 64);
80
- const remainingOutput = uint8Output.subarray(0, remaining * 32);
81
- hashInto(remainingInput, remainingOutput);
82
- // destNodes was prepared above
83
- for (let j = 0; j < remaining; j++) {
84
- byteArrayIntoHashObject(remainingOutput, j * 32, destNodes[j]);
85
- }
86
- }
87
- }
88
- },
89
- };
90
- function hashObjectToUint32Array(obj, arr, offset) {
91
- arr[offset] = obj.h0;
92
- arr[offset + 1] = obj.h1;
93
- arr[offset + 2] = obj.h2;
94
- arr[offset + 3] = obj.h3;
95
- arr[offset + 4] = obj.h4;
96
- arr[offset + 5] = obj.h5;
97
- arr[offset + 6] = obj.h6;
98
- arr[offset + 7] = obj.h7;
99
- }
100
- // note that uint32ArrayToHashObject will cause more memory
101
- function hashObjectsToUint32Array(obj1, obj2, arr) {
102
- arr[0] = obj1.h0;
103
- arr[1] = obj1.h1;
104
- arr[2] = obj1.h2;
105
- arr[3] = obj1.h3;
106
- arr[4] = obj1.h4;
107
- arr[5] = obj1.h5;
108
- arr[6] = obj1.h6;
109
- arr[7] = obj1.h7;
110
- arr[8] = obj2.h0;
111
- arr[9] = obj2.h1;
112
- arr[10] = obj2.h2;
113
- arr[11] = obj2.h3;
114
- arr[12] = obj2.h4;
115
- arr[13] = obj2.h5;
116
- arr[14] = obj2.h6;
117
- arr[15] = obj2.h7;
118
- }
119
- //# sourceMappingURL=hasher_bun.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hasher_bun.js","sourceRoot":"","sources":["../../src/util/hasher_bun.ts"],"names":[],"mappings":"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"}
@@ -1,135 +0,0 @@
1
- import {byteArrayIntoHashObject} from "@chainsafe/as-sha256";
2
- import {
3
- HashComputationLevel,
4
- HashObject,
5
- Hasher,
6
- Node,
7
- doDigestNLevel,
8
- doMerkleizeBlockArray,
9
- doMerkleizeBlocksBytes,
10
- } from "@chainsafe/persistent-merkle-tree";
11
- import {hashtree} from "@lodestar/bun";
12
-
13
- const {digest2Bytes32, digest2Bytes32Into, hashInto} = hashtree;
14
-
15
- /**
16
- * Best SIMD implementation is in 512 bits = 64 bytes
17
- * If not, hashtree will make a loop inside
18
- * Given sha256 operates on a block of 4 bytes, we can hash 16 inputs at once
19
- * Each input is 64 bytes
20
- */
21
- const PARALLEL_FACTOR = 16;
22
- const MAX_INPUT_SIZE = PARALLEL_FACTOR * 64;
23
- const uint8Input = new Uint8Array(MAX_INPUT_SIZE);
24
- const uint32Input = new Uint32Array(uint8Input.buffer);
25
- const uint8Output = new Uint8Array(PARALLEL_FACTOR * 32);
26
- // having this will cause more memory to extract uint32
27
- // const uint32Output = new Uint32Array(uint8Output.buffer);
28
- // convenient reusable Uint8Array for hash64
29
- const hash64Input = uint8Input.subarray(0, 64);
30
- const hash64Output = uint8Output.subarray(0, 32);
31
- // size input array to 2 HashObject per computation * 32 bytes per object
32
- const destNodes: Node[] = new Array<Node>(PARALLEL_FACTOR);
33
-
34
- export const hasher: Hasher = {
35
- name: "hashtree-bun",
36
- hashInto,
37
- digest64(obj1: Uint8Array, obj2: Uint8Array): Uint8Array {
38
- return digest2Bytes32(obj1, obj2);
39
- },
40
- digest64Into: (obj1: Uint8Array, obj2: Uint8Array, output: Uint8Array): void => {
41
- digest2Bytes32Into(obj1, obj2, output);
42
- },
43
- digest64HashObjects(left: HashObject, right: HashObject, parent: HashObject): void {
44
- hashObjectsToUint32Array(left, right, uint32Input);
45
- hashInto(hash64Input, hash64Output);
46
- byteArrayIntoHashObject(hash64Output, 0, parent);
47
- },
48
- merkleizeBlocksBytes(blocksBytes: Uint8Array, padFor: number, output: Uint8Array, offset: number): void {
49
- doMerkleizeBlocksBytes(blocksBytes, padFor, output, offset, hashInto);
50
- },
51
- merkleizeBlockArray(blocks, blockLimit, padFor, output, offset) {
52
- doMerkleizeBlockArray(blocks, blockLimit, padFor, output, offset, hashInto, uint8Input);
53
- },
54
- digestNLevel(data: Uint8Array, nLevel: number): Uint8Array {
55
- return doDigestNLevel(data, nLevel, hashInto);
56
- },
57
- executeHashComputations(hashComputations: HashComputationLevel[]): void {
58
- for (let level = hashComputations.length - 1; level >= 0; level--) {
59
- const hcArr = hashComputations[level];
60
- if (!hcArr) {
61
- // should not happen
62
- throw Error(`no hash computations for level ${level}`);
63
- }
64
-
65
- if (hcArr.length === 0) {
66
- // nothing to hash
67
- continue;
68
- }
69
-
70
- // hash every 16 inputs at once to avoid memory allocation
71
- let i = 0;
72
- for (const {src0, src1, dest} of hcArr) {
73
- if (!src0 || !src1 || !dest) {
74
- throw new Error(`Invalid HashComputation at index ${i}`);
75
- }
76
- const indexInBatch = i % PARALLEL_FACTOR;
77
- const offset = indexInBatch * 16;
78
-
79
- hashObjectToUint32Array(src0, uint32Input, offset);
80
- hashObjectToUint32Array(src1, uint32Input, offset + 8);
81
- destNodes[indexInBatch] = dest;
82
- if (indexInBatch === PARALLEL_FACTOR - 1) {
83
- hashInto(uint8Input, uint8Output);
84
- for (const [j, destNode] of destNodes.entries()) {
85
- byteArrayIntoHashObject(uint8Output, j * 32, destNode);
86
- }
87
- }
88
- i++;
89
- }
90
-
91
- const remaining = hcArr.length % PARALLEL_FACTOR;
92
- // we prepared data in input, now hash the remaining
93
- if (remaining > 0) {
94
- const remainingInput = uint8Input.subarray(0, remaining * 64);
95
- const remainingOutput = uint8Output.subarray(0, remaining * 32);
96
- hashInto(remainingInput, remainingOutput);
97
- // destNodes was prepared above
98
- for (let j = 0; j < remaining; j++) {
99
- byteArrayIntoHashObject(remainingOutput, j * 32, destNodes[j]);
100
- }
101
- }
102
- }
103
- },
104
- };
105
-
106
- function hashObjectToUint32Array(obj: HashObject, arr: Uint32Array, offset: number): void {
107
- arr[offset] = obj.h0;
108
- arr[offset + 1] = obj.h1;
109
- arr[offset + 2] = obj.h2;
110
- arr[offset + 3] = obj.h3;
111
- arr[offset + 4] = obj.h4;
112
- arr[offset + 5] = obj.h5;
113
- arr[offset + 6] = obj.h6;
114
- arr[offset + 7] = obj.h7;
115
- }
116
-
117
- // note that uint32ArrayToHashObject will cause more memory
118
- function hashObjectsToUint32Array(obj1: HashObject, obj2: HashObject, arr: Uint32Array): void {
119
- arr[0] = obj1.h0;
120
- arr[1] = obj1.h1;
121
- arr[2] = obj1.h2;
122
- arr[3] = obj1.h3;
123
- arr[4] = obj1.h4;
124
- arr[5] = obj1.h5;
125
- arr[6] = obj1.h6;
126
- arr[7] = obj1.h7;
127
- arr[8] = obj2.h0;
128
- arr[9] = obj2.h1;
129
- arr[10] = obj2.h2;
130
- arr[11] = obj2.h3;
131
- arr[12] = obj2.h4;
132
- arr[13] = obj2.h5;
133
- arr[14] = obj2.h6;
134
- arr[15] = obj2.h7;
135
- }