diff --git a/packages/neuron-ui/package.json b/packages/neuron-ui/package.json index 5169a6057b..5c6ce190e1 100644 --- a/packages/neuron-ui/package.json +++ b/packages/neuron-ui/package.json @@ -56,7 +56,7 @@ "@ckb-lumos/codec": "0.21.1", "@ckb-lumos/helpers": "0.21.1", "@ckb-lumos/config-manager": "0.21.1", - "@nervosnetwork/ckb-sdk-utils": "0.109.0", + "@ckb-lumos/common-scripts": "0.21.1", "canvg": "2.0.0", "i18next": "23.7.11", "immer": "9.0.21", diff --git a/packages/neuron-ui/src/components/AmendSUDTSend/index.tsx b/packages/neuron-ui/src/components/AmendSUDTSend/index.tsx index 9ed69091e4..56734e28f7 100644 --- a/packages/neuron-ui/src/components/AmendSUDTSend/index.tsx +++ b/packages/neuron-ui/src/components/AmendSUDTSend/index.tsx @@ -7,11 +7,11 @@ import PageContainer from 'components/PageContainer' import Button from 'widgets/Button' import Spinner from 'widgets/Spinner' import { GoBack } from 'widgets/Icons/icon' -import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils' import { isMainnet as isMainnetUtil, localNumberFormatter, useGoBack, + scriptToAddress, shannonToCKBFormatter, sudtValueToAmount, sUDTAmountFormatter, @@ -83,42 +83,42 @@ const AmendSUDTSend = () => { const list = sUDTAccounts.map(item => item.address) const to = transaction?.outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) if (list.includes(address) || (sudtInfo && !output.type)) { return false } return true }) if (to) { - return scriptToAddress(to.lock, isMainnet) + return scriptToAddress(to.lock, { isMainnet }) } - return scriptToAddress(transaction?.outputs[0].lock, isMainnet) + return scriptToAddress(transaction?.outputs[0].lock, { isMainnet }) }, [transaction?.outputs]) const getLastOutputAddress = (outputs: State.DetailedOutput[]) => { const change = outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return !!addresses.find(item => item.address === address && item.type === 1) }) if (change) { - return scriptToAddress(change.lock, isMainnet) + return scriptToAddress(change.lock, { isMainnet }) } const receive = outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return !!addresses.find(item => item.address === address && item.type === 0) }) if (receive) { - return scriptToAddress(receive.lock, isMainnet) + return scriptToAddress(receive.lock, { isMainnet }) } const sudt = outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return !!sUDTAccounts.find(item => item.address === address) }) if (sudt) { - return scriptToAddress(sudt.lock, isMainnet) + return scriptToAddress(sudt.lock, { isMainnet }) } return '' } @@ -133,7 +133,7 @@ const AmendSUDTSend = () => { if (transaction && transaction.outputs.length) { const lastOutputAddress = getLastOutputAddress(transaction.outputs) return transaction.outputs.map(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return { capacity: output.capacity, address, diff --git a/packages/neuron-ui/src/components/AmendSend/index.tsx b/packages/neuron-ui/src/components/AmendSend/index.tsx index 543ff7c464..7f83c0d9cf 100644 --- a/packages/neuron-ui/src/components/AmendSend/index.tsx +++ b/packages/neuron-ui/src/components/AmendSend/index.tsx @@ -8,11 +8,11 @@ import Button from 'widgets/Button' import Spinner from 'widgets/Spinner' import { GoBack } from 'widgets/Icons/icon' import { MIN_AMOUNT } from 'utils/const' -import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils' import { isMainnet as isMainnetUtil, localNumberFormatter, useGoBack, + scriptToAddress, shannonToCKBFormatter, RoutePath, isSecp256k1Address, @@ -68,11 +68,11 @@ const AmendSend = () => { const getLastOutputAddress = (outputs: State.DetailedOutput[]) => { if (outputs.length === 1) { - return scriptToAddress(outputs[0].lock, isMainnet) + return scriptToAddress(outputs[0].lock, { isMainnet }) } const change = outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) if (!isSecp256k1Address(address)) { navigate(`${RoutePath.History}/amendSUDTSend/${hash}`, { replace: true, @@ -82,15 +82,15 @@ const AmendSend = () => { return !!addresses.find(item => item.address === address && item.type === 1) }) if (change) { - return scriptToAddress(change.lock, isMainnet) + return scriptToAddress(change.lock, { isMainnet }) } const receive = outputs.find(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return !!addresses.find(item => item.address === address && item.type === 0) }) if (receive) { - return scriptToAddress(receive.lock, isMainnet) + return scriptToAddress(receive.lock, { isMainnet }) } return '' @@ -106,7 +106,7 @@ const AmendSend = () => { if (transaction && transaction.outputs.length) { const lastOutputAddress = getLastOutputAddress(transaction.outputs) return transaction.outputs.map(output => { - const address = scriptToAddress(output.lock, isMainnet) + const address = scriptToAddress(output.lock, { isMainnet }) return { capacity: output.capacity, address, diff --git a/packages/neuron-ui/src/components/HistoryDetailPage/index.tsx b/packages/neuron-ui/src/components/HistoryDetailPage/index.tsx index 2923653803..8d6f553ec5 100644 --- a/packages/neuron-ui/src/components/HistoryDetailPage/index.tsx +++ b/packages/neuron-ui/src/components/HistoryDetailPage/index.tsx @@ -1,9 +1,9 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react' import { useNavigate, useParams } from 'react-router-dom' import { useTranslation } from 'react-i18next' -import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils' import { calculateUnlockDaoMaximumWithdraw, getTransaction } from 'services/remote' import { showPageNotice, transactionState, useDispatch, useState as useGlobalState } from 'states' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import PageContainer from 'components/PageContainer' import LockInfoDialog from 'components/LockInfoDialog' import ScriptTag from 'components/ScriptTag' @@ -17,6 +17,7 @@ import Breadcrum from 'widgets/Breadcrum' import { ErrorCode, + scriptToAddress, localNumberFormatter, uniformTimeFormatter, shannonToCKBFormatter, @@ -254,7 +255,7 @@ const HistoryDetailPage = () => { address = t('transaction.cell-from-cellbase') } else { try { - address = scriptToAddress(cell.lock, isMainnet) + address = scriptToAddress(cell.lock, { isMainnet }) } catch (err) { console.error(err) } diff --git a/packages/neuron-ui/src/components/LockInfoDialog/index.tsx b/packages/neuron-ui/src/components/LockInfoDialog/index.tsx index 3f21882da3..7e747e18c8 100644 --- a/packages/neuron-ui/src/components/LockInfoDialog/index.tsx +++ b/packages/neuron-ui/src/components/LockInfoDialog/index.tsx @@ -1,8 +1,8 @@ import { useTranslation } from 'react-i18next' import React, { useRef } from 'react' -import { bech32Address, AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import Dialog from 'widgets/Dialog' -import { useCopy, useDialog } from 'utils' +import { useCopy, useDialog, scriptToAddress } from 'utils' import { Copy } from 'widgets/Icons/icon' import Alert from 'widgets/Alert' import getLockSupportShortAddress from '../../utils/getLockSupportShortAddress' @@ -35,10 +35,7 @@ const ShortAddr = ({ return null } - const shortAddr = bech32Address(lockScript.args, { - prefix: isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet, - codeHashOrCodeHashIndex: lock.CodeHashIndex, - }) + const shortAddr = scriptToAddress(lockScript, { isMainnet, deprecated: true }) return ( <> diff --git a/packages/neuron-ui/src/components/MultisigAddress/hooks.ts b/packages/neuron-ui/src/components/MultisigAddress/hooks.ts index a672164efd..20853bdbca 100644 --- a/packages/neuron-ui/src/components/MultisigAddress/hooks.ts +++ b/packages/neuron-ui/src/components/MultisigAddress/hooks.ts @@ -1,5 +1,5 @@ import React, { useCallback, useState, useEffect, useMemo } from 'react' -import { isSuccessResponse, getMultisigAddress, DefaultLockInfo } from 'utils' +import { isSuccessResponse, getMultisigAddress, DefaultLockInfo, addressToScript, scriptToAddress } from 'utils' import { MultisigOutputUpdate } from 'services/subjects' import { MultisigConfig, @@ -15,7 +15,7 @@ import { OfflineSignJSON, getMultisigSyncProgress, } from 'services/remote' -import { addressToScript, scriptToAddress, scriptToHash } from '@nervosnetwork/ckb-sdk-utils' +import { computeScriptHash } from '@ckb-lumos/base/lib/utils' export const useSearch = (clearSelected: () => void, onFilterConfig: (searchKey: string) => void) => { const [keywords, setKeywords] = useState('') @@ -124,7 +124,7 @@ export const useConfigManage = ({ walletId, isMainnet }: { walletId: string; isM codeHash: DefaultLockInfo.CodeHash, hashType: DefaultLockInfo.HashType, }, - isMainnet + { isMainnet } ) ), fullPayload: getMultisigAddress(entity.blake160s, entity.r, entity.m, entity.n, isMainnet), @@ -324,7 +324,7 @@ export const useSubscription = ({ const hashToPayload = useMemo( () => configs.reduce>( - (pre, cur) => ({ ...pre, [scriptToHash(addressToScript(cur.fullPayload))]: cur.fullPayload }), + (pre, cur) => ({ ...pre, [computeScriptHash(addressToScript(cur.fullPayload))]: cur.fullPayload }), {} ), [configs] diff --git a/packages/neuron-ui/src/components/MultisigAddressCreateDialog/hooks.ts b/packages/neuron-ui/src/components/MultisigAddressCreateDialog/hooks.ts index 7bc6a1e5af..74f4f475f9 100644 --- a/packages/neuron-ui/src/components/MultisigAddressCreateDialog/hooks.ts +++ b/packages/neuron-ui/src/components/MultisigAddressCreateDialog/hooks.ts @@ -1,7 +1,6 @@ import React, { useCallback, useMemo, useState, useEffect } from 'react' -import { validateAddress, isSecp256k1Address, getMultisigAddress } from 'utils' +import { validateAddress, isSecp256k1Address, getMultisigAddress, addressToScript } from 'utils' import { useTranslation } from 'react-i18next' -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' import { ErrorWithI18n, isErrorWithI18n } from 'exceptions' import { MAX_M_N_NUMBER } from 'utils/const' diff --git a/packages/neuron-ui/src/components/NervosDAO/hooks.ts b/packages/neuron-ui/src/components/NervosDAO/hooks.ts index b9c65b2e59..93498cadf1 100644 --- a/packages/neuron-ui/src/components/NervosDAO/hooks.ts +++ b/packages/neuron-ui/src/components/NervosDAO/hooks.ts @@ -3,11 +3,12 @@ import { AppActions, StateAction } from 'states/stateProvider/reducer' import { updateNervosDaoData, clearNervosDaoData } from 'states/stateProvider/actionCreators' import { NavigateFunction } from 'react-router-dom' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import { calculateAPC, CONSTANTS, isSuccessResponse, RoutePath } from 'utils' -import { generateDaoWithdrawTx, generateDaoClaimTx } from 'services/remote' import { rpc, getHeader } from 'services/chain' -import { calculateMaximumWithdraw } from '@nervosnetwork/ckb-sdk-utils' +import { generateDaoWithdrawTx, generateDaoClaimTx } from 'services/remote' +import { calculateMaximumWithdrawCompatible } from '@ckb-lumos/common-scripts/lib/dao' const { MILLISECONDS_IN_YEAR, MEDIUM_FEE_RATE } = CONSTANTS @@ -290,12 +291,14 @@ export const useUpdateWithdrawList = ({ } withdrawList.set( key, - calculateMaximumWithdraw( - tx.transaction.outputs[+formattedDepositOutPoint.index], - tx.transaction.outputsData[+formattedDepositOutPoint.index], + calculateMaximumWithdrawCompatible( + { + cellOutput: tx.transaction.outputs[+formattedDepositOutPoint.index], + data: tx.transaction.outputsData[+formattedDepositOutPoint.index], + }, depositDAO, withdrawDAO - ) + ).toHexString() ) }) setWithdrawList(withdrawList) diff --git a/packages/neuron-ui/src/components/NervosDAODetail/CellsCard/index.tsx b/packages/neuron-ui/src/components/NervosDAODetail/CellsCard/index.tsx index da7689cd06..bb8af67050 100644 --- a/packages/neuron-ui/src/components/NervosDAODetail/CellsCard/index.tsx +++ b/packages/neuron-ui/src/components/NervosDAODetail/CellsCard/index.tsx @@ -1,8 +1,8 @@ import React, { FC, useMemo, useState } from 'react' import Tabs, { VariantProps } from 'widgets/Tabs' -import { clsx, localNumberFormatter, shannonToCKBFormatter, isMainnet as isMainnetUtils } from 'utils' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' +import { clsx, localNumberFormatter, shannonToCKBFormatter, scriptToAddress, isMainnet as isMainnetUtils } from 'utils' import { useTranslation } from 'react-i18next' -import { scriptToAddress } from '@nervosnetwork/ckb-sdk-utils' import { onEnter } from 'utils/inputDevice' import { EyesClose, EyesOpen } from 'widgets/Icons/icon' import { HIDE_BALANCE } from 'utils/const' @@ -59,7 +59,7 @@ const TabsVariantWithCellsCard = ({ {selectedTab.cells.map((cell, index) => { - const address = cell.lock != null ? scriptToAddress(cell.lock, isMainnet) : null + const address = cell.lock != null ? scriptToAddress(cell.lock, { isMainnet }) : null const capacity = cell.capacity ? shannonToCKBFormatter(cell.capacity) : '--' return ( diff --git a/packages/neuron-ui/src/components/NervosDAORecord/hooks.ts b/packages/neuron-ui/src/components/NervosDAORecord/hooks.ts index f1db5a48af..784a90bc98 100644 --- a/packages/neuron-ui/src/components/NervosDAORecord/hooks.ts +++ b/packages/neuron-ui/src/components/NervosDAORecord/hooks.ts @@ -1,6 +1,7 @@ import { useEffect } from 'react' import { getHeader } from 'services/chain' import { calculateAPC, CONSTANTS } from 'utils' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' const { MILLISECONDS_IN_YEAR } = CONSTANTS diff --git a/packages/neuron-ui/src/components/Receive/VerifyHardwareAddress.tsx b/packages/neuron-ui/src/components/Receive/VerifyHardwareAddress.tsx index a7f19c059e..e6bd7284fb 100644 --- a/packages/neuron-ui/src/components/Receive/VerifyHardwareAddress.tsx +++ b/packages/neuron-ui/src/components/Receive/VerifyHardwareAddress.tsx @@ -11,9 +11,8 @@ import { updateWallet, getPlatform, } from 'services/remote' -import { ErrorCode, clsx, errorFormatter, isSuccessResponse, useDidMount } from 'utils' +import { ErrorCode, clsx, errorFormatter, isSuccessResponse, addressToAddress, useDidMount } from 'utils' import { CkbAppNotFoundException, DeviceNotFoundException } from 'exceptions' -import { AddressPrefix, addressToScript, scriptToAddress } from '@nervosnetwork/ckb-sdk-utils' import Alert from 'widgets/Alert' import styles from './receive.module.scss' @@ -23,22 +22,12 @@ export interface VerifyHardwareAddressProps { onClose?: () => void } -const toLongAddr = (addr: string) => { - try { - const script = addressToScript(addr) - const isMainnet = addr.startsWith(AddressPrefix.Mainnet) - return scriptToAddress(script, isMainnet) - } catch { - return '' - } -} - const verifyAddressEqual = (source: string, target?: string) => { if (!target) { return false } if (source.length !== target.length) { - return toLongAddr(source) === toLongAddr(target) + return addressToAddress(source) === addressToAddress(target) } return source === target } diff --git a/packages/neuron-ui/src/components/Receive/hooks.ts b/packages/neuron-ui/src/components/Receive/hooks.ts index 416b695b4b..6dfd17ff59 100644 --- a/packages/neuron-ui/src/components/Receive/hooks.ts +++ b/packages/neuron-ui/src/components/Receive/hooks.ts @@ -1,4 +1,4 @@ -import { AddressPrefix, addressToScript, bech32Address } from '@nervosnetwork/ckb-sdk-utils' +import { addressToAddress } from 'utils' import { useCallback, useMemo, useRef, useState } from 'react' import { copyCanvas, downloadCanvas } from 'widgets/QRCode' @@ -29,19 +29,12 @@ export const useCopyAndDownloadQrCode = () => { } } -const toShortAddr = (addr: string) => { - try { - const script = addressToScript(addr) - const isMainnet = addr.startsWith(AddressPrefix.Mainnet) - return bech32Address(script.args, { prefix: isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet }) - } catch { - return '' - } -} - export const useSwitchAddress = (address: string) => { const [isInShortFormat, setIsInShortFormat] = useState(false) - const showAddress = useMemo(() => (isInShortFormat ? toShortAddr(address) : address), [address, isInShortFormat]) + const showAddress = useMemo( + () => (isInShortFormat ? addressToAddress(address, { deprecated: true }) : address), + [address, isInShortFormat] + ) return { address: showAddress, isInShortFormat, diff --git a/packages/neuron-ui/src/components/SUDTReceiveDialog/index.tsx b/packages/neuron-ui/src/components/SUDTReceiveDialog/index.tsx index cf9b2915ca..8dbbac6c7b 100644 --- a/packages/neuron-ui/src/components/SUDTReceiveDialog/index.tsx +++ b/packages/neuron-ui/src/components/SUDTReceiveDialog/index.tsx @@ -1,28 +1,15 @@ import React, { useState } from 'react' import { useTranslation } from 'react-i18next' -import { addressToScript, bech32Address, AddressPrefix } from '@nervosnetwork/ckb-sdk-utils' import SUDTAvatar from 'widgets/SUDTAvatar' import { AddressQrCodeWithCopyZone } from 'components/Receive' import Dialog from 'widgets/Dialog' import Alert from 'widgets/Alert' -import { CONSTANTS } from 'utils' +import { CONSTANTS, addressToAddress } from 'utils' import { getDisplayName, getDisplaySymbol } from 'components/UANDisplay' import styles from './sUDTReceiveDialog.module.scss' const { DEFAULT_SUDT_FIELDS } = CONSTANTS -const toShortAddr = (addr: string) => { - try { - const script = addressToScript(addr) - const isMainnet = addr.startsWith(AddressPrefix.Mainnet) - return bech32Address(script.args, { - prefix: isMainnet ? AddressPrefix.Mainnet : AddressPrefix.Testnet, - codeHashOrCodeHashIndex: '0x02', - }) - } catch { - return '' - } -} export interface DataProps { address: string @@ -36,7 +23,7 @@ const SUDTReceiveDialog = ({ data, onClose }: { data: DataProps; onClose?: () => const [isInShortFormat, setIsInShortFormat] = useState(false) const { address, accountName, tokenName, symbol } = data - const displayedAddr = isInShortFormat ? toShortAddr(address) : address + const displayedAddr = isInShortFormat ? addressToAddress(address, { deprecated: true }) : address return ( @@ -112,7 +111,7 @@ const TxTopology: FC<{ // eslint-disable-next-line react/no-array-index-key key={idx.toString()} label={v.isChangeCell ? 'Change' : 'Receive'} - address={scriptToAddress(v.lock, isMainnet)} + address={scriptToAddress(v.lock, { isMainnet })} amount={v.capacity} /> ) : null diff --git a/packages/neuron-ui/src/components/SpecialAssetList/hooks.ts b/packages/neuron-ui/src/components/SpecialAssetList/hooks.ts index eaec15cdaa..206ea8ceb1 100644 --- a/packages/neuron-ui/src/components/SpecialAssetList/hooks.ts +++ b/packages/neuron-ui/src/components/SpecialAssetList/hooks.ts @@ -1,5 +1,6 @@ import React, { useCallback, useEffect } from 'react' import { number, bytes } from '@ckb-lumos/codec' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import { getSUDTAccountList } from 'services/remote' import { NeuronWalletActions, useDispatch } from 'states' import { diff --git a/packages/neuron-ui/src/components/WithdrawDialog/index.tsx b/packages/neuron-ui/src/components/WithdrawDialog/index.tsx index 9de128af2c..7d83c98df8 100644 --- a/packages/neuron-ui/src/components/WithdrawDialog/index.tsx +++ b/packages/neuron-ui/src/components/WithdrawDialog/index.tsx @@ -5,7 +5,7 @@ import { CONSTANTS, shannonToCKBFormatter, localNumberFormatter, useCalculateEpo import { getTransaction, getHeader } from 'services/chain' import Dialog from 'widgets/Dialog' import { Attention } from 'widgets/Icons/icon' -import { calculateMaximumWithdraw } from '@nervosnetwork/ckb-sdk-utils' +import { calculateMaximumWithdrawCompatible } from '@ckb-lumos/common-scripts/lib/dao' import styles from './withdrawDialog.module.scss' const { WITHDRAW_EPOCHS } = CONSTANTS @@ -49,12 +49,14 @@ const WithdrawDialog = ({ if (tx.txStatus.blockHash) { getHeader(tx.txStatus.blockHash).then(header => { setWithdrawValue( - calculateMaximumWithdraw( - tx.transaction.outputs[+record.outPoint.index] as CKBComponents.CellOutput, - tx.transaction.outputsData[+record.outPoint.index], + calculateMaximumWithdrawCompatible( + { + cellOutput: tx.transaction.outputs[+record.outPoint.index], + data: tx.transaction.outputsData[+record.outPoint.index], + }, header.dao, tipDao - ) + ).toHexString() ) }) } diff --git a/packages/neuron-ui/src/stories/ScriptTag.stories.tsx b/packages/neuron-ui/src/stories/ScriptTag.stories.tsx index 0c5978d95c..ec88624ea6 100644 --- a/packages/neuron-ui/src/stories/ScriptTag.stories.tsx +++ b/packages/neuron-ui/src/stories/ScriptTag.stories.tsx @@ -1,6 +1,7 @@ import { Meta, StoryObj } from '@storybook/react' import { withRouter } from 'storybook-addon-react-router-v6' import { action } from '@storybook/addon-actions' +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import ScriptTag from 'components/ScriptTag' const scripts: Record = { diff --git a/packages/neuron-ui/src/tests/getMultisigSignStatus/index.test.ts b/packages/neuron-ui/src/tests/getMultisigSignStatus/index.test.ts index 4820f0fe7f..71ad89f736 100644 --- a/packages/neuron-ui/src/tests/getMultisigSignStatus/index.test.ts +++ b/packages/neuron-ui/src/tests/getMultisigSignStatus/index.test.ts @@ -1,7 +1,7 @@ import { describe, it, expect } from '@jest/globals' import { MultisigConfig } from 'services/remote' -import getMultisigSignStatus from 'utils/getMultisigSignStatus' -import { addressToScript, scriptToHash } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript, getMultisigSignStatus } from 'utils' +import { computeScriptHash } from '@ckb-lumos/base/lib/utils' const addresses = [ 'ckt1qyqwh5hmt8j59njztrfz6z0s9wug3nv5qysqrnfm2h', @@ -18,7 +18,7 @@ const multisigConfig: MultisigConfig = { blake160s: addresses.map(v => addressToScript(v).args), fullPayload: 'ckt1qpw9q60tppt7l3j7r09qcp7lxnp3vcanvgha8pmvsa3jplykxn32sq2f2scddm0lvmq36hmzx8nfhw8ucxzslhqussgky', } -const fullPayloadHash = scriptToHash(addressToScript(multisigConfig.fullPayload)) +const fullPayloadHash = computeScriptHash(addressToScript(multisigConfig.fullPayload)) describe('Test getCompensationPeriod', () => { // first sign but no match address diff --git a/packages/neuron-ui/src/utils/calculateUsedCapacity.ts b/packages/neuron-ui/src/utils/calculateUsedCapacity.ts index ba91cf77f6..2832513763 100644 --- a/packages/neuron-ui/src/utils/calculateUsedCapacity.ts +++ b/packages/neuron-ui/src/utils/calculateUsedCapacity.ts @@ -1,3 +1,5 @@ +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' + const CODE_HASH_LENGTH = 32 const HASH_TYPE_LENGTH = 1 const CAPACITY_LENGTH = 8 diff --git a/packages/neuron-ui/src/utils/getLockSupportShortAddress.ts b/packages/neuron-ui/src/utils/getLockSupportShortAddress.ts index 3954d1a23c..0247eb8364 100644 --- a/packages/neuron-ui/src/utils/getLockSupportShortAddress.ts +++ b/packages/neuron-ui/src/utils/getLockSupportShortAddress.ts @@ -1,3 +1,4 @@ +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' import { AnyoneCanPayLockInfoOnAggron, AnyoneCanPayLockInfoOnLina, DefaultLockInfo, MultiSigLockInfo } from './enums' const getLockSupportShortAddress = (lock: CKBComponents.Script) => { diff --git a/packages/neuron-ui/src/utils/getMultisigSignStatus.ts b/packages/neuron-ui/src/utils/getMultisigSignStatus.ts index ebba2dc096..1f351ba59a 100644 --- a/packages/neuron-ui/src/utils/getMultisigSignStatus.ts +++ b/packages/neuron-ui/src/utils/getMultisigSignStatus.ts @@ -1,4 +1,5 @@ -import { addressToScript, scriptToHash } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from 'utils' +import { computeScriptHash } from '@ckb-lumos/base/lib/utils' import { MultisigConfig } from 'services/remote' export const getMultisigSignStatus = ({ @@ -10,7 +11,7 @@ export const getMultisigSignStatus = ({ signatures?: State.Signatures addresses: State.Address[] }) => { - const multisigLockHash = scriptToHash(addressToScript(multisigConfig.fullPayload)) + const multisigLockHash = computeScriptHash(addressToScript(multisigConfig.fullPayload)) const multisigBlake160s = multisigConfig.addresses.map(v => addressToScript(v).args) const addressBlake160s = addresses.map(v => addressToScript(v.address).args) const notSpecifiedCount = multisigConfig.m - multisigConfig.r diff --git a/packages/neuron-ui/src/utils/index.ts b/packages/neuron-ui/src/utils/index.ts index 99c96228ac..0b2ff40d4e 100644 --- a/packages/neuron-ui/src/utils/index.ts +++ b/packages/neuron-ui/src/utils/index.ts @@ -26,6 +26,7 @@ export * from './baseActions' export * from './getSUDTAmount' export * from './multisig' export * from './getNetworkLabel' +export * from './getMultisigSignStatus' export * from './calculateUsedCapacity' export * from './outPointTransform' export * from './scriptAndAddress' diff --git a/packages/neuron-ui/src/utils/is.ts b/packages/neuron-ui/src/utils/is.ts index f20ca58fad..5a82900882 100644 --- a/packages/neuron-ui/src/utils/is.ts +++ b/packages/neuron-ui/src/utils/is.ts @@ -1,4 +1,4 @@ -import { addressToScript } from '@nervosnetwork/ckb-sdk-utils' +import { addressToScript } from 'utils' import { ControllerResponse, SuccessFromController } from 'services/remote/remoteApiWrapper' import { ResponseCode, diff --git a/packages/neuron-ui/src/utils/multisig.ts b/packages/neuron-ui/src/utils/multisig.ts index e5f3f89ae7..a59c6998c6 100644 --- a/packages/neuron-ui/src/utils/multisig.ts +++ b/packages/neuron-ui/src/utils/multisig.ts @@ -1,4 +1,5 @@ -import { scriptToAddress, blake2b, PERSONAL, hexToBytes } from '@nervosnetwork/ckb-sdk-utils' +import { ckbHash } from '@ckb-lumos/base/lib/utils' +import { scriptToAddress } from 'utils' import { MultiSigLockInfo } from './enums' import { MAX_M_N_NUMBER } from './const' @@ -18,11 +19,10 @@ function multisigSerialize(blake160s: string[], r: number = 0, m: number = 1, n: return `0x${MULTI_DEFAULT_S}${hexR}${hexM}${hexN}${blake160s.reduce((pre, cur) => pre + cur.slice(2), '')}` } +const MULTISIGN_HASH_LENGTH = 42 + function multisigHash(blake160s: string[], r: number = 0, m: number = 1, n: number = 1): string { - const serializeResult = multisigSerialize(blake160s, r, m, n) - const blake2bHash = blake2b(32, null, null, PERSONAL) - blake2bHash.update(hexToBytes(serializeResult)) - return `0x${blake2bHash.digest('hex')}`.slice(0, 42) + return ckbHash(multisigSerialize(blake160s, r, m, n)).slice(0, MULTISIGN_HASH_LENGTH) } export function getMultisigAddress(blake160s: string[], r: number, m: number, n: number, isMainnet: boolean) { @@ -32,7 +32,7 @@ export function getMultisigAddress(blake160s: string[], r: number, m: number, n: codeHash: MultiSigLockInfo.CodeHash, hashType: MultiSigLockInfo.HashType, }, - isMainnet + { isMainnet } ) } diff --git a/packages/neuron-ui/src/utils/outPointTransform.ts b/packages/neuron-ui/src/utils/outPointTransform.ts index 14d745ecff..e659458bcf 100644 --- a/packages/neuron-ui/src/utils/outPointTransform.ts +++ b/packages/neuron-ui/src/utils/outPointTransform.ts @@ -1,3 +1,5 @@ +import { type CKBComponents } from '@ckb-lumos/rpc/lib/types/api' + export const outPointToStr = (value: CKBComponents.OutPoint): string => { return `${value.txHash}_${value.index}` } diff --git a/packages/neuron-ui/src/utils/scriptAndAddress.ts b/packages/neuron-ui/src/utils/scriptAndAddress.ts index 5dabdb9f32..acea450b72 100644 --- a/packages/neuron-ui/src/utils/scriptAndAddress.ts +++ b/packages/neuron-ui/src/utils/scriptAndAddress.ts @@ -1,3 +1,4 @@ +import { type Script } from '@ckb-lumos/base' import { predefined } from '@ckb-lumos/config-manager' import { encodeToAddress, parseAddress, generateAddress } from '@ckb-lumos/helpers' @@ -9,7 +10,7 @@ const CONFIGS = { } export const scriptToAddress = ( - script: CKBComponents.Script, + script: Script, { isMainnet = true, deprecated = false }: { isMainnet?: boolean; deprecated?: boolean } ) => { const config = { config: isMainnet ? MAINNET : TESTNET } @@ -21,3 +22,14 @@ export const addressToScript = (address: string, { isMainnet = true }: { isMainn const config = CONFIGS[prefix] ?? (isMainnet ? MAINNET : TESTNET) return parseAddress(address, { config }) } + +export const addressToAddress = (address: string, { deprecated = false }: { deprecated?: boolean } = {}) => { + try { + return scriptToAddress(addressToScript(address), { + isMainnet: address.startsWith(MAINNET.PREFIX), + deprecated, + }) + } catch { + return '' + } +} diff --git a/yarn.lock b/yarn.lock index 05f12f1200..e8f8419e62 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3401,17 +3401,6 @@ pump "^3.0.0" tar-fs "^2.1.1" -"@nervosnetwork/ckb-sdk-utils@0.109.0": - version "0.109.0" - resolved "https://registry.yarnpkg.com/@nervosnetwork/ckb-sdk-utils/-/ckb-sdk-utils-0.109.0.tgz#4ac4b70f5649bd641c6cc35c70e0130f043cc98f" - integrity sha512-/lqq9qU2COhQZx6chfTzASbB+v9dFxX5WfdKpvMNvRT6tOHRGTVRgjBBS++GXLKpmn1934EJOlYOc6Peeo7g6g== - dependencies: - "@nervosnetwork/ckb-types" "0.109.0" - bech32 "2.0.0" - elliptic "6.5.4" - jsbi "3.1.3" - tslib "2.3.1" - "@nervosnetwork/ckb-types@0.109.0": version "0.109.0" resolved "https://registry.yarnpkg.com/@nervosnetwork/ckb-types/-/ckb-types-0.109.0.tgz#efcd1d96f1d3e21b20bb0c9d38e80b83e90ef827" @@ -7430,7 +7419,7 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== -bech32@2.0.0, bech32@^2.0.0: +bech32@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== @@ -13499,11 +13488,6 @@ js-yaml@^3.10.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" -jsbi@3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.1.3.tgz#f024b340032f7c7caaa6ca4b32b55e8d33f6e897" - integrity sha512-nBJqA0C6Qns+ZxurbEoIR56wyjiUszpNy70FHvxO5ervMoCbZVE3z3kxr5nKGhlxr/9MhKTSUBs7cAwwuf3g9w== - jsbi@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741" @@ -19453,11 +19437,6 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== - tslib@2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"