Skip to content

Commit

Permalink
refactor: replace ckb-sdk-utils with lumos (nervosnetwork#3149)
Browse files Browse the repository at this point in the history
* refactor: replace ckb-sdk-utils with lumos

* refactor: improve imports

* refactor: replace magic number 42 with const MULTISIGN_HASH_LENGTH = 42

* refactor: combine toLongAddress() and toShortAddress() into addressToAddress()
  • Loading branch information
twhy authored May 14, 2024
1 parent 3697017 commit d0f83ae
Show file tree
Hide file tree
Showing 29 changed files with 101 additions and 128 deletions.
2 changes: 1 addition & 1 deletion packages/neuron-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
22 changes: 11 additions & 11 deletions packages/neuron-ui/src/components/AmendSUDTSend/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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 ''
}
Expand All @@ -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,
Expand Down
14 changes: 7 additions & 7 deletions packages/neuron-ui/src/components/AmendSend/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
Expand All @@ -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 ''
Expand All @@ -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,
Expand Down
5 changes: 3 additions & 2 deletions packages/neuron-ui/src/components/HistoryDetailPage/index.tsx
Original file line number Diff line number Diff line change
@@ -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'
Expand All @@ -17,6 +17,7 @@ import Breadcrum from 'widgets/Breadcrum'

import {
ErrorCode,
scriptToAddress,
localNumberFormatter,
uniformTimeFormatter,
shannonToCKBFormatter,
Expand Down Expand Up @@ -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)
}
Expand Down
9 changes: 3 additions & 6 deletions packages/neuron-ui/src/components/LockInfoDialog/index.tsx
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -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 (
<>
Expand Down
8 changes: 4 additions & 4 deletions packages/neuron-ui/src/components/MultisigAddress/hooks.ts
Original file line number Diff line number Diff line change
@@ -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,
Expand All @@ -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('')
Expand Down Expand Up @@ -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),
Expand Down Expand Up @@ -324,7 +324,7 @@ export const useSubscription = ({
const hashToPayload = useMemo(
() =>
configs.reduce<Record<string, string>>(
(pre, cur) => ({ ...pre, [scriptToHash(addressToScript(cur.fullPayload))]: cur.fullPayload }),
(pre, cur) => ({ ...pre, [computeScriptHash(addressToScript(cur.fullPayload))]: cur.fullPayload }),
{}
),
[configs]
Expand Down
Original file line number Diff line number Diff line change
@@ -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'

Expand Down
15 changes: 9 additions & 6 deletions packages/neuron-ui/src/components/NervosDAO/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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'
Expand Down Expand Up @@ -59,7 +59,7 @@ const TabsVariantWithCellsCard = ({
</div>
</div>
{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 (
Expand Down
1 change: 1 addition & 0 deletions packages/neuron-ui/src/components/NervosDAORecord/hooks.ts
Original file line number Diff line number Diff line change
@@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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'

Expand All @@ -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
}
Expand Down
17 changes: 5 additions & 12 deletions packages/neuron-ui/src/components/Receive/hooks.ts
Original file line number Diff line number Diff line change
@@ -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'

Expand Down Expand Up @@ -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,
Expand Down
17 changes: 2 additions & 15 deletions packages/neuron-ui/src/components/SUDTReceiveDialog/index.tsx
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 (
<Dialog
Expand Down
Loading

1 comment on commit d0f83ae

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Packaging for test is done in 9073084083

Please sign in to comment.