From fae395c81df69e9882c50bd259c0c1d5f6a639d4 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 08:39:35 +0800 Subject: [PATCH 01/13] refactor: replace legacy util funcitons --- packages/neuron-wallet/src/controllers/multisig.ts | 2 +- .../migrations/1651820157100-RemoveAddressesMultisigConfig.ts | 2 +- .../chain/migrations/1681360188494-AddTypeSyncProgress.ts | 2 +- packages/neuron-wallet/src/models/address-parser.ts | 2 +- packages/neuron-wallet/src/services/cells.ts | 2 +- packages/neuron-wallet/src/services/tx/transaction-generator.ts | 2 +- packages/neuron-wallet/tests/controllers/anyone-can-pay.test.ts | 2 +- .../tests/services/tx/transaction-generator.test.ts | 2 +- .../neuron-wallet/tests/services/tx/transaction-sender.test.ts | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/neuron-wallet/src/controllers/multisig.ts b/packages/neuron-wallet/src/controllers/multisig.ts index f49d3ea07a..f77f4b52fc 100644 --- a/packages/neuron-wallet/src/controllers/multisig.ts +++ b/packages/neuron-wallet/src/controllers/multisig.ts @@ -2,7 +2,7 @@ import fs from 'fs' import path from 'path' import { dialog, BrowserWindow } from 'electron' import { t } from 'i18next' -import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils' +import { computeScriptHash as scriptToHash } from '@ckb-lumos/base/lib/utils' import { scriptToAddress, addressToScript } from '../utils/scriptAndAddress' import { ResponseCode } from '../utils/const' import MultisigConfig from '../database/chain/entities/multisig-config' diff --git a/packages/neuron-wallet/src/database/chain/migrations/1651820157100-RemoveAddressesMultisigConfig.ts b/packages/neuron-wallet/src/database/chain/migrations/1651820157100-RemoveAddressesMultisigConfig.ts index dbd5e2d5fd..2d8469aff9 100644 --- a/packages/neuron-wallet/src/database/chain/migrations/1651820157100-RemoveAddressesMultisigConfig.ts +++ b/packages/neuron-wallet/src/database/chain/migrations/1651820157100-RemoveAddressesMultisigConfig.ts @@ -1,5 +1,5 @@ import { MigrationInterface, QueryRunner } from "typeorm" -import { addressToScript } from "@nervosnetwork/ckb-sdk-utils" +import { addressToScript } from '../../../utils/scriptAndAddress' import MultisigConfig from "../entities/multisig-config" export class RemoveAddressesMultisigConfig1651820157100 implements MigrationInterface { diff --git a/packages/neuron-wallet/src/database/chain/migrations/1681360188494-AddTypeSyncProgress.ts b/packages/neuron-wallet/src/database/chain/migrations/1681360188494-AddTypeSyncProgress.ts index 70a0bd3ecc..e5dfeabc7e 100644 --- a/packages/neuron-wallet/src/database/chain/migrations/1681360188494-AddTypeSyncProgress.ts +++ b/packages/neuron-wallet/src/database/chain/migrations/1681360188494-AddTypeSyncProgress.ts @@ -1,6 +1,6 @@ import { MigrationInterface, QueryRunner, TableColumn, TableIndex } from "typeorm" import Multisig from "../../../models/multisig" -import { scriptToHash } from "@nervosnetwork/ckb-sdk-utils" +import { computeScriptHash as scriptToHash } from '@ckb-lumos/base/lib/utils' import { SyncAddressType } from "../entities/sync-progress" import MultisigConfig from "../entities/multisig-config" diff --git a/packages/neuron-wallet/src/models/address-parser.ts b/packages/neuron-wallet/src/models/address-parser.ts index ae48dd1e8a..3015d4abe3 100644 --- a/packages/neuron-wallet/src/models/address-parser.ts +++ b/packages/neuron-wallet/src/models/address-parser.ts @@ -1,5 +1,5 @@ import Script, { ScriptHashType } from './chain/script' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from '../utils/scriptAndAddress' import SystemScriptInfo from './system-script-info' export default class AddressParser { diff --git a/packages/neuron-wallet/src/services/cells.ts b/packages/neuron-wallet/src/services/cells.ts index f723b67bd7..c998d6dfe5 100644 --- a/packages/neuron-wallet/src/services/cells.ts +++ b/packages/neuron-wallet/src/services/cells.ts @@ -1,5 +1,5 @@ import { getConnection, In } from 'typeorm' -import { scriptToHash } from '@nervosnetwork/ckb-sdk-utils' +import { computeScriptHash as scriptToHash } from '@ckb-lumos/base/lib/utils' import { scriptToAddress, addressToScript } from '../utils/scriptAndAddress' import { CapacityNotEnough, diff --git a/packages/neuron-wallet/src/services/tx/transaction-generator.ts b/packages/neuron-wallet/src/services/tx/transaction-generator.ts index 99c0dfc867..711fffb03b 100644 --- a/packages/neuron-wallet/src/services/tx/transaction-generator.ts +++ b/packages/neuron-wallet/src/services/tx/transaction-generator.ts @@ -29,7 +29,7 @@ import BufferUtils from '../../utils/buffer' import assert from 'assert' import AssetAccount from '../../models/asset-account' import AddressService from '../../services/addresses' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from '../../utils/scriptAndAddress' import MultisigConfigModel from '../../models/multisig-config' import WalletService from '../../services/wallets' import { MIN_CELL_CAPACITY, MIN_SUDT_CAPACITY } from '../../utils/const' diff --git a/packages/neuron-wallet/tests/controllers/anyone-can-pay.test.ts b/packages/neuron-wallet/tests/controllers/anyone-can-pay.test.ts index 58fb1fc3f1..dd906cea2d 100644 --- a/packages/neuron-wallet/tests/controllers/anyone-can-pay.test.ts +++ b/packages/neuron-wallet/tests/controllers/anyone-can-pay.test.ts @@ -3,7 +3,7 @@ import Transaction from '../../src/models/chain/transaction' import { ServiceHasNoResponse } from '../../src/exceptions' import { ResponseCode } from '../../src/utils/const' import AssetAccountInfo from '../../src/models/asset-account-info' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from '../../src/utils/scriptAndAddress' const generateAnyoneCanPayTxMock = jest.fn() const generateSudtMigrateAcpTxMock = jest.fn() diff --git a/packages/neuron-wallet/tests/services/tx/transaction-generator.test.ts b/packages/neuron-wallet/tests/services/tx/transaction-generator.test.ts index 988e8059bf..e3ea2798d1 100644 --- a/packages/neuron-wallet/tests/services/tx/transaction-generator.test.ts +++ b/packages/neuron-wallet/tests/services/tx/transaction-generator.test.ts @@ -18,7 +18,7 @@ import SystemScriptInfo from '../../../src/models/system-script-info' import AssetAccountInfo from '../../../src/models/asset-account-info' import BufferUtils from '../../../src/utils/buffer' import WitnessArgs from '../../../src/models/chain/witness-args' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from '../../../src/utils/scriptAndAddress' import { serializeWitnessArgs } from '../../../src/utils/serialization' import { scriptToAddress } from '../../../src/utils/scriptAndAddress' import { diff --git a/packages/neuron-wallet/tests/services/tx/transaction-sender.test.ts b/packages/neuron-wallet/tests/services/tx/transaction-sender.test.ts index 4ece9f1189..38d05acf02 100644 --- a/packages/neuron-wallet/tests/services/tx/transaction-sender.test.ts +++ b/packages/neuron-wallet/tests/services/tx/transaction-sender.test.ts @@ -174,7 +174,7 @@ import { import TransactionSender from '../../../src/services/transaction-sender' import MultisigConfigModel from '../../../src/models/multisig-config' import Multisig from '../../../src/models/multisig' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from '../../../src/utils/scriptAndAddress' import { serializeWitnessArgs } from '../../../src/utils/serialization' const fakeScript = new Script( From 64954aab65fb8e135e006ff39756a655b74f2860 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 08:53:39 +0800 Subject: [PATCH 02/13] refactor: replace ckb-sdk-utils system script with lumos system scripts --- .../neuron-wallet/src/models/keys/address.ts | 14 +++++++++++--- .../src/models/system-script-info.ts | 7 ++++--- .../tests/controllers/multisig.test.ts | 11 ++++++----- .../models/keys/hd-public-key-info.test.ts | 15 ++++++++++++--- packages/neuron-wallet/tests/setup.ts | 17 +++++++++-------- .../setupAndTeardown/transactions.fixture.ts | 11 ++++++----- 6 files changed, 48 insertions(+), 27 deletions(-) diff --git a/packages/neuron-wallet/src/models/keys/address.ts b/packages/neuron-wallet/src/models/keys/address.ts index 98faf8e0f2..85e90cb5ec 100644 --- a/packages/neuron-wallet/src/models/keys/address.ts +++ b/packages/neuron-wallet/src/models/keys/address.ts @@ -1,7 +1,8 @@ -import { AddressPrefix, blake160, systemScripts, bytesToHex } from '@nervosnetwork/ckb-sdk-utils' +import { AddressPrefix, blake160, bytesToHex } from '@nervosnetwork/ckb-sdk-utils' import { scriptToAddress } from '../../utils/scriptAndAddress' - import { AccountExtendedPublicKey } from './key' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS export { AddressPrefix } @@ -12,7 +13,14 @@ export enum AddressType { export const publicKeyToAddress = (publicKey: string, isMainnet = false) => { const pubkey = publicKey.startsWith('0x') ? publicKey : `0x${publicKey}` - return scriptToAddress({ ...systemScripts.SECP256K1_BLAKE160, args: bytesToHex(blake160(pubkey)) }, isMainnet) + return scriptToAddress( + { + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + args: bytesToHex(blake160(pubkey)), + }, + isMainnet + ) } export default class Address { diff --git a/packages/neuron-wallet/src/models/system-script-info.ts b/packages/neuron-wallet/src/models/system-script-info.ts index a2ef2251af..2154a35faa 100644 --- a/packages/neuron-wallet/src/models/system-script-info.ts +++ b/packages/neuron-wallet/src/models/system-script-info.ts @@ -3,7 +3,8 @@ import CellDep, { DepType } from './chain/cell-dep' import NetworksService from '../services/networks' import RpcService from '../services/rpc-service' import Script, { ScriptHashType } from './chain/script' -import { systemScripts } from '@nervosnetwork/ckb-sdk-utils' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS export default class SystemScriptInfo { static SECP_CODE_HASH = process.env.SECP256K1_CODE_HASH! @@ -15,9 +16,9 @@ export default class SystemScriptInfo { static MULTI_SIGN_HASH_TYPE = ScriptHashType.Type static DAO_SCRIPT_HASH = new Script( - systemScripts.NERVOS_DAO.codeHash, + systemScripts.DAO.CODE_HASH, '0x', - systemScripts.NERVOS_DAO.hashType as ScriptHashType + systemScripts.DAO.HASH_TYPE as ScriptHashType ).computeHash() private static instance: SystemScriptInfo diff --git a/packages/neuron-wallet/tests/controllers/multisig.test.ts b/packages/neuron-wallet/tests/controllers/multisig.test.ts index 1f47be3d76..250abb562e 100644 --- a/packages/neuron-wallet/tests/controllers/multisig.test.ts +++ b/packages/neuron-wallet/tests/controllers/multisig.test.ts @@ -2,8 +2,9 @@ import { ResponseCode } from '../../src/utils/const' import MultisigService from '../../src/services/multisig' import MultisigController from '../../src/controllers/multisig' import CellsService from '../../src/services/cells' -import { systemScripts } from '@nervosnetwork/ckb-sdk-utils' import { scriptToAddress } from '../../src/utils/scriptAndAddress' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS let response = 0 let dialogRes = { canceled: false, filePaths: ['./'], filePath: './' } @@ -86,8 +87,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScripts.SECP256K1_BLAKE160.codeHash, - hashType: systemScripts.SECP256K1_BLAKE160.hashType, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, }, false ) @@ -106,8 +107,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScripts.SECP256K1_BLAKE160.codeHash, - hashType: systemScripts.SECP256K1_BLAKE160.hashType, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, }, true ) diff --git a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts index e1caf9f2bf..602ca73198 100644 --- a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts +++ b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts @@ -1,7 +1,8 @@ -import { systemScripts } from '@nervosnetwork/ckb-sdk-utils' import { scriptToAddress } from '../../../src/utils/scriptAndAddress' import { AddressType } from '../../../src/models/keys/address' import KeyInfos from '../../setupAndTeardown/public-key-info.fixture' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS const stubbedIsMainnet = jest.fn() @@ -37,7 +38,11 @@ describe('HdPublicKeyInfoModel', () => { }) it('generates mainnet address by property', () => { const address = scriptToAddress( - { ...systemScripts.SECP256K1_BLAKE160, args: keyInfo.publicKeyInBlake160 }, + { + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + args: keyInfo.publicKeyInBlake160, + }, true ) expect(keyInfoModel.address).toEqual(address) @@ -52,7 +57,11 @@ describe('HdPublicKeyInfoModel', () => { }) it('generates testnet address by property', () => { const address = scriptToAddress( - { ...systemScripts.SECP256K1_BLAKE160, args: keyInfo.publicKeyInBlake160 }, + { + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + args: keyInfo.publicKeyInBlake160, + }, false ) expect(keyInfoModel.address).toEqual(address) diff --git a/packages/neuron-wallet/tests/setup.ts b/packages/neuron-wallet/tests/setup.ts index 340ae061cf..d0788fd4da 100644 --- a/packages/neuron-wallet/tests/setup.ts +++ b/packages/neuron-wallet/tests/setup.ts @@ -1,6 +1,7 @@ -import { systemScripts } from '@nervosnetwork/ckb-sdk-utils' import '../src/locales/i18n' import { LedgerHID, LedgerCkbApp } from './mock/hardware' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS jest.mock('levelup', () => { return () => ({ @@ -23,8 +24,8 @@ jest.mock('dotenv', () => ({ process.env.MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000000' process.env.MAINNET_ACP_DEP_INDEX = '0' process.env.MAINNET_ACP_DEP_TYPE = 'code' - process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_MAINNET.codeHash - process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_MAINNET.hashType + process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY.CODE_HASH + process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY.HASH_TYPE process.env.LEGACY_MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_MAINNET_ACP_DEP_INDEX = '0' @@ -56,8 +57,8 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_ACP_DEP_TXHASH = '0x4f32b3e39bd1b6350d326fdfafdfe05e5221865c3098ae323096f0bfc69e0a8c' process.env.TESTNET_ACP_DEP_INDEX = '0' process.env.TESTNET_ACP_DEP_TYPE = 'depGroup' - process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_TESTNET.codeHash - process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_TESTNET.hashType + process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY.CODE_HASH + process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY.HASH_TYPE process.env.LEGACY_TESTNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_TESTNET_ACP_DEP_INDEX = '0' @@ -78,9 +79,9 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_CHEQUE_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000003' process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE = 'type' - process.env.SECP256K1_CODE_HASH = systemScripts.SECP256K1_BLAKE160.codeHash - process.env.DAO_CODE_HASH = systemScripts.NERVOS_DAO.codeHash - process.env.MULTISIG_CODE_HASH = systemScripts.SECP256K1_MULTISIG.codeHash + process.env.SECP256K1_CODE_HASH = systemScripts.SECP256K1_BLAKE160.CODE_HASH + process.env.DAO_CODE_HASH = systemScripts.DAO.CODE_HASH + process.env.MULTISIG_CODE_HASH = systemScripts.SECP256K1_BLAKE160_MULTISIG.CODE_HASH }, })) diff --git a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts index 378fb42e48..bc2707a07f 100644 --- a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts +++ b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts @@ -6,7 +6,8 @@ import Input from '../../src/models/chain/input' import Script from '../../src/models/chain/script' import Output from '../../src/models/chain/output' import { DEPLOY_KEY } from './keys' -import { systemScripts } from '@nervosnetwork/ckb-sdk-utils' +import { predefined } from '@ckb-lumos/config-manager' +const systemScripts = predefined.LINA.SCRIPTS const fromTxObject = (tx: any) => Transaction.fromObject({ @@ -177,8 +178,8 @@ const ACPTx0 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScripts.ANYONE_CAN_PAY_MAINNET.codeHash, - hashType: systemScripts.ANYONE_CAN_PAY_MAINNET.hashType, + codeHash: systemScripts.ANYONE_CAN_PAY.CODE_HASH, + hashType: systemScripts.ANYONE_CAN_PAY.HASH_TYPE, }, type: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', @@ -224,8 +225,8 @@ const ACPTx1 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScripts.ANYONE_CAN_PAY_MAINNET.codeHash, - hashType: systemScripts.ANYONE_CAN_PAY_MAINNET.hashType, + codeHash: systemScripts.ANYONE_CAN_PAY.CODE_HASH, + hashType: systemScripts.ANYONE_CAN_PAY.HASH_TYPE, }, capacity: '0x34e62ce00', outPoint: { txHash: '0x230ab250ee0ae681e88e462102e5c01a9994ac82bf0effbfb58d6c11a8657900', index: '0' }, From 7ca6c3d1a23551c9443604cf2d8384ecf1ad45fd Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 09:16:48 +0800 Subject: [PATCH 03/13] refactor: replace toUint64le to lumos --- packages/neuron-wallet/src/services/transaction-sender.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/neuron-wallet/src/services/transaction-sender.ts b/packages/neuron-wallet/src/services/transaction-sender.ts index 23109e7bd3..22f352f426 100644 --- a/packages/neuron-wallet/src/services/transaction-sender.ts +++ b/packages/neuron-wallet/src/services/transaction-sender.ts @@ -1,7 +1,6 @@ import ECPair from '@nervosnetwork/ckb-sdk-utils/lib/ecpair' import signWitnesses from '@nervosnetwork/ckb-sdk-core/lib/signWitnesses' import NodeService from './node' -import { toUint64Le } from '@nervosnetwork/ckb-sdk-utils' import { serializeWitnessArgs } from '../utils/serialization' import { scriptToAddress } from '../utils/scriptAndAddress' import { TransactionPersistor, TransactionGenerator, TargetOutput } from './tx' @@ -23,7 +22,7 @@ import Script from '../models/chain/script' import Multisig from '../models/multisig' import Blake2b from '../models/blake2b' import logger from '../utils/logger' -import { bytes as byteUtils } from '@ckb-lumos/codec' +import { bytes as byteUtils, bytes, number } from '@ckb-lumos/codec' import SystemScriptInfo from '../models/system-script-info' import AddressParser from '../models/address-parser' import HardwareWalletService from './hardware' @@ -405,13 +404,13 @@ export default class TransactionSender { const serializedEmptyWitnessSize = byteUtils.bytify(serializedEmptyWitness).byteLength const blake2b = new Blake2b() blake2b.update(txHash) - blake2b.update(toUint64Le(`0x${serializedEmptyWitnessSize.toString(16)}`)) + blake2b.update(bytes.hexify(number.Uint64LE.pack(`0x${serializedEmptyWitnessSize.toString(16)}`))) blake2b.update(serializedEmptyWitness) restWitnesses.forEach(w => { const wit: string = typeof w === 'string' ? w : serializeWitnessArgs(w.toSDK()) const byteLength = byteUtils.bytify(wit).byteLength - blake2b.update(toUint64Le(`0x${byteLength.toString(16)}`)) + blake2b.update(bytes.hexify(number.Uint64LE.pack(`0x${byteLength.toString(16)}`))) blake2b.update(wit) }) From 493216e5ac0af86d51f2e68eef68c5094015582d Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 16:10:17 +0800 Subject: [PATCH 04/13] fix: acp code hash is different in mainet and testnet --- packages/neuron-wallet/tests/setup.ts | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/neuron-wallet/tests/setup.ts b/packages/neuron-wallet/tests/setup.ts index d0788fd4da..91b8b99a72 100644 --- a/packages/neuron-wallet/tests/setup.ts +++ b/packages/neuron-wallet/tests/setup.ts @@ -1,7 +1,8 @@ import '../src/locales/i18n' import { LedgerHID, LedgerCkbApp } from './mock/hardware' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS +const systemScriptsTestnet = predefined.AGGRON4.SCRIPTS jest.mock('levelup', () => { return () => ({ @@ -24,8 +25,8 @@ jest.mock('dotenv', () => ({ process.env.MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000000' process.env.MAINNET_ACP_DEP_INDEX = '0' process.env.MAINNET_ACP_DEP_TYPE = 'code' - process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY.CODE_HASH - process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY.HASH_TYPE + process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH + process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE process.env.LEGACY_MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_MAINNET_ACP_DEP_INDEX = '0' @@ -57,8 +58,8 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_ACP_DEP_TXHASH = '0x4f32b3e39bd1b6350d326fdfafdfe05e5221865c3098ae323096f0bfc69e0a8c' process.env.TESTNET_ACP_DEP_INDEX = '0' process.env.TESTNET_ACP_DEP_TYPE = 'depGroup' - process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY.CODE_HASH - process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY.HASH_TYPE + process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScriptsTestnet.ANYONE_CAN_PAY.CODE_HASH + process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScriptsTestnet.ANYONE_CAN_PAY.HASH_TYPE process.env.LEGACY_TESTNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_TESTNET_ACP_DEP_INDEX = '0' @@ -79,9 +80,9 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_CHEQUE_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000003' process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE = 'type' - process.env.SECP256K1_CODE_HASH = systemScripts.SECP256K1_BLAKE160.CODE_HASH - process.env.DAO_CODE_HASH = systemScripts.DAO.CODE_HASH - process.env.MULTISIG_CODE_HASH = systemScripts.SECP256K1_BLAKE160_MULTISIG.CODE_HASH + process.env.SECP256K1_CODE_HASH = systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH + process.env.DAO_CODE_HASH = systemScriptsMainnet.DAO.CODE_HASH + process.env.MULTISIG_CODE_HASH = systemScriptsMainnet.SECP256K1_BLAKE160_MULTISIG.CODE_HASH }, })) From e5b5078626835aa5e9d899e836d4c0f2d64f462c Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 16:17:34 +0800 Subject: [PATCH 05/13] refactor: rename systemScript to systemScriptMainnet when only mainnet scripts are needed --- packages/neuron-wallet/src/models/keys/address.ts | 6 +++--- .../neuron-wallet/src/models/system-script-info.ts | 6 +++--- .../neuron-wallet/tests/controllers/multisig.test.ts | 10 +++++----- .../tests/models/keys/hd-public-key-info.test.ts | 10 +++++----- .../tests/setupAndTeardown/transactions.fixture.ts | 10 +++++----- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/packages/neuron-wallet/src/models/keys/address.ts b/packages/neuron-wallet/src/models/keys/address.ts index 85e90cb5ec..d96382f7b5 100644 --- a/packages/neuron-wallet/src/models/keys/address.ts +++ b/packages/neuron-wallet/src/models/keys/address.ts @@ -2,7 +2,7 @@ import { AddressPrefix, blake160, bytesToHex } from '@nervosnetwork/ckb-sdk-util import { scriptToAddress } from '../../utils/scriptAndAddress' import { AccountExtendedPublicKey } from './key' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS export { AddressPrefix } @@ -15,8 +15,8 @@ export const publicKeyToAddress = (publicKey: string, isMainnet = false) => { const pubkey = publicKey.startsWith('0x') ? publicKey : `0x${publicKey}` return scriptToAddress( { - codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, args: bytesToHex(blake160(pubkey)), }, isMainnet diff --git a/packages/neuron-wallet/src/models/system-script-info.ts b/packages/neuron-wallet/src/models/system-script-info.ts index 2154a35faa..82c41ec4af 100644 --- a/packages/neuron-wallet/src/models/system-script-info.ts +++ b/packages/neuron-wallet/src/models/system-script-info.ts @@ -4,7 +4,7 @@ import NetworksService from '../services/networks' import RpcService from '../services/rpc-service' import Script, { ScriptHashType } from './chain/script' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS export default class SystemScriptInfo { static SECP_CODE_HASH = process.env.SECP256K1_CODE_HASH! @@ -16,9 +16,9 @@ export default class SystemScriptInfo { static MULTI_SIGN_HASH_TYPE = ScriptHashType.Type static DAO_SCRIPT_HASH = new Script( - systemScripts.DAO.CODE_HASH, + systemScriptsMainnet.DAO.CODE_HASH, '0x', - systemScripts.DAO.HASH_TYPE as ScriptHashType + systemScriptsMainnet.DAO.HASH_TYPE as ScriptHashType ).computeHash() private static instance: SystemScriptInfo diff --git a/packages/neuron-wallet/tests/controllers/multisig.test.ts b/packages/neuron-wallet/tests/controllers/multisig.test.ts index 250abb562e..c48b2f4f75 100644 --- a/packages/neuron-wallet/tests/controllers/multisig.test.ts +++ b/packages/neuron-wallet/tests/controllers/multisig.test.ts @@ -4,7 +4,7 @@ import MultisigController from '../../src/controllers/multisig' import CellsService from '../../src/services/cells' import { scriptToAddress } from '../../src/utils/scriptAndAddress' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS let response = 0 let dialogRes = { canceled: false, filePaths: ['./'], filePath: './' } @@ -87,8 +87,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, }, false ) @@ -107,8 +107,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, }, true ) diff --git a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts index 602ca73198..64d891c16a 100644 --- a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts +++ b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts @@ -2,7 +2,7 @@ import { scriptToAddress } from '../../../src/utils/scriptAndAddress' import { AddressType } from '../../../src/models/keys/address' import KeyInfos from '../../setupAndTeardown/public-key-info.fixture' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS const stubbedIsMainnet = jest.fn() @@ -39,8 +39,8 @@ describe('HdPublicKeyInfoModel', () => { it('generates mainnet address by property', () => { const address = scriptToAddress( { - codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, args: keyInfo.publicKeyInBlake160, }, true @@ -58,8 +58,8 @@ describe('HdPublicKeyInfoModel', () => { it('generates testnet address by property', () => { const address = scriptToAddress( { - codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, args: keyInfo.publicKeyInBlake160, }, false diff --git a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts index bc2707a07f..1352fd5b53 100644 --- a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts +++ b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts @@ -7,7 +7,7 @@ import Script from '../../src/models/chain/script' import Output from '../../src/models/chain/output' import { DEPLOY_KEY } from './keys' import { predefined } from '@ckb-lumos/config-manager' -const systemScripts = predefined.LINA.SCRIPTS +const systemScriptsMainnet = predefined.LINA.SCRIPTS const fromTxObject = (tx: any) => Transaction.fromObject({ @@ -178,8 +178,8 @@ const ACPTx0 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScripts.ANYONE_CAN_PAY.CODE_HASH, - hashType: systemScripts.ANYONE_CAN_PAY.HASH_TYPE, + codeHash: systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH, + hashType: systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE, }, type: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', @@ -225,8 +225,8 @@ const ACPTx1 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScripts.ANYONE_CAN_PAY.CODE_HASH, - hashType: systemScripts.ANYONE_CAN_PAY.HASH_TYPE, + codeHash: systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH, + hashType: systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE, }, capacity: '0x34e62ce00', outPoint: { txHash: '0x230ab250ee0ae681e88e462102e5c01a9994ac82bf0effbfb58d6c11a8657900', index: '0' }, From 4b5e45dd5085168681147740f52dad59020b5019 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Mon, 28 Aug 2023 17:12:27 +0800 Subject: [PATCH 06/13] refactor: system scripts --- .../neuron-wallet/src/models/keys/address.ts | 8 +++--- .../src/models/system-script-info.ts | 7 +++-- .../neuron-wallet/src/utils/systemScripts.ts | 27 +++++++++++++++++++ .../tests/controllers/multisig.test.ts | 11 ++++---- .../models/keys/hd-public-key-info.test.ts | 11 ++++---- packages/neuron-wallet/tests/setup.ts | 18 ++++++------- .../setupAndTeardown/transactions.fixture.ts | 11 ++++---- 7 files changed, 56 insertions(+), 37 deletions(-) create mode 100644 packages/neuron-wallet/src/utils/systemScripts.ts diff --git a/packages/neuron-wallet/src/models/keys/address.ts b/packages/neuron-wallet/src/models/keys/address.ts index d96382f7b5..77b165f167 100644 --- a/packages/neuron-wallet/src/models/keys/address.ts +++ b/packages/neuron-wallet/src/models/keys/address.ts @@ -1,9 +1,7 @@ import { AddressPrefix, blake160, bytesToHex } from '@nervosnetwork/ckb-sdk-utils' import { scriptToAddress } from '../../utils/scriptAndAddress' import { AccountExtendedPublicKey } from './key' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS - +import { systemScripts } from '../../utils/systemScripts' export { AddressPrefix } export enum AddressType { @@ -15,8 +13,8 @@ export const publicKeyToAddress = (publicKey: string, isMainnet = false) => { const pubkey = publicKey.startsWith('0x') ? publicKey : `0x${publicKey}` return scriptToAddress( { - codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, args: bytesToHex(blake160(pubkey)), }, isMainnet diff --git a/packages/neuron-wallet/src/models/system-script-info.ts b/packages/neuron-wallet/src/models/system-script-info.ts index 82c41ec4af..c65eb3d15b 100644 --- a/packages/neuron-wallet/src/models/system-script-info.ts +++ b/packages/neuron-wallet/src/models/system-script-info.ts @@ -3,8 +3,7 @@ import CellDep, { DepType } from './chain/cell-dep' import NetworksService from '../services/networks' import RpcService from '../services/rpc-service' import Script, { ScriptHashType } from './chain/script' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS +import { systemScripts } from '../utils/systemScripts' export default class SystemScriptInfo { static SECP_CODE_HASH = process.env.SECP256K1_CODE_HASH! @@ -16,9 +15,9 @@ export default class SystemScriptInfo { static MULTI_SIGN_HASH_TYPE = ScriptHashType.Type static DAO_SCRIPT_HASH = new Script( - systemScriptsMainnet.DAO.CODE_HASH, + systemScripts.DAO.CODE_HASH, '0x', - systemScriptsMainnet.DAO.HASH_TYPE as ScriptHashType + systemScripts.DAO.HASH_TYPE as ScriptHashType ).computeHash() private static instance: SystemScriptInfo diff --git a/packages/neuron-wallet/src/utils/systemScripts.ts b/packages/neuron-wallet/src/utils/systemScripts.ts new file mode 100644 index 0000000000..d238c8d2a7 --- /dev/null +++ b/packages/neuron-wallet/src/utils/systemScripts.ts @@ -0,0 +1,27 @@ +import { predefined } from '@ckb-lumos/config-manager' + +const systemScriptsMainnet = predefined.LINA.SCRIPTS +const systemScriptsTestnet = predefined.AGGRON4.SCRIPTS + +export const systemScripts = { + SECP256K1_BLAKE160: { + CODE_HASH: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, + HASH_TYPE: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + }, + DAO: { + CODE_HASH: systemScriptsMainnet.DAO.CODE_HASH, + HASH_TYPE: systemScriptsMainnet.DAO.HASH_TYPE, + }, + SECP256K1_BLAKE160_MULTISIG: { + CODE_HASH: systemScriptsMainnet.SECP256K1_BLAKE160_MULTISIG.CODE_HASH, + HASH_TYPE: systemScriptsMainnet.SECP256K1_BLAKE160_MULTISIG.HASH_TYPE, + }, + ANYONE_CAN_PAY_MAINNET: { + CODE_HASH: systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH, + HASH_TYPE: systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE, + }, + ANYONE_CAN_PAY_TESTNET: { + CODE_HASH: systemScriptsTestnet.ANYONE_CAN_PAY.CODE_HASH, + HASH_TYPE: systemScriptsTestnet.ANYONE_CAN_PAY.HASH_TYPE, + }, +} diff --git a/packages/neuron-wallet/tests/controllers/multisig.test.ts b/packages/neuron-wallet/tests/controllers/multisig.test.ts index c48b2f4f75..cd8eedc507 100644 --- a/packages/neuron-wallet/tests/controllers/multisig.test.ts +++ b/packages/neuron-wallet/tests/controllers/multisig.test.ts @@ -3,8 +3,7 @@ import MultisigService from '../../src/services/multisig' import MultisigController from '../../src/controllers/multisig' import CellsService from '../../src/services/cells' import { scriptToAddress } from '../../src/utils/scriptAndAddress' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS +import { systemScripts } from '../../src/utils/systemScripts' let response = 0 let dialogRes = { canceled: false, filePaths: ['./'], filePath: './' } @@ -87,8 +86,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, }, false ) @@ -107,8 +106,8 @@ const multisigConfig = { scriptToAddress( { args, - codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, }, true ) diff --git a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts index 64d891c16a..8933cc757f 100644 --- a/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts +++ b/packages/neuron-wallet/tests/models/keys/hd-public-key-info.test.ts @@ -1,8 +1,7 @@ import { scriptToAddress } from '../../../src/utils/scriptAndAddress' import { AddressType } from '../../../src/models/keys/address' import KeyInfos from '../../setupAndTeardown/public-key-info.fixture' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS +import { systemScripts } from '../../../src/utils/systemScripts' const stubbedIsMainnet = jest.fn() @@ -39,8 +38,8 @@ describe('HdPublicKeyInfoModel', () => { it('generates mainnet address by property', () => { const address = scriptToAddress( { - codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, args: keyInfo.publicKeyInBlake160, }, true @@ -58,8 +57,8 @@ describe('HdPublicKeyInfoModel', () => { it('generates testnet address by property', () => { const address = scriptToAddress( { - codeHash: systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH, - hashType: systemScriptsMainnet.SECP256K1_BLAKE160.HASH_TYPE, + codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, + hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, args: keyInfo.publicKeyInBlake160, }, false diff --git a/packages/neuron-wallet/tests/setup.ts b/packages/neuron-wallet/tests/setup.ts index 91b8b99a72..31d93d52b0 100644 --- a/packages/neuron-wallet/tests/setup.ts +++ b/packages/neuron-wallet/tests/setup.ts @@ -1,8 +1,6 @@ import '../src/locales/i18n' import { LedgerHID, LedgerCkbApp } from './mock/hardware' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS -const systemScriptsTestnet = predefined.AGGRON4.SCRIPTS +import { systemScripts } from '../src/utils/systemScripts' jest.mock('levelup', () => { return () => ({ @@ -25,8 +23,8 @@ jest.mock('dotenv', () => ({ process.env.MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000000' process.env.MAINNET_ACP_DEP_INDEX = '0' process.env.MAINNET_ACP_DEP_TYPE = 'code' - process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH - process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE + process.env.MAINNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_MAINNET.CODE_HASH + process.env.MAINNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_MAINNET.HASH_TYPE process.env.LEGACY_MAINNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_MAINNET_ACP_DEP_INDEX = '0' @@ -58,8 +56,8 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_ACP_DEP_TXHASH = '0x4f32b3e39bd1b6350d326fdfafdfe05e5221865c3098ae323096f0bfc69e0a8c' process.env.TESTNET_ACP_DEP_INDEX = '0' process.env.TESTNET_ACP_DEP_TYPE = 'depGroup' - process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScriptsTestnet.ANYONE_CAN_PAY.CODE_HASH - process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScriptsTestnet.ANYONE_CAN_PAY.HASH_TYPE + process.env.TESTNET_ACP_SCRIPT_CODEHASH = systemScripts.ANYONE_CAN_PAY_TESTNET.CODE_HASH + process.env.TESTNET_ACP_SCRIPT_HASHTYPE = systemScripts.ANYONE_CAN_PAY_TESTNET.HASH_TYPE process.env.LEGACY_TESTNET_ACP_DEP_TXHASH = '0x0000000000000000000000000000000000000000000000000000000000000001' process.env.LEGACY_TESTNET_ACP_DEP_INDEX = '0' @@ -80,9 +78,9 @@ jest.mock('dotenv', () => ({ process.env.TESTNET_CHEQUE_SCRIPT_CODEHASH = '0x0000000000000000000000000000000000000000000000000000000000000003' process.env.TESTNET_CHEQUE_SCRIPT_HASHTYPE = 'type' - process.env.SECP256K1_CODE_HASH = systemScriptsMainnet.SECP256K1_BLAKE160.CODE_HASH - process.env.DAO_CODE_HASH = systemScriptsMainnet.DAO.CODE_HASH - process.env.MULTISIG_CODE_HASH = systemScriptsMainnet.SECP256K1_BLAKE160_MULTISIG.CODE_HASH + process.env.SECP256K1_CODE_HASH = systemScripts.SECP256K1_BLAKE160.CODE_HASH + process.env.DAO_CODE_HASH = systemScripts.DAO.CODE_HASH + process.env.MULTISIG_CODE_HASH = systemScripts.SECP256K1_BLAKE160_MULTISIG.CODE_HASH }, })) diff --git a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts index 1352fd5b53..53168d09e3 100644 --- a/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts +++ b/packages/neuron-wallet/tests/setupAndTeardown/transactions.fixture.ts @@ -6,8 +6,7 @@ import Input from '../../src/models/chain/input' import Script from '../../src/models/chain/script' import Output from '../../src/models/chain/output' import { DEPLOY_KEY } from './keys' -import { predefined } from '@ckb-lumos/config-manager' -const systemScriptsMainnet = predefined.LINA.SCRIPTS +import { systemScripts } from '../../src/utils/systemScripts' const fromTxObject = (tx: any) => Transaction.fromObject({ @@ -178,8 +177,8 @@ const ACPTx0 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH, - hashType: systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE, + codeHash: systemScripts.ANYONE_CAN_PAY_MAINNET.CODE_HASH, + hashType: systemScripts.ANYONE_CAN_PAY_MAINNET.HASH_TYPE, }, type: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', @@ -225,8 +224,8 @@ const ACPTx1 = { // address: ckt1qyq9t2w0l0u7rnylrxmj2uq6a28sstnctcwfu4vnst4n3u0p2luawfsmjrmsz lock: { args: '0xe2193df51d78411601796b35b17b4f8f2cd85bd0', - codeHash: systemScriptsMainnet.ANYONE_CAN_PAY.CODE_HASH, - hashType: systemScriptsMainnet.ANYONE_CAN_PAY.HASH_TYPE, + codeHash: systemScripts.ANYONE_CAN_PAY_MAINNET.CODE_HASH, + hashType: systemScripts.ANYONE_CAN_PAY_MAINNET.HASH_TYPE, }, capacity: '0x34e62ce00', outPoint: { txHash: '0x230ab250ee0ae681e88e462102e5c01a9994ac82bf0effbfb58d6c11a8657900', index: '0' }, From 4779b9b64e94cd7ee8493c6a5624a6b219198aa0 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Tue, 29 Aug 2023 08:51:12 +0800 Subject: [PATCH 07/13] refactor: ecpairs of ckb-sdk-utils --- packages/neuron-wallet/package.json | 1 + packages/neuron-wallet/src/models/blake2b.ts | 5 ++-- .../neuron-wallet/src/models/keys/address.ts | 5 ++-- .../src/services/sign-message.ts | 5 ++-- .../src/services/transaction-sender.ts | 7 +++-- yarn.lock | 29 +++++++++++++++++-- 6 files changed, 38 insertions(+), 14 deletions(-) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 3b2cb48622..3d0a0e3eb4 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -47,6 +47,7 @@ "@ckb-lumos/ckb-indexer": "0.20.0-alpha.3", "@ckb-lumos/codec": "0.20.0-alpha.3", "@ckb-lumos/config-manager": "0.20.0-alpha.3", + "@ckb-lumos/hd": "0.20.0-alpha.3", "@ckb-lumos/helpers": "0.20.0-alpha.3", "@ckb-lumos/rpc": "0.20.0-alpha.3", "@iarna/toml": "2.2.5", diff --git a/packages/neuron-wallet/src/models/blake2b.ts b/packages/neuron-wallet/src/models/blake2b.ts index 17bc2accf6..93d643b227 100644 --- a/packages/neuron-wallet/src/models/blake2b.ts +++ b/packages/neuron-wallet/src/models/blake2b.ts @@ -1,4 +1,5 @@ -import { blake2b, PERSONAL, hexToBytes } from '@nervosnetwork/ckb-sdk-utils' +import { bytes } from '@ckb-lumos/codec' +import { blake2b, PERSONAL } from '@nervosnetwork/ckb-sdk-utils' export default class Blake2b { private blake2b: any @@ -9,7 +10,7 @@ export default class Blake2b { public update = (message: string): void => { const msg = message.startsWith('0x') ? message : `0x${message}` - this.blake2b.update(hexToBytes(msg)) + this.blake2b.update(bytes.bytify(msg)) } public updateBuffer = (message: Buffer): void => { diff --git a/packages/neuron-wallet/src/models/keys/address.ts b/packages/neuron-wallet/src/models/keys/address.ts index 77b165f167..3e460284d9 100644 --- a/packages/neuron-wallet/src/models/keys/address.ts +++ b/packages/neuron-wallet/src/models/keys/address.ts @@ -1,8 +1,7 @@ -import { AddressPrefix, blake160, bytesToHex } from '@nervosnetwork/ckb-sdk-utils' import { scriptToAddress } from '../../utils/scriptAndAddress' import { AccountExtendedPublicKey } from './key' import { systemScripts } from '../../utils/systemScripts' -export { AddressPrefix } +import hd from '@ckb-lumos/hd' export enum AddressType { Receiving = 0, // External chain @@ -15,7 +14,7 @@ export const publicKeyToAddress = (publicKey: string, isMainnet = false) => { { codeHash: systemScripts.SECP256K1_BLAKE160.CODE_HASH, hashType: systemScripts.SECP256K1_BLAKE160.HASH_TYPE, - args: bytesToHex(blake160(pubkey)), + args: hd.key.publicKeyToBlake160(pubkey), }, isMainnet ) diff --git a/packages/neuron-wallet/src/services/sign-message.ts b/packages/neuron-wallet/src/services/sign-message.ts index eb186cc0c6..96787d0ef2 100644 --- a/packages/neuron-wallet/src/services/sign-message.ts +++ b/packages/neuron-wallet/src/services/sign-message.ts @@ -2,7 +2,7 @@ import AddressService from './addresses' import WalletService, { Wallet } from './wallets' import Keychain from '../models/keys/keychain' import Blake2b from '../models/blake2b' -import ECPair from '@nervosnetwork/ckb-sdk-utils/lib/ecpair' +import hd from '@ckb-lumos/hd' import { ec as EC } from 'elliptic' import { AddressNotFound } from '../exceptions' import HardwareWalletService from './hardware' @@ -40,8 +40,7 @@ export default class SignMessage { private static signByPrivateKey(privateKey: string, message: string): string { const digest = SignMessage.signatureHash(message) - const ecPair = new ECPair(privateKey) - const signature = ecPair.signRecoverable(digest) + const signature = hd.key.signRecoverable(digest, privateKey) return signature } diff --git a/packages/neuron-wallet/src/services/transaction-sender.ts b/packages/neuron-wallet/src/services/transaction-sender.ts index 22f352f426..86e0487ca9 100644 --- a/packages/neuron-wallet/src/services/transaction-sender.ts +++ b/packages/neuron-wallet/src/services/transaction-sender.ts @@ -1,4 +1,3 @@ -import ECPair from '@nervosnetwork/ckb-sdk-utils/lib/ecpair' import signWitnesses from '@nervosnetwork/ckb-sdk-core/lib/signWitnesses' import NodeService from './node' import { serializeWitnessArgs } from '../utils/serialization' @@ -45,6 +44,7 @@ import NetworksService from './networks' import { generateRPC } from '../utils/ckb-rpc' import CKB from '@nervosnetwork/ckb-sdk-core' import CellsService from './cells' +import hd from '@ckb-lumos/hd' interface SignInfo { witnessArgs: WitnessArgs @@ -417,8 +417,9 @@ export default class TransactionSender { const message = blake2b.digest() if (!wallet.isHardware()) { - const keyPair = new ECPair(privateKeyOrPath) - emptyWitness.lock = keyPair.signRecoverable(message) + // `privateKeyOrPath` variable here is path only when wallet is hardware, otherwise it's a private key + const privateKey = privateKeyOrPath + emptyWitness.lock = hd.key.signRecoverable(message, privateKey) } return [emptyWitness, ...restWitnesses] diff --git a/yarn.lock b/yarn.lock index eff599eb87..6ed8db8f71 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1500,6 +1500,19 @@ "@types/deep-freeze-strict" "^1.1.0" deep-freeze-strict "^1.1.1" +"@ckb-lumos/hd@0.20.0-alpha.3": + version "0.20.0-alpha.3" + resolved "https://registry.yarnpkg.com/@ckb-lumos/hd/-/hd-0.20.0-alpha.3.tgz#608bded07aed41f71bda40e4f66af365a9ab18db" + integrity sha512-ladOBv4CPdW3q6fZorMIBpavzKII12ClAs7jvjtub8/CPziJAdTW0o62UFBvP1zt51eG0nP/NObuHzAos3pJnw== + dependencies: + "@ckb-lumos/base" "0.20.0-alpha.3" + "@ckb-lumos/bi" "0.20.0-alpha.3" + bn.js "^5.1.3" + elliptic "^6.5.4" + scrypt-js "^3.0.1" + sha3 "^2.1.3" + uuid "^8.3.0" + "@ckb-lumos/helpers@0.20.0-alpha.3": version "0.20.0-alpha.3" resolved "https://registry.yarnpkg.com/@ckb-lumos/helpers/-/helpers-0.20.0-alpha.3.tgz#17e715664b871fdb0b20cc9d146b0ccb3a7e288e" @@ -6127,6 +6140,11 @@ bn.js@4.12.0, bn.js@^4.11.9: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== +bn.js@^5.1.3: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + body-parser@1.20.1: version "1.20.1" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" @@ -8194,7 +8212,7 @@ electron@24.6.0: "@types/node" "^18.11.18" extract-zip "^2.0.1" -elliptic@6.5.4: +elliptic@6.5.4, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -16078,6 +16096,11 @@ schema-utils@^4.0.0: ajv-formats "^2.1.1" ajv-keywords "^5.1.0" +scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -16236,7 +16259,7 @@ sha.js@^2.4.11: inherits "^2.0.1" safe-buffer "^5.0.1" -sha3@2.1.4: +sha3@2.1.4, sha3@^2.1.3: version "2.1.4" resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== @@ -17864,7 +17887,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== -uuid@8.3.2, uuid@^8.3.2: +uuid@8.3.2, uuid@^8.3.0, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== From 9b7cebd7b0436bfd125430ded46e347ff072b12e Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Tue, 29 Aug 2023 09:27:31 +0800 Subject: [PATCH 08/13] refactor: serializeFixVec of ckb-sdk-utils --- packages/neuron-wallet/src/models/chain/transaction.ts | 6 +++--- packages/neuron-wallet/src/models/transaction-size.ts | 10 ++++++---- packages/neuron-wallet/tests/services/address.test.ts | 4 ++-- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/packages/neuron-wallet/src/models/chain/transaction.ts b/packages/neuron-wallet/src/models/chain/transaction.ts index 51c97647d0..2af594c38c 100644 --- a/packages/neuron-wallet/src/models/chain/transaction.ts +++ b/packages/neuron-wallet/src/models/chain/transaction.ts @@ -3,12 +3,12 @@ import Input from './input' import Output from './output' import WitnessArgs from './witness-args' import { BI } from '@ckb-lumos/bi' -import { rawTransactionToHash } from '@nervosnetwork/ckb-sdk-utils' -import { serializeWitnessArgs } from '../../utils/serialization' +import { serializeRawTransaction, serializeWitnessArgs } from '../../utils/serialization' import BlockHeader from './block-header' import TypeCheckerUtils from '../../utils/type-checker' import OutPoint from './out-point' import { Signatures } from '../../models/offline-sign' +import { utils } from '@ckb-lumos/base' export enum TransactionStatus { Pending = 'pending', @@ -269,7 +269,7 @@ export default class Transaction { } public computeHash(): string { - return rawTransactionToHash(this.toSDKRawTransaction()) + return utils.ckbHash(serializeRawTransaction(this.toSDKRawTransaction())) } public toSDKRawTransaction(): CKBComponents.RawTransaction { diff --git a/packages/neuron-wallet/src/models/transaction-size.ts b/packages/neuron-wallet/src/models/transaction-size.ts index b55748a693..e0a99238eb 100644 --- a/packages/neuron-wallet/src/models/transaction-size.ts +++ b/packages/neuron-wallet/src/models/transaction-size.ts @@ -1,12 +1,12 @@ import { serializeOutput, serializeWitnessArgs } from '../utils/serialization' -import { serializeFixVec } from '@nervosnetwork/ckb-sdk-utils/lib/serialization' import Output from './chain/output' import WitnessArgs from './chain/witness-args' import Transaction from './chain/transaction' import Multisig from './multisig' import Script, { ScriptHashType } from './chain/script' import BufferUtils from '../utils/buffer' -import { bytes as byteUtils } from '@ckb-lumos/codec' +import { bytes as byteUtils, number } from '@ckb-lumos/codec' +import { fixvec } from '@ckb-lumos/codec/lib/molecule/layout' export default class TransactionSize { public static SERIALIZED_OFFSET_BYTESIZE = 4 @@ -55,7 +55,8 @@ export default class TransactionSize { } public static outputData(data: string): number { - const bytes = serializeFixVec(data) + const fixvecCodec = fixvec(number.Uint8) + const bytes = byteUtils.hexify(fixvecCodec.pack(Array.from(byteUtils.bytify(data)))) return byteUtils.bytify(bytes).byteLength + TransactionSize.SERIALIZED_OFFSET_BYTESIZE } @@ -67,7 +68,8 @@ export default class TransactionSize { public static witness(witness: WitnessArgs | string): number { const wit: string = typeof witness === 'string' ? witness : serializeWitnessArgs(witness.toSDK()) - const bytes = serializeFixVec(wit) + const fixvecCodec = fixvec(number.Uint8) + const bytes = byteUtils.hexify(fixvecCodec.pack(Array.from(byteUtils.bytify(wit)))) return byteUtils.bytify(bytes).byteLength + TransactionSize.SERIALIZED_OFFSET_BYTESIZE } diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index 67b2d59fc4..eb08f98a81 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -307,10 +307,10 @@ describe('integration tests for AddressService', () => { }) }) }) - describe('#generateAndSaveForPublicKey', () => { describe('with public key info exist for the public key', () => { - const publicKey = 'public key' + // public key is a valid 32 byte hex string + const publicKey = '0x' + '0'.repeat(66) const addressType = AddressType.Receiving const addressIndex = 0 beforeEach(async () => { From 775efb6e6fe276a3f7c1c01dfe62bda45c339607 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Tue, 29 Aug 2023 09:35:54 +0800 Subject: [PATCH 09/13] refactor: implementation of Black2b --- packages/neuron-wallet/src/models/blake2b.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/neuron-wallet/src/models/blake2b.ts b/packages/neuron-wallet/src/models/blake2b.ts index 93d643b227..7dc99b6c7e 100644 --- a/packages/neuron-wallet/src/models/blake2b.ts +++ b/packages/neuron-wallet/src/models/blake2b.ts @@ -1,11 +1,11 @@ +import { CKBHasher } from '@ckb-lumos/base/lib/utils' import { bytes } from '@ckb-lumos/codec' -import { blake2b, PERSONAL } from '@nervosnetwork/ckb-sdk-utils' export default class Blake2b { - private blake2b: any + private blake2b: CKBHasher constructor() { - this.blake2b = blake2b(32, null, null, PERSONAL) + this.blake2b = new CKBHasher() } public update = (message: string): void => { @@ -18,7 +18,7 @@ export default class Blake2b { } public digest = (): string => { - return `0x${this.blake2b.digest('hex')}` + return this.blake2b.digestHex() } public static digest = (message: string): string => { From d6b059a7785d44267ea7c2fafe726bd991b41141 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Tue, 29 Aug 2023 09:39:13 +0800 Subject: [PATCH 10/13] refactor: remove ckb-sdk-utils from dependency --- packages/neuron-wallet/package.json | 1 - yarn.lock | 31 ++++++++++------------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/packages/neuron-wallet/package.json b/packages/neuron-wallet/package.json index 3d0a0e3eb4..76987c75a1 100644 --- a/packages/neuron-wallet/package.json +++ b/packages/neuron-wallet/package.json @@ -53,7 +53,6 @@ "@iarna/toml": "2.2.5", "@ledgerhq/hw-transport-node-hid": "6.27.16", "@nervosnetwork/ckb-sdk-core": "0.109.0", - "@nervosnetwork/ckb-sdk-utils": "0.109.0", "archiver": "5.3.0", "async": "3.2.4", "bn.js": "4.12.0", diff --git a/yarn.lock b/yarn.lock index 6ed8db8f71..e833da6b31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1373,10 +1373,10 @@ dependencies: regenerator-runtime "^0.13.11" -"@babel/runtime@^7.20.6": - version "7.22.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" - integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== +"@babel/runtime@^7.22.5": + version "7.22.11" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.11.tgz#7a9ba3bbe406ad6f9e8dd4da2ece453eb23a77a4" + integrity sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA== dependencies: regenerator-runtime "^0.14.0" @@ -4563,7 +4563,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*", "@types/react@17.0.62", "@types/react@>=16", "@types/react@^17": +"@types/react@*", "@types/react@17.0.62", "@types/react@>=16", "@types/react@^16", "@types/react@^17": version "17.0.62" resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.62.tgz#2efe8ddf8533500ec44b1334dd1a97caa2f860e3" integrity sha512-eANCyz9DG8p/Vdhr0ZKST8JV12PhH2ACCDYlFw6DIO+D+ca+uP4jtEDEpVqXZrh/uZdXQGwk7whJa3ah5DtyLw== @@ -4572,15 +4572,6 @@ "@types/scheduler" "*" csstype "^3.0.2" -"@types/react@^16": - version "16.14.45" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.14.45.tgz#c505c96adf959971fc97b4687187c871765a6ae4" - integrity sha512-XFtKkY3yuPO5VJSE6Lru9yLkVQvYE+l6NbmLp6IWCg4jo5S8Ijbpke8wC9q4NmQ5pJErT8KKboG5eY7n5n718A== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -15271,12 +15262,12 @@ react-error-overlay@^6.0.11: resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== -react-i18next@12.1.5: - version "12.1.5" - resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-12.1.5.tgz#b65f5733dd2f96188a9359c009b7dbe27443f009" - integrity sha512-7PQAv6DA0TcStG96fle+8RfTwxVbHVlZZJPoEszwUNvDuWpGldJmNWa3ZPesEsZQZGF6GkzwvEh6p57qpFD2gQ== +react-i18next@12.1.5, react-i18next@>=11.16.4: + version "13.2.0" + resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-13.2.0.tgz#9d7a574144738e46dd4c66573907f56942435ced" + integrity sha512-YD8xMc+I0jkHHLotd8ERMzZ53hMaCBVLCndbcbBveJn3FbppRP4jyYOAkmR8XItN01sTD9ilAjoEjpH1i42IgA== dependencies: - "@babel/runtime" "^7.20.6" + "@babel/runtime" "^7.22.5" html-parse-stringify "^3.0.1" react-inspector@^6.0.0, react-inspector@^6.0.1: @@ -17826,7 +17817,7 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" -usb@^1.7.0: +usb@1.8.8, usb@^1.7.0: version "1.8.8" resolved "https://registry.yarnpkg.com/usb/-/usb-1.8.8.tgz#54de33f9e57dc4efc1b5b5f72b6624a275775e80" integrity sha512-xpRAoek268RE3ATqK8l6LjrF4ADHn/A3V3cXEFbYo3/D83ZCLSO0A5tFKO093F4w5IbDfBVlB9VsYzoGz6EJGw== From 09d4774f88d6999b290bb66523197049c075fee8 Mon Sep 17 00:00:00 2001 From: Shinya Date: Mon, 4 Sep 2023 22:19:37 +0800 Subject: [PATCH 11/13] Update packages/neuron-wallet/src/services/transaction-sender.ts Co-authored-by: Chen Yu --- packages/neuron-wallet/src/services/transaction-sender.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neuron-wallet/src/services/transaction-sender.ts b/packages/neuron-wallet/src/services/transaction-sender.ts index 86e0487ca9..893fb90a9a 100644 --- a/packages/neuron-wallet/src/services/transaction-sender.ts +++ b/packages/neuron-wallet/src/services/transaction-sender.ts @@ -417,7 +417,7 @@ export default class TransactionSender { const message = blake2b.digest() if (!wallet.isHardware()) { - // `privateKeyOrPath` variable here is path only when wallet is hardware, otherwise it's a private key + // `privateKeyOrPath` variable here is a private key because wallet is not a hardware one. Otherwise, it will be a private key path. const privateKey = privateKeyOrPath emptyWitness.lock = hd.key.signRecoverable(message, privateKey) } From d7ba265861f8a82ff7bb88585a86a786b382bafa Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Tue, 5 Sep 2023 14:08:23 +0800 Subject: [PATCH 12/13] chore: change to the comment --- packages/neuron-wallet/tests/services/address.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/neuron-wallet/tests/services/address.test.ts b/packages/neuron-wallet/tests/services/address.test.ts index eb08f98a81..deb7124db1 100644 --- a/packages/neuron-wallet/tests/services/address.test.ts +++ b/packages/neuron-wallet/tests/services/address.test.ts @@ -309,8 +309,8 @@ describe('integration tests for AddressService', () => { }) describe('#generateAndSaveForPublicKey', () => { describe('with public key info exist for the public key', () => { - // public key is a valid 32 byte hex string - const publicKey = '0x' + '0'.repeat(66) + // public key is a valid 33 byte hex string + const publicKey = '0x' + '00'.repeat(33) const addressType = AddressType.Receiving const addressIndex = 0 beforeEach(async () => { From f86e59572af58b9457ceeb7d353ea719e800fa40 Mon Sep 17 00:00:00 2001 From: zhangyouxin Date: Wed, 6 Sep 2023 09:16:18 +0800 Subject: [PATCH 13/13] refactor: remove complicated fixedvecCodec usage --- .../src/models/transaction-size.ts | 21 ++++++++++++------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/packages/neuron-wallet/src/models/transaction-size.ts b/packages/neuron-wallet/src/models/transaction-size.ts index e0a99238eb..072575950f 100644 --- a/packages/neuron-wallet/src/models/transaction-size.ts +++ b/packages/neuron-wallet/src/models/transaction-size.ts @@ -5,10 +5,11 @@ import Transaction from './chain/transaction' import Multisig from './multisig' import Script, { ScriptHashType } from './chain/script' import BufferUtils from '../utils/buffer' -import { bytes as byteUtils, number } from '@ckb-lumos/codec' -import { fixvec } from '@ckb-lumos/codec/lib/molecule/layout' +import { bytes as byteUtils } from '@ckb-lumos/codec' export default class TransactionSize { + // https://github.com/zhangsoledad/rfcs/blob/zhangsoledad/ckb2023-overview/rfcs/0008-serialization/0008-serialization.md#fixvec---fixed-vector + public static SERIALIZED_ITEMS_COUNT_BYTESIZE = 4 public static SERIALIZED_OFFSET_BYTESIZE = 4 public static base(): number { @@ -55,9 +56,11 @@ export default class TransactionSize { } public static outputData(data: string): number { - const fixvecCodec = fixvec(number.Uint8) - const bytes = byteUtils.hexify(fixvecCodec.pack(Array.from(byteUtils.bytify(data)))) - return byteUtils.bytify(bytes).byteLength + TransactionSize.SERIALIZED_OFFSET_BYTESIZE + return ( + byteUtils.bytify(data).byteLength + + TransactionSize.SERIALIZED_ITEMS_COUNT_BYTESIZE + + TransactionSize.SERIALIZED_OFFSET_BYTESIZE + ) } // TODO: and here @@ -68,9 +71,11 @@ export default class TransactionSize { public static witness(witness: WitnessArgs | string): number { const wit: string = typeof witness === 'string' ? witness : serializeWitnessArgs(witness.toSDK()) - const fixvecCodec = fixvec(number.Uint8) - const bytes = byteUtils.hexify(fixvecCodec.pack(Array.from(byteUtils.bytify(wit)))) - return byteUtils.bytify(bytes).byteLength + TransactionSize.SERIALIZED_OFFSET_BYTESIZE + return ( + byteUtils.bytify(wit).byteLength + + TransactionSize.SERIALIZED_ITEMS_COUNT_BYTESIZE + + TransactionSize.SERIALIZED_OFFSET_BYTESIZE + ) } public static secpLockWitness(): number {