refactor: remove cpu features direct dependency (#8261)

**Motivation**

Make the code transition for compatibility with the Bun. 

**Description**

- The dependency `cpu-features` is not compatible with the `Bun`
- Removed the direct dependency
- Upgrade the `@chainsafe/persistent-merkle-tree` and `@chainsafe/ssz`
so the hasher detection is done implicitly.
- Latest commit for
[hahstree](e86a8b136a)
has the support for fallback, which is not used in the
`@chainsafe/persistent-merkle-tree`


**Steps to test or reproduce**

Run all tests
This commit is contained in:
Nazar Hussain
2025-08-25 23:22:23 +02:00
committed by GitHub
parent cc8c1ac67e
commit b9950594aa
13 changed files with 66 additions and 91 deletions

View File

@@ -70,8 +70,8 @@
"check-readme": "typescript-docs-verifier"
},
"dependencies": {
"@chainsafe/persistent-merkle-tree": "^1.2.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/persistent-merkle-tree": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/config": "^1.33.0",
"@lodestar/params": "^1.33.0",
"@lodestar/types": "^1.33.0",

View File

@@ -98,10 +98,10 @@
"@chainsafe/enr": "^5.0.1",
"@chainsafe/libp2p-gossipsub": "^14.1.1",
"@chainsafe/libp2p-noise": "^16.1.0",
"@chainsafe/persistent-merkle-tree": "^1.2.0",
"@chainsafe/persistent-merkle-tree": "^1.2.1",
"@chainsafe/prometheus-gc-stats": "^1.0.0",
"@chainsafe/pubkey-index-map": "^3.0.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@chainsafe/threads": "^1.11.2",
"@crate-crypto/node-eth-kzg": "0.8.0",
"@ethersproject/abi": "^5.7.0",

View File

@@ -56,8 +56,8 @@
"@chainsafe/blst": "^2.2.0",
"@chainsafe/discv5": "^11.0.3",
"@chainsafe/enr": "^5.0.1",
"@chainsafe/persistent-merkle-tree": "^1.2.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/persistent-merkle-tree": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@chainsafe/threads": "^1.11.2",
"@libp2p/crypto": "^5.0.15",
"@libp2p/interface": "^2.7.0",
@@ -74,7 +74,6 @@
"@lodestar/utils": "^1.33.0",
"@lodestar/validator": "^1.33.0",
"@multiformats/multiaddr": "^12.1.3",
"cpu-features": "^0.0.10",
"deepmerge": "^4.3.1",
"ethers": "^6.7.0",
"find-up": "^6.3.0",
@@ -89,7 +88,6 @@
},
"devDependencies": {
"@lodestar/test-utils": "^1.33.0",
"@types/cpu-features": "^0.0.3",
"@types/debug": "^4.1.7",
"@types/inquirer": "^9.0.3",
"@types/proper-lockfile": "^4.1.4",

View File

@@ -1,23 +1,9 @@
// MUST import this file first before anything and not import any Lodestar code.
import {setHasher} from "@chainsafe/persistent-merkle-tree";
import {hasher as asSha256Hasher} from "@chainsafe/persistent-merkle-tree/hasher/as-sha256";
import {hasher as hashtreeHasher} from "@chainsafe/persistent-merkle-tree/hasher/hashtree";
import CpuFeatures from "cpu-features";
// without setting this first, persistent-merkle-tree will use noble instead
const cpuFeatures = CpuFeatures();
if (
cpuFeatures.arch === "x86" &&
!(
(cpuFeatures.flags.avx512f && cpuFeatures.flags.avx512vl) ||
(cpuFeatures.flags.avx2 && cpuFeatures.flags.bmi2) ||
(cpuFeatures.flags.avx && cpuFeatures.flags.sha)
)
) {
setHasher(asSha256Hasher);
} else {
setHasher(hashtreeHasher);
}
// Without setting this first, persistent-merkle-tree will use noble instead
setHasher(hashtreeHasher);
//
// ## Rationale

View File

@@ -64,7 +64,7 @@
"blockchain"
],
"dependencies": {
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/params": "^1.33.0",
"@lodestar/types": "^1.33.0",
"@lodestar/utils": "^1.33.0"

View File

@@ -35,7 +35,7 @@
"check-readme": "typescript-docs-verifier"
},
"dependencies": {
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/config": "^1.33.0",
"@lodestar/utils": "^1.33.0",
"classic-level": "^1.4.1",

View File

@@ -36,7 +36,7 @@
"check-readme": "typescript-docs-verifier"
},
"dependencies": {
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/config": "^1.33.0",
"@lodestar/params": "^1.33.0",
"@lodestar/state-transition": "^1.33.0",

View File

@@ -72,8 +72,8 @@
"dependencies": {
"@chainsafe/bls": "8.2.0",
"@chainsafe/blst": "^2.2.0",
"@chainsafe/persistent-merkle-tree": "^1.2.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/persistent-merkle-tree": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/api": "^1.33.0",
"@lodestar/config": "^1.33.0",
"@lodestar/params": "^1.33.0",

View File

@@ -1,23 +1,9 @@
// MUST import this file first before anything and not import any Lodestar code.
import {setHasher} from "@chainsafe/persistent-merkle-tree";
import {hasher as asSha256Hasher} from "@chainsafe/persistent-merkle-tree/hasher/as-sha256";
import {hasher as hashtreeHasher} from "@chainsafe/persistent-merkle-tree/hasher/hashtree";
import CpuFeatures from "cpu-features";
// without setting this first, persistent-merkle-tree will use noble instead
const cpuFeatures = CpuFeatures();
if (
cpuFeatures.arch === "x86" &&
!(
(cpuFeatures.flags.avx512f && cpuFeatures.flags.avx512vl) ||
(cpuFeatures.flags.avx2 && cpuFeatures.flags.bmi2) ||
(cpuFeatures.flags.avx && cpuFeatures.flags.sha)
)
) {
setHasher(asSha256Hasher);
} else {
setHasher(hashtreeHasher);
}
// Without setting this first, persistent-merkle-tree will use noble instead
setHasher(hashtreeHasher);
//
// ## Rationale

View File

@@ -60,10 +60,10 @@
"dependencies": {
"@chainsafe/as-sha256": "^1.2.0",
"@chainsafe/blst": "^2.2.0",
"@chainsafe/persistent-merkle-tree": "^1.2.0",
"@chainsafe/persistent-merkle-tree": "^1.2.1",
"@chainsafe/persistent-ts": "^1.0.0",
"@chainsafe/pubkey-index-map": "^3.0.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@chainsafe/swap-or-not-shuffle": "^1.2.1",
"@lodestar/config": "^1.33.0",
"@lodestar/params": "^1.33.0",

View File

@@ -68,7 +68,7 @@
},
"types": "lib/index.d.ts",
"dependencies": {
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/params": "^1.33.0",
"ethereum-cryptography": "^2.0.0"
},

View File

@@ -46,7 +46,7 @@
],
"dependencies": {
"@chainsafe/blst": "^2.2.0",
"@chainsafe/ssz": "^1.2.1",
"@chainsafe/ssz": "^1.2.2",
"@lodestar/api": "^1.33.0",
"@lodestar/config": "^1.33.0",
"@lodestar/db": "^1.33.0",

View File

@@ -587,29 +587,47 @@
optionalDependencies:
"@node-rs/crc32" "^1.10.6"
"@chainsafe/hashtree-darwin-arm64@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-darwin-arm64/-/hashtree-darwin-arm64-1.0.1.tgz#e2c60090c56a1c8dc8bdff329856184ad32e4cd5"
integrity sha512-+KmEgQMpO7FDL3klAcpXbQ4DPZvfCe0qSaBBrtT4vLF8V1JGm3sp+j7oibtxtOsLKz7nJMiK1pZExi7vjXu8og==
"@chainsafe/hashtree-darwin-arm64@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-darwin-arm64/-/hashtree-darwin-arm64-1.0.2.tgz#fcf09de55e8b666fa86d2136d285a4ea55f066c0"
integrity sha512-yIIwn9SUR5ZTl2vN1QqRtDFL/w2xYW4o68A1k8UexMbieGAnE7Ab7NvtCZRHRe8x0eONO46F/bWn5bxxyYlFXw==
"@chainsafe/hashtree-linux-arm64-gnu@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-gnu/-/hashtree-linux-arm64-gnu-1.0.1.tgz#49d2604a6c9106219448af3eaf76f4da6e44daca"
integrity sha512-p1hnhGq2aFY+Zhdn1Q6L/6yLYNKjqXfn/Pc8jiM0e3+Lf/hB+yCdqYVu1pto26BrZjugCFZfupHaL4DjUTDttw==
"@chainsafe/hashtree-linux-arm64-gnu@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-gnu/-/hashtree-linux-arm64-gnu-1.0.2.tgz#0af39b6f25ed77a2185151484c67636c3bfd7138"
integrity sha512-MDz1xBRTRHw2eezGqx1Ff8NoeUUQP3bhbeeVG8ZZTkFYqvRc8O65OQOTtgO+fFGvqnDjVBSRHmiTXU5eNeH/mQ==
"@chainsafe/hashtree-linux-x64-gnu@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-gnu/-/hashtree-linux-x64-gnu-1.0.1.tgz#31c5a2bb196b78f04f2bf4bfb5c1bf1f3331f071"
integrity sha512-uCIGuUWuWV0LiB4KLMy6JFa7Jp6NmPl3hKF5BYWu8TzUBe7vSXMZfqTzGxXPggFYN2/0KymfRdG9iDCOJfGRqg==
"@chainsafe/hashtree-linux-arm64-musl@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-arm64-musl/-/hashtree-linux-arm64-musl-1.0.2.tgz#40911e7427d88a1febca23f96f83f009977dbbf9"
integrity sha512-BUy+/9brJwAFAtraro4y/1F+aP/8j/7HrnYdde8PTu7jHWAClI9xZygadaJbk0GoWxyCOUAJKUs8KHVnYxJDeg==
"@chainsafe/hashtree@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree/-/hashtree-1.0.1.tgz#587666a261e1da6a37904095ce875fddc53c7c89"
integrity sha512-bleu9FjqBeR/l6W1u2Lz+HsS0b0LLJX2eUt3hOPBN7VqOhidx8wzkVh2S7YurS+iTQtfdK4K5QU9tcTGNrGwDg==
"@chainsafe/hashtree-linux-x64-gnu@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-gnu/-/hashtree-linux-x64-gnu-1.0.2.tgz#98d30f22200c0a4afd496b1466c51f9a42aa9e4f"
integrity sha512-bFy9ffFG77SivmeOjOlZmOCrxzQ/WqUESy0I+dW6IX7wquTXHldJKWvohs9+FEn3TSXgeigFmEATz5tfxBfIZw==
"@chainsafe/hashtree-linux-x64-musl@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-linux-x64-musl/-/hashtree-linux-x64-musl-1.0.2.tgz#b7aa71150dd6c4687a0f529a5cee052e36a99fb3"
integrity sha512-mbJB3C0RjwpqOMPZIUQm3IBH6d3sYiKDXMU6ORt5nuk7Ix2I80xxffAciDO1d7kKNnW6HStOj5s/rGhIDxK1ug==
"@chainsafe/hashtree-win32-x64-msvc@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree-win32-x64-msvc/-/hashtree-win32-x64-msvc-1.0.2.tgz#1b9fbb3f6a4b51f36b9efd42db9ab0308580b518"
integrity sha512-wXFhGqaydgadefQbjSTGqZY1R1MBhnJj+gbJhULNRUXco5pHsXfOk3QhCDAefp1PPW+wQwfT4clEnQCqJIf58w==
"@chainsafe/hashtree@1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@chainsafe/hashtree/-/hashtree-1.0.2.tgz#2a16b49e491bef9e5760cd1010363cb3d1351fb8"
integrity sha512-OaWjsZ6S/GaT2RvaqdpsF5Mux8qQOE2KbitX2yHmQJZNUZkdh7C3N4PA5LsvewqX+z8Nkv8mr1uSe0LSrHGiQw==
optionalDependencies:
"@chainsafe/hashtree-darwin-arm64" "1.0.1"
"@chainsafe/hashtree-linux-arm64-gnu" "1.0.1"
"@chainsafe/hashtree-linux-x64-gnu" "1.0.1"
"@chainsafe/hashtree-darwin-arm64" "1.0.2"
"@chainsafe/hashtree-linux-arm64-gnu" "1.0.2"
"@chainsafe/hashtree-linux-arm64-musl" "1.0.2"
"@chainsafe/hashtree-linux-x64-gnu" "1.0.2"
"@chainsafe/hashtree-linux-x64-musl" "1.0.2"
"@chainsafe/hashtree-win32-x64-msvc" "1.0.2"
"@chainsafe/is-ip@^2.0.1":
version "2.0.1"
@@ -671,13 +689,13 @@
dependencies:
"@chainsafe/is-ip" "^2.0.1"
"@chainsafe/persistent-merkle-tree@1.2.0", "@chainsafe/persistent-merkle-tree@^1.2.0":
version "1.2.0"
resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-1.2.0.tgz#a402debcae6b386c51564c8cbacc9b0d56f64486"
integrity sha512-Ng2eqd6OPvFPPuroQ659ZrFMHtc44LxUfK7K2WkoBhlQ3hrvIn3UTQNKc77xUCU40xjeBGSxAfz+MSV256i+/g==
"@chainsafe/persistent-merkle-tree@1.2.1", "@chainsafe/persistent-merkle-tree@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-1.2.1.tgz#80f052e4a04c63304d5198dbf2fa49e104a0365a"
integrity sha512-AOSEVLfaqwb9eTCKuY1ri0DrRxVQ3Rh+we1VBj1GahUGfEdE8OC3Vkbca7Up6RoI9Ip9FLnI31Y7AjKH9ZqAGA==
dependencies:
"@chainsafe/as-sha256" "1.2.0"
"@chainsafe/hashtree" "1.0.1"
"@chainsafe/hashtree" "1.0.2"
"@noble/hashes" "^1.3.0"
"@chainsafe/persistent-merkle-tree@^0.6.1":
@@ -760,13 +778,13 @@
"@chainsafe/as-sha256" "^0.4.1"
"@chainsafe/persistent-merkle-tree" "^0.6.1"
"@chainsafe/ssz@^1.2.1":
version "1.2.1"
resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-1.2.1.tgz#a9a89c9706de33444c0ee64fbc461ae6001132af"
integrity sha512-rchrNF+tJ1yOMZS5CQK3bK5UZC1vQP8ANxW4McRedvBls5b9Mvn+LtbOE4wffrVMOxQzOXcBGZDoCPPJYX76Rg==
"@chainsafe/ssz@^1.2.2":
version "1.2.2"
resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-1.2.2.tgz#3c41b70bac9e646cb4cce0d49bda176ca87984ad"
integrity sha512-kIA3fJO6h2RsQndsNBlCSQYB4xfdZGMQvNPKPgbiB0mysV6okuxeJU3Nyl16xDCKv3tqej76eGYHcyjMVt7V1w==
dependencies:
"@chainsafe/as-sha256" "1.2.0"
"@chainsafe/persistent-merkle-tree" "1.2.0"
"@chainsafe/persistent-merkle-tree" "1.2.1"
"@chainsafe/swap-or-not-shuffle-darwin-arm64@1.2.1":
version "1.2.1"
@@ -3383,11 +3401,6 @@
resolved "https://registry.yarnpkg.com/@types/cookie/-/cookie-0.6.0.tgz#eac397f28bf1d6ae0ae081363eca2f425bedf0d5"
integrity sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==
"@types/cpu-features@^0.0.3":
version "0.0.3"
resolved "https://registry.yarnpkg.com/@types/cpu-features/-/cpu-features-0.0.3.tgz#a2bec076eb5dc95e0a6c23d1f8d389be4109b309"
integrity sha512-W/Ep+LDZoxMbCcH7LHRB3RN+TY4gbHl3u4uRq4XsxOh1gnpf5Lkwy5xWTBKSaJYQuMLW2XPAmRWA5Ucsy2EGVQ==
"@types/datastore-level@^3.0.0":
version "3.0.0"
resolved "https://registry.npmjs.org/@types/datastore-level/-/datastore-level-3.0.0.tgz"
@@ -5383,14 +5396,6 @@ cosmiconfig@^8.2.0:
parse-json "^5.2.0"
path-type "^4.0.0"
cpu-features@^0.0.10:
version "0.0.10"
resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.10.tgz#9aae536db2710c7254d7ed67cb3cbc7d29ad79c5"
integrity sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==
dependencies:
buildcheck "~0.0.6"
nan "^2.19.0"
cpu-features@~0.0.4:
version "0.0.8"
resolved "https://registry.yarnpkg.com/cpu-features/-/cpu-features-0.0.8.tgz#a2d464b023b8ad09004c8cdca23b33f192f63546"