diff --git a/.changeset/tough-beers-roll.md b/.changeset/tough-beers-roll.md new file mode 100644 index 000000000..f7929843a --- /dev/null +++ b/.changeset/tough-beers-roll.md @@ -0,0 +1,6 @@ +--- +"@ckb-lumos/crypto": minor +"@ckb-lumos/lumos": minor +--- + +feat: add crypto.randomBytes to replace Node's crypto.randomBytes diff --git a/.github/.codecov.yml b/.github/.codecov.yml index 51839dda7..a2ef07946 100644 --- a/.github/.codecov.yml +++ b/.github/.codecov.yml @@ -12,6 +12,12 @@ coverage: target: auto threshold: 1% base: auto + patch: + default: + # basic settings + target: auto + threshold: 1% + base: auto parsers: gcov: diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 1cc3a1f4e..64e7bfa8d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -9,9 +9,10 @@ jobs: - uses: pnpm/action-setup@v2 with: version: 8.6.1 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: cache: "pnpm" + node-version: '18' - name: Install project dependencies and build run: | @@ -38,9 +39,10 @@ jobs: - uses: pnpm/action-setup@v2 with: version: 8.6.1 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: cache: "pnpm" + node-version: '18' - name: Install project dependencies and build run: | @@ -60,7 +62,7 @@ jobs: - uses: pnpm/action-setup@v2 with: version: 8.6.1 - - uses: actions/setup-node@v3 + - uses: actions/setup-node@v4 with: cache: "pnpm" diff --git a/commitlint.config.js b/commitlint.config.js index 414ae5141..2c753961b 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,6 +1,7 @@ const scopeEnumValues = [ "base", "bi", + "crypto", "ckb-indexer", "common-scripts", "config-manager", diff --git a/packages/ckb-indexer/package.json b/packages/ckb-indexer/package.json index 0f7310b4b..3352797f4 100644 --- a/packages/ckb-indexer/package.json +++ b/packages/ckb-indexer/package.json @@ -28,6 +28,7 @@ "events": "^3.3.0" }, "devDependencies": { + "@ckb-lumos/crypto": "0.23.0", "@ckb-lumos/testkit": "0.23.0", "@types/lodash.uniqby": "^4.7.7", "@types/request": "^2.48.8", diff --git a/packages/ckb-indexer/tests/transaction_collector.unit.test.ts b/packages/ckb-indexer/tests/transaction_collector.unit.test.ts index 95340e062..f8b909da4 100644 --- a/packages/ckb-indexer/tests/transaction_collector.unit.test.ts +++ b/packages/ckb-indexer/tests/transaction_collector.unit.test.ts @@ -1,5 +1,5 @@ -import { randomBytes } from "crypto"; import test from "ava"; +import { randomBytes } from "@ckb-lumos/crypto"; import { Indexer, TransactionCollector } from "../src"; import { indexerTransactionListThatHaveOneIoTypeInput, diff --git a/packages/codec/package.json b/packages/codec/package.json index af41a916f..09587705b 100644 --- a/packages/codec/package.json +++ b/packages/codec/package.json @@ -45,6 +45,7 @@ ] }, "devDependencies": { + "@ckb-lumos/crypto": "0.23.0", "escape-string-regexp": "^4.0.0", "js-yaml": "^4.1.0" } diff --git a/packages/codec/tests/bytes-like.test.ts b/packages/codec/tests/bytes-like.test.ts index 6e4adcbf2..afed311e4 100644 --- a/packages/codec/tests/bytes-like.test.ts +++ b/packages/codec/tests/bytes-like.test.ts @@ -1,7 +1,7 @@ import test from "ava"; import { molecule, number } from "../src"; import { Byte32 } from "../src/blockchain"; -import { randomBytes } from "crypto"; +import { randomBytes } from "@ckb-lumos/crypto"; import { equal, concat, hexify } from "../src/bytes"; import { BI } from "@ckb-lumos/bi"; import { bytify } from "../lib/bytes"; diff --git a/packages/common-scripts/package.json b/packages/common-scripts/package.json index 7fc2d2cdc..656abea91 100644 --- a/packages/common-scripts/package.json +++ b/packages/common-scripts/package.json @@ -55,6 +55,7 @@ ] }, "devDependencies": { + "@ckb-lumos/crypto": "0.23.0", "@ckb-lumos/debugger": "0.23.0", "@ckb-lumos/hd": "0.23.0", "@types/keccak": "^3.0.1", diff --git a/packages/common-scripts/tests/dao-with-custom-lock.test.ts b/packages/common-scripts/tests/dao-with-custom-lock.test.ts index 99ddc9cce..8095dc51a 100644 --- a/packages/common-scripts/tests/dao-with-custom-lock.test.ts +++ b/packages/common-scripts/tests/dao-with-custom-lock.test.ts @@ -13,7 +13,7 @@ import { dao } from "../src"; import { Config, predefined } from "@ckb-lumos/config-manager"; import { hexify } from "@ckb-lumos/codec/lib/bytes"; import { Uint64 } from "@ckb-lumos/codec/lib/number"; -import { randomBytes } from "node:crypto"; +import { randomBytes } from "@ckb-lumos/crypto"; const { LINA } = predefined; diff --git a/packages/config-manager/package.json b/packages/config-manager/package.json index c248cf2dd..23483f5be 100644 --- a/packages/config-manager/package.json +++ b/packages/config-manager/package.json @@ -41,6 +41,9 @@ "@types/deep-freeze-strict": "^1.1.0", "deep-freeze-strict": "^1.1.1" }, + "devDependencies": { + "@ckb-lumos/crypto": "0.23.0" + }, "publishConfig": { "access": "public" }, diff --git a/packages/config-manager/tests/refresh.test.ts b/packages/config-manager/tests/refresh.test.ts index 3abec9f7c..773925b64 100644 --- a/packages/config-manager/tests/refresh.test.ts +++ b/packages/config-manager/tests/refresh.test.ts @@ -1,15 +1,15 @@ import test from "ava"; +import { spy } from "sinon"; import { createLatestTypeIdResolver, createRpcResolver, FetchOutputsByTxHashes, refreshScriptConfigs, } from "../src/refresh"; -import { ScriptConfigs } from "../src"; import { hexify } from "@ckb-lumos/codec/lib/bytes"; -import { randomBytes } from "node:crypto"; import { OutPoint, Output, Script } from "@ckb-lumos/base"; -import { spy } from "sinon"; +import { randomBytes } from "@ckb-lumos/crypto"; +import { ScriptConfigs } from "../src"; test("refresh without update", async (t) => { const scriptConfigs: ScriptConfigs = { diff --git a/packages/crypto/.eslintignore b/packages/crypto/.eslintignore new file mode 100644 index 000000000..7951405f8 --- /dev/null +++ b/packages/crypto/.eslintignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/packages/crypto/.gitignore b/packages/crypto/.gitignore new file mode 100644 index 000000000..7951405f8 --- /dev/null +++ b/packages/crypto/.gitignore @@ -0,0 +1 @@ +lib \ No newline at end of file diff --git a/packages/crypto/CHANGELOG.md b/packages/crypto/CHANGELOG.md new file mode 100644 index 000000000..f03c67b22 --- /dev/null +++ b/packages/crypto/CHANGELOG.md @@ -0,0 +1 @@ +# @ckb-lumos/crypto \ No newline at end of file diff --git a/packages/crypto/READMD.md b/packages/crypto/READMD.md new file mode 100644 index 000000000..fd856e73f --- /dev/null +++ b/packages/crypto/READMD.md @@ -0,0 +1,3 @@ +# `@ckb-lumos/crypto` + +Crypto utilities used in Lumos. diff --git a/packages/crypto/package.json b/packages/crypto/package.json new file mode 100644 index 000000000..8fd595159 --- /dev/null +++ b/packages/crypto/package.json @@ -0,0 +1,52 @@ +{ + "name": "@ckb-lumos/crypto", + "version": "0.23.0", + "description": "Crypto utilities used in Lumos", + "author": "Tom Wang ", + "homepage": "https://github.com/ckb-js/lumos#readme", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "engines": { + "node": ">=18.0.0" + }, + "directories": { + "lib": "lib", + "test": "tests" + }, + "files": [ + "lib", + "index.d.ts" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/ckb-js/lumos.git" + }, + "scripts": { + "build": "pnpm run build:types && pnpm run build:js", + "build:types": "tsc --declaration --emitDeclarationOnly", + "build:js": "babel --root-mode upward src --out-dir lib --extensions .ts -s", + "fmt": "prettier --write \"{src,tests,examples}/**/*.ts\" package.json", + "lint": "eslint -c ../../.eslintrc.js \"{src,tests,examples}/**/*.ts\"", + "clean": "shx rm -rf lib", + "test": "ava **/*.test.{js,ts} --timeout=2m" + }, + "bugs": { + "url": "https://github.com/ckb-js/lumos/issues" + }, + "ava": { + "extensions": [ + "ts", + "js" + ], + "require": [ + "ts-node/register" + ] + }, + "dependencies": { + "@noble/hashes": "^1.4.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/crypto/src/index.ts b/packages/crypto/src/index.ts new file mode 100644 index 000000000..53300c4be --- /dev/null +++ b/packages/crypto/src/index.ts @@ -0,0 +1 @@ +export { randomBytes } from "@noble/hashes/utils"; diff --git a/packages/crypto/tests/index.test.ts b/packages/crypto/tests/index.test.ts new file mode 100644 index 000000000..f95010537 --- /dev/null +++ b/packages/crypto/tests/index.test.ts @@ -0,0 +1,10 @@ +import test from "ava"; +import { randomBytes } from "../src"; + +test("randomBytes", (t) => { + const size = 32; + const bytes = randomBytes(size); + t.is(bytes.length, size); + t.is(bytes.byteLength, size); + t.is(bytes.constructor, Uint8Array); +}); diff --git a/packages/crypto/tsconfig.json b/packages/crypto/tsconfig.json new file mode 100644 index 000000000..11c2edbdc --- /dev/null +++ b/packages/crypto/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "lib", + "sourceMap": true + }, + "include": ["src"] +} diff --git a/packages/crypto/typedoc.json b/packages/crypto/typedoc.json new file mode 100644 index 000000000..f593f276c --- /dev/null +++ b/packages/crypto/typedoc.json @@ -0,0 +1,4 @@ +{ + "extends": ["../../typedoc.base.json"], + "entryPoints": ["src/index.ts"] +} diff --git a/packages/debugger/package.json b/packages/debugger/package.json index d1a4768cd..3eae11f07 100644 --- a/packages/debugger/package.json +++ b/packages/debugger/package.json @@ -24,6 +24,7 @@ "@ckb-lumos/base": "0.23.0", "@ckb-lumos/bi": "0.23.0", "@ckb-lumos/codec": "0.23.0", + "@ckb-lumos/crypto": "0.23.0", "@ckb-lumos/config-manager": "0.23.0", "@ckb-lumos/helpers": "0.23.0", "@ckb-lumos/rpc": "0.23.0", diff --git a/packages/debugger/src/context.ts b/packages/debugger/src/context.ts index f1a41579e..718f0fe0f 100644 --- a/packages/debugger/src/context.ts +++ b/packages/debugger/src/context.ts @@ -1,5 +1,5 @@ +import { randomBytes } from "@ckb-lumos/crypto"; import { Header, OutPoint } from "@ckb-lumos/base"; -import * as crypto from "crypto"; import { ScriptConfig } from "@ckb-lumos/config-manager"; import { OutputDataLoader } from "./loader"; import { DataLoader, TestContext } from "./types"; @@ -14,9 +14,8 @@ const TRANSACTION_HASH_LENGTH = 32; export function mockOutPoint(): OutPoint { return { - txHash: hexify(crypto.randomBytes(TRANSACTION_HASH_LENGTH)), - index: - "0x" + Uint32.unpack(crypto.randomBytes(Uint32.byteLength)).toString(16), + txHash: hexify(randomBytes(TRANSACTION_HASH_LENGTH)), + index: "0x" + Uint32.unpack(randomBytes(Uint32.byteLength)).toString(16), }; } diff --git a/packages/debugger/src/executor.ts b/packages/debugger/src/executor.ts index 71ec78c4f..4865d4cf0 100644 --- a/packages/debugger/src/executor.ts +++ b/packages/debugger/src/executor.ts @@ -1,12 +1,12 @@ import { DataLoader, ExecuteResult, Executor } from "./types"; import { TransactionSkeletonType } from "@ckb-lumos/helpers"; +import { randomBytes } from "@ckb-lumos/crypto"; import { spawnSync } from "child_process"; import { Hash } from "@ckb-lumos/base"; import * as fs from "fs"; import * as os from "os"; import * as path from "path"; import { parseDebuggerData, parseDebuggerMessage } from "./parse"; -import * as crypto from 'crypto'; interface DebuggerOptions { readonly loader: DataLoader; @@ -51,8 +51,9 @@ export class CKBDebugger implements Executor { */ private saveTmpTxFile(txSkeleton: TransactionSkeletonType): string { const debuggerData = parseDebuggerData(txSkeleton, this.loader); - const randomHex = crypto.randomBytes(18).toString('hex'); - const tempFileName = `lumos-debugger-data-${randomHex}` + // eslint-disable-next-line @typescript-eslint/no-magic-numbers + const randomHex = Buffer.from(randomBytes(18)).toString("hex"); + const tempFileName = `lumos-debugger-data-${randomHex}`; const tmpTxPath = path.join(os.tmpdir(), `${tempFileName}.json`); fs.writeFileSync(tmpTxPath, JSON.stringify(debuggerData)); diff --git a/packages/debugger/tests/context.test.ts b/packages/debugger/tests/context.test.ts index 867d6f8aa..029bcf451 100644 --- a/packages/debugger/tests/context.test.ts +++ b/packages/debugger/tests/context.test.ts @@ -4,6 +4,7 @@ import { createScriptRegistry, } from "@ckb-lumos/experiment-tx-assembler"; import { computeScriptHash } from "@ckb-lumos/base/lib/utils"; +import { randomBytes } from "@ckb-lumos/crypto"; import { HexString } from "@ckb-lumos/base"; import { CKBDebugger, CKBDebuggerDownloader, DataLoader } from "../src"; import { TransactionSkeleton } from "@ckb-lumos/helpers"; @@ -12,7 +13,6 @@ import { getDefaultConfig, mockOutPoint, } from "../src/context"; -import { randomBytes } from "crypto"; import { privateKeyToBlake160, signRecoverable } from "@ckb-lumos/hd/lib/key"; import { hexify } from "@ckb-lumos/codec/lib/bytes"; import { diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index e419a6a91..fed5cb231 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -34,6 +34,7 @@ "@ckb-lumos/bi": "0.23.0", "@ckb-lumos/ckb-indexer": "0.23.0", "@ckb-lumos/codec": "0.23.0", + "@ckb-lumos/crypto": "0.23.0", "@ckb-lumos/common-scripts": "0.23.0", "@ckb-lumos/config-manager": "0.23.0", "@ckb-lumos/hd": "0.23.0", diff --git a/packages/e2e-test/src/utils.ts b/packages/e2e-test/src/utils.ts index 63ae46866..4114eba25 100644 --- a/packages/e2e-test/src/utils.ts +++ b/packages/e2e-test/src/utils.ts @@ -1,11 +1,12 @@ import { Script } from "@ckb-lumos/base"; +import { randomBytes } from "@ckb-lumos/crypto"; import { encodeToAddress } from "@ckb-lumos/helpers"; -import { randomBytes } from "crypto"; import { key } from "@ckb-lumos/hd"; import { getConfig } from "@ckb-lumos/config-manager"; import { hexify } from "@ckb-lumos/codec/lib/bytes"; // secp256k1 private key is 32-bytes length +/* eslint-disable @typescript-eslint/no-magic-numbers */ export const generateRandomPrivateKey = (): string => hexify(randomBytes(32)); export function asyncSleep(ms: number): Promise { diff --git a/packages/hd/package.json b/packages/hd/package.json index 856fd848b..3373200c6 100644 --- a/packages/hd/package.json +++ b/packages/hd/package.json @@ -21,6 +21,7 @@ "dependencies": { "@ckb-lumos/base": "0.23.0", "@ckb-lumos/bi": "0.23.0", + "@ckb-lumos/crypto": "0.23.0", "bn.js": "^5.1.3", "elliptic": "^6.5.4", "scrypt-js": "^3.0.1", diff --git a/packages/hd/src/keystore.ts b/packages/hd/src/keystore.ts index 368315644..426538cba 100644 --- a/packages/hd/src/keystore.ts +++ b/packages/hd/src/keystore.ts @@ -1,7 +1,13 @@ -import crypto from "crypto"; +import { + Cipher, + ScryptOptions, + createCipheriv, + createDecipheriv, +} from "crypto"; import { Keccak } from "sha3"; import { v4 as uuid } from "uuid"; import { ExtendedPrivateKey } from "./extended_key"; +import { randomBytes } from "@ckb-lumos/crypto"; import { HexString } from "@ckb-lumos/base"; import { syncScrypt } from "scrypt-js"; @@ -94,8 +100,8 @@ export default class Keystore { // Create an empty keystore object that contains empty private key static createEmpty(): Keystore { const saltSize = 32; - const salt: Buffer = crypto.randomBytes(saltSize); - const iv: Buffer = crypto.randomBytes(16); + const salt: Buffer = Buffer.from(randomBytes(saltSize)); + const iv: Buffer = Buffer.from(randomBytes(16)); const kdfparams: KdfParams = { dklen: 32, salt: salt.toString("hex"), @@ -125,8 +131,8 @@ export default class Keystore { ): Keystore { const saltSize = 32; const ivSize = 16; - const salt: Buffer = options.salt || crypto.randomBytes(saltSize); - const iv: Buffer = options.iv || crypto.randomBytes(ivSize); + const salt: Buffer = options.salt || Buffer.from(randomBytes(saltSize)); + const iv: Buffer = options.iv || Buffer.from(randomBytes(ivSize)); const kdfparams: KdfParams = { dklen: 32, salt: salt.toString("hex"), @@ -145,11 +151,7 @@ export default class Keystore { ) ); - const cipher: crypto.Cipher = crypto.createCipheriv( - CIPHER, - derivedKey.slice(0, 16), - iv - ); + const cipher: Cipher = createCipheriv(CIPHER, derivedKey.slice(0, 16), iv); if (!cipher) { throw new UnsupportedCipher(); } @@ -190,7 +192,7 @@ export default class Keystore { if (Keystore.mac(derivedKey, ciphertext) !== this.crypto.mac) { throw new IncorrectPassword(); } - const decipher = crypto.createDecipheriv( + const decipher = createDecipheriv( this.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(this.crypto.cipherparams.iv, "hex") @@ -239,7 +241,7 @@ export default class Keystore { ); } - static scryptOptions(kdfparams: KdfParams): crypto.ScryptOptions { + static scryptOptions(kdfparams: KdfParams): ScryptOptions { return { N: kdfparams.n, r: kdfparams.r, diff --git a/packages/hd/src/mnemonic/index.ts b/packages/hd/src/mnemonic/index.ts index 0b3f956a4..b4a9f13c4 100644 --- a/packages/hd/src/mnemonic/index.ts +++ b/packages/hd/src/mnemonic/index.ts @@ -1,6 +1,8 @@ -import crypto from "crypto"; -import wordList from "./word_list"; +/* eslint-disable @typescript-eslint/no-magic-numbers */ +import { pbkdf2, pbkdf2Sync, createHash } from "crypto"; +import { randomBytes } from "@ckb-lumos/crypto"; import { HexString } from "@ckb-lumos/base"; +import wordList from "./word_list"; const RADIX = 2048; const PBKDF2_ROUNDS = 2048; @@ -37,21 +39,18 @@ function bytesToBinary(bytes: Buffer): string { function deriveChecksumBits(entropyBuffer: Buffer): string { const ENT = entropyBuffer.length * 8; const CS = ENT / 32; - const hash = crypto.createHash("sha256").update(entropyBuffer).digest(); + const hash = createHash("sha256").update(entropyBuffer).digest(); return bytesToBinary(hash).slice(0, CS); } -function salt(password: string = ""): string { +function salt(password = ""): string { return `mnemonic${password}`; } -export function mnemonicToSeedSync( - mnemonic: string = "", - password: string = "" -): Buffer { +export function mnemonicToSeedSync(mnemonic = "", password = ""): Buffer { const mnemonicBuffer = Buffer.from(mnemonic.normalize("NFKD"), "utf8"); const saltBuffer = Buffer.from(salt(password.normalize("NFKD")), "utf8"); - return crypto.pbkdf2Sync( + return pbkdf2Sync( mnemonicBuffer, saltBuffer, PBKDF2_ROUNDS, @@ -60,15 +59,12 @@ export function mnemonicToSeedSync( ); } -export function mnemonicToSeed( - mnemonic: string = "", - password: string = "" -): Promise { +export function mnemonicToSeed(mnemonic = "", password = ""): Promise { return new Promise((resolve, reject) => { try { const mnemonicBuffer = Buffer.from(mnemonic.normalize("NFKD"), "utf8"); const saltBuffer = Buffer.from(salt(password.normalize("NFKD")), "utf8"); - crypto.pbkdf2( + pbkdf2( mnemonicBuffer, saltBuffer, PBKDF2_ROUNDS, @@ -87,7 +83,7 @@ export function mnemonicToSeed( }); } -export function mnemonicToEntropy(mnemonic: string = ""): HexString { +export function mnemonicToEntropy(mnemonic = ""): HexString { const words = mnemonic.normalize("NFKD").split(" "); if (words.length < MIN_WORDS_SIZE) { throw new Error(WORDS_TOO_SHORT); @@ -173,7 +169,7 @@ export function validateMnemonic(mnemonic: string): boolean { export function generateMnemonic(): string { const entropySize = 16; const entropy: HexString = - "0x" + crypto.randomBytes(entropySize).toString("hex"); + "0x" + Buffer.from(randomBytes(entropySize)).toString("hex"); return entropyToMnemonic(entropy); } diff --git a/packages/helpers/package.json b/packages/helpers/package.json index f66c2539e..63d369c05 100644 --- a/packages/helpers/package.json +++ b/packages/helpers/package.json @@ -43,6 +43,9 @@ "bech32": "^2.0.0", "immutable": "^4.3.0" }, + "devDependencies": { + "@ckb-lumos/crypto": "0.23.0" + }, "ava": { "extensions": [ "ts" diff --git a/packages/helpers/tests/model_helper.test.ts b/packages/helpers/tests/model_helper.test.ts index 5f34dec4d..db845cc10 100644 --- a/packages/helpers/tests/model_helper.test.ts +++ b/packages/helpers/tests/model_helper.test.ts @@ -1,6 +1,6 @@ import test from "ava"; import { cellHelper, encodeToAddress, scriptHelper } from "../src"; -import { randomBytes } from "node:crypto"; +import { randomBytes } from "@ckb-lumos/crypto"; import { bytes } from "@ckb-lumos/codec"; import { predefined } from "@ckb-lumos/config-manager"; import { defaultDeepClone } from "../src/models/base"; diff --git a/packages/helpers/tests/refresh.test.ts b/packages/helpers/tests/refresh.test.ts index 6371c8121..8b1a9cfbd 100644 --- a/packages/helpers/tests/refresh.test.ts +++ b/packages/helpers/tests/refresh.test.ts @@ -1,9 +1,9 @@ import test from "ava"; import { refreshTypeIdCellDeps } from "../src/refresh"; +import { randomBytes } from "@ckb-lumos/crypto"; import { TransactionSkeleton } from "../src"; import { CellDep } from "@ckb-lumos/base"; import { bytes } from "@ckb-lumos/codec"; -import { randomBytes } from "node:crypto"; test("refreshTypeIdCellDeps", async (t) => { const outdatedCellDep: CellDep = { diff --git a/packages/joyid/package.json b/packages/joyid/package.json index 6a7779fa1..aee3a383a 100644 --- a/packages/joyid/package.json +++ b/packages/joyid/package.json @@ -30,6 +30,7 @@ }, "devDependencies": { "@ckb-lumos/bi": "0.23.0", + "@ckb-lumos/crypto": "0.23.0", "sinon": "^15.0.4" }, "repository": { diff --git a/packages/joyid/tests/script-info.test.ts b/packages/joyid/tests/script-info.test.ts index 9cc97e4f8..74d15aede 100644 --- a/packages/joyid/tests/script-info.test.ts +++ b/packages/joyid/tests/script-info.test.ts @@ -1,4 +1,5 @@ import test from "ava"; +import { spy } from "sinon"; import { createJoyIDScriptInfo } from "../src"; import { Connection, @@ -6,7 +7,6 @@ import { JoyIDScriptInfoConfig, } from "../src/script-info"; import { BytesLike, bytes } from "@ckb-lumos/codec"; -import { randomBytes } from "node:crypto"; import { encodeToAddress, TransactionSkeleton } from "@ckb-lumos/helpers"; import { Cell, @@ -20,7 +20,7 @@ import { common } from "@ckb-lumos/common-scripts"; import { parseUnit } from "@ckb-lumos/bi"; import { getJoyIDLockScript } from "@joyid/ckb"; import { getCotaTypeScript } from "../src/constants"; -import { spy } from "sinon"; +import { randomBytes } from "@ckb-lumos/crypto"; const joyIdLockScriptTemplate = getJoyIDLockScript(true); const cotaTypeScriptTemplate = getCotaTypeScript(true); diff --git a/packages/lumos/package.json b/packages/lumos/package.json index b8120994b..651887695 100644 --- a/packages/lumos/package.json +++ b/packages/lumos/package.json @@ -29,6 +29,7 @@ "@ckb-lumos/bi": "0.23.0", "@ckb-lumos/ckb-indexer": "0.23.0", "@ckb-lumos/codec": "0.23.0", + "@ckb-lumos/crypto": "0.23.0", "@ckb-lumos/common-scripts": "0.23.0", "@ckb-lumos/config-manager": "0.23.0", "@ckb-lumos/hd": "0.23.0", diff --git a/packages/lumos/src/index.ts b/packages/lumos/src/index.ts index d192e0608..a5b045f42 100644 --- a/packages/lumos/src/index.ts +++ b/packages/lumos/src/index.ts @@ -31,6 +31,7 @@ export * as config from "./config"; export { RPC } from "@ckb-lumos/rpc"; export * as hd from "@ckb-lumos/hd"; +export * as crypto from "@ckb-lumos/crypto"; export { CellCollector, Indexer } from "@ckb-lumos/ckb-indexer"; export * as helpers from "./helpers"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3e989cd0d..671deca84 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -181,6 +181,9 @@ importers: specifier: ^3.3.0 version: 3.3.0 devDependencies: + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto '@ckb-lumos/testkit': specifier: 0.23.0 version: link:../testkit @@ -212,6 +215,9 @@ importers: specifier: 0.23.0 version: link:../bi devDependencies: + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto escape-string-regexp: specifier: ^4.0.0 version: 4.0.0 @@ -252,6 +258,9 @@ importers: specifier: ^4.3.0 version: 4.3.5 devDependencies: + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto '@ckb-lumos/debugger': specifier: 0.23.0 version: link:../debugger @@ -291,6 +300,16 @@ importers: deep-freeze-strict: specifier: ^1.1.1 version: 1.1.1 + devDependencies: + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto + + packages/crypto: + dependencies: + '@noble/hashes': + specifier: ^1.4.0 + version: 1.4.0 packages/debugger: dependencies: @@ -306,6 +325,9 @@ importers: '@ckb-lumos/config-manager': specifier: 0.23.0 version: link:../config-manager + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto '@ckb-lumos/helpers': specifier: 0.23.0 version: link:../helpers @@ -361,6 +383,9 @@ importers: '@ckb-lumos/config-manager': specifier: 0.23.0 version: link:../config-manager + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto '@ckb-lumos/hd': specifier: 0.23.0 version: link:../hd @@ -437,6 +462,9 @@ importers: '@ckb-lumos/bi': specifier: 0.23.0 version: link:../bi + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto bn.js: specifier: ^5.1.3 version: 5.2.1 @@ -520,6 +548,10 @@ importers: immutable: specifier: ^4.3.0 version: 4.3.5 + devDependencies: + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto packages/joyid: dependencies: @@ -545,6 +577,9 @@ importers: '@ckb-lumos/bi': specifier: 0.23.0 version: link:../bi + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto sinon: specifier: ^15.0.4 version: 15.2.0 @@ -603,6 +638,9 @@ importers: '@ckb-lumos/config-manager': specifier: 0.23.0 version: link:../config-manager + '@ckb-lumos/crypto': + specifier: 0.23.0 + version: link:../crypto '@ckb-lumos/hd': specifier: 0.23.0 version: link:../hd @@ -4314,7 +4352,6 @@ packages: /@noble/hashes@1.4.0: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} - dev: true /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==}