From 144ce499cec1d16a6ddcdd80750c350385ba7091 Mon Sep 17 00:00:00 2001 From: arobsn <87387688+arobsn@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:13:50 -0300 Subject: [PATCH 1/5] chore: bump @noble/curves --- .changeset/shiny-taxes-cry.md | 5 +++++ packages/wallet/package.json | 2 +- .../src/prover/proveDLogProtocol.spec.ts | 4 ++-- .../wallet/src/prover/proveDLogProtocol.ts | 19 +++++++++--------- pnpm-lock.yaml | 20 ++++++++++++++++--- 5 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 .changeset/shiny-taxes-cry.md diff --git a/.changeset/shiny-taxes-cry.md b/.changeset/shiny-taxes-cry.md new file mode 100644 index 00000000..1867107f --- /dev/null +++ b/.changeset/shiny-taxes-cry.md @@ -0,0 +1,5 @@ +--- +"@fleet-sdk/wallet": patch +--- + +Bump `@noble/curves` to `v2` diff --git a/packages/wallet/package.json b/packages/wallet/package.json index 70f2dd2e..33e3e82f 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -43,7 +43,7 @@ "@fleet-sdk/core": "workspace:^", "@fleet-sdk/crypto": "workspace:^", "@fleet-sdk/serializer": "workspace:^", - "@noble/curves": "^1.9.2", + "@noble/curves": "^2.0.1", "@scure/bip32": "^1.7.0", "@scure/bip39": "^1.6.0" }, diff --git a/packages/wallet/src/prover/proveDLogProtocol.spec.ts b/packages/wallet/src/prover/proveDLogProtocol.spec.ts index 1729d1f9..3bb16887 100644 --- a/packages/wallet/src/prover/proveDLogProtocol.spec.ts +++ b/packages/wallet/src/prover/proveDLogProtocol.spec.ts @@ -1,5 +1,5 @@ import { hex } from "@fleet-sdk/crypto"; -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; import { Address, verify_signature } from "ergo-lib-wasm-nodejs"; import fc from "fast-check"; import { describe, expect, it, test } from "vitest"; @@ -79,7 +79,7 @@ describe("ProveDLog protocol", () => { sk: fc.uint8Array({ minLength: 32, maxLength: 32 }) }), ({ msg, sk }) => { - const pk = getPublicKey(hex.encode(sk)); + const pk = getPublicKey(sk); const signature = sign(msg, sk); expect(verify(msg, signature, pk)).to.be.true; diff --git a/packages/wallet/src/prover/proveDLogProtocol.ts b/packages/wallet/src/prover/proveDLogProtocol.ts index 087f461c..dd040a56 100644 --- a/packages/wallet/src/prover/proveDLogProtocol.ts +++ b/packages/wallet/src/prover/proveDLogProtocol.ts @@ -1,9 +1,10 @@ import { FleetError, _0n, concatBytes } from "@fleet-sdk/common"; import { bigintBE, blake2b256, hex, randomBytes, validateEcPoint } from "@fleet-sdk/crypto"; -import { secp256k1 } from "@noble/curves/secp256k1"; +import { secp256k1 } from "@noble/curves/secp256k1.js"; -const { ProjectivePoint: ECPoint, CURVE } = secp256k1; -const G = ECPoint.BASE; +const { Point } = secp256k1; +const G = Point.BASE; +const N = Point.CURVE().n; const BLAKE2B_256_DIGEST_LEN = 32; const ERGO_SOUNDNESS_BYTES = 24; @@ -39,16 +40,16 @@ export function sign(message: Uint8Array, secretKey: Uint8Array) { */ export function genSignature(message: Uint8Array, secretKey: Uint8Array): undefined | Uint8Array { const sk = bigintBE.encode(secretKey); - const pk = G.multiply(sk).toRawBytes(); + const pk = G.multiply(sk).toBytes(); const k = genRandomSecret(); - const w = G.multiply(k).toRawBytes(); + const w = G.multiply(k).toBytes(); const c = fiatShamirHash(genCommitment(pk, w, message)); // The next line is ignored in the coverage report because it depends on randomness. /* v8 ignore next -- @preserve */ if (c === 0n) throw new FleetError("Failed to generate challenge"); - const z = umod(sk * c + k, CURVE.n); + const z = umod(sk * c + k, N); const signature = concatBytes(bigintBE.decode(c), bigintBE.decode(z)); // The next line is ignored in the coverage report because it depends on randomness. @@ -69,7 +70,7 @@ function genRandomSecret() { let c = 0; while (r === 0n && c < MAX_ITERATIONS) { - r = umod(bigintBE.encode(randomBytes(32)), CURVE.n); + r = umod(bigintBE.encode(randomBytes(32)), N); c++; } @@ -105,8 +106,8 @@ export function verify(message: Uint8Array, proof: Uint8Array, publicKey: Uint8A const c = bigintBE.encode(proof.slice(0, ERGO_SOUNDNESS_BYTES)); const z = bigintBE.encode(proof.slice(ERGO_SOUNDNESS_BYTES, ERGO_SCHNORR_SIG_LEN)); - const t = ECPoint.fromHex(publicKey).multiply(CURVE.n - c); - const w = G.multiply(z).add(t).toRawBytes(); + const t = Point.fromBytes(publicKey).multiply(N - c); + const w = G.multiply(z).add(t).toBytes(); const c2 = fiatShamirHash(genCommitment(publicKey, w, message)); return c2 === c; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7334315..fe228754 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -174,8 +174,8 @@ importers: specifier: workspace:^ version: link:../serializer '@noble/curves': - specifier: ^1.9.2 - version: 1.9.2 + specifier: ^2.0.1 + version: 2.0.1 '@scure/bip32': specifier: ^1.7.0 version: 1.7.0 @@ -565,6 +565,10 @@ packages: resolution: {integrity: sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==} engines: {node: ^14.21.3 || >=16} + '@noble/curves@2.0.1': + resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} + engines: {node: '>= 20.19.0'} + '@noble/hashes@1.1.4': resolution: {integrity: sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA==} @@ -572,6 +576,10 @@ packages: resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} engines: {node: ^14.21.3 || >=16} + '@noble/hashes@2.0.1': + resolution: {integrity: sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==} + engines: {node: '>= 20.19.0'} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2567,10 +2575,16 @@ snapshots: dependencies: '@noble/hashes': 1.8.0 + '@noble/curves@2.0.1': + dependencies: + '@noble/hashes': 2.0.1 + '@noble/hashes@1.1.4': {} '@noble/hashes@1.8.0': {} + '@noble/hashes@2.0.1': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3898,7 +3912,7 @@ snapshots: sigmajs-crypto-facade@0.0.7: dependencies: - '@noble/hashes': 1.1.4 + '@noble/hashes': 1.8.0 sigmastate-js@0.4.6: dependencies: From f2e209fc9d0e95829025c4b1c4d4a66518df848a Mon Sep 17 00:00:00 2001 From: arobsn <87387688+arobsn@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:19:49 -0300 Subject: [PATCH 2/5] chore: bump `@scure/bip39` to `v2` --- .changeset/dry-heads-dream.md | 5 +++++ packages/wallet/package.json | 2 +- packages/wallet/src/mnemonic.ts | 2 +- packages/wallet/src/wordlists.spec.ts | 4 +--- packages/wallet/src/wordlists.ts | 19 +++++++++---------- pnpm-lock.yaml | 19 ++++++++++++------- 6 files changed, 29 insertions(+), 22 deletions(-) create mode 100644 .changeset/dry-heads-dream.md diff --git a/.changeset/dry-heads-dream.md b/.changeset/dry-heads-dream.md new file mode 100644 index 00000000..c96da851 --- /dev/null +++ b/.changeset/dry-heads-dream.md @@ -0,0 +1,5 @@ +--- +"@fleet-sdk/wallet": patch +--- + +Bump `@scure/bip39` to `v2` diff --git a/packages/wallet/package.json b/packages/wallet/package.json index 33e3e82f..3c518ec5 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -45,7 +45,7 @@ "@fleet-sdk/serializer": "workspace:^", "@noble/curves": "^2.0.1", "@scure/bip32": "^1.7.0", - "@scure/bip39": "^1.6.0" + "@scure/bip39": "^2.0.1" }, "engines": { "node": ">=18" diff --git a/packages/wallet/src/mnemonic.ts b/packages/wallet/src/mnemonic.ts index 63d6873c..e1f9bd1b 100644 --- a/packages/wallet/src/mnemonic.ts +++ b/packages/wallet/src/mnemonic.ts @@ -1,5 +1,5 @@ import { generateMnemonic as generate, validateMnemonic as validate } from "@scure/bip39"; -import { wordlist as english } from "@scure/bip39/wordlists/english"; +import { wordlist as english } from "@scure/bip39/wordlists/english.js"; export function generateMnemonic(strength = 160, wordlist = english): string { return generate(wordlist, strength); diff --git a/packages/wallet/src/wordlists.spec.ts b/packages/wallet/src/wordlists.spec.ts index 072f9b39..5e3413a6 100644 --- a/packages/wallet/src/wordlists.spec.ts +++ b/packages/wallet/src/wordlists.spec.ts @@ -8,8 +8,7 @@ import { korean, portuguese, simplifiedChinese, - spanish, - traditionalChinese + spanish } from "./wordlists"; describe("wordlists", () => { @@ -18,7 +17,6 @@ describe("wordlists", () => { expect(english).to.have.length(wordlistLength); expect(portuguese).to.have.length(wordlistLength); expect(simplifiedChinese).to.have.length(wordlistLength); - expect(traditionalChinese).to.have.length(wordlistLength); expect(czech).to.have.length(wordlistLength); expect(french).to.have.length(wordlistLength); expect(italian).to.have.length(wordlistLength); diff --git a/packages/wallet/src/wordlists.ts b/packages/wallet/src/wordlists.ts index b8f66666..e2d05d49 100644 --- a/packages/wallet/src/wordlists.ts +++ b/packages/wallet/src/wordlists.ts @@ -1,10 +1,9 @@ -export { wordlist as english } from "@scure/bip39/wordlists/english"; -export { wordlist as japanese } from "@scure/bip39/wordlists/japanese"; -export { wordlist as korean } from "@scure/bip39/wordlists/korean"; -export { wordlist as spanish } from "@scure/bip39/wordlists/spanish"; -export { wordlist as simplifiedChinese } from "@scure/bip39/wordlists/simplified-chinese"; -export { wordlist as traditionalChinese } from "@scure/bip39/wordlists/traditional-chinese"; -export { wordlist as french } from "@scure/bip39/wordlists/french"; -export { wordlist as italian } from "@scure/bip39/wordlists/italian"; -export { wordlist as portuguese } from "@scure/bip39/wordlists/portuguese"; -export { wordlist as czech } from "@scure/bip39/wordlists/czech"; +export { wordlist as english } from "@scure/bip39/wordlists/english.js"; +export { wordlist as japanese } from "@scure/bip39/wordlists/japanese.js"; +export { wordlist as korean } from "@scure/bip39/wordlists/korean.js"; +export { wordlist as spanish } from "@scure/bip39/wordlists/spanish.js"; +export { wordlist as simplifiedChinese } from "@scure/bip39/wordlists/simplified-chinese.js"; +export { wordlist as french } from "@scure/bip39/wordlists/french.js"; +export { wordlist as italian } from "@scure/bip39/wordlists/italian.js"; +export { wordlist as portuguese } from "@scure/bip39/wordlists/portuguese.js"; +export { wordlist as czech } from "@scure/bip39/wordlists/czech.js"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fe228754..481359d1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -180,8 +180,8 @@ importers: specifier: ^1.7.0 version: 1.7.0 '@scure/bip39': - specifier: ^1.6.0 - version: 1.6.0 + specifier: ^2.0.1 + version: 2.0.1 plugins/ageusd: dependencies: @@ -801,11 +801,14 @@ packages: '@scure/base@1.2.6': resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + '@scure/base@2.0.0': + resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} + '@scure/bip32@1.7.0': resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} - '@scure/bip39@1.6.0': - resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} + '@scure/bip39@2.0.1': + resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==} '@standard-schema/spec@1.0.0': resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} @@ -2719,16 +2722,18 @@ snapshots: '@scure/base@1.2.6': {} + '@scure/base@2.0.0': {} + '@scure/bip32@1.7.0': dependencies: '@noble/curves': 1.9.2 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 - '@scure/bip39@1.6.0': + '@scure/bip39@2.0.1': dependencies: - '@noble/hashes': 1.8.0 - '@scure/base': 1.2.6 + '@noble/hashes': 2.0.1 + '@scure/base': 2.0.0 '@standard-schema/spec@1.0.0': {} From 6a5d4b955ccccbac4ac50aac5b224710f1500fd8 Mon Sep 17 00:00:00 2001 From: arobsn <87387688+arobsn@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:22:26 -0300 Subject: [PATCH 3/5] chore: bump `@scure/bip32` to `v2` --- .changeset/brave-walls-sneeze.md | 5 +++++ packages/wallet/package.json | 2 +- packages/wallet/src/ergoHDKey.ts | 22 ++++++++++++++++------ pnpm-lock.yaml | 24 ++++++++---------------- 4 files changed, 30 insertions(+), 23 deletions(-) create mode 100644 .changeset/brave-walls-sneeze.md diff --git a/.changeset/brave-walls-sneeze.md b/.changeset/brave-walls-sneeze.md new file mode 100644 index 00000000..2c2f1895 --- /dev/null +++ b/.changeset/brave-walls-sneeze.md @@ -0,0 +1,5 @@ +--- +"@fleet-sdk/wallet": patch +--- + +Bump `@scure/bip32` to `v2` diff --git a/packages/wallet/package.json b/packages/wallet/package.json index 3c518ec5..c3bb2a0f 100644 --- a/packages/wallet/package.json +++ b/packages/wallet/package.json @@ -44,7 +44,7 @@ "@fleet-sdk/crypto": "workspace:^", "@fleet-sdk/serializer": "workspace:^", "@noble/curves": "^2.0.1", - "@scure/bip32": "^1.7.0", + "@scure/bip32": "^2.0.1", "@scure/bip39": "^2.0.1" }, "engines": { diff --git a/packages/wallet/src/ergoHDKey.ts b/packages/wallet/src/ergoHDKey.ts index 3845f762..81c1986a 100644 --- a/packages/wallet/src/ergoHDKey.ts +++ b/packages/wallet/src/ergoHDKey.ts @@ -80,17 +80,23 @@ export class ErgoHDKey { return this.#address; } - static async fromMnemonic(mnemonic: string, options?: FromMnemonicOptions): Promise { + static async fromMnemonic( + mnemonic: string, + options?: FromMnemonicOptions, + ): Promise { return ErgoHDKey.fromMasterSeed( await mnemonicToSeed(mnemonic, options?.passphrase), - options?.path + options?.path, ); } - static fromMnemonicSync(mnemonic: string, options?: FromMnemonicOptions): ErgoHDKey { + static fromMnemonicSync( + mnemonic: string, + options?: FromMnemonicOptions, + ): ErgoHDKey { return ErgoHDKey.fromMasterSeed( mnemonicToSeedSync(mnemonic, options?.passphrase), - options?.path + options?.path, ); } @@ -111,12 +117,16 @@ export class ErgoHDKey { /** @deprecated use the default constructor instead */ static fromExtendedKey(options: PublicKeyOptions): ErgoHDKey; /** @deprecated use the default constructor instead */ - static fromExtendedKey(keyOrOptions: string | PrivateKeyOptions | PublicKeyOptions): ErgoHDKey { + static fromExtendedKey( + keyOrOptions: string | PrivateKeyOptions | PublicKeyOptions, + ): ErgoHDKey { if (typeof keyOrOptions !== "string") { return new ErgoHDKey(keyOrOptions); } - const xKey = isHex(keyOrOptions) ? base58check.encode(hex.decode(keyOrOptions)) : keyOrOptions; + const xKey = isHex(keyOrOptions) + ? base58check.encode(hex.decode(keyOrOptions)) + : keyOrOptions; return new ErgoHDKey(HDKey.fromExtendedKey(xKey)); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 481359d1..8fa61814 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -177,8 +177,8 @@ importers: specifier: ^2.0.1 version: 2.0.1 '@scure/bip32': - specifier: ^1.7.0 - version: 1.7.0 + specifier: ^2.0.1 + version: 2.0.1 '@scure/bip39': specifier: ^2.0.1 version: 2.0.1 @@ -561,10 +561,6 @@ packages: '@napi-rs/wasm-runtime@1.0.7': resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} - '@noble/curves@1.9.2': - resolution: {integrity: sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g==} - engines: {node: ^14.21.3 || >=16} - '@noble/curves@2.0.1': resolution: {integrity: sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==} engines: {node: '>= 20.19.0'} @@ -804,8 +800,8 @@ packages: '@scure/base@2.0.0': resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} - '@scure/bip32@1.7.0': - resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} + '@scure/bip32@2.0.1': + resolution: {integrity: sha512-4Md1NI5BzoVP+bhyJaY3K6yMesEFzNS1sE/cP+9nuvE7p/b0kx9XbpDHHFl8dHtufcbdHRUUQdRqLIPHN/s7yA==} '@scure/bip39@2.0.1': resolution: {integrity: sha512-PsxdFj/d2AcJcZDX1FXN3dDgitDDTmwf78rKZq1a6c1P1Nan1X/Sxc7667zU3U+AN60g7SxxP0YCVw2H/hBycg==} @@ -2574,10 +2570,6 @@ snapshots: '@tybys/wasm-util': 0.10.1 optional: true - '@noble/curves@1.9.2': - dependencies: - '@noble/hashes': 1.8.0 - '@noble/curves@2.0.1': dependencies: '@noble/hashes': 2.0.1 @@ -2724,11 +2716,11 @@ snapshots: '@scure/base@2.0.0': {} - '@scure/bip32@1.7.0': + '@scure/bip32@2.0.1': dependencies: - '@noble/curves': 1.9.2 - '@noble/hashes': 1.8.0 - '@scure/base': 1.2.6 + '@noble/curves': 2.0.1 + '@noble/hashes': 2.0.1 + '@scure/base': 2.0.0 '@scure/bip39@2.0.1': dependencies: From d611b3e8a413462dee0ea918ecfd322c1e5947c4 Mon Sep 17 00:00:00 2001 From: arobsn <87387688+arobsn@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:25:05 -0300 Subject: [PATCH 4/5] chore: bump `@scure/base` to `v2` --- .changeset/eight-bugs-tan.md | 5 +++++ packages/crypto/package.json | 2 +- pnpm-lock.yaml | 9 ++------- 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 .changeset/eight-bugs-tan.md diff --git a/.changeset/eight-bugs-tan.md b/.changeset/eight-bugs-tan.md new file mode 100644 index 00000000..a87a4f34 --- /dev/null +++ b/.changeset/eight-bugs-tan.md @@ -0,0 +1,5 @@ +--- +"@fleet-sdk/crypto": patch +--- + +Bump `@scure/base` to `v2` diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 3ac5044e..3d3c08e0 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -38,7 +38,7 @@ "dependencies": { "@fleet-sdk/common": "workspace:^", "@noble/hashes": "^1.8.0", - "@scure/base": "^1.2.6" + "@scure/base": "^2.0.0" }, "files": [ "dist", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8fa61814..cf1f4787 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -120,8 +120,8 @@ importers: specifier: ^1.8.0 version: 1.8.0 '@scure/base': - specifier: ^1.2.6 - version: 1.2.6 + specifier: ^2.0.0 + version: 2.0.0 packages/mock-chain: dependencies: @@ -794,9 +794,6 @@ packages: cpu: [x64] os: [win32] - '@scure/base@1.2.6': - resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} - '@scure/base@2.0.0': resolution: {integrity: sha512-3E1kpuZginKkek01ovG8krQ0Z44E3DHPjc5S2rjJw9lZn3KSQOs8S7wqikF/AH7iRanHypj85uGyxk0XAyC37w==} @@ -2712,8 +2709,6 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.53.2': optional: true - '@scure/base@1.2.6': {} - '@scure/base@2.0.0': {} '@scure/bip32@2.0.1': From 482fe12db35bb41ad660b61abe19bb4da8f9692a Mon Sep 17 00:00:00 2001 From: arobsn <87387688+arobsn@users.noreply.github.com> Date: Wed, 19 Nov 2025 08:45:37 -0300 Subject: [PATCH 5/5] chore: bump `@noble/hashes` to `v2` --- .changeset/wacky-towns-stick.md | 5 +++++ packages/crypto/package.json | 2 +- packages/crypto/src/coders/hex.bench.ts | 2 +- packages/crypto/src/hashes.spec.ts | 2 +- packages/crypto/src/hashes.ts | 14 ++++++++++---- packages/crypto/src/index.ts | 2 +- packages/wallet/src/ergoHDKey.ts | 22 ++++++---------------- pnpm-lock.yaml | 4 ++-- 8 files changed, 27 insertions(+), 26 deletions(-) create mode 100644 .changeset/wacky-towns-stick.md diff --git a/.changeset/wacky-towns-stick.md b/.changeset/wacky-towns-stick.md new file mode 100644 index 00000000..6be86dce --- /dev/null +++ b/.changeset/wacky-towns-stick.md @@ -0,0 +1,5 @@ +--- +"@fleet-sdk/crypto": patch +--- + +Bump `@noble/hashes` to `v2` diff --git a/packages/crypto/package.json b/packages/crypto/package.json index 3d3c08e0..3300085b 100644 --- a/packages/crypto/package.json +++ b/packages/crypto/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "@fleet-sdk/common": "workspace:^", - "@noble/hashes": "^1.8.0", + "@noble/hashes": "^2.0.1", "@scure/base": "^2.0.0" }, "files": [ diff --git a/packages/crypto/src/coders/hex.bench.ts b/packages/crypto/src/coders/hex.bench.ts index 2d7cbd71..48f802ff 100644 --- a/packages/crypto/src/coders/hex.bench.ts +++ b/packages/crypto/src/coders/hex.bench.ts @@ -1,4 +1,4 @@ -import { bytesToHex, hexToBytes } from "@noble/hashes/utils"; +import { bytesToHex, hexToBytes } from "@noble/hashes/utils.js"; import { hex as scureHex } from "@scure/base"; import { bench, describe } from "vitest"; import { regularBoxes, validBoxes } from "../../../_test-vectors/mockedBoxes"; diff --git a/packages/crypto/src/hashes.spec.ts b/packages/crypto/src/hashes.spec.ts index db2e09ea..6e482410 100644 --- a/packages/crypto/src/hashes.spec.ts +++ b/packages/crypto/src/hashes.spec.ts @@ -1,4 +1,4 @@ -import { randomBytes } from "@noble/hashes/utils"; +import { randomBytes } from "@noble/hashes/utils.js"; import { describe, expect, it } from "vitest"; import { hex, utf8 } from "./coders"; import { blake2b, blake2b256, sha256 } from "./hashes"; diff --git a/packages/crypto/src/hashes.ts b/packages/crypto/src/hashes.ts index eaa1e8c8..29e521b6 100644 --- a/packages/crypto/src/hashes.ts +++ b/packages/crypto/src/hashes.ts @@ -1,5 +1,5 @@ -import { blake2b as _blake2b } from "@noble/hashes/blake2b"; -import { sha256 as _sha256 } from "@noble/hashes/sha256"; +import { type Blake2Opts, blake2b as _blake2b } from "@noble/hashes/blake2.js"; +import { sha256 as _sha256 } from "@noble/hashes/sha2.js"; import { hex } from "./coders"; import type { ByteInput } from "./types"; @@ -22,11 +22,17 @@ export function blake2b(message: ByteInput, options?: Blake2bOptions): Uint8Arra if (options?.salt) options.salt = ensureBytes(options.salt); if (options?.personalization) options.personalization = ensureBytes(options.personalization); - return _blake2b(ensureBytes(message), options); + const opts: Blake2Opts = { + key: options?.key ? ensureBytes(options?.key) : undefined, + salt: options?.salt ? ensureBytes(options?.salt) : undefined, + personalization: options?.personalization ? ensureBytes(options?.personalization) : undefined, + dkLen: options?.dkLen + }; + return _blake2b(ensureBytes(message), opts); } export function blake2b256(message: ByteInput, options?: Blake2b256Options): Uint8Array { - return blake2b(ensureBytes(message), { dkLen: 32, ...options }); + return blake2b(message, { dkLen: 32, ...options }); } export function sha256(message: ByteInput): Uint8Array { diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts index f87caac1..b0f8748d 100644 --- a/packages/crypto/src/index.ts +++ b/packages/crypto/src/index.ts @@ -1,4 +1,4 @@ -import { randomBytes as nobleRandomBytes } from "@noble/hashes/utils"; +import { randomBytes as nobleRandomBytes } from "@noble/hashes/utils.js"; /** * Secure PRNG from "@noble/hashes". Uses crypto.getRandomValues, which defers to OS. diff --git a/packages/wallet/src/ergoHDKey.ts b/packages/wallet/src/ergoHDKey.ts index 81c1986a..3845f762 100644 --- a/packages/wallet/src/ergoHDKey.ts +++ b/packages/wallet/src/ergoHDKey.ts @@ -80,23 +80,17 @@ export class ErgoHDKey { return this.#address; } - static async fromMnemonic( - mnemonic: string, - options?: FromMnemonicOptions, - ): Promise { + static async fromMnemonic(mnemonic: string, options?: FromMnemonicOptions): Promise { return ErgoHDKey.fromMasterSeed( await mnemonicToSeed(mnemonic, options?.passphrase), - options?.path, + options?.path ); } - static fromMnemonicSync( - mnemonic: string, - options?: FromMnemonicOptions, - ): ErgoHDKey { + static fromMnemonicSync(mnemonic: string, options?: FromMnemonicOptions): ErgoHDKey { return ErgoHDKey.fromMasterSeed( mnemonicToSeedSync(mnemonic, options?.passphrase), - options?.path, + options?.path ); } @@ -117,16 +111,12 @@ export class ErgoHDKey { /** @deprecated use the default constructor instead */ static fromExtendedKey(options: PublicKeyOptions): ErgoHDKey; /** @deprecated use the default constructor instead */ - static fromExtendedKey( - keyOrOptions: string | PrivateKeyOptions | PublicKeyOptions, - ): ErgoHDKey { + static fromExtendedKey(keyOrOptions: string | PrivateKeyOptions | PublicKeyOptions): ErgoHDKey { if (typeof keyOrOptions !== "string") { return new ErgoHDKey(keyOrOptions); } - const xKey = isHex(keyOrOptions) - ? base58check.encode(hex.decode(keyOrOptions)) - : keyOrOptions; + const xKey = isHex(keyOrOptions) ? base58check.encode(hex.decode(keyOrOptions)) : keyOrOptions; return new ErgoHDKey(HDKey.fromExtendedKey(xKey)); } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index cf1f4787..2542b749 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -117,8 +117,8 @@ importers: specifier: workspace:^ version: link:../common '@noble/hashes': - specifier: ^1.8.0 - version: 1.8.0 + specifier: ^2.0.1 + version: 2.0.1 '@scure/base': specifier: ^2.0.0 version: 2.0.0