@unisat/wallet-state 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.d.mts +87 -18
- package/lib/index.d.ts +87 -18
- package/lib/index.js +516 -175
- package/lib/index.js.map +1 -1
- package/lib/index.mjs +514 -178
- package/lib/index.mjs.map +1 -1
- package/lib/types/index.d.mts +6 -2
- package/lib/types/index.d.ts +6 -2
- package/lib/types/index.js +7 -1
- package/lib/types/index.js.map +1 -1
- package/lib/types/index.mjs +7 -2
- package/lib/types/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/context/NavigationContext.tsx +1 -0
- package/src/context/WalletContext.tsx +56 -23
- package/src/hooks/accounts.ts +7 -2
- package/src/hooks/settings.ts +10 -0
- package/src/hooks/transactions.ts +75 -10
- package/src/hooks/ui.ts +83 -63
- package/src/reducers/accounts.ts +3 -0
- package/src/reducers/ui.ts +21 -0
- package/src/types/ui.ts +6 -1
- package/src/ui-hooks/useAddressTypeScreenLogic.ts +22 -8
- package/src/ui-hooks/useAlkanesNFTScreenLogic.ts +3 -2
- package/src/ui-hooks/useAlkanesTokenScreenLogic.ts +12 -2
- package/src/ui-hooks/useBRC20InscribeTransferLogic.ts +30 -10
- package/src/ui-hooks/useBRC20ListLogic.ts +6 -2
- package/src/ui-hooks/useBRC20ProgListLogic.ts +7 -3
- package/src/ui-hooks/useBRC20SendScreenLogic.ts +19 -6
- package/src/ui-hooks/useBRC20TokenScreenLogic.ts +48 -25
- package/src/ui-hooks/useCAT20TokenScreenLogic.ts +16 -2
- package/src/ui-hooks/useCAT721NFTScreenLogic.ts +3 -1
- package/src/ui-hooks/useEditAccountNameScreenLogic.ts +4 -4
- package/src/ui-hooks/useEditWalletNameScreenLogic.ts +5 -3
- package/src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts +3 -2
- package/src/ui-hooks/useRunesTokenScreenLogic.ts +11 -2
- package/src/ui-hooks/useSendAlkanesNFTScreenLogic.ts +24 -2
- package/src/ui-hooks/useSendAlkanesScreenLogic.ts +17 -1
- package/src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts +17 -5
- package/src/ui-hooks/useSendRunesScreenLogic.ts +18 -1
- package/src/ui-hooks/useSettingsTabScreenLogic.ts +18 -3
- package/src/ui-hooks/useSignMessageLogic.ts +37 -16
- package/src/ui-hooks/useSignPsbtLogic.ts +31 -15
- package/src/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.ts +15 -1
- package/src/ui-hooks/useTxCreateScreenLogic.ts +17 -1
package/lib/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/reducers/accounts.ts","../src/actions/global.ts","../src/reducers/discovery.ts","../src/reducers/global.ts","../src/reducers/keyrings.ts","../src/reducers/settings.ts","../src/reducers/transactions.ts","../src/reducers/ui.ts","../src/types/ui.ts","../src/reducers/browser.ts","../src/context/ApprovalContext.tsx","../src/context/DeviceContext.tsx","../src/context/I18nContext.tsx","../src/context/NavigationContext.tsx","../src/context/PriceContext.tsx","../src/context/WalletContext.tsx","../src/hooks/settings.ts","../src/utils/bitcoin-utils.ts","../src/hooks/accounts.ts","../src/hooks/base.ts","../src/hooks/keyrings.ts","../src/context/StorageContext.tsx","../src/context/ToolsContext.tsx","../src/hooks/discovery.ts","../src/hooks/global.ts","../src/hooks/transactions.ts","../src/hooks/ui.ts","../src/hooks/browser.ts","../src/updater/accounts.ts","../src/utils/eventBus.ts","../src/ui-hooks/useAddressTypeScreenLogic.ts","../src/ui-hooks/useAlkanesListLogic.ts","../src/ui-hooks/useInfiniteList.ts","../src/ui-hooks/useAmountInputLogic.ts","../src/ui-hooks/useAnnouncementCardLogic.ts","../src/ui-hooks/useBRC20SendScreenLogic.ts","../src/ui-hooks/useBRC20SingleStepScreenLogic.ts","../src/ui-hooks/useBRC20TokenScreenLogic.ts","../src/utils/ui-utils.ts","../src/ui-hooks/useEditWalletNameScreenLogic.ts","../src/ui-hooks/useFeeRateBarLogic.ts","../src/ui-hooks/useLockTimePageLogic.ts","../src/ui-hooks/useNotificationsLogic.ts","../src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useTxCreateScreenLogic.ts","../src/ui-hooks/useBRC20InscribeTransferLogic.ts","../src/ui-hooks/useAlkanesNFTScreenLogic.ts","../src/ui-hooks/useAlkanesTokenScreenLogic.ts","../src/ui-hooks/useCreateWalletLogicImportWordsStep.ts","../src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useRunesTokenScreenLogic.ts","../src/ui-hooks/useBRC20BalanceCardLogic.ts","../src/ui-hooks/useExportMnemonicsScreenLogic.ts","../src/ui-hooks/useExportPrivateKeyScreenLogic.ts","../src/ui-hooks/useSendRunesScreenLogic.ts","../src/ui-hooks/useEditContactScreenLogic.ts","../src/ui-hooks/useEditAccountNameScreenLogic.ts","../src/ui-hooks/useAlkanesCollectionListLogic.ts","../src/ui-hooks/useBRC20ListLogic.ts","../src/ui-hooks/useInscriptionListLogic.ts","../src/ui-hooks/useRunesListLogic.ts","../src/ui-hooks/useCAT20ListLogic.ts","../src/ui-hooks/useSendCAT20ScreenLogic.ts","../src/ui-hooks/useSendCAT721ScreenLogic.ts","../src/ui-hooks/useAlkanesNFTListLogic.ts","../src/ui-hooks/useBRC20ProgListLogic.ts","../src/ui-hooks/useCAT721ListLogic.ts","../src/ui-hooks/useCAT20TokenScreenLogic.ts","../src/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useCreatePasswordScreenLogic.ts","../src/utils/password-utils.ts","../src/ui-hooks/useSendAlkanesNFTScreenLogic.ts","../src/ui-hooks/useSendAlkanesScreenLogic.ts","../src/ui-hooks/useRunesBalanceCardLogic.ts","../src/ui-hooks/useCAT20BalanceCardLogic.ts","../src/ui-hooks/useAlkanesBalanceCardLogic.ts","../src/ui-hooks/useCAT721NFTScreenLogic.ts","../src/ui-hooks/useSignMessageLogic.ts","../src/ui-hooks/useSignPsbtLogic.ts","../src/ui-hooks/useTxConfirmScreenLogic.ts","../src/ui-hooks/useTxFailScreenLogic.ts","../src/ui-hooks/useTxSuccessScreenLogic.ts","../src/ui-hooks/useActionOverviewSectionLogic.ts","../src/ui-hooks/useSettingsTabScreenLogic.ts","../src/ui-hooks/useBalanceCardLogic.ts","../src/ui-hooks/useBtcDisplayLogic.ts"],"names":["createSlice","initialState","slice","ChainType","AssetTabKey","OrdinalsAssetTabKey","CATAssetTabKey","AlkanesAssetTabKey","NavigationSource","WalletTabScreenTabKey","React","useContext","initContext","useCallback","useEffect","useState","AddressType","NetworkType","validateMnemonic","appSummary","chain","jsx","useMemo","CHAINS_MAP","useRef","numUtils","KeyringType","total","BRC20SendTabKey","BRC20SingleStepKey","BigNumber","BRC20TokenScreenTabKey","items","tokenSummary","FeeRateType","AnnouncementLinkType","minOutputValue","result","enteredWordsCount","TabKey","ADDRESS_TYPES","mnemonic","passphrase","bnUtils","SendCAT20ScreenStep","SendCAT721ScreenStep","CAT_VERSION","SendAlkanesNFTScreenStep","error","SendAlkanesScreenStep","signingTxIndex","isAllSigned","SignState","logger","PlatformEnv","useDispatch","useSelector"],"mappings":"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","sourcesContent":["import { load, save } from 'redux-localstorage-simple'\n\nimport { configureStore } from '@reduxjs/toolkit'\nimport { setupListeners } from '@reduxjs/toolkit/dist/query/react/index.js'\n\nimport accounts from './reducers/accounts'\nimport discovery from './reducers/discovery'\nimport { updateVersion } from './actions/global'\nimport global from './reducers/global'\nimport keyrings from './reducers/keyrings'\nimport settings from './reducers/settings'\nimport transactions from './reducers/transactions'\nimport ui from './reducers/ui'\nimport browser from './reducers/browser'\n\nconst PERSISTED_KEYS: string[] = ['ui', 'discovery']\n\nexport function createAppStore() {\n const store = configureStore({\n reducer: {\n accounts,\n transactions,\n settings,\n global,\n keyrings,\n ui,\n discovery,\n browser,\n },\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware({ thunk: true }).concat(\n save({ states: PERSISTED_KEYS, debounce: 1000 })\n ),\n preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: true }),\n })\n\n store.dispatch(updateVersion())\n setupListeners(store.dispatch)\n\n return store\n}\n\nexport type AppStore = ReturnType<typeof createAppStore>\nexport type AppState = ReturnType<AppStore['getState']>\nexport type AppDispatch = AppStore['dispatch']\n\nexport * from './context'\nexport * from './hooks'\nexport * from './updater'\nexport * from './reducers'\nexport * from './types'\nexport * from './ui-hooks'\nexport { uiEventBus } from './utils/eventBus'\nexport { useAsyncEffect } from './utils/ui-utils'\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport {\n Account,\n AddressSummary,\n AppSummary,\n BitcoinBalanceV2,\n Inscription,\n InscriptionSummary,\n TxHistoryItem,\n} from '@unisat/wallet-shared'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface Molels {\n states: boolean\n}\n\nexport interface MolelsPopover {\n state: boolean\n title: string\n data: any\n}\n\nexport interface AccountsState {\n accounts: Account[]\n current: Account\n loading: boolean\n balanceMap: {\n [key: string]: {\n amount: string\n btc_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n inscription_amount: string\n expired: boolean\n }\n }\n balanceV2Map: {\n [key: string]: BitcoinBalanceV2\n }\n historyMap: {\n [key: string]: {\n list: TxHistoryItem[]\n expired: boolean\n }\n }\n inscriptionsMap: {\n [key: string]: {\n list: Inscription[]\n expired: boolean\n }\n }\n appSummary: AppSummary\n inscriptionSummary: InscriptionSummary\n addressSummary: AddressSummary\n model: Molels\n molelsPopover: MolelsPopover\n}\n\nconst initialAccount = {\n type: '',\n address: '',\n brandName: '',\n alianName: '',\n displayBrandName: '',\n index: 0,\n balance: 0,\n pubkey: '',\n key: '',\n flag: 0,\n}\n\nexport const initialState: AccountsState = {\n accounts: [],\n current: initialAccount,\n loading: false,\n balanceMap: {},\n balanceV2Map: {},\n historyMap: {},\n inscriptionsMap: {},\n appSummary: {\n apps: [],\n },\n inscriptionSummary: {\n mintedList: [],\n },\n addressSummary: {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n },\n\n model: { states: false },\n molelsPopover: { state: false, title: '', data: null },\n}\n\nconst slice: Slice<AccountsState> = createSlice({\n name: 'accounts',\n initialState,\n reducers: {\n pendingLogin(state) {\n state.loading = true\n },\n setCurrent(state, action: { payload: Account }) {\n const { payload } = action\n state.current = payload || initialAccount\n },\n setAccounts(state, action: { payload: Account[] }) {\n const { payload } = action\n state.accounts = payload\n },\n setBalance(\n state,\n action: {\n payload: {\n address: string\n amount: string\n btc_amount: string\n inscription_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n }\n }\n ) {\n const {\n payload: {\n address,\n amount,\n btc_amount,\n inscription_amount,\n confirm_btc_amount,\n pending_btc_amount,\n },\n } = action\n state.balanceMap[address] = state.balanceMap[address] || {\n amount: '0',\n btc_amount: '0',\n inscription_amount: '0',\n confirm_btc_amount: '0',\n pending_btc_amount: '0',\n expired: true,\n }\n state.balanceMap[address]!.amount = amount\n state.balanceMap[address]!.btc_amount = btc_amount\n state.balanceMap[address]!.inscription_amount = inscription_amount\n state.balanceMap[address]!.confirm_btc_amount = confirm_btc_amount\n state.balanceMap[address]!.pending_btc_amount = pending_btc_amount\n state.balanceMap[address]!.expired = false\n },\n setBalanceV2(\n state,\n action: {\n payload: {\n address: string\n balance: BitcoinBalanceV2\n }\n }\n ) {\n const {\n payload: {\n balance: { availableBalance, unavailableBalance, totalBalance, chainType },\n address,\n },\n } = action\n state.balanceV2Map[address] = state.balanceV2Map[address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n chainType,\n }\n state.balanceV2Map[address].availableBalance = availableBalance\n state.balanceV2Map[address].unavailableBalance = unavailableBalance\n state.balanceV2Map[address].totalBalance = totalBalance\n state.balanceV2Map[address].chainType = chainType\n },\n setAddressSummary(state, action: { payload: any }) {\n state.addressSummary = action.payload\n },\n expireBalance(state) {\n const balance = state.balanceMap[state.current.address]\n if (balance) {\n balance.expired = true\n }\n },\n setHistory(state, action: { payload: { address: string; list: TxHistoryItem[] } }) {\n const {\n payload: { address, list },\n } = action\n state.historyMap[address] = state.historyMap[address] || {\n list: [],\n expired: true,\n }\n state.historyMap[address].list = list\n state.historyMap[address].expired = false\n },\n expireHistory(state) {\n const history = state.historyMap[state.current.address]\n if (history) {\n history.expired = true\n }\n },\n setInscriptions(state, action: { payload: { address: string; list: Inscription[] } }) {\n const {\n payload: { address, list },\n } = action\n state.inscriptionsMap[address] = state.inscriptionsMap[address] || {\n list: [],\n expired: true,\n }\n state.inscriptionsMap[address].list = list\n state.inscriptionsMap[address].expired = false\n },\n expireInscriptions(state) {\n const inscriptions = state.inscriptionsMap[state.current.address]\n if (inscriptions) {\n inscriptions.expired = true\n }\n },\n setCurrentAccountName(state, action: { payload: string }) {\n const { payload } = action\n state.current.alianName = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.alianName = payload\n }\n },\n setCurrentAddressFlag(state, action: { payload: number }) {\n const { payload } = action\n state.current.flag = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.flag = payload\n }\n },\n setInscriptionSummary(state, action: { payload: InscriptionSummary }) {\n const { payload } = action\n state.inscriptionSummary = payload\n },\n setAppSummary(state, action: { payload: AppSummary }) {\n const { payload } = action\n state.appSummary = payload\n },\n rejectLogin(state) {\n state.loading = false\n },\n reset(state) {\n return initialState\n },\n updateAccountName(\n state,\n action: {\n payload: Account\n }\n ) {\n const account = action.payload\n if (state.current.key === account.key) {\n state.current.alianName = account.alianName!\n }\n state.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.addressSummary) {\n state.addressSummary = {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n }\n }\n\n if (!state.balanceV2Map) {\n state.balanceV2Map = {}\n }\n })\n },\n})\n\nexport const accountActions = slice.actions\nexport default slice.reducer\n","import { createAction } from '@reduxjs/toolkit'\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction<void>('global/updateVersion')\n","import { ChainType } from '@unisat/wallet-types'\nimport { AppInfo } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nexport interface DiscoveryState {\n bannerList: { id: string; img: string; link: string }[]\n appList: { tab: string; items: AppInfo[] }[]\n lastFetchTime: number\n lastFetchChainType: ChainType\n cachedBannerIds: string[]\n hasNewBanner: boolean\n}\n\nexport const initialState: DiscoveryState = {\n bannerList: [],\n appList: [],\n lastFetchTime: 0,\n lastFetchChainType: ChainType.BITCOIN_MAINNET,\n cachedBannerIds: [],\n hasNewBanner: true,\n}\n\nconst slice: Slice<DiscoveryState> = createSlice({\n name: 'discovery',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n setBannerList(\n state,\n action: {\n payload: {\n bannerList: { id: string; img: string; link: string }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n const newBannerIds = payload.bannerList.map(banner => banner.id)\n const hasNewBanner = newBannerIds.some(id => !state.cachedBannerIds.includes(id))\n\n state.bannerList = payload.bannerList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n state.hasNewBanner = hasNewBanner\n\n state.cachedBannerIds = newBannerIds\n },\n setAppList(\n state,\n action: {\n payload: {\n appList: { tab: string; items: AppInfo[] }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n state.appList = payload.appList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n },\n clearNewBannerFlag(state) {\n state.hasNewBanner = false\n },\n },\n})\n\nexport const discoveryActions = slice.actions\nexport default slice.reducer\n","import { createSlice, PayloadAction, SliceCaseReducers } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\nimport { TabOption } from '../types'\n\nexport interface GlobalState {\n tab: TabOption\n isUnlocked: boolean\n isReady: boolean\n isBooted: boolean\n screenState?: {\n type: string\n options: any\n }\n isRefresh: boolean\n backRefresh: boolean\n wallRefresh: boolean\n wallTabRefresh: boolean\n unlockRefres: boolean\n unlockRead: boolean\n layerState: boolean\n isUnlockTimeRefres: boolean\n infiniteListScrollOffset: number\n infiniteListScrollDirection: 'up' | 'down'\n infiniteListScrollActiveTime: number\n isScrollViewTop: number\n isScrollViewBot: number\n isBiometricsSupported: boolean\n hasBiometricsKey: boolean\n wallTabFocusRefresh: 0\n goBackRefresh: 0\n switchChainModalVisible: boolean\n isLockedOverlayVisible: boolean\n}\n\nexport const initialState: GlobalState = {\n tab: 'home',\n isUnlocked: false,\n isReady: false,\n isBooted: false,\n screenState: undefined,\n isRefresh: false,\n backRefresh: false,\n wallRefresh: false,\n wallTabRefresh: false,\n unlockRefres: false,\n unlockRead: false,\n layerState: false,\n isUnlockTimeRefres: false,\n infiniteListScrollOffset: 0,\n infiniteListScrollDirection: 'down',\n infiniteListScrollActiveTime: 0,\n isScrollViewTop: 0,\n isScrollViewBot: 0,\n isBiometricsSupported: false,\n hasBiometricsKey: false,\n wallTabFocusRefresh: 0,\n goBackRefresh: 0,\n switchChainModalVisible: false,\n isLockedOverlayVisible: false,\n}\n\nconst reducers: SliceCaseReducers<GlobalState> = {\n reset: state => initialState,\n update: (\n state,\n action: PayloadAction<{\n tab?: TabOption\n isUnlocked?: boolean\n isReady?: boolean\n isBooted?: boolean\n screenState?: {\n type: string\n options: any\n }\n isRefresh?: boolean\n backRefresh?: boolean\n wallRefresh?: boolean\n wallTabRefresh?: boolean\n unlockRefres?: boolean\n layerState?: boolean\n unlockRead?: boolean\n isUnlockTimeRefres?: boolean\n infiniteListScrollOffset?: number\n infiniteListScrollDirection?: 'up' | 'down'\n infiniteListScrollActiveTime?: number\n isScrollViewTop?: number\n isScrollViewBot?: number\n isBiometricsSupported?: boolean\n hasBiometricsKey?: boolean\n wallTabFocusRefresh?: number\n goBackRefresh?: number\n switchChainModalVisible?: boolean\n lockedOverlayVisible?: boolean\n }>\n ) => {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n}\n\nconst slice = createSlice({\n name: 'global',\n initialState,\n reducers,\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const globalActions = slice.actions as any\n\nexport default slice.reducer\n","import { Account, WalletKeyring } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface KeyringsState {\n keyrings: WalletKeyring[]\n current: WalletKeyring\n}\n\nconst initialKeyring: WalletKeyring = {\n key: '',\n index: 0,\n type: '',\n addressType: AddressType.P2TR,\n accounts: [],\n alianName: '',\n hdPath: '',\n}\n\nexport const initialState: KeyringsState = {\n keyrings: [],\n current: initialKeyring,\n}\n\nconst slice: Slice<KeyringsState> = createSlice({\n name: 'keyrings',\n initialState,\n reducers: {\n setCurrent(state, action: { payload: WalletKeyring }) {\n const { payload } = action\n state.current = payload || initialKeyring\n },\n setKeyrings(state, action: { payload: WalletKeyring[] }) {\n const { payload } = action\n state.keyrings = payload\n },\n\n reset(state) {\n return initialState\n },\n\n updateKeyringName(state, action: { payload: WalletKeyring }) {\n const keyring = action.payload\n if (state.current.key === keyring.key) {\n state.current.alianName = keyring.alianName\n }\n state.keyrings.forEach(v => {\n if (v.key === keyring.key) {\n v.alianName = keyring.alianName\n }\n })\n },\n\n updateAccountName(state, action: { payload: Account }) {\n const account = action.payload\n\n state.current.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n\n state.keyrings.forEach(v => {\n v.accounts.forEach(w => {\n if (w.key === account.key) {\n w.alianName = account.alianName!\n }\n })\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const keyringsActions = slice.actions\nexport default slice.reducer\n","import { DEFAULT_LOCKTIME_ID, WalletConfig } from '@unisat/wallet-shared'\nimport { ChainType, NetworkType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface SettingsState {\n locale: string\n networkType: NetworkType\n chainType: ChainType\n walletConfig: WalletConfig\n skippedVersion: string\n autoLockTimeId: number\n developerMode: boolean\n}\n\nexport const initialState: SettingsState = {\n locale: 'English',\n networkType: NetworkType.MAINNET,\n chainType: ChainType.BITCOIN_MAINNET,\n walletConfig: {\n version: '',\n moonPayEnabled: true,\n statusMessage: '',\n endpoint: '',\n chainTip: '',\n disableUtxoTools: true,\n },\n skippedVersion: '',\n autoLockTimeId: DEFAULT_LOCKTIME_ID,\n developerMode: false,\n}\n\nconst slice: Slice<SettingsState> = createSlice({\n name: 'settings',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateSettings(\n state,\n action: {\n payload: {\n locale?: string\n networkType?: NetworkType\n walletConfig?: WalletConfig\n skippedVersion?: string\n chainType?: ChainType\n autoLockTimeId?: number\n developerMode?: boolean\n }\n }\n ) {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.networkType) {\n state.networkType = NetworkType.MAINNET\n }\n })\n },\n})\n\nexport const settingsActions = slice.actions\nexport default slice.reducer\n","import { Inscription, UnspentOutput } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface BitcoinTx {\n fromAddress: string\n toAddress: string\n toSatoshis: number\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n autoAdjust: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n}\n\nexport interface OrdinalsTx {\n fromAddress: string\n toAddress: string\n inscription: Inscription\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n}\n\nexport interface RunesTx {\n fromAddress: string\n toAddress: string\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n runeid?: string\n runeAmount?: string\n}\n\nexport interface TransactionsState {\n bitcoinTx: BitcoinTx\n ordinalsTx: OrdinalsTx\n runesTx: RunesTx\n utxos: UnspentOutput[]\n spendUnavailableUtxos: UnspentOutput[]\n assetUtxos_inscriptions: UnspentOutput[]\n assetUtxos_runes: UnspentOutput[]\n}\n\nexport const initialState: TransactionsState = {\n bitcoinTx: {\n fromAddress: '',\n toAddress: '',\n toSatoshis: 0,\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n autoAdjust: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n },\n ordinalsTx: {\n fromAddress: '',\n toAddress: '',\n inscription: {\n inscriptionId: '',\n inscriptionNumber: 0,\n address: '',\n outputValue: 0,\n preview: '',\n content: '',\n contentType: '',\n contentLength: 0,\n timestamp: 0,\n genesisTransaction: '',\n location: '',\n output: '',\n offset: 0,\n contentBody: '',\n utxoHeight: 0,\n utxoConfirmation: 0,\n },\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n },\n\n runesTx: {\n fromAddress: '',\n toAddress: '',\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n },\n utxos: [],\n spendUnavailableUtxos: [],\n assetUtxos_inscriptions: [],\n assetUtxos_runes: [],\n}\n\nconst slice: Slice<TransactionsState> = createSlice({\n name: 'transactions',\n initialState,\n reducers: {\n updateBitcoinTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n toSatoshis?: number\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n autoAdjust?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n }\n }\n ) {\n const { payload } = action\n state.bitcoinTx = Object.assign({}, state.bitcoinTx, payload)\n },\n updateOrdinalsTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n inscription?: Inscription\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n }\n }\n ) {\n const { payload } = action\n state.ordinalsTx = Object.assign({}, state.ordinalsTx, payload)\n },\n\n updateRunesTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n runeid?: string\n runeAmount?: string\n }\n }\n ) {\n const { payload } = action\n state.runesTx = Object.assign({}, state.runesTx, payload)\n },\n setUtxos(state, action: { payload: UnspentOutput[] }) {\n state.utxos = action.payload\n },\n setSpendUnavailableUtxos(state, action: { payload: UnspentOutput[] }) {\n state.spendUnavailableUtxos = action.payload\n },\n\n setAssetUtxosInscriptions(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_inscriptions = action.payload\n },\n setAssetUtxosRunes(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_runes = action.payload\n },\n reset(state) {\n return initialState\n },\n },\n\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n if (!state.assetUtxos_inscriptions) {\n state.assetUtxos_inscriptions = []\n }\n\n if (!state.spendUnavailableUtxos) {\n state.spendUnavailableUtxos = []\n }\n\n if (!state.assetUtxos_runes) {\n state.assetUtxos_runes = []\n }\n })\n },\n})\n\nexport const transactionsActions = slice.actions\nexport default slice.reducer\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport { Inscription } from '@unisat/wallet-shared'\n\nimport { updateVersion } from '../actions/global'\nimport {\n AlkanesAssetTabKey,\n AssetTabKey,\n CATAssetTabKey,\n NavigationSource,\n OrdinalsAssetTabKey,\n} from '../types'\n\nexport enum WallettopTabScreenTabKey {\n Ordinals,\n Atomicals,\n Runes,\n CAT20,\n Alkanes,\n}\n\nexport interface UIState {\n assetTabKey: AssetTabKey\n ordinalsAssetTabKey: OrdinalsAssetTabKey\n catAssetTabKey: CATAssetTabKey\n alkanesAssetTabKey: AlkanesAssetTabKey\n uiTxCreateScreen: {\n toInfo: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount: string\n }\n addressInput: {\n address: string\n domain: string\n inscription?: Inscription\n }\n amountInput: {\n amount: string\n }\n feeRateBar: {\n feeRate: number\n feeRateInputVal: string\n enableLowFeeRate: boolean\n feeOptionIndex: number\n showCustomInput: boolean\n }\n babylonSendScreen: {\n inputAmount: string\n memo: string\n }\n navigationSource: NavigationSource\n isBalanceHidden: boolean\n balanceDetailExpanded: boolean\n\n walletTopTabScreen: {\n toptabKey: WallettopTabScreenTabKey\n }\n}\n\nexport const initialState: UIState = {\n assetTabKey: AssetTabKey.ORDINALS,\n ordinalsAssetTabKey: OrdinalsAssetTabKey.ALL,\n catAssetTabKey: CATAssetTabKey.CAT20,\n alkanesAssetTabKey: AlkanesAssetTabKey.TOKEN,\n uiTxCreateScreen: {\n toInfo: {\n address: '',\n domain: '',\n },\n inputAmount: '',\n },\n addressInput: {\n address: '',\n domain: '',\n },\n amountInput: {\n amount: '',\n },\n feeRateBar: {\n feeRate: 1,\n feeRateInputVal: '',\n enableLowFeeRate: false,\n feeOptionIndex: 1, // Default to AVG\n showCustomInput: false,\n },\n babylonSendScreen: {\n inputAmount: '',\n memo: '',\n },\n navigationSource: NavigationSource.NORMAL,\n isBalanceHidden: false,\n balanceDetailExpanded: true,\n\n walletTopTabScreen: {\n toptabKey: WallettopTabScreenTabKey.Ordinals,\n },\n}\n\nconst slice: Slice<UIState> = createSlice({\n name: 'ui',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateAssetTabScreen(\n state,\n action: {\n payload: {\n assetTabKey?: AssetTabKey\n ordinalsAssetTabKey?: OrdinalsAssetTabKey\n catAssetTabKey?: CATAssetTabKey\n alkanesAssetTabKey?: AlkanesAssetTabKey\n }\n }\n ) {\n const { payload } = action\n if (payload.assetTabKey !== undefined) {\n state.assetTabKey = payload.assetTabKey\n }\n if (payload.ordinalsAssetTabKey !== undefined) {\n state.ordinalsAssetTabKey = payload.ordinalsAssetTabKey\n }\n\n if (payload.catAssetTabKey !== undefined) {\n state.catAssetTabKey = payload.catAssetTabKey\n }\n if (payload.alkanesAssetTabKey !== undefined) {\n state.alkanesAssetTabKey = payload.alkanesAssetTabKey\n }\n return state\n },\n updateTxCreateScreen(\n state,\n action: {\n payload: {\n toInfo?: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount?: string\n }\n }\n ) {\n if (action.payload.toInfo !== undefined) {\n state.uiTxCreateScreen.toInfo = action.payload.toInfo\n }\n if (action.payload.inputAmount !== undefined) {\n state.uiTxCreateScreen.inputAmount = action.payload.inputAmount\n }\n\n state.uiTxCreateScreen = { ...state.uiTxCreateScreen }\n },\n updateFeeRateBar(\n state,\n action: {\n payload: {\n feeRate?: number\n feeRateInputVal?: string\n enableLowFeeRate?: boolean\n feeOptionIndex?: number\n showCustomInput?: boolean\n }\n }\n ) {\n if (action.payload.feeRate !== undefined) {\n state.feeRateBar.feeRate = action.payload.feeRate\n }\n if (action.payload.feeRateInputVal !== undefined) {\n state.feeRateBar.feeRateInputVal = action.payload.feeRateInputVal\n }\n if (action.payload.enableLowFeeRate !== undefined) {\n state.feeRateBar.enableLowFeeRate = action.payload.enableLowFeeRate\n }\n if (action.payload.feeOptionIndex !== undefined) {\n state.feeRateBar.feeOptionIndex = action.payload.feeOptionIndex\n }\n if (action.payload.showCustomInput !== undefined) {\n state.feeRateBar.showCustomInput = action.payload.showCustomInput\n }\n state.feeRateBar = { ...state.feeRateBar }\n },\n resetFeeRateBar(state) {\n state.feeRateBar = initialState.feeRateBar\n },\n\n updateAddressInput(\n state,\n action: {\n payload: {\n address?: string\n domain?: string\n }\n }\n ) {\n if (action.payload.address !== undefined) {\n state.addressInput.address = action.payload.address\n }\n if (action.payload.domain !== undefined) {\n state.addressInput.domain = action.payload.domain\n }\n state.addressInput = { ...state.addressInput }\n },\n\n resetAddressInput(state) {\n state.addressInput = initialState.addressInput\n },\n\n updateAmountInput(\n state,\n action: {\n payload: {\n amount?: string\n }\n }\n ) {\n if (action.payload.amount !== undefined) {\n state.amountInput.amount = action.payload.amount\n }\n state.amountInput = { ...state.amountInput }\n },\n\n resetAmountInput(state) {\n state.amountInput = initialState.amountInput\n },\n\n resetTxCreateScreen(state) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n },\n updateBabylonSendScreen(\n state,\n action: {\n payload: {\n inputAmount?: string\n memo?: string\n }\n }\n ) {\n if (action.payload.inputAmount !== undefined) {\n state.babylonSendScreen.inputAmount = action.payload.inputAmount\n }\n if (action.payload.memo !== undefined) {\n state.babylonSendScreen.memo = action.payload.memo\n }\n },\n resetBabylonSendScreen(state) {\n state.babylonSendScreen = initialState.babylonSendScreen\n },\n setNavigationSource(state, action: { payload: NavigationSource }) {\n state.navigationSource = action.payload\n },\n setBalanceHidden(state, action: { payload: boolean }) {\n state.isBalanceHidden = action.payload\n },\n setBalanceDetailExpanded(state, action: { payload: boolean }) {\n state.balanceDetailExpanded = action.payload\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.assetTabKey) {\n state.assetTabKey = AssetTabKey.ORDINALS\n }\n if (!state.ordinalsAssetTabKey) {\n state.ordinalsAssetTabKey = OrdinalsAssetTabKey.ALL\n }\n if (!state.catAssetTabKey) {\n state.catAssetTabKey = CATAssetTabKey.CAT20\n }\n if (!state.alkanesAssetTabKey) {\n state.alkanesAssetTabKey = AlkanesAssetTabKey.TOKEN\n }\n if (!state.uiTxCreateScreen) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n }\n if (!state.feeRateBar) {\n state.feeRateBar = initialState.feeRateBar\n }\n if (!state.babylonSendScreen) {\n state.babylonSendScreen = initialState.babylonSendScreen\n }\n if (state.isBalanceHidden === undefined) {\n state.isBalanceHidden = false\n }\n if (state.balanceDetailExpanded === undefined) {\n state.balanceDetailExpanded = true\n }\n })\n },\n})\n\nexport const uiActions = slice.actions\nexport default slice.reducer\n","export enum AssetTabKey {\n ORDINALS = 0,\n ATOMICALS = 1, // IGNORED\n RUNES = 2,\n CAT = 3,\n ALKANES = 4,\n}\n\nexport enum OrdinalsAssetTabKey {\n ALL = 0,\n BRC20 = 1,\n BRC20_6BYTE = 2,\n}\n\nexport enum CATAssetTabKey {\n CAT20,\n CAT721,\n CAT20_V2,\n CAT721_V2,\n}\n\nexport enum AlkanesAssetTabKey {\n TOKEN,\n COLLECTION,\n}\n\nexport enum NavigationSource {\n BACK,\n NORMAL,\n}\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport { AppInfo } from '@unisat/wallet-shared'\nexport enum WalletTabScreenTabKey {\n ALL,\n BRC20,\n}\n\ntype suspensionType = {\n suspensionIf: boolean\n info: AppInfo | object | any\n web: any\n}\n\ntype wcars = {\n if?: boolean\n url: string\n}\n\ntype guideListsType = {\n id: number\n title: string\n content: string\n img: string\n}\n\nexport interface setSessionDateProps {\n icon: string\n name: string\n origin: string\n}\n\nconst wcarss: wcars = {\n if: false,\n url: '',\n}\nconst riskIfs: boolean = false\n\nconst suspensions: suspensionType = {\n suspensionIf: false,\n info: {},\n web: '',\n}\n\nconst collects: any = [\n {\n id: 4,\n name: 'My favorites',\n icon: 'collect_white',\n list: null,\n },\n]\n\nconst yys: any = false\n\nconst riseHeights: number = 100\n\nconst ScanDatas: string = ''\n\nconst historyLists: any = []\n\nconst mnemonicAids: any = []\n\nconst amountValues: string = null\n\nconst guideLists: guideListsType[] = [\n {\n id: 1,\n title: 'Welcome to UniSat',\n content: 'Your trusted Bitcoin wallet with full support for Ordinals and Atomicals protocols.',\n img: 'guide1',\n },\n {\n id: 2,\n title: 'Effortless Bitcoin Asset Management',\n content: 'Easily switch between accounts and wallets for seamless asset management.',\n img: 'guide2',\n },\n {\n id: 3,\n title: 'Discover Web3 on Bitcoin',\n content: 'Let us guide you through the world of Bitcoin web3 with ease.',\n img: 'guide3',\n },\n]\n\nconst popUps: boolean = false\n\nconst setStatusBars: boolean = false\n\nconst setSessionDates: setSessionDateProps = {\n icon: '',\n name: '',\n origin: '',\n}\n\nconst i18Classs: string = 'ru'\n\nconst webViewLods: boolean = true\n\nexport interface BrowserState {\n walletTabScreen: {\n tabKey: wcars\n riskIf: boolean\n collect: any\n historyList: any\n suspension: suspensionType\n yy: any\n riseHeight: number\n ScanData: string\n amountValue: string\n guideList: guideListsType[]\n popUp: boolean\n setStatusBar: boolean\n i18Class: string\n setSessionDate: setSessionDateProps\n webViewLod: boolean\n }\n}\n\nexport const initialState: BrowserState = {\n walletTabScreen: {\n tabKey: wcarss,\n riskIf: riskIfs,\n collect: collects,\n historyList: historyLists,\n suspension: suspensions,\n yy: yys,\n riseHeight: riseHeights,\n ScanData: ScanDatas,\n amountValue: amountValues,\n guideList: guideLists,\n popUp: popUps,\n setStatusBar: setStatusBars,\n i18Class: i18Classs,\n setSessionDate: setSessionDates,\n webViewLod: webViewLods,\n },\n}\nconst slice: Slice<BrowserState> = createSlice({\n name: 'browser',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateWalletRisk(\n state,\n action: {\n payload: {\n tabKey: wcars\n }\n }\n ) {\n const { payload } = action\n state.walletTabScreen.tabKey = payload.tabKey\n return state\n },\n usedatariskIfs(state, action) {\n state.walletTabScreen.riskIf = action.payload\n return state\n },\n usedataricollect(state, action) {\n if (!action.payload) {\n state.walletTabScreen.collect[0].list = null\n } else {\n state.walletTabScreen.collect[0].list = action.payload\n }\n return state\n },\n usedatariInfo(state, action) {\n return state\n },\n usedatarihistoryList(state, action) {\n state.walletTabScreen.historyList = action.payload\n return state\n },\n usedatarisuspension(state, action) {\n state.walletTabScreen.suspension = action.payload\n return state\n },\n usedatarisyyn(state, action) {\n state.walletTabScreen.yy = action.payload\n return state\n },\n usedatarisriseHeight(state, action) {\n state.walletTabScreen.riseHeight = action.payload\n return state\n },\n usedataScanData(state, action) {\n state.walletTabScreen.ScanData = action.payload\n return state\n },\n usedatamnemonicAid(state, action) {\n return state\n },\n usedatamountValue(state, action) {\n state.walletTabScreen.amountValue = action.payload\n return state\n },\n usedatapopUp(state, action) {\n state.walletTabScreen.popUp = action.payload\n return state\n },\n usedatasetStatusBar(state, action) {\n state.walletTabScreen.setStatusBar = action.payload\n return state\n },\n usedatasetSessionDate(state, action) {\n state.walletTabScreen.setSessionDate = action.payload\n return state\n },\n usedatawebViewLod(state, action) {\n state.walletTabScreen.webViewLod = action.payload\n return state\n },\n },\n extraReducers: builder => {\n // todo\n },\n})\n\nexport const browserActions = slice.actions\nexport default slice.reducer\n","/* eslint-disable indent */\nimport React, { useContext } from 'react'\n\nexport interface ApprovalContextType {\n getApproval: () => Promise<any>\n resolveApproval: (data?: any, stay?: boolean, forceReject?: boolean) => Promise<void>\n rejectApproval: (reason?: string, stay?: boolean, isInternal?: boolean) => Promise<void>\n}\n\nconst initContext = {\n getApproval: () => {\n return Promise.resolve()\n },\n resolveApproval: (data?: any, stay?: boolean, forceReject?: boolean) => {\n return Promise.resolve()\n },\n rejectApproval: (reason?: string, stay?: boolean, isInternal?: boolean) => {\n return Promise.resolve()\n },\n}\n\nexport const ApprovalContext = React.createContext<ApprovalContextType>(initContext)\n\nexport function useApproval() {\n const ctx = useContext(ApprovalContext)\n return ctx\n}\n","import React, { useContext } from 'react'\n\nexport interface DeviceContextType {\n isMobile: boolean\n isIOS: boolean\n isAndroid: boolean\n isExtensionInExpandView: boolean\n isExtensionInSideBar: boolean\n isExtension: boolean\n isMobileScreenSize: boolean\n isDesktopScreenSize: boolean\n platform: string\n hasBottomButton: boolean\n cardColumnsInList: number\n}\n\nconst initContext = {\n isMobile: false,\n isIOS: false,\n isAndroid: false,\n isExtension: false,\n isExtensionInExpandView: false,\n isExtensionInSideBar: false,\n isMobileScreenSize: false,\n isDesktopScreenSize: false,\n platform: 'unknown',\n hasBottomButton: false,\n cardColumnsInList: 2,\n}\n\nexport const DeviceContext = React.createContext<DeviceContextType>(initContext)\n\nexport function useDevice() {\n const ctx = useContext(DeviceContext)\n return ctx\n}\n","import { FALLBACK_LOCALE } from '@unisat/wallet-shared'\nimport log from 'loglevel'\nimport React, { createContext, useContext, useEffect, useState } from 'react'\n\nexport interface I18nContextType {\n t: (key: string, substitutions?: string | string[] | Record<string, string | number>) => string\n locale: string\n supportedLocales: string[]\n localeNames: Record<string, string>\n changeLocale: (locale: string) => Promise<void>\n addResourceBundle?: (locale: string) => Promise<void>\n isSpecialLocale: boolean\n}\n\n// Create context\nexport const I18nContext = createContext<I18nContextType>({\n t: key => key,\n locale: FALLBACK_LOCALE,\n supportedLocales: [],\n localeNames: {},\n changeLocale: async () => {},\n addResourceBundle: async () => {},\n isSpecialLocale: false,\n})\n\nexport function useI18n() {\n const context = useContext(I18nContext)\n if (!context) {\n throw Error('Feature flag hooks can only be used by children of BridgeProvider.')\n } else {\n return context\n }\n}\n","import {\n Account,\n AlkanesBalance,\n AlkanesInfo,\n BabylonTxInfo,\n CAT20Balance,\n CAT20TokenInfo,\n CAT721CollectionInfo,\n CAT_VERSION,\n Inscription,\n RuneBalance,\n RuneInfo,\n TokenBalance,\n TokenInfo,\n ToSignData,\n WalletKeyring,\n} from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport React, { useContext } from 'react'\n\nexport type RouteParamList = {\n WelcomeScreen: undefined\n UnlockScreen: {\n autoUnlockByFace: boolean\n }\n CreatePasswordScreen: {\n isNewAccount?: boolean\n isKeystone?: boolean\n fromColdWallet?: boolean\n }\n\n MainScreen: undefined\n\n // tabs\n WalletTabScreen: undefined\n AppTabScreen: undefined\n TabMainScreen: undefined\n DiscoverTabScreen: undefined\n SettingsTabScreen: undefined\n\n // WALLET\n CreateHDWalletScreen: {\n restoreTiTle?: boolean\n topTitle?: boolean\n finalButton?: string\n existingMnemonic?: string\n isBackupFlow?: boolean\n\n isImport?: boolean\n comeFrom?: string\n fromUnlock?: boolean\n goBack?: boolean\n }\n CreateSimpleWalletScreen: undefined\n CreateWatchWalletScreen: undefined\n CreateColdWalletScreen: {\n fromUnlock?: boolean\n }\n CreateKeystoneWalletScreen: {\n fromUnlock?: boolean\n }\n\n EditWalletNameScreen: {\n keyring: WalletKeyring\n }\n ExportMnemonicsScreen: { keyring: WalletKeyring }\n ExportPrivateKeyScreen: {\n account: Account\n }\n SwitchAccountScreen: undefined\n ReceiveScreen: undefined\n HistoryScreen: undefined\n KeyringOrAccountScreen: undefined\n AddKeyringScreen: undefined\n ImportHDWalletScreen: {\n comeFrom?: string\n }\n CreateAccountScreen: {\n keyringKey?: string\n }\n CreateKeystoneScreen: {\n comeFrom?: string\n goBack?: boolean\n }\n EditAccountNameScreen: {\n account: Account\n }\n KeyringDetailScreen: {\n keyringKey?: string\n }\n\n // Settings\n ConnectedSitesScreen: undefined\n AddressTypeScreen: undefined\n AdvancedScreen: undefined\n ContactsScreen: {\n returnWithNetwork?: ChainType\n lastEditedContactAddress?: string\n }\n EditContactScreen: {\n address?: string\n chain?: string\n selectedNetworkFilter: string\n }\n AboutUsScreen: undefined\n LanguageScreen: undefined\n ChangePasswordScreen: undefined\n ModuleAssets: undefined\n NotificationListScreen: undefined\n\n // Tools\n UtxoToolsMainScreen: undefined\n ScanScreen: {\n from?: string\n }\n BrowserScreen: {\n info: any\n }\n\n // BTC\n TxCreateScreen: undefined\n\n // INSCRIPTIONS\n OrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n withSend?: boolean\n }\n SendOrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n }\n SplitOrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n }\n\n // BRC20\n BRC20TokenScreen: {\n ticker: string\n tokenBalance?: TokenBalance\n }\n BRC20SendScreen: {\n tokenBalance: TokenBalance\n tokenInfo: TokenInfo\n selectedInscriptionIds?: string[]\n selectedAmount?: string\n }\n BRC20InscribeTransfer: {\n ticker: string\n }\n BRC20SingleStepScreen: {\n tokenBalance: TokenBalance\n tokenInfo: TokenInfo\n }\n InscribeTransferScreen: {\n ticker: string\n }\n\n // RUNES\n RunesTokenScreen: {\n runeid: string\n }\n SendRunesScreen: {\n runeBalance: RuneBalance\n runeInfo: RuneInfo\n }\n\n // Alkanes\n AlkanesTokenScreen: {\n alkaneid: string\n }\n SendAlkanesScreen: {\n tokenBalance: AlkanesBalance\n tokenInfo: AlkanesInfo\n }\n AlkanesCollectionScreen: {\n collectionId: string\n }\n AlkanesNFTScreen: {\n alkanesInfo: AlkanesInfo\n }\n SendAlkanesNFTScreen: {\n alkanesInfo: AlkanesInfo\n }\n\n // CAT\n CAT20TokenScreen: {\n tokenId: string\n version: CAT_VERSION\n }\n SendCAT20Screen: {\n version: CAT_VERSION\n cat20Balance: CAT20Balance\n cat20Info: CAT20TokenInfo\n }\n MergeCAT20Screen: {\n version: CAT_VERSION\n cat20Balance: CAT20Balance\n cat20Info: CAT20TokenInfo\n }\n CAT721CollectionScreen: {\n collectionId: string\n version: CAT_VERSION\n }\n CAT721NFTScreen: {\n version: CAT_VERSION\n collectionInfo: CAT721CollectionInfo\n localId: string\n }\n SendCAT721Screen: {\n version: CAT_VERSION\n collectionInfo: CAT721CollectionInfo\n localId: string\n }\n\n // Babylon\n BabylonTxConfirmScreen: {\n txInfo: BabylonTxInfo\n }\n BabylonStakingScreen: undefined\n SendBabyScreen: undefined\n\n // TX\n TxConfirmScreen: {\n toSignData: ToSignData\n }\n TxSuccessScreen: {\n txid: string\n }\n TxFailScreen: {\n error: string\n }\n}\n\nexport type RouteTypes = keyof RouteParamList\n\ntype NavigateArgs<T extends RouteTypes> = RouteParamList[T] extends undefined\n ? [screenName: T]\n : [screenName: T, params: RouteParamList[T]]\n\nexport interface NavigationContextType {\n navigate<T extends RouteTypes>(...args: NavigateArgs<T>): void\n\n replace<T extends RouteTypes>(...args: NavigateArgs<T>): void\n\n poptotop: () => void\n goBack: () => void\n navToTab: () => void\n navToTest: () => void\n navToLock: (params?: any) => void\n navToWelcome: () => void\n\n getRouteState<T extends RouteTypes>(): RouteParamList[T]\n\n navToUtxoTools: () => void\n navToUrl: (url: string, externalBrowser?: boolean) => void\n\n navToExplorerTx: (txid: string) => void\n navToExplorerAddress: (address: string) => void\n\n navToMarketPlace: () => void\n navToMarketPlaceBrc20: (ticker: string) => void\n navToInscribeBrc20: (ticker: string) => void\n\n openExtensionInTab?: () => void // in extension only\n navToRootHome: () => void // in extension only\n}\n\nconst initContext = {\n navigate: () => {},\n poptotop: () => {},\n goBack: () => {},\n replace: () => {},\n navToTab: () => {},\n navToTest: () => {},\n navToLock: () => {},\n navToWelcome: () => {},\n\n getRouteState<T>(): T {\n // todo\n return undefined as T\n },\n\n navToUtxoTools: () => {},\n\n navToUrl: (url: string, externalBrowser?: boolean) => {},\n navToExplorerTx: (txid: string) => {},\n navToExplorerAddress: (address: string) => {},\n\n navToMarketPlace: () => {},\n navToMarketPlaceBrc20: (ticker: string) => {},\n navToInscribeBrc20: (ticker: string) => {},\n\n // in extension only\n openExtensionInTab: () => {},\n navToRootHome: () => {},\n}\n\nexport const NavigationContext = React.createContext<NavigationContextType>(initContext)\n\nexport function useNavigation() {\n const ctx = useContext(NavigationContext)\n return ctx\n}\n","import React, { ReactNode, useCallback, useContext, useEffect, useState } from 'react'\n\nimport { CoinPrice } from '@unisat/wallet-shared'\nimport { useWallet } from './WalletContext'\n\nimport { useChain, useChainType } from '../hooks/settings'\n\ninterface PriceContextType {\n isLoadingCoinPrice: boolean\n coinPrice: CoinPrice\n refreshCoinPrice: () => void\n}\n\nconst PriceContext = React.createContext<PriceContextType>({} as PriceContextType)\n\nexport function usePrice() {\n const context = useContext(PriceContext)\n if (!context) {\n throw Error('Feature flag hooks can only be used by children of BridgeProvider.')\n } else {\n return context\n }\n}\n\nlet isRequestingCoinPrice = false\nlet refreshCoinPriceTime = 0\n\nexport function PriceProvider({ children }: { children: ReactNode }) {\n const wallet = useWallet()\n const chainType = useChainType()\n const chain = useChain()\n const [isLoadingCoinPrice, setIsLoadingCoinPrice] = useState(false)\n const [coinPrice, setCoinPrice] = useState<CoinPrice>({\n btc: 0,\n fb: 0,\n })\n\n const refreshCoinPrice = useCallback(() => {\n if (chain.showPrice === false) {\n return\n }\n if (isRequestingCoinPrice) {\n return\n }\n // 30s cache\n if (Date.now() - refreshCoinPriceTime < 30 * 1000) {\n return\n }\n isRequestingCoinPrice = true\n setIsLoadingCoinPrice(true)\n\n wallet\n .getCoinPrice()\n .then(res => {\n refreshCoinPriceTime = Date.now()\n setCoinPrice(res)\n })\n .catch(e => {\n setCoinPrice({\n btc: 0,\n fb: 0,\n })\n })\n .finally(() => {\n setIsLoadingCoinPrice(false)\n isRequestingCoinPrice = false\n })\n }, [chainType, chain])\n\n useEffect(() => {\n refreshCoinPrice()\n }, [refreshCoinPrice])\n\n const value = {\n isLoadingCoinPrice,\n coinPrice,\n refreshCoinPrice,\n }\n\n return <PriceContext.Provider value={value}>{children}</PriceContext.Provider>\n}\n","import React, { ReactNode, useContext } from 'react'\n\nimport { BabylonConfigV2 } from '@unisat/babylon-service/types'\n\nimport {\n Account,\n AddressAlkanesTokenSummary,\n AddressCAT20TokenSummary,\n AddressCAT20UtxoSummary,\n AddressCAT721CollectionSummary,\n AddressFlagType,\n AddressRunesTokenSummary,\n AddressSummary,\n AddressTokenSummary,\n AlkanesBalance,\n AlkanesCollection,\n AlkanesInfo,\n Announcement,\n AppInfo,\n AppSummary,\n BabylonAddressSummary,\n BitcoinBalance,\n BitcoinBalanceV2,\n BRC20HistoryItem,\n BtcChannelItem,\n CAT20Balance,\n CAT20MergeOrder,\n CAT721Balance,\n CoinPrice,\n ConnectedSite,\n CosmosBalance,\n CosmosSignDataType,\n DecodedPsbt,\n DummyTxType,\n LocalPsbtSummary,\n FeeSummary,\n InscribeOrder,\n Inscription,\n InscriptionSummary,\n RateUsStatus,\n RuneBalance,\n SignedData,\n SignedMessage,\n SignPsbtOptions,\n StoredNotification,\n TickPriceItem,\n TokenBalance,\n TokenTransfer,\n ToSignData,\n ToSignInput,\n ToSignMessage,\n TxHistoryItem,\n UnspentOutput,\n UTXO,\n UTXO_Detail,\n VersionDetail,\n WalletConfig,\n WalletKeyring,\n WebsiteResult,\n} from '@unisat/wallet-shared'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\n\ninterface ContactBookItem {\n name: string\n address: string\n chain: ChainType\n isAlias: boolean\n isContact: boolean\n sortIndex?: number\n}\ntype ContactBookStore = Record<string, ContactBookItem | undefined>\n\nexport interface WalletController {\n openapi: {\n [key: string]: (...params: any) => Promise<any>\n }\n // for development use only\n requestMethod: (...params: any) => Promise<any>\n\n setBackgroundInited(value: boolean): Promise<void>\n getBackgroundInited(): Promise<boolean>\n\n getDesc: () => string\n boot(password: string): Promise<void>\n isBooted(): Promise<boolean>\n\n getApproval(): Promise<any>\n resolveApproval(data?: any, data2?: any): Promise<void>\n rejectApproval(data?: any, data2?: any, data3?: any): Promise<void>\n\n hasVault(): Promise<boolean>\n\n verifyPassword(password: string): Promise<boolean>\n changePassword: (password: string, newPassword: string) => Promise<void>\n\n unlock(password: string): Promise<void>\n isUnlocked(): Promise<boolean>\n\n lockWallet(): Promise<void>\n setPopupOpen(isOpen: boolean): void\n isReady(): Promise<boolean>\n\n getIsFirstOpen(): Promise<boolean>\n updateIsFirstOpen(): Promise<void>\n\n getAddressBalanceV2(address: string): Promise<BitcoinBalanceV2>\n getAddressBalance(address: string): Promise<BitcoinBalance>\n getAddressCacheBalance(address: string): Promise<BitcoinBalance>\n getMultiAddressAssets(addresses: string): Promise<AddressSummary[]>\n findGroupAssets(\n groups: { type: number; address_arr: string[]; pubkey_arr: string[] }[]\n ): Promise<\n { type: number; address_arr: string[]; pubkey_arr: string[]; satoshis_arr: number[] }[]\n >\n\n getAddressInscriptions(\n address: string,\n cursor: number,\n size: number\n ): Promise<{ list: Inscription[]; total: number }>\n\n getAddressHistory: (params: {\n address: string\n start: number\n limit: number\n }) => Promise<{ start: number; total: number; detail: TxHistoryItem[] }>\n getAddressCacheHistory: (address: string) => Promise<TxHistoryItem[]>\n\n getLocale(): Promise<string>\n setLocale(locale: string): Promise<void>\n\n getCurrency(): Promise<string>\n setCurrency(currency: string): Promise<void>\n\n clearKeyrings(): Promise<void>\n getPrivateKey(\n password: string,\n account: { address: string; type: string }\n ): Promise<{ hex: string; wif: string }>\n getMnemonics(\n password: string,\n keyring: WalletKeyring\n ): Promise<{\n hdPath: string\n mnemonic: string\n passphrase: string\n }>\n createKeyringWithPrivateKey(\n data: string,\n addressType: AddressType,\n alianName?: string\n ): Promise<Account[]>\n getPreMnemonics(): Promise<any>\n generatePreMnemonic(): Promise<string>\n removePreMnemonics(): void\n createKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation?: boolean\n ): Promise<{ address: string; type: string }[]>\n createKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount: number,\n filterPubkey?: string[],\n connectionType?: 'USB' | 'QR'\n ): Promise<{ address: string; type: string }[]>\n createTmpKeyringWithPrivateKey(\n privateKey: string,\n addressType: AddressType\n ): Promise<WalletKeyring>\n createTmpKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n createKeyringWithColdWallet(\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n deriveAccountsFromXpub(\n xpub: string,\n addressType: AddressType,\n hdPath?: string,\n accountCount?: number\n ): Promise<{ pubkey: string; address: string }[]>\n\n createTmpKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount?: number,\n accountIndexDerivation?: boolean\n ): Promise<WalletKeyring>\n\n createTmpKeyringWithMnemonics2(\n mnemonic: string,\n passphrase: string,\n hdPaths: string[],\n addressTypes: AddressType[]\n ): Promise<WalletKeyring[]>\n\n createTmpKeyringWithMnemonicsScan(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation?: boolean\n ): Promise<WalletKeyring>\n\n removeKeyring(keyring: WalletKeyring): Promise<WalletKeyring>\n deriveNewAccountFromMnemonic(keyring: WalletKeyring, alianName?: string): Promise<string[]>\n getAccountsCount(): Promise<number>\n getAllAlianName: () => (ContactBookItem | undefined)[]\n getContactsByMap: () => ContactBookStore\n\n getCurrentAccount(): Promise<Account>\n getAccounts(): Promise<Account[]>\n getNextAlianName: (keyring: WalletKeyring) => Promise<string>\n\n getCurrentKeyringAccounts(): Promise<Account[]>\n\n signPsbtV2(toSignData: ToSignData): Promise<SignedData>\n\n signMessage(params: ToSignMessage): Promise<SignedMessage>\n\n createSendBTCPsbt(data: {\n to: string\n amount: number\n btcUtxos: UnspentOutput[]\n feeRate: number\n memo?: string\n memos?: string[]\n }): Promise<ToSignData>\n\n createSendAllBTCPsbt(data: {\n to: string\n btcUtxos: UnspentOutput[]\n feeRate: number\n }): Promise<ToSignData>\n\n createSendInscriptionPsbt(data: {\n to: string\n inscriptionId: string\n feeRate: number\n outputValue?: number\n btcUtxos: UnspentOutput[]\n }): Promise<ToSignData>\n\n createSendMultipleInscriptionsPsbt(data: {\n to: string\n inscriptionIds: string[]\n feeRate: number\n btcUtxos: UnspentOutput[]\n }): Promise<ToSignData>\n\n createSplitInscriptionPsbt(data: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n btcUtxos: UnspentOutput[]\n }): Promise<ToSignData>\n\n pushTx(rawtx: string): Promise<string>\n\n queryDomainInfo(domain: string): Promise<Inscription>\n\n getInscriptionSummary(): Promise<InscriptionSummary>\n getAppSummary(): Promise<AppSummary>\n getBTCUtxos(): Promise<UnspentOutput[]>\n getAssetUtxosInscriptions(inscriptionId: string): Promise<UnspentOutput[]>\n\n getNetworkType(): Promise<NetworkType>\n setNetworkType(type: NetworkType): Promise<void>\n\n getChainType(): Promise<ChainType>\n setChainType(type: ChainType): Promise<void>\n\n getConnectedSites(): Promise<ConnectedSite[]>\n removeConnectedSite(origin: string): Promise<void>\n getCurrentConnectedSite(id: string): Promise<ConnectedSite>\n updateConnectSite(origin: string, data: Partial<ConnectedSite>): Promise<void>\n\n getCurrentKeyring(): Promise<WalletKeyring>\n getKeyrings(): Promise<WalletKeyring[]>\n getTotalKeyringCount(): Promise<number>\n changeKeyring(keyring: WalletKeyring, accountIndex?: number): Promise<void>\n getAllAddresses(keyring: WalletKeyring, index: number): Promise<string[]>\n\n setKeyringAlianName(keyring: WalletKeyring, name: string): Promise<WalletKeyring>\n changeAddressType(addressType: AddressType): Promise<void>\n\n setAccountAlianName(account: Account, name: string): Promise<Account>\n getFeeSummary(): Promise<FeeSummary>\n getLowFeeSummary(): Promise<FeeSummary>\n getCoinPrice(): Promise<CoinPrice>\n getBrc20sPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getRunesPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getCAT20sPrice(tokenIds: string[]): Promise<{ [tokenId: string]: TickPriceItem }>\n getAlkanesPrice(alkaneid: string[]): Promise<{ [tick: string]: TickPriceItem }>\n\n setEditingKeyring(keyringIndex: number): Promise<void>\n getEditingKeyring(): Promise<WalletKeyring>\n\n setEditingAccount(account: Account): Promise<void>\n getEditingAccount(): Promise<Account>\n\n inscribeBRC20Transfer(\n address: string,\n tick: string,\n amount: string,\n feeRate: number,\n outputValue: number\n ): Promise<InscribeOrder>\n getInscribeResult(orderId: string): Promise<TokenTransfer>\n\n decodePsbt(psbtHex: string, website: string): Promise<DecodedPsbt>\n analyzeLocalPsbts(toSignDatas: ToSignData[]): Promise<LocalPsbtSummary>\n\n decodeContracts(contracts: any[], account: any): Promise<any[]>\n\n getAllInscriptionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20List(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20ProgList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20TransferableList(\n address: string,\n ticker: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenTransfer[] }>\n\n getOrdinalsInscriptions(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20Summary(address: string, ticker: string): Promise<AddressTokenSummary>\n\n expireUICachedData(address: string): Promise<void>\n\n getWalletConfig(): Promise<WalletConfig>\n\n getSkippedVersion(): Promise<string>\n setSkippedVersion(version: string): Promise<void>\n\n getInscriptionUtxoDetail(inscriptionId: string): Promise<UTXO_Detail>\n getUtxoByInscriptionId(inscriptionId: string): Promise<UTXO>\n getInscriptionInfo(inscriptionId: string): Promise<Inscription>\n\n checkWebsite(website: string): Promise<WebsiteResult>\n\n readTab(tabName: string): Promise<void>\n readApp(appid: number): Promise<void>\n\n formatOptionsToSignInputs(psbtHex: string, options?: SignPsbtOptions): Promise<ToSignInput[]>\n\n getAddressSummary(address: string): Promise<AddressSummary>\n\n getShowSafeNotice(): Promise<boolean>\n setShowSafeNotice(show: boolean): Promise<void>\n\n // address flag\n addAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n removeAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n\n getVersionDetail(version: string): Promise<VersionDetail>\n\n genSignPsbtUr(psbtHex: string): Promise<{ type: string; cbor: string }>\n parseSignPsbtUr(\n type: string,\n cbor: string,\n isFinalize?: boolean\n ): Promise<{ psbtHex: string; rawtx?: string }>\n genSignMsgUr(\n text: string,\n msgType?: string\n ): Promise<{ type: string; cbor: string; requestId: string }>\n parseSignMsgUr(type: string, cbor: string, msgType: string): Promise<{ signature: string }>\n getKeystoneConnectionType(): Promise<'USB' | 'QR'>\n genSignCosmosUr(cosmosSignRequest: {\n requestId?: string\n signData: string\n dataType: CosmosSignDataType\n path: string\n chainId?: string\n accountNumber?: string\n address?: string\n }): Promise<{ type: string; cbor: string; requestId: string }>\n parseCosmosSignUr(type: string, cbor: string): Promise<any>\n\n cosmosSignData(\n chainId: string,\n signBytesHex: string\n ): Promise<{\n publicKey: string\n signature: string\n }>\n\n getEnableSignData(): Promise<boolean>\n setEnableSignData(enable: boolean): Promise<void>\n\n getRunesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: RuneBalance[] }>\n\n getAssetUtxosRunes(rune: string): Promise<UnspentOutput[]>\n\n getAddressRunesTokenSummary(address: string, runeid: string): Promise<AddressRunesTokenSummary>\n\n createSendRunesPsbt(data: {\n to: string\n runeid: string\n runeAmount: string\n feeRate: number\n btcUtxos?: UnspentOutput[]\n assetUtxos?: UnspentOutput[]\n outputValue?: number\n }): Promise<ToSignData>\n\n setAutoLockTimeId(timeId: number): Promise<void>\n getAutoLockTimeId(): Promise<number>\n\n getDeveloperMode(): Promise<boolean>\n setDeveloperMode(developerMode: boolean): Promise<void>\n\n getCAT20List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT20Balance[] }>\n\n getAddressCAT20TokenSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20TokenSummary>\n\n getAddressCAT20UtxoSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20UtxoSummary>\n\n transferCAT20Step1(\n version: 'v1' | 'v2',\n to: string,\n tokenId: string,\n tokenAmount: string,\n feeRate: number\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n transferCAT20Step2(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ toSignData: ToSignData }>\n transferCAT20Step3(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ txid: string }>\n\n mergeCAT20Prepare(\n version: 'v1' | 'v2',\n tokenId: string,\n utxoCount: number,\n feeRate: number\n ): Promise<CAT20MergeOrder>\n transferCAT20Step1ByMerge(\n version: 'v1' | 'v2',\n mergeId: string\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n getMergeCAT20Status(version: 'v1' | 'v2', mergeId: string): Promise<any>\n\n getAppList(): Promise<{ tab: string; items: AppInfo[] }[]>\n getBannerList(): Promise<{ id: string; img: string; link: string }[]>\n getBlockActiveInfo(): Promise<{ allTransactions: number; allAddrs: number }>\n\n getCAT721List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT721Balance[] }>\n\n getAddressCAT721CollectionSummary(\n version: 'v1' | 'v2',\n address: string,\n collectionId: string\n ): Promise<AddressCAT721CollectionSummary>\n\n transferCAT721Step1(\n version: 'v1' | 'v2',\n to: string,\n collectionId: string,\n localId: string,\n feeRate: number\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n transferCAT721Step2(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ toSignData: ToSignData }>\n transferCAT721Step3(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ txid: string }>\n\n getBuyCoinChannelList(coin: string): Promise<BtcChannelItem[]>\n createBuyCoinPaymentUrl(coin: string, address: string, channel: string): Promise<string>\n\n getBabylonAddress(address: string): Promise<string>\n\n getBabylonAddressSummary(\n chainId: string,\n babylonConfig?: BabylonConfigV2\n ): Promise<BabylonAddressSummary>\n\n createSendTokenStep1(\n chainId: string,\n tokenBalance: CosmosBalance,\n to: string,\n memo: string,\n {\n gasLimit,\n gasPrice,\n gasAdjustment,\n }: {\n gasLimit: number\n gasPrice: string\n gasAdjustment?: number\n }\n ): Promise<string>\n createSendTokenStep2(chainId: string, signature: string): Promise<string>\n\n simulateBabylonGas(\n chainId: string,\n recipient: string,\n amount: { denom: string; amount: string },\n memo: string\n ): Promise<number>\n\n getBabylonConfig(): Promise<BabylonConfigV2>\n\n getContactByAddress(address: string): Promise<ContactBookItem | undefined>\n getContactByAddressAndChain(\n address: string,\n chain: ChainType\n ): Promise<ContactBookItem | undefined>\n updateContact(data: ContactBookItem): Promise<void>\n removeContact(address: string, chain?: ChainType): Promise<void>\n listContacts(): Promise<ContactBookItem[]>\n saveContactsOrder(contacts: ContactBookItem[]): Promise<void>\n\n singleStepTransferBRC20Step1(params: {\n userAddress: string\n userPubkey: string\n receiver: string\n ticker: string\n amount: string\n feeRate: number\n }): Promise<{\n orderId: string\n toSignData: ToSignData\n }>\n\n singleStepTransferBRC20Step2(params: { orderId: string; commitTx: string }): Promise<{\n toSignData: ToSignData\n }>\n\n singleStepTransferBRC20Step3(params: {\n orderId: string\n revealTx: string\n }): Promise<{ txid: string }>\n\n setLastActiveTime(): void\n\n getOpenInSidePanel(): Promise<boolean>\n setOpenInSidePanel(openInSidePanel: boolean): Promise<void>\n\n createSendBTCOffsetPsbt(\n tos: { address: string; satoshis: number }[],\n feeRate: number\n ): Promise<ToSignData>\n\n getAlkanesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: AlkanesBalance[] }>\n\n getAssetUtxosAlkanes(rune: string): Promise<UnspentOutput[]>\n\n getAddressAlkanesTokenSummary(\n address: string,\n alkaneid: string,\n fetchAvailable: boolean\n ): Promise<AddressAlkanesTokenSummary>\n\n createSendAlkanesPsbt(params: {\n to: string\n alkaneid: string\n amount: string\n feeRate: number\n type: 'ft' | 'nft'\n }): Promise<ToSignData>\n\n getAlkanesCollectionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ list: AlkanesCollection[]; total: number }>\n getAlkanesCollectionItems(\n address: string,\n collectionId: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; list: AlkanesInfo[]; total: number }>\n\n getBRC20RecentHistory(address: string, ticker: string): Promise<BRC20HistoryItem[]>\n\n resetAllData(): Promise<void>\n\n getGuideReaded(): Promise<boolean>\n setGuideReaded(): Promise<void>\n\n getRateUsStatus(): Promise<RateUsStatus>\n\n setHasRated(hasRated: boolean): Promise<void>\n setRatePromptDismissedAt(timestamp: number | null): Promise<void>\n setHasShownSecondPrompt(hasShown: boolean): Promise<void>\n resetRateUsStatus(): Promise<void>\n getAnnouncements(\n cursor: number,\n size: number\n ): Promise<{\n hasMore: boolean\n list: Announcement[]\n }>\n\n getNotifications(): Promise<StoredNotification[]>\n readNotification(id: string): Promise<void>\n readAllNotifications(): Promise<void>\n deleteNotification(id: string): Promise<void>\n getNotificationUnreadCount(): Promise<number>\n\n getAcceptLowFeeMode(): Promise<boolean>\n setAcceptLowFeeMode(accept: boolean): Promise<void>\n\n createTmpKeyringWithPublicKey(publicKey: string, addressType: AddressType): Promise<WalletKeyring>\n\n createKeyringWithPublicKey(data: string, addressType: AddressType): Promise<void>\n\n createTmpKeyringWithAddress(address: string): Promise<WalletKeyring>\n\n createKeyringWithAddress(address: string): Promise<void>\n\n createDummyPsbt(params: { txType: DummyTxType }): Promise<ToSignData>\n}\n\nconst WalletContext = React.createContext<{\n wallet: WalletController\n} | null>(null)\n\nconst WalletProvider = ({\n children,\n wallet,\n}: {\n children?: ReactNode\n wallet: WalletController\n}) => <WalletContext.Provider value={{ wallet }}>{children}</WalletContext.Provider>\n\nconst useWallet = () => {\n const { wallet } = useContext(WalletContext) as {\n wallet: WalletController\n }\n\n return wallet\n}\n\nexport { useWallet, WalletProvider }\n","import compareVersions from 'compare-versions'\nimport { useCallback } from 'react'\n\nimport { BABYLON_CONFIG_MAP } from '@unisat/babylon-service/types'\nimport { CAT_VERSION, CHAINS_MAP, PlatformEnv } from '@unisat/wallet-shared'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\nimport { getAddressType } from '../utils/bitcoin-utils'\n\nimport { useI18n } from 'src/context/I18nContext'\nimport { AppState } from '..'\nimport { useCurrentAccount } from '../hooks/accounts'\nimport { settingsActions } from '../reducers/settings'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useSettingsState(): AppState['settings'] {\n return useAppSelector(state => state.settings)\n}\n\nexport function useLocale() {\n const settings = useSettingsState()\n return settings.locale\n}\n\nexport function useChangeLocaleCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const i18n = useI18n()\n return useCallback(\n async (locale: string) => {\n await wallet.setLocale(locale)\n await i18n.addResourceBundle(locale)\n i18n.changeLocale(locale)\n dispatch(\n (settingsActions as any).updateSettings({\n locale,\n })\n )\n\n // @ts-ignore\n window.location.reload()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useNetworkType() {\n const accountsState = useSettingsState()\n const chain = CHAINS_MAP[accountsState.chainType]\n if (chain) {\n return chain.networkType\n } else {\n return NetworkType.TESTNET\n }\n}\n\nexport function useChangeNetworkTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: NetworkType) => {\n if (type === NetworkType.MAINNET) {\n await wallet.setChainType(ChainType.BITCOIN_MAINNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_MAINNET,\n })\n )\n } else if (type === NetworkType.TESTNET) {\n await wallet.setChainType(ChainType.BITCOIN_TESTNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_TESTNET,\n })\n )\n }\n },\n [dispatch]\n )\n}\n\nexport function useChainType() {\n const accountsState = useSettingsState()\n return accountsState.chainType\n}\n\nexport function useChain() {\n const accountsState = useSettingsState()\n return CHAINS_MAP[accountsState.chainType]\n}\n\nexport function useChangeChainTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: ChainType) => {\n await wallet.setChainType(type)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: type,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useBTCUnit() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unit\n}\n\nexport function useTxExplorerUrl(txid: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n}\n\nexport function useGetTxExplorerUrlCallback() {\n const chain = useChain()!\n return useCallback(\n (txid: string) => {\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n },\n [chain]\n )\n}\n\nexport function useAddressExplorerUrl(address: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/address/${address}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/address/${address}`\n } else {\n return `${chain.unisatExplorerUrl}/address/${address}`\n }\n}\n\nexport function useCAT20TokenInfoExplorerUrl(version: CAT_VERSION, tokenId: string) {\n const chain = useChain()!\n if (version === CAT_VERSION.V1) {\n return `${chain.unisatExplorerUrl}/cat20/${tokenId}`\n } else {\n return `${chain.unisatExplorerUrl}/cat20-v2/${tokenId}`\n }\n}\n\nexport function useBRC20TokenInfoExplorerUrl(ticker: string) {\n const chain = useChain()!\n return `${chain.unisatExplorerUrl}/brc20/${encodeURIComponent(ticker)}`\n}\n\nexport function useUnisatWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unisatUrl\n}\n\nexport function useIconBaseUrl() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.iconBaseUrl\n}\n\nexport function useOrdinalsWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.ordinalsUrl\n}\n\nexport function useWalletConfig() {\n const accountsState = useSettingsState()\n return accountsState.walletConfig\n}\n\nexport function useVersionInfo() {\n const accountsState = useSettingsState()\n const walletConfig = accountsState.walletConfig\n const newVersion = walletConfig.version\n const skippedVersion = accountsState.skippedVersion\n const currentVesion = PlatformEnv.VERSION\n let skipped = false\n let latestVersion = ''\n // skip if new version is empty\n if (!newVersion) {\n skipped = true\n }\n\n // skip if skipped\n if (newVersion == skippedVersion) {\n skipped = true\n }\n\n // skip if current version is greater or equal to new version\n if (currentVesion && newVersion) {\n if (compareVersions(currentVesion, newVersion) >= 0) {\n skipped = true\n } else {\n latestVersion = newVersion\n }\n }\n\n // skip if current version is 0.0.0\n if (currentVesion === '0.0.0') {\n skipped = true\n }\n return {\n currentVesion,\n newVersion,\n latestVersion,\n skipped,\n downloadUrl: '',\n isNewest: false,\n }\n}\n\nexport function useSkipVersionCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n return useCallback((version: string) => {\n wallet.setSkippedVersion(version).then(v => {\n dispatch((settingsActions as any).updateSettings({ skippedVersion: version }))\n })\n }, [])\n}\n\nexport function useAutoLockTimeId() {\n const state = useSettingsState()\n return state.autoLockTimeId\n}\n\nexport function useAddressTips() {\n const chain = useChain()!\n const account = useCurrentAccount()\n const address = account.address\n const chanEnum = chain.enum\n const { t } = useI18n()\n let ret = {\n homeTip: '',\n sendTip: '',\n }\n try {\n const chain = CHAINS_MAP[chanEnum]!\n const addressType = getAddressType(address, chain.networkType)\n if (chain.isFractal && addressType === AddressType.P2PKH) {\n ret = {\n homeTip: t('legacy_address_warning_3'),\n sendTip: t('legacy_address_warning_4'),\n }\n }\n } catch (e) {\n console.log(e)\n }\n\n return ret\n}\n\nexport function useCAT721NFTContentBaseUrl(version: CAT_VERSION) {\n const chainType = useChainType()\n if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n if (version === CAT_VERSION.V1) {\n return 'https://tracker-fractal-mainnet.catprotocol.org'\n } else {\n return 'https://tracker2-fractal-mainnet.catprotocol.org'\n }\n } else if (chainType === ChainType.FRACTAL_BITCOIN_TESTNET) {\n return 'https://tracker-fractal-testnet.catprotocol.org'\n } else {\n return ''\n }\n}\n\nexport function useBabylonConfig() {\n const chainType = useChainType()\n return BABYLON_CONFIG_MAP[chainType] || BABYLON_CONFIG_MAP[ChainType.BITCOIN_MAINNET]\n}\n\nexport function useIsMainnetChain() {\n const chainType = useChainType()\n return chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n}\n\nexport function useDeveloperMode() {\n const settings = useSettingsState()\n return settings.developerMode\n}\n\nexport function useSetDeveloperModeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (developerMode: boolean) => {\n await wallet.setDeveloperMode(developerMode)\n dispatch(\n (settingsActions as any).updateSettings({\n developerMode,\n })\n )\n },\n [dispatch, wallet]\n )\n}\n","import { addressUtils } from '@unisat/base-utils'\nimport { AddressType, NetworkType } from '@unisat/wallet-types'\nimport * as bip39 from 'bip39'\nexport function getAddressType(address: string, networkType?: NetworkType) {\n if (address.startsWith('bc1q') || address.startsWith('tb1q')) {\n return AddressType.P2WPKH\n } else if (address.startsWith('bc1p') || address.startsWith('tb1p')) {\n return AddressType.P2TR\n } else if (address.startsWith('1') || address.startsWith('m') || address.startsWith('n')) {\n return AddressType.P2PKH\n } else if (address.startsWith('3') || address.startsWith('2')) {\n return AddressType.P2SH_P2WPKH\n } else {\n return AddressType.UNKNOWN\n }\n}\n\nexport function isValidAddress(address: string, networkType?: NetworkType) {\n return addressUtils.isAddressLikelyValid(address)\n}\n\nexport function getAddressUtxoDust(address: string) {\n const addressType = getAddressType(address)\n if (addressType === AddressType.P2WPKH) {\n if (address.length === 42) {\n return 294\n } else {\n return 330\n }\n } else if (addressType === AddressType.P2TR) {\n return 330\n } else {\n return 546\n }\n}\n\nexport function isValidHdPath(path: string): boolean {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // HD path should start with 'm' or 'M'\n if (!path.startsWith('m') && !path.startsWith('M')) {\n return false\n }\n\n // Split by '/' and validate each component\n const components = path.split('/')\n\n // First component should be 'm' or 'M'\n if (components[0] !== 'm' && components[0] !== 'M') {\n return false\n }\n\n // Validate each path component after 'm'\n for (let i = 1; i < components.length; i++) {\n const component = components[i]\n\n if (!component) {\n return false\n }\n\n // Check if it's a hardened path (ends with ')\n const isHardened = component.endsWith(\"'\")\n const numberPart = isHardened ? component.slice(0, -1) : component\n\n // Check if the number part is a valid integer\n if (!/^\\d+$/.test(numberPart)) {\n return false\n }\n\n const num = parseInt(numberPart, 10)\n\n // Check if number is within valid range (0 to 2^31-1)\n if (num < 0 || num >= Math.pow(2, 31)) {\n return false\n }\n }\n\n return true\n}\n\nexport function validateMnemonic(mnemonic: string): boolean {\n // do not use bip39.validateMnemonic here to reduce bundle size\n // const words = mnemonic.trim().split(/\\s+/);\n // const wordCount = words.length;\n // return [12, 15, 18, 21, 24].includes(wordCount);\n\n return bip39.validateMnemonic(mnemonic)\n}\n","import { useCallback } from 'react'\n\nimport { Account } from '@unisat/wallet-shared'\n\nimport { KeyringType } from '@unisat/keyring-service/types'\nimport { AddressType, ChainType } from '@unisat/wallet-types'\n\nimport { AppState } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { accountActions } from '../reducers/accounts'\nimport { keyringsActions } from '../reducers/keyrings'\nimport { settingsActions } from '../reducers/settings'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { useCurrentKeyring } from './keyrings'\n\nexport function useAccountsState(): AppState['accounts'] {\n return useAppSelector(state => state.accounts)\n}\n\nexport function useCurrentAccount() {\n const accountsState = useAccountsState()\n return accountsState.current\n}\n\nexport function useCurrentAddress() {\n const accountsState = useAccountsState()\n return accountsState.current.address\n}\n\nexport function useAccounts() {\n const accountsState = useAccountsState()\n return accountsState.accounts\n}\n\nexport function useAccountBalance() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return (\n accountsState.balanceV2Map[currentAccount.address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n chainType: ChainType.BITCOIN_MAINNET,\n }\n )\n}\n\nexport function useAddressSummary() {\n const accountsState = useAccountsState()\n return accountsState.addressSummary\n}\n\nexport function useAccountInscriptions() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return accountsState.inscriptionsMap[currentAccount.address] || { list: [], expired: true }\n}\n\nexport function useInscriptionSummary() {\n const accountsState = useAccountsState()\n return accountsState.inscriptionSummary\n}\n\nexport function useAppSummary() {\n const accountsState = useAccountsState()\n return accountsState.appSummary\n}\n\nexport function useUnreadAppSummary() {\n const accountsState = useAccountsState()\n const summary = accountsState.appSummary\n return summary.apps.find(w => w.time && summary.readTabTime && w.time > summary.readTabTime)\n}\n\nexport function useReadTab() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (name: 'app' | 'home' | 'settings') => {\n await wallet.readTab(name)\n if (name == 'app') {\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n }\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useReadApp() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (id: number) => {\n await wallet.readApp(id)\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useHistory() {\n const accountsState = useAccountsState()\n const address = useAccountAddress()\n return accountsState.historyMap[address] || { list: [], expired: true }\n}\n\nexport function useAccountAddress() {\n const currentAccount = useCurrentAccount()\n return currentAccount.address\n}\n\nexport function useSetCurrentAccountCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (account: Account) => {\n dispatch(accountActions['setCurrent']!(account))\n },\n [dispatch]\n )\n}\n\nexport function useImportAccountCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const currentKeyring = useCurrentKeyring()\n return useCallback(\n async (privateKey: string, addressType: AddressType) => {\n let success = false\n let error\n try {\n const alianName = await wallet.getNextAlianName(currentKeyring)\n await wallet.createKeyringWithPrivateKey(privateKey, addressType, alianName)\n const currentAccount = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(currentAccount))\n\n success = true\n } catch (e) {\n console.log(e)\n error = (e as any).message\n }\n return { success, error }\n },\n [dispatch, wallet, currentKeyring]\n )\n}\n\nexport function useChangeAddressFlagCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n return useCallback(\n async (isAdd: boolean, flag: number) => {\n const account = isAdd\n ? await wallet.addAddressFlag(currentAccount, flag)\n : await wallet.removeAddressFlag(currentAccount, flag)\n dispatch(accountActions['setCurrentAddressFlag']!(account.flag))\n },\n [dispatch, wallet, currentAccount]\n )\n}\n\n// export function useFetchHistoryCallback() {\n// const dispatch = useAppDispatch();\n// const wallet = useWallet();\n// const address = useAccountAddress();\n// return useCallback(async () => {\n// const _accountHistory = await wallet.getAddressHistory(address);\n// dispatch(\n// accountActions.setHistory({\n// address: address,\n// list: _accountHistory\n// })\n// );\n// }, [dispatch, wallet, address]);\n// }\n\nexport function useFetchBalanceCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const balance = useAccountBalance()\n return useCallback(async () => {\n if (!currentAccount.address) return\n // const cachedBalance = await wallet.getAddressCacheBalance(currentAccount.address);\n // const _accountBalance = await wallet.getAddressBalance(currentAccount.address);\n // dispatch(\n // accountActions.setBalance({\n // address: currentAccount.address,\n // amount: _accountBalance.amount,\n // btc_amount: _accountBalance.btc_amount,\n // inscription_amount: _accountBalance.inscription_amount,\n // confirm_btc_amount: _accountBalance.confirm_btc_amount,\n // pending_btc_amount: _accountBalance.pending_btc_amount\n // })\n // );\n // if (cachedBalance.amount !== _accountBalance.amount) {\n // wallet.expireUICachedData(currentAccount.address);\n // dispatch(accountActions.expireHistory());\n // }\n\n const summary = await wallet.getAddressSummary(currentAccount.address)\n summary.address = currentAccount.address\n dispatch(accountActions['setAddressSummary']!(summary))\n\n const balanceV2 = await wallet.getAddressBalanceV2(currentAccount.address)\n dispatch(\n accountActions['setBalanceV2']!({\n address: currentAccount.address,\n balance: balanceV2,\n chainType: balanceV2.chainType,\n })\n )\n }, [dispatch, wallet, currentAccount, balance])\n}\n\nexport function useReloadAccounts() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(async () => {\n const keyrings = await wallet.getKeyrings()\n dispatch(keyringsActions['setKeyrings']!(keyrings))\n\n const currentKeyring = await wallet.getCurrentKeyring()\n dispatch(keyringsActions['setCurrent']!(currentKeyring))\n\n const _accounts = await wallet.getAccounts()\n dispatch(accountActions['setAccounts']!(_accounts))\n\n const account = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(account))\n\n dispatch(accountActions['expireBalance']!(null))\n dispatch(accountActions['expireInscriptions']!(null))\n\n wallet.getWalletConfig().then(data => {\n dispatch(settingsActions['updateSettings']!({ walletConfig: data }))\n })\n }, [dispatch, wallet])\n}\n\nexport function useIsKeystoneWallet() {\n const currentKeyring = useCurrentKeyring()\n return currentKeyring.type === KeyringType.KeystoneKeyring\n}\nexport function useModelPopover() {\n const modelState = useAccountsState()\n return modelState.molelsPopover\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\n\nimport { AppDispatch, AppState } from '../index'\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>()\nexport const useAppSelector: TypedUseSelectorHook<AppState> = useSelector\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useKeyringsState(): AppState['keyrings'] {\n return useAppSelector(state => state.keyrings)\n}\n\nexport function useKeyrings() {\n const keyringsState = useKeyringsState()\n return keyringsState.keyrings\n}\n\nexport function useCurrentKeyring() {\n const keyringsState = useKeyringsState()\n return keyringsState.current\n}\n","/* eslint-disable indent */\nimport { VersionDetail } from '@unisat/wallet-shared'\nimport React, { useContext } from 'react'\n\nenum StorageType {\n ENABLE_FACEID = 'FACEIDDEFAULT',\n AUTO_LOCK_TIME = 'AutomaticLockTime',\n ENABLE_EXPLORE = 'ENABLE_EXPLORE',\n UTXO_MANAGE_VISITED = 'UTXO_MANAGE_VISITED',\n BALANCE_HIDDEN = 'HIDE_BALANCE',\n ANNOUNCEMENT_DISMISSED_IDS_KEY = '@announcement_dismissed_ids',\n\n I18N_SAVED_LANG = 'i18nextLng',\n\n WEB_SEARCH_HISTORY = 'historyList',\n WEB_RISK_WARNING = 'RiskWarning',\n\n UNBACKUP_KEYRINGS = 'unbackedup_keyrings',\n\n VERSION_DETAIL = 'version_detail',\n\n THEME_MODE = 'PREFERENCES',\n}\n\ntype AutoLockTime = {\n id: number\n time: number\n label: string\n}\n\ntype WebSearchHistoryItem = string\n\ntype WebRiskWarningItem = {\n url: string\n}\n\nconst defaultVersionDetail: VersionDetail = {\n version: '',\n title: '',\n changelogs: [],\n notice: '',\n}\n\ntype ThemeMode = 'light' | 'dark'\nconst defaultThemeMode = 'light'\n\nexport interface BaseStorageProvider {\n // storage should json.parse value after get\n get: (key: string) => Promise<any>\n\n // storage should json.stringify value before set\n set: (key: string, value: any) => Promise<void>\n}\n\nexport interface StorageContextType {\n get: (key: string) => Promise<string>\n set: (key: string, value: string) => Promise<void>\n clear: () => Promise<void>\n\n getAutomaticLockTime: () => Promise<AutoLockTime>\n clearAutomaticLockTime: () => Promise<void>\n\n getAnnouncementDismissedIds: () => Promise<string[]>\n setAnnouncementDismissedIds: (ids: string[]) => Promise<void>\n clearAnnouncementDismissedIds: () => Promise<void>\n\n getI18nSavedLang: () => Promise<string>\n setI18nSavedLang: (lang: string) => Promise<void>\n clearI18nSavedLang: () => Promise<void>\n\n getWebSearchHistory: () => Promise<WebSearchHistoryItem[]>\n setWebSearchHistory: (history: WebSearchHistoryItem[]) => Promise<void>\n clearWebSearchHistory: () => Promise<void>\n\n getWebRiskWarning: () => Promise<WebRiskWarningItem[]>\n setWebRiskWarning: (warnings: WebRiskWarningItem[]) => Promise<void>\n clearWebRiskWarning: () => Promise<void>\n\n getEnableExplore: () => Promise<boolean>\n setEnableExplore: (enable: boolean) => Promise<void>\n clearEnableExplore: () => Promise<void>\n\n getUnbackupKeyringIds: () => Promise<string[]>\n setUnbackupKeyringIds: (keyrings: string[]) => Promise<void>\n clearUnbackupKeyringIds: () => Promise<void>\n\n getEnableFaceId: () => Promise<boolean>\n setEnableFaceId: (enable: boolean) => Promise<void>\n clearEnableFaceId: () => Promise<void>\n\n getBalanceHidden: () => Promise<boolean>\n setBalanceHidden: (enable: boolean) => Promise<void>\n clearBalanceHidden: () => Promise<void>\n\n getVersionDetail: () => Promise<VersionDetail>\n setVersionDetail: (detail: VersionDetail) => Promise<void>\n clearVersionDetail: () => Promise<void>\n\n getThemeMode: () => Promise<string>\n setThemeMode: (mode: string) => Promise<void>\n clearThemeMode: () => Promise<void>\n\n getUtxoManageVisited: () => Promise<boolean>\n setUtxoManageVisited: () => Promise<void>\n clearUtxoManageVisited: () => Promise<void>\n}\n\nconst defaultContext: StorageContextType = {\n async get(key: string) {\n return ''\n },\n async set(key: string, content: string) {},\n\n async clear() {},\n\n async getAutomaticLockTime() {\n return null\n },\n async clearAutomaticLockTime() {},\n\n async getAnnouncementDismissedIds() {\n return []\n },\n async setAnnouncementDismissedIds(ids: string[]) {},\n async clearAnnouncementDismissedIds() {},\n\n async getI18nSavedLang() {\n return ''\n },\n async setI18nSavedLang(lang: string) {},\n async clearI18nSavedLang() {},\n\n async getWebSearchHistory() {\n return []\n },\n async setWebSearchHistory(history: WebSearchHistoryItem[]) {},\n async clearWebSearchHistory() {},\n\n async getWebRiskWarning() {\n return []\n },\n async setWebRiskWarning(warnings: WebRiskWarningItem[]) {},\n async clearWebRiskWarning() {},\n\n async getEnableExplore() {\n return false\n },\n async setEnableExplore(enable: boolean) {},\n async clearEnableExplore() {},\n\n async getUnbackupKeyringIds() {\n return []\n },\n async setUnbackupKeyringIds(keyringIds: string[]) {},\n async clearUnbackupKeyringIds() {},\n\n async getEnableFaceId() {\n return false\n },\n async setEnableFaceId(enable: boolean) {},\n async clearEnableFaceId() {},\n\n async getBalanceHidden() {\n return false\n },\n async setBalanceHidden(enable) {},\n async clearBalanceHidden() {},\n\n async getVersionDetail() {\n return defaultVersionDetail\n },\n async setVersionDetail(detail: VersionDetail) {},\n async clearVersionDetail() {},\n\n async getThemeMode() {\n return defaultThemeMode\n },\n async setThemeMode(mode: string) {},\n async clearThemeMode() {},\n\n async getUtxoManageVisited() {\n return false\n },\n async setUtxoManageVisited() {},\n async clearUtxoManageVisited() {},\n}\n\nfunction legacyParseObjectValue(val: any) {\n let parsedObj = null\n if (val && typeof val !== 'string') {\n return val\n }\n\n if (typeof val === 'string' && val.length > 0) {\n try {\n parsedObj = JSON.parse(val)\n } catch (e) {\n parsedObj = null\n }\n }\n\n // legacy double stringify\n val = parsedObj\n if (val && typeof val === 'string' && val.length > 0) {\n try {\n parsedObj = JSON.parse(val)\n } catch (e) {\n parsedObj = null\n }\n }\n\n return parsedObj\n}\n\nfunction isLegacyStringifiedObject(val: any) {\n if (typeof val === 'string' && val.length > 0) {\n try {\n const parsedObj = JSON.parse(val)\n if (parsedObj && typeof parsedObj === 'string' && parsedObj.length > 0) {\n try {\n JSON.parse(parsedObj)\n return true\n } catch (e) {\n return false\n }\n }\n } catch (e) {\n return false\n }\n }\n return false\n}\n\nexport function createStorageProvider(base: BaseStorageProvider): StorageContextType {\n const funcs = {\n ...base,\n\n async getAutomaticLockTime(): Promise<AutoLockTime | null> {\n const val = await base.get(StorageType.AUTO_LOCK_TIME)\n return legacyParseObjectValue(val)\n },\n async clearAutomaticLockTime() {\n await base.set(StorageType.AUTO_LOCK_TIME, null)\n },\n\n async getAnnouncementDismissedIds(): Promise<string[]> {\n const val = await base.get(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY)\n return legacyParseObjectValue(val) || []\n },\n async setAnnouncementDismissedIds(ids: string[]) {\n await base.set(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY, ids)\n },\n async clearAnnouncementDismissedIds() {\n await base.set(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY, [])\n },\n\n async getI18nSavedLang() {\n const val = await base.get(StorageType.I18N_SAVED_LANG)\n return val || ''\n },\n async setI18nSavedLang(lang: string) {\n await base.set(StorageType.I18N_SAVED_LANG, lang)\n },\n async clearI18nSavedLang() {\n await base.set(StorageType.I18N_SAVED_LANG, '')\n },\n\n async getWebSearchHistory(): Promise<WebSearchHistoryItem[]> {\n const val = await base.get(StorageType.WEB_SEARCH_HISTORY)\n return legacyParseObjectValue(val) || []\n },\n async setWebSearchHistory(history: WebSearchHistoryItem[]) {\n await base.set(StorageType.WEB_SEARCH_HISTORY, history)\n },\n async clearWebSearchHistory() {\n await base.set(StorageType.WEB_SEARCH_HISTORY, [])\n },\n\n async getWebRiskWarning(): Promise<WebRiskWarningItem[]> {\n const val = await base.get(StorageType.WEB_RISK_WARNING)\n return legacyParseObjectValue(val) || []\n },\n async setWebRiskWarning(warnings: WebRiskWarningItem[]) {\n await base.set(StorageType.WEB_RISK_WARNING, warnings)\n },\n async clearWebRiskWarning() {\n await base.set(StorageType.WEB_RISK_WARNING, [])\n },\n\n async getEnableExplore() {\n const val = await base.get(StorageType.ENABLE_EXPLORE)\n return val === 'true'\n },\n async setEnableExplore(enable: boolean) {\n await base.set(StorageType.ENABLE_EXPLORE, String(enable))\n },\n async clearEnableExplore() {\n await base.set(StorageType.ENABLE_EXPLORE, 'false')\n },\n\n async getUnbackupKeyringIds(): Promise<string[]> {\n const val = await base.get(StorageType.UNBACKUP_KEYRINGS)\n return legacyParseObjectValue(val) || []\n },\n async setUnbackupKeyringIds(keyringIds: string[]) {\n await base.set(StorageType.UNBACKUP_KEYRINGS, keyringIds)\n },\n async clearUnbackupKeyringIds() {\n await base.set(StorageType.UNBACKUP_KEYRINGS, [])\n },\n\n //\n async getEnableFaceId() {\n const val = await base.get(StorageType.ENABLE_FACEID)\n return val === 'true' || val == true\n },\n async setEnableFaceId(enable: boolean) {\n await base.set(StorageType.ENABLE_FACEID, String(enable))\n },\n async clearEnableFaceId() {\n await base.set(StorageType.ENABLE_FACEID, 'false')\n },\n\n async getBalanceHidden() {\n const val = await base.get(StorageType.BALANCE_HIDDEN)\n return val === 'true'\n },\n async setBalanceHidden(enable: boolean) {\n await base.set(StorageType.BALANCE_HIDDEN, String(enable))\n },\n async clearBalanceHidden() {\n await base.set(StorageType.BALANCE_HIDDEN, 'false')\n },\n\n async getVersionDetail() {\n const val = await base.get(StorageType.VERSION_DETAIL)\n return legacyParseObjectValue(val) || defaultVersionDetail\n },\n async setVersionDetail(detail: VersionDetail) {\n await base.set(StorageType.VERSION_DETAIL, detail)\n },\n async clearVersionDetail() {\n await base.set(StorageType.VERSION_DETAIL, defaultVersionDetail)\n },\n\n async getThemeMode() {\n const val = await base.get(StorageType.THEME_MODE)\n return val || defaultThemeMode\n },\n async setThemeMode(mode: string) {\n await base.set(StorageType.THEME_MODE, mode)\n },\n async clearThemeMode() {\n await base.set(StorageType.THEME_MODE, defaultThemeMode)\n },\n\n async getUtxoManageVisited() {\n const val = await base.get(StorageType.UTXO_MANAGE_VISITED)\n return val === 'true'\n },\n async setUtxoManageVisited() {\n await base.set(StorageType.UTXO_MANAGE_VISITED, 'true')\n },\n async clearUtxoManageVisited() {\n await base.set(StorageType.UTXO_MANAGE_VISITED, 'false')\n },\n }\n\n return {\n ...funcs,\n async clear() {\n await funcs.clearAutomaticLockTime()\n await funcs.clearAnnouncementDismissedIds()\n await funcs.clearI18nSavedLang()\n await funcs.clearWebSearchHistory()\n await funcs.clearWebRiskWarning()\n await funcs.clearEnableExplore()\n await funcs.clearUnbackupKeyringIds()\n await funcs.clearEnableFaceId()\n await funcs.clearBalanceHidden()\n await funcs.clearVersionDetail()\n await funcs.clearThemeMode()\n await funcs.clearUtxoManageVisited()\n },\n }\n}\n\nexport const StorageContext = React.createContext<StorageContextType>(defaultContext)\n\nexport function useStorage() {\n const ctx = useContext(StorageContext)\n return ctx\n}\n","/* eslint-disable indent */\nimport React, { useCallback, useContext, useRef, useState } from 'react'\n\ntype ToastFunction = (content: string) => void\ntype LoadingFunction = (visible: boolean, content?: string) => void\n\nexport interface ToolsContextType {\n toast: ToastFunction\n toastSuccess: ToastFunction\n toastError: ToastFunction\n toastWarning: ToastFunction\n showLoading: LoadingFunction\n showTip: ToastFunction\n copyToClipboard: (text: string) => void\n openUrl: (url: string) => void\n}\n\nconst initContext = {\n toast: (content: string) => {\n // todo\n },\n toastSuccess: (content: string) => {\n // todo\n },\n toastError: (content: string) => {\n // todo\n },\n toastWarning: (content: string) => {\n // todo\n },\n showLoading: () => {\n // todo\n },\n showTip: (content: string) => {\n // todo\n },\n copyToClipboard: (text: string) => {\n // todo\n },\n openUrl(url: string) {\n // todo\n },\n}\n\nexport const ToolsContext = React.createContext<ToolsContextType>(initContext)\n\nexport function useTools() {\n const ctx = useContext(ToolsContext)\n return ctx\n}\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useDiscoveryState(): AppState['discovery'] {\n return useAppSelector(state => state.discovery)\n}\n\nexport function useAppList() {\n const state = useDiscoveryState()\n return state.appList\n}\n\nexport function useBannerList() {\n const state = useDiscoveryState()\n return state.bannerList\n}\n\nexport function useLastFetchInfo() {\n const state = useDiscoveryState()\n return {\n lastFetchTime: state.lastFetchTime,\n lasfFetchChainType: state.lastFetchChainType,\n }\n}\n\nexport function useHasNewBanner() {\n const state = useDiscoveryState()\n return state.hasNewBanner\n}\n","import { useCallback } from 'react'\n\nimport { AddressType } from '@unisat/wallet-types'\n\nimport { AppState, useApproval, useNavigation } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { globalActions } from '../reducers/global'\nimport { TabOption } from '../types'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useGlobalState(): AppState['global'] {\n return useAppSelector(state => state.global)\n}\n\nexport function useTab() {\n const globalState = useGlobalState()\n return globalState.tab\n}\n\nexport function useScreenState() {\n const globalState = useGlobalState()\n return globalState.screenState\n}\n\nexport function useUpdateScreenStateCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (screenState: Partial<AppState['global']['screenState']>) => {\n dispatch(\n globalActions['updateScreenState']!({\n screenState,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useSetTabCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (tab: TabOption) => {\n dispatch(\n globalActions['update']!({\n tab,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useBooted() {\n const globalState = useGlobalState()\n return globalState.isBooted\n}\n\nexport function useIsUnlocked() {\n const globalState = useGlobalState()\n return globalState.isUnlocked\n}\n\nexport function useIsReady() {\n const globalState = useGlobalState()\n return globalState.isReady\n}\n\nexport function useIsRefresh() {\n const globalState = useGlobalState()\n return globalState.isRefresh\n}\n\nexport function useBackRefresh() {\n const globalState = useGlobalState()\n return globalState.backRefresh\n}\n\nexport function useWallRefresh() {\n const globalState = useGlobalState()\n return globalState.wallRefresh\n}\n\nexport function useWallTabRefresh() {\n const globalState = useGlobalState()\n return globalState.wallTabRefresh\n}\n\nexport function useWallTabFocusRefresh() {\n const globalState = useGlobalState()\n return globalState.wallTabFocusRefresh\n}\n\nexport function useGoBackRefresh() {\n const globalState = useGlobalState()\n return globalState.goBackRefresh\n}\n\nexport function useLayerState() {\n const globalState = useGlobalState()\n return globalState.layerState\n}\n\nexport function useUnlockRefresh() {\n const globalState = useGlobalState()\n return globalState.unlockRefres\n}\n\nexport function useUnlockRead() {\n const globalState = useGlobalState()\n return globalState.unlockRead\n}\nexport function useIsUnlockTimeRefres() {\n const globalState = useGlobalState()\n return globalState.isUnlockTimeRefres\n}\n\nexport function useInfiniteListScrollOffset() {\n const globalState = useGlobalState()\n return globalState.infiniteListScrollOffset\n}\n\nexport function useInfiniteListScrollState() {\n const globalState = useGlobalState()\n return {\n offset: globalState.infiniteListScrollOffset,\n direction: globalState.infiniteListScrollDirection,\n activeTime: globalState.infiniteListScrollActiveTime,\n }\n}\n\nexport function useIsScrollViewTop() {\n const globalState = useGlobalState()\n return globalState.isScrollViewTop\n}\n\nexport function useIsScrollViewBot() {\n const globalState = useGlobalState()\n return globalState.isScrollViewBot\n}\n\nexport function useIsBiometricsSupported() {\n const globalState = useGlobalState()\n return globalState.isBiometricsSupported\n}\n\nexport function useHasBiometricsKey() {\n const globalState = useGlobalState()\n return globalState.hasBiometricsKey\n}\n\nexport function useSwitchChainModalVisible() {\n const globalState = useGlobalState()\n return globalState.switchChainModalVisible\n}\n\nexport function useSetLockedOverlayVisibleCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (visible: boolean) => {\n dispatch(\n globalActions['update']!({\n isLockedOverlayVisible: visible,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useLockedOverlayVisible() {\n const globalState = useGlobalState()\n return globalState.isLockedOverlayVisible\n}\n\nexport function useLockCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const navigation = useNavigation()\n return useCallback(async () => {\n dispatch(globalActions.update({ isLockedOverlayVisible: true }))\n await wallet.lockWallet()\n const isBooted = await wallet.isBooted()\n const isUnlocked = await wallet.isUnlocked()\n dispatch(globalActions.update({ isUnlocked: false }))\n\n setTimeout(() => {\n dispatch(globalActions.update({ isLockedOverlayVisible: false }))\n }, 300)\n\n if (!isBooted) {\n navigation.navToWelcome()\n return\n }\n\n if (!isUnlocked && !isBooted) {\n navigation.navToWelcome()\n return\n }\n\n if (!isUnlocked && isBooted) {\n navigation.navToLock({ autoUnlockByFace: false })\n return\n }\n const currentAccount = await wallet.getCurrentAccount()\n if (!currentAccount) {\n navigation.navToWelcome()\n }\n }, [dispatch, wallet])\n}\n\nexport function useUnlockCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const { resolveApproval } = useApproval()\n return useCallback(\n async (password: string) => {\n await wallet.unlock(password)\n dispatch(globalActions.update({ isUnlocked: true }))\n resolveApproval()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateAccountCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n mnemonics: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation = false\n ) => {\n await wallet.createKeyringWithMnemonics(\n mnemonics,\n hdPath,\n passphrase,\n addressType,\n accountCount,\n accountIndexDerivation\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useImportAccountsFromKeystoneCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n urType: string,\n urCbor: string,\n addressType: AddressType,\n accountCount: number,\n hdPath: string,\n filterPubkey?: string[],\n connectionType: 'USB' | 'QR' = 'USB'\n ) => {\n await wallet.createKeyringWithKeystone(\n urType,\n urCbor,\n addressType,\n hdPath,\n accountCount,\n filterPubkey,\n connectionType\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateColdWalletCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ) => {\n await wallet.createKeyringWithColdWallet(xpub, addressType, alianName, hdPath, accountCount)\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { ToAddressInfo, ToSignData, UnspentOutput } from '@unisat/wallet-shared'\n\nimport { numUtils, timeUtils } from '@unisat/base-utils'\nimport { AppState, useI18n, useTools } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { useAccountAddress, useCurrentAccount } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { transactionsActions } from '../reducers/transactions'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useTransactionsState(): AppState['transactions'] {\n return useAppSelector(state => state.transactions)\n}\n\nexport function useBitcoinTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.bitcoinTx\n}\n\nexport function usePrepareSendBTCCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n memo,\n memos,\n disableAutoAdjust,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate?: number\n memo?: string\n memos?: string[]\n disableAutoAdjust?: boolean\n }) => {\n let _utxos: UnspentOutput[] = utxos\n if (_utxos.length === 0) {\n _utxos = await fetchUtxos()\n }\n const safeBalance = _utxos\n .filter(v => v.inscriptions.length == 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n if (safeBalance < toAmount) {\n throw new Error(t('insufficient_balance'))\n }\n\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n let res: ToSignData\n\n if (safeBalance === toAmount && !disableAutoAdjust) {\n res = await wallet.createSendAllBTCPsbt({\n to: toAddressInfo.address,\n btcUtxos: _utxos,\n feeRate,\n })\n } else {\n res = await wallet.createSendBTCPsbt({\n to: toAddressInfo.address,\n amount: toAmount,\n btcUtxos: _utxos,\n feeRate,\n memo: memo!,\n memos: memos!,\n })\n }\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos, fetchUtxos]\n )\n}\n\nexport function usePrepareSendBypassHeadOffsetsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate: number\n }) => {\n const res = await wallet.createSendBTCOffsetPsbt(\n [\n {\n address: toAddressInfo.address,\n satoshis: toAmount,\n },\n ],\n feeRate\n )\n return res\n },\n [dispatch, wallet]\n )\n}\n\nexport function usePushBitcoinTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateBitcoinTx({ txid }))\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet, tools]\n )\n}\n\nexport function useOrdinalsTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.ordinalsTx\n}\n\nexport function usePrepareSendOrdinalsInscriptionCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionId,\n feeRate,\n outputValue,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionId: string\n feeRate?: number\n outputValue?: number\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const toSignData = await wallet.createSendInscriptionPsbt({\n to: toAddressInfo.address,\n inscriptionId,\n feeRate,\n outputValue: outputValue!,\n btcUtxos,\n })\n\n return toSignData\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function usePrepareSendOrdinalsInscriptionsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const fetchUtxos = useFetchUtxosCallback()\n const utxos = useUtxos()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionIds,\n feeRate,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionIds: string[]\n feeRate?: number\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n const res = await wallet.createSendMultipleInscriptionsPsbt({\n to: toAddressInfo.address,\n inscriptionIds,\n feeRate,\n btcUtxos,\n })\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function useCreateSplitTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n inscriptionId,\n feeRate,\n outputValue,\n }: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n }) => {\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const res = await wallet.createSplitInscriptionPsbt({\n inscriptionId,\n feeRate,\n outputValue,\n btcUtxos,\n })\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos]\n )\n}\n\nexport function usePushOrdinalsTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateOrdinalsTx({ txid }))\n\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n console.log(e)\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet]\n )\n}\n\nexport function useUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.utxos\n}\n\nexport function useFetchUtxosCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(async () => {\n const data = await wallet.getBTCUtxos()\n dispatch((transactionsActions as any).setUtxos(data))\n return data\n }, [wallet, account])\n}\n\nexport function useSpendUnavailableUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.spendUnavailableUtxos\n}\n\nexport function useSetSpendUnavailableUtxosCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (utxos: UnspentOutput[]) => {\n dispatch((transactionsActions as any).setSpendUnavailableUtxos(utxos))\n },\n [dispatch]\n )\n}\n\nexport function useSafeBalance() {\n const utxos = useUtxos()\n return useMemo(() => {\n const satoshis = utxos\n .filter(v => v.inscriptions.length === 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n return numUtils.satoshisToAmount(satoshis)\n }, [utxos])\n}\n\nexport function useAssetUtxosRunes() {\n const transactionsState = useTransactionsState()\n return transactionsState.assetUtxos_runes\n}\n\nexport function useFetchAssetUtxosRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(\n async (rune: string) => {\n const data = await wallet.getAssetUtxosRunes(rune)\n dispatch((transactionsActions as any).setAssetUtxosRunes(data))\n return data\n },\n [wallet, account]\n )\n}\n\nexport function usePrepareSendRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const assetUtxosRunes = useAssetUtxosRunes()\n const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()\n const account = useCurrentAccount()\n return useCallback(\n async ({\n toAddressInfo,\n runeid,\n runeAmount,\n outputValue,\n feeRate,\n }: {\n toAddressInfo: ToAddressInfo\n runeid: string\n runeAmount: string\n outputValue?: number\n feeRate: number\n }) => {\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n let assetUtxos = assetUtxosRunes\n if (assetUtxos.length == 0) {\n assetUtxos = await fetchAssetUtxosRunes(runeid)\n }\n\n const toSignData = await wallet.createSendRunesPsbt({\n to: toAddressInfo.address,\n runeid,\n runeAmount,\n outputValue: outputValue!,\n feeRate,\n btcUtxos,\n assetUtxos,\n })\n\n return toSignData\n },\n [dispatch, wallet, fromAddress, utxos, assetUtxosRunes, fetchAssetUtxosRunes, account]\n )\n}\n\nexport function useRunesTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.runesTx\n}\n\nexport function usePrepareSendAlkanesCallback() {\n const wallet = useWallet()\n const account = useCurrentAccount()\n const callback = useCallback(\n async (\n toAddressInfo: ToAddressInfo,\n alkaneid: string,\n amount: string,\n feeRate: number,\n type: 'ft' | 'nft'\n ) => {\n return await wallet.createSendAlkanesPsbt({\n to: toAddressInfo.address,\n alkaneid,\n amount,\n feeRate,\n type,\n })\n },\n [wallet, account]\n )\n return callback\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { CHAINS_MAP, Inscription } from '@unisat/wallet-shared'\nimport { AddressType, ChainType } from '@unisat/wallet-types'\nimport { getAddressType } from '../utils/bitcoin-utils'\n\nimport { AppState, AssetTabKey } from '..'\nimport { useCurrentAddress } from '../hooks/accounts'\nimport { useAppDispatch, useAppSelector } from '../hooks/base'\nimport { useChainType, useIconBaseUrl, useUnisatWebsite } from '../hooks/settings'\nimport { uiActions } from '../reducers/ui'\nexport function useUIState(): AppState['ui'] {\n return useAppSelector(state => state.ui)\n}\n\nexport function useAssetTabKey() {\n const uiState = useUIState()\n return uiState.assetTabKey\n}\n\nexport function useOrdinalsAssetTabKey() {\n const uiState = useUIState()\n return uiState.ordinalsAssetTabKey\n}\n\nexport function useCATAssetTabKey() {\n const uiState = useUIState()\n return uiState.catAssetTabKey\n}\n\nexport function useAlkanesAssetTabKey() {\n const uiState = useUIState()\n return uiState.alkanesAssetTabKey\n}\n\nexport function useUiTxCreateScreen() {\n const uiState = useUIState()\n return uiState.uiTxCreateScreen\n}\n\nexport function useUpdateUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return ({\n toInfo,\n inputAmount,\n }: {\n toInfo?: { address: string; domain: string; inscription?: Inscription }\n inputAmount?: string\n }) => {\n dispatch(\n (uiActions as any).updateTxCreateScreen({\n toInfo,\n inputAmount,\n })\n )\n }\n}\n\nexport function useFeeRateBar() {\n const uiState = useUIState()\n return uiState.feeRateBar\n}\n\nexport function useUpdateFeeRateBar() {\n const dispatch = useAppDispatch()\n return ({\n feeRate,\n feeRateInputVal,\n enableLowFeeRate,\n feeOptionIndex,\n showCustomInput,\n }: {\n feeRate?: number\n feeRateInputVal?: string\n enableLowFeeRate?: boolean\n feeOptionIndex?: number\n showCustomInput?: boolean\n }) => {\n dispatch(\n (uiActions as any).updateFeeRateBar({\n feeRate,\n feeRateInputVal,\n enableLowFeeRate,\n feeOptionIndex,\n showCustomInput,\n })\n )\n }\n}\n\nexport function useResetFeeRateBar() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetFeeRateBar())\n }\n}\n\nexport function useAddressInput() {\n const uiState = useUIState()\n return uiState.addressInput\n}\n\nexport function useUpdateAddressInput() {\n const dispatch = useAppDispatch()\n return ({ address, domain }: { address?: string; domain?: string }) => {\n dispatch(\n (uiActions as any).updateAddressInput({\n address,\n domain,\n })\n )\n }\n}\n\nexport function useResetAddressInput() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetAddressInput())\n }\n}\n\nexport function useAmountInput() {\n const uiState = useUIState()\n return uiState.amountInput\n}\n\nexport function useUpdateAmountInput() {\n const dispatch = useAppDispatch()\n return ({ amount }: { amount?: string }) => {\n dispatch(\n (uiActions as any).updateAmountInput({\n amount,\n })\n )\n }\n}\n\nexport function useResetAmountInput() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetAmountInput())\n }\n}\n\nexport function useResetTxState() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetTxCreateScreen())\n dispatch((uiActions as any).resetFeeRateBar())\n }\n}\n\nexport function useResetUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return () => {\n dispatch((uiActions as any).resetTxCreateScreen())\n }\n}\n\nexport const useThrottle = (callback, delay, lastCallRef) => {\n return useCallback(\n (...args) => {\n const now = Date.now()\n if (now - lastCallRef.current > delay) {\n lastCallRef.current = now\n callback(...args)\n }\n },\n [callback, delay, lastCallRef]\n )\n}\n\nexport function getSupportedAssets(chainType: ChainType, address: string) {\n const assetTabKeys: AssetTabKey[] = []\n\n const chain = CHAINS_MAP[chainType]\n const networkType = chain.networkType\n const addressType = getAddressType(address, networkType)\n\n const assets = {\n ordinals: false,\n runes: false,\n CAT20: false,\n alkanes: false,\n brc20Prog: false,\n }\n\n assets.ordinals = true\n assetTabKeys.push(AssetTabKey.ORDINALS)\n\n assets.runes = true\n assetTabKeys.push(AssetTabKey.RUNES)\n\n if (\n (chainType === ChainType.FRACTAL_BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_TESTNET) &&\n (addressType == AddressType.P2TR || addressType == AddressType.P2WPKH)\n ) {\n assets.CAT20 = true\n assetTabKeys.push(AssetTabKey.CAT)\n }\n\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n assets.alkanes = true\n assetTabKeys.push(AssetTabKey.ALKANES)\n }\n\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n assets.brc20Prog = true\n }\n\n return {\n assets,\n tabKeys: assetTabKeys,\n key: chainType + address + assetTabKeys.join(','),\n }\n}\nexport function useSupportedAssets() {\n const chainType = useChainType()\n const currentAddress = useCurrentAddress()\n const supportedAssets = getSupportedAssets(chainType, currentAddress)\n return supportedAssets\n}\n\nexport const useIsInExpandView = () => {\n // @ts-ignore\n if (typeof window === 'undefined') {\n return false\n }\n return useMemo(() => {\n // @ts-ignore\n if (window.innerWidth > 156 * 3) {\n return true\n } else {\n return false\n }\n // @ts-ignore\n }, [window.innerWidth])\n}\n\nexport function useWalletTopTabScreenState() {\n const uiState = useUIState()\n return uiState.walletTopTabScreen\n}\n\nexport function useBRC20IconInfo(ticker: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/brc20/${ticker}`\n const iconShortName = ticker.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useRunesIconInfo(spacedRune: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/runes/${spacedRune}`\n const iconShortName = spacedRune.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useAlkanesIconInfo(name: string, alkaneid: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/alkanes/${name}/${alkaneid}`\n const iconShortName = name.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useCAT20IconInfo(name: string, tokenId: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/cat20/${name}/${tokenId}`\n const iconShortName = name.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useBRC20MarketPlaceWebsite(ticker: string) {\n const chainType = useChainType()\n const unisatWebsite = useUnisatWebsite()\n if (chainType === ChainType.BITCOIN_MAINNET) {\n if (ticker.length == 6) {\n return `${unisatWebsite}/market/brc20_prog?tick=${ticker}`\n }\n }\n return `${unisatWebsite}/market/brc20?tick=${ticker}`\n}\n\nexport function useRunesMarketUrl(ticker: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/runes/market?tick=${ticker}`\n}\n\nexport function useAlkanesMarketPlaceWebsite(alkaneid: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/alkanes/market?tick=${alkaneid}`\n}\n\nexport function useCAT20MarketPlaceWebsite(tokenId: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/dex/cat20/${tokenId}`\n}\n\nexport function useRunesInscribeUrl(rune: string) {\n const unisatWebsite = useUnisatWebsite()\n const newUrl = `${unisatWebsite}/runes/inscribe?only=1&tab=mint&rune=${rune}`\n return newUrl\n}\n\nexport function useBalanceCardDetailExpanded() {\n const uiState = useUIState()\n return uiState.balanceDetailExpanded\n}\n\nexport function useToggleBalanceCardDetailExpanded() {\n const { balanceDetailExpanded } = useUIState()\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).setBalanceDetailExpanded(!balanceDetailExpanded))\n }, [dispatch, balanceDetailExpanded])\n}\n","import { AppState } from '..'\nimport { useAppSelector } from '../hooks'\n\nexport function useBrowserState(): AppState['browser'] {\n return useAppSelector(state => state.browser)\n}\n\nexport function useWalletTabScreenState() {\n const state = useBrowserState()\n return state.walletTabScreen\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nimport { Account, BUS_METHODS } from '@unisat/wallet-shared'\nimport { uiEventBus } from '../utils/eventBus'\n\nimport { useIsUnlocked } from '../hooks/global'\nimport { globalActions } from '../reducers/global'\nimport { useAppDispatch } from '../hooks/base'\nimport { settingsActions } from '../reducers/settings'\nimport { useCurrentAccount, useFetchBalanceCallback, useReloadAccounts } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\n\nexport function AccountUpdater() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const isUnlocked = useIsUnlocked()\n const selfRef = useRef({\n preAccountKey: '_',\n loadingBalance: false,\n loadingHistory: false,\n })\n const self = selfRef.current\n\n const reloadAccounts = useReloadAccounts()\n const onCurrentChange = useCallback(async () => {\n if (isUnlocked && currentAccount && currentAccount.key != self.preAccountKey) {\n self.preAccountKey = currentAccount.key\n\n // setLoading(true);\n\n reloadAccounts()\n\n // setLoading(false);\n }\n }, [dispatch, currentAccount, wallet, isUnlocked])\n\n useEffect(() => {\n onCurrentChange()\n }, [currentAccount && currentAccount.key, isUnlocked])\n\n const fetchBalance = useFetchBalanceCallback()\n useEffect(() => {\n if (self.loadingBalance) {\n return\n }\n if (!isUnlocked) {\n return\n }\n self.loadingBalance = true\n fetchBalance().finally(() => {\n self.loadingBalance = false\n })\n }, [fetchBalance, wallet, isUnlocked, self])\n\n useEffect(() => {\n const accountChangeHandler = (account: Account) => {\n if (account && account.address) {\n dispatch((accountActions as any).setCurrent(account))\n }\n }\n uiEventBus.addEventListener(BUS_METHODS.ACCOUNTS_CHANGED, accountChangeHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.ACCOUNTS_CHANGED, accountChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const chaintChangeHandler = (params: { type: ChainType }) => {\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: params.type,\n })\n )\n\n reloadAccounts()\n }\n uiEventBus.addEventListener(BUS_METHODS.CHAIN_CHANGED, chaintChangeHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.CHAIN_CHANGED, chaintChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const lockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: false }))\n }\n uiEventBus.addEventListener(BUS_METHODS.LOCKED, lockHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.LOCKED, lockHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const unlockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: true }))\n }\n uiEventBus.addEventListener(BUS_METHODS.UNLOCKED, unlockHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.UNLOCKED, unlockHandler)\n }\n }, [dispatch])\n\n return null\n}\n","type Listener = (params?: any) => void\n\nclass EventBus {\n events: Record<string, Listener[]> = {}\n\n emit = (type: string, params?: any) => {\n const listeners = this.events[type]\n if (listeners) {\n listeners.forEach(fn => {\n fn(params)\n })\n }\n }\n\n once = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n const func = (...params: any[]) => {\n fn(...params)\n this.events[type] = this.events[type]!.filter(item => item !== func)\n }\n if (listeners) {\n this.events[type]!.push(func)\n } else {\n this.events[type] = [func]\n }\n }\n\n addEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type]!.push(fn)\n } else {\n this.events[type] = [fn]\n }\n }\n\n removeEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type] = this.events[type]!.filter(item => item !== fn)\n }\n }\n\n removeAllEventListeners = (type: string) => {\n this.events[type] = []\n }\n}\n\nconst uiEventBus = new EventBus()\nexport { uiEventBus }\n","import { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { numUtils } from '@unisat/base-utils'\nimport { ADDRESS_TYPES, KeyringType } from '@unisat/keyring-service/types'\nimport { getAccountDerivationPath } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport {\n useAppDispatch,\n useCurrentAccount,\n useCurrentKeyring,\n useI18n,\n useNavigation,\n useReloadAccounts,\n useTools,\n useWallet,\n} from '..'\n\ninterface AddressTypeItem {\n address: string\n assets: { total_btc: string; satoshis: number; total_inscription: number }\n name: string\n value: AddressType\n}\n\nexport function useAddressTypeScreenLogic() {\n // const isInTab = useExtensionIsInTab()\n const { t } = useI18n()\n\n const wallet = useWallet()\n const currentKeyring = useCurrentKeyring()\n const account = useCurrentAccount()\n\n const nav = useNavigation()\n const dispatch = useAppDispatch()\n const reloadAccounts = useReloadAccounts()\n const [addresses, setAddresses] = useState<string[]>([])\n const [addressAssets, setAddressAssets] = useState<{\n [key: string]: { total_btc: string; satoshis: number; total_inscription: number }\n }>({})\n\n const selfRef = useRef<{\n addressAssets: {\n [key: string]: { total_btc: string; satoshis: number; total_inscription: number }\n }\n }>({\n addressAssets: {},\n })\n const self = selfRef.current\n\n const tools = useTools()\n const loadAddresses = async () => {\n try {\n tools.showLoading(true)\n const _res = await wallet.getAllAddresses(currentKeyring, account.index || 0)\n setAddresses(_res)\n const balances = await wallet.getMultiAddressAssets(_res.join(','))\n for (let i = 0; i < _res.length; i++) {\n const address = _res[i]\n const balance = balances[i]\n const satoshis = balance.totalSatoshis\n self.addressAssets[address] = {\n total_btc: numUtils.satoshisToAmount(balance.totalSatoshis),\n satoshis,\n total_inscription: balance.inscriptionCount,\n }\n }\n setAddressAssets(self.addressAssets)\n } catch (e) {\n console.error(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n useEffect(() => {\n loadAddresses()\n }, [])\n\n const addressTypes = useMemo(() => {\n // Cold wallets do not allow switching address types, only show the current type\n if (currentKeyring.type === KeyringType.ColdWalletKeyring) {\n return ADDRESS_TYPES.filter(v => v.value === currentKeyring.addressType)\n }\n\n if (currentKeyring.type === KeyringType.HdKeyring) {\n return ADDRESS_TYPES.filter(v => {\n if (v.displayIndex < 0) {\n return false\n }\n // MagicEden only supports P2WPKH and P2TR\n if (currentKeyring.accountIndexDerivation) {\n return v.value === AddressType.P2WPKH || v.value === AddressType.P2TR\n }\n const address = addresses[v.value]\n const balance = addressAssets[address]\n if (v.isUnisatLegacy) {\n if (!balance || balance.satoshis == 0) {\n return false\n }\n }\n return true\n }).sort((a, b) => a.displayIndex - b.displayIndex)\n } else {\n return ADDRESS_TYPES.filter(v => v.displayIndex >= 0 && v.isUnisatLegacy != true).sort(\n (a, b) => a.displayIndex - b.displayIndex\n )\n }\n }, [currentKeyring.type, currentKeyring.addressType, addressAssets, addresses])\n\n const items: AddressTypeItem[] = useMemo(() => {\n return addressTypes.map(v => {\n const address = addresses[v.value]\n const assets = addressAssets[address] || {\n total_btc: '--',\n satoshis: 0,\n total_inscription: 0,\n }\n const derivedPath = getAccountDerivationPath(v.hdPath, account.index || 0, currentKeyring.accountIndexDerivation)\n let name = `${v.name} (${derivedPath})`\n if (currentKeyring.type === KeyringType.SimpleKeyring) {\n name = `${v.name}`\n } else if (currentKeyring.type === KeyringType.ColdWalletKeyring) {\n name = `❄️ ${v.name} (${derivedPath}) - ${t('Fixed by cold wallet')}`\n }\n\n return {\n address,\n assets,\n name,\n value: v.value,\n }\n })\n }, [addressTypes])\n\n const onClickItem = async (item: AddressTypeItem) => {\n if (item.value == currentKeyring.addressType) {\n return\n }\n\n // Cold wallets do not allow switching address types\n if (currentKeyring.type === KeyringType.ColdWalletKeyring) {\n tools.toastError(t('Cold wallet address type cannot be changed'))\n return\n }\n\n await wallet.changeAddressType(item.value)\n reloadAccounts()\n // navigate('MainScreen')\n tools.toastSuccess(t('address_type_changed'))\n\n nav.navToTab()\n }\n\n return {\n currentKeyring,\n items,\n wallet,\n onClickItem,\n }\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { AlkanesBalance, TickPriceItem } from '@unisat/wallet-shared'\n\nimport {\n AlkanesAssetTabKey,\n getSupportedAssets,\n useAlkanesAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesBalance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n\n const { list, total } = await wallet.getAlkanesList(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getAlkanesPrice(list.map(item => item.alkaneid)).then(setPriceMap)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useAlkanesAssetTabKey()\n const isFocus = tabKey === AlkanesAssetTabKey.TOKEN\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: AlkanesBalance) => {\n nav.navigate('AlkanesTokenScreen', { alkaneid: item.alkaneid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\ninterface UseInfiniteListOptions<T> {\n fetcher: (page: number, pageSize: number) => Promise<{ list: T[]; total: number }>\n pageSize?: number\n dependencies?: any[]\n}\n\nexport function useInfiniteList<T>({\n fetcher,\n pageSize = 20,\n dependencies = [],\n}: UseInfiniteListOptions<T>) {\n const [data, setData] = useState<T[]>([])\n const [total, setTotal] = useState(0)\n const [loading, _setLoading] = useState(false)\n const [hasMore, setHasMore] = useState(true)\n const [page, _setPage] = useState(1)\n\n const pageRef = useRef(1)\n const loadingRef = useRef(false)\n\n const setLoading = (v: boolean) => {\n loadingRef.current = v\n _setLoading(v)\n }\n\n const setPage = (v: number) => {\n pageRef.current = v\n _setPage(v)\n }\n\n const loadData = useCallback(\n async (isRefresh = false) => {\n if (loadingRef.current) return\n\n loadingRef.current = true\n setLoading(true)\n try {\n const pageToLoad = isRefresh ? 1 : pageRef.current\n const { list, total } = await fetcher(pageToLoad, pageSize)\n\n setTotal(total)\n setData(prev => (isRefresh ? list : [...prev, ...list]))\n\n const loadedCount = (pageToLoad - 1) * pageSize + list.length\n setHasMore(loadedCount < total)\n\n const nextPage = isRefresh ? 2 : pageToLoad + 1\n pageRef.current = nextPage\n setPage(nextPage)\n } catch (e) {\n console.error(e)\n } finally {\n loadingRef.current = false\n setLoading(false)\n }\n },\n [fetcher, pageSize]\n )\n\n const onRefresh = () => loadData(true)\n const onLoadMore = () => {\n if (hasMore && !loadingRef.current) loadData(false)\n }\n\n useEffect(() => {\n // reset\n setData([])\n setPage(1)\n setHasMore(true)\n\n loadData(true)\n }, dependencies)\n\n return {\n data,\n total,\n loading,\n hasMore,\n page,\n onRefresh,\n onLoadMore,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport interface AmountInputProps {}\n\nexport function useAmountInputLogic(props: {\n value?: string\n runesDecimal?: number\n disableDecimal?: boolean\n enableBrc20Decimal?: boolean\n onAmountInputChange?: (amount: string) => void\n\n min?: number\n step?: number\n}) {\n const { disableDecimal, enableBrc20Decimal, runesDecimal, onAmountInputChange, min, step } = props\n\n const [inputValue, setInputValue] = useState(props.value || '')\n\n useEffect(() => {\n onAmountInputChange(inputValue)\n }, [inputValue])\n\n const propValueRef = useRef(props.value)\n useEffect(() => {\n if (props.value !== propValueRef.current) {\n propValueRef.current = props.value\n setInputValue(props.value || '')\n }\n }, [props.value])\n\n const handleInputAmount = useCallback(\n (e: { target: { value: string } } | string) => {\n const raw = typeof e === 'string' ? e : e.target.value\n\n let regex: RegExp\n if (disableDecimal) {\n regex = /^[1-9]\\d*$/\n } else if (enableBrc20Decimal) {\n regex = /^(0(\\.\\d{0,18})?|[1-9]\\d*\\.?\\d{0,18})$/\n } else if (runesDecimal !== undefined) {\n regex = new RegExp(`^(0(\\\\.\\\\d{0,${runesDecimal}})?|[1-9]\\\\d*\\\\.?\\\\d{0,${runesDecimal}})$`)\n } else {\n regex = /^(0(\\.\\d{0,8})?|[1-9]\\d*\\.?\\d{0,8})$/\n }\n\n if (regex.test(raw) || raw === '') {\n setInputValue(raw)\n }\n },\n [disableDecimal, enableBrc20Decimal, runesDecimal]\n )\n\n const handleStepUp = useCallback(() => {\n setInputValue(prev => {\n const currentVal = parseFloat(prev) || 0\n const decimal = runesDecimal ?? 2\n return (currentVal + step).toFixed(decimal)\n })\n }, [step, runesDecimal])\n\n const handleStepDown = useCallback(() => {\n setInputValue(prev => {\n const currentVal = parseFloat(prev) || 0\n const decimal = runesDecimal ?? 2\n return Math.max(min, currentVal - step).toFixed(decimal)\n })\n }, [step, min, runesDecimal])\n\n const handleReset = useCallback(() => {\n setInputValue('')\n }, [])\n\n return {\n handleInputAmount,\n handleStepUp,\n handleStepDown,\n handleReset,\n inputValue,\n }\n}\n","import { Announcement, AnnouncementLinkType } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useStorage, useWallet } from 'src/context'\n\nconst AUTO_PLAY_INTERVAL = 5000\n\nexport function useAnnouncementCardLogic() {\n const wallet = useWallet()\n const storage = useStorage()\n\n const [activeIndex, setActiveIndex] = useState(0)\n const [dismissedIds, setDismissedIds] = useState<string[]>([])\n const [announcements, setAnnouncements] = useState<Announcement[]>([])\n const [loading, setLoading] = useState(false)\n const [dismissedLoaded, setDismissedLoaded] = useState(false)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n useEffect(() => {\n const init = async () => {\n try {\n await loadDismissedIds()\n await fetchAnnouncements()\n } finally {\n setDismissedLoaded(true)\n }\n }\n init()\n }, [])\n\n const fetchAnnouncements = async () => {\n try {\n const response = await wallet.getAnnouncements(0, 10)\n setAnnouncements(Array.isArray(response?.list) ? response.list : [])\n } catch {\n setAnnouncements([])\n }\n }\n\n const loadDismissedIds = async () => {\n const saved = await storage.getAnnouncementDismissedIds()\n setDismissedIds(saved)\n }\n\n const validAnnouncements = useMemo(\n () =>\n announcements.filter(a => {\n const now = Date.now()\n return now >= a.startTime && now <= a.endTime && !dismissedIds.includes(a.id)\n }),\n [announcements, dismissedIds],\n )\n\n // Auto-play: hook is the single timing authority\n useEffect(() => {\n if (validAnnouncements.length <= 1) return undefined\n timerRef.current = setInterval(() => {\n setActiveIndex(prev => (prev + 1) % validAnnouncements.length)\n }, AUTO_PLAY_INTERVAL)\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [validAnnouncements.length])\n\n const handleDotClick = useCallback((index: number) => {\n setActiveIndex(index)\n }, [])\n\n const handleDismissAll = useCallback(async () => {\n const ids = validAnnouncements.map(a => a.id)\n if (ids.length === 0) return\n const newIds = [...dismissedIds, ...ids]\n setDismissedIds(newIds)\n await storage.setAnnouncementDismissedIds(newIds)\n }, [validAnnouncements, dismissedIds, storage])\n\n const isLinkable = useCallback((announcement: Announcement) => {\n return announcement.linkType !== AnnouncementLinkType.NONE && !!announcement.link\n }, [])\n\n const current = validAnnouncements[activeIndex] ?? validAnnouncements[0]\n\n return {\n loading,\n validAnnouncements,\n current,\n activeIndex,\n handleDotClick,\n handleDismissAll,\n isLinkable,\n }\n}\n","import {\n RawTxInfo,\n SignPsbtParams,\n TokenBalance,\n TokenInfo,\n TokenTransfer,\n} from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { startTransition, useCallback, useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n useFetchUtxosCallback,\n usePrepareSendOrdinalsInscriptionCallback,\n usePrepareSendOrdinalsInscriptionsCallback,\n usePushOrdinalsTxCallback,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nexport enum BRC20SendTabKey {\n STEP1,\n STEP2,\n STEP3,\n}\n\nexport interface ContextData {\n tabKey: BRC20SendTabKey\n tokenBalance: TokenBalance\n transferAmount: string\n transferableList: TokenTransfer[]\n inscriptionIdSet: Set<string>\n receiver: string\n rawTxInfo: RawTxInfo\n tokenInfo: TokenInfo\n}\n\nexport interface UpdateContextDataParams {\n tabKey?: BRC20SendTabKey\n tokenBalance?: TokenBalance\n transferAmount?: string\n transferableList?: TokenTransfer[]\n inscriptionIdSet?: Set<string>\n receiver?: string\n rawTxInfo?: RawTxInfo\n}\n\nexport interface BRC20SendStepParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nexport function useBRC20SendScreenLogic() {\n const nav = useNavigation()\n\n const props = nav.getRouteState<'BRC20SendScreen'>()\n\n const tokenBalance = props.tokenBalance\n const selectedInscriptionIds = props.selectedInscriptionIds || []\n const selectedAmount = props.selectedAmount || '0'\n\n const [contextData, setContextData] = useState<ContextData>({\n tabKey: BRC20SendTabKey.STEP1,\n tokenBalance,\n transferAmount: selectedAmount,\n transferableList: [],\n inscriptionIdSet: new Set(selectedInscriptionIds),\n receiver: '',\n rawTxInfo: {\n psbtHex: '',\n rawtx: '',\n },\n tokenInfo: {\n totalSupply: '0',\n totalMinted: '0',\n decimal: 18,\n holder: '',\n inscriptionId: '',\n historyCount: 0,\n holdersCount: 0,\n logo: '',\n },\n })\n\n const updateContextData = useCallback((params: UpdateContextDataParams) => {\n setContextData(prev => {\n let changed = false\n const next = { ...prev }\n for (const key in params) {\n if (prev[key] !== params[key]) {\n next[key] = params[key]\n changed = true\n }\n }\n\n return changed ? next : prev\n })\n }, [])\n\n const onHeaderBack = () => {\n if (contextData.tabKey === BRC20SendTabKey.STEP2) {\n updateContextData({ tabKey: BRC20SendTabKey.STEP1 })\n return\n }\n nav.goBack()\n }\n\n const onTabClick = (key: string) => {\n updateContextData({ tabKey: key as any })\n }\n\n const { t } = useI18n()\n\n return {\n t,\n contextData,\n updateContextData,\n onHeaderBack,\n onTabClick,\n }\n}\n\nexport function useBRC20SendScreenLogicStep1({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const { tokenBalance } = contextData\n\n const { t } = useI18n()\n\n const [disabled, setDisabled] = useState(true)\n\n useEffect(() => {\n setDisabled(true)\n if (new BigNumber(contextData.transferAmount).lte(0)) {\n return\n }\n\n setDisabled(false)\n }, [contextData.transferAmount])\n\n const onClickNext = () => {\n updateContextData({\n tabKey: BRC20SendTabKey.STEP2,\n })\n }\n\n return {\n t,\n disabled,\n tokenBalance,\n onClickNext,\n }\n}\nexport function useBRC20SendScreenLogicStep2({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const nav = useNavigation()\n const fetchUtxos = useFetchUtxosCallback()\n const tools = useTools()\n const { t } = useI18n()\n useEffect(() => {\n tools.showLoading(true)\n fetchUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const feeRateBar = useFeeRateBar()\n\n const prepareSendOrdinalsInscriptions = usePrepareSendOrdinalsInscriptionsCallback()\n const prepareSendOrdinalsInscription = usePrepareSendOrdinalsInscriptionCallback()\n\n const [disabled, setDisabled] = useState(true)\n\n useEffect(() => {\n setDisabled(true)\n if (!contextData.receiver) {\n return\n }\n if (!feeRateBar.feeRate) {\n return\n }\n setDisabled(false)\n }, [contextData.receiver, feeRateBar.feeRate])\n\n const onStep2ClickNext = async () => {\n try {\n tools.showLoading(true)\n const inscriptionIds = Array.from(contextData.inscriptionIdSet)\n if (inscriptionIds.length === 1) {\n const toSignData = await prepareSendOrdinalsInscription({\n toAddressInfo: { address: contextData.receiver, domain: '' },\n inscriptionId: inscriptionIds[0],\n feeRate: feeRateBar.feeRate,\n outputValue: getAddressUtxoDust(contextData.receiver),\n })\n nav.navigate('TxConfirmScreen', { toSignData })\n } else {\n const toSignData = await prepareSendOrdinalsInscriptions({\n toAddressInfo: { address: contextData.receiver, domain: '' },\n inscriptionIds,\n feeRate: feeRateBar.feeRate,\n })\n nav.navigate('TxConfirmScreen', { toSignData })\n }\n\n // updateContextData({ tabKey: TabKey.STEP3, rawTxInfo: txInfo });\n } catch (e) {\n const error = e as Error\n console.log(error)\n tools.toastError(error.message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onStep2ClickBack = async () => {\n if (contextData.tabKey === BRC20SendTabKey.STEP2) {\n updateContextData({ tabKey: BRC20SendTabKey.STEP1 })\n }\n }\n return {\n t,\n disabled,\n onStep2ClickNext,\n onStep2ClickBack,\n }\n}\n\nexport function useBRC20SendScreenLogicStep3({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const { t } = useI18n()\n const nav = useNavigation()\n const pushOrdinalsTx = usePushOrdinalsTxCallback()\n\n const onSignPsbtConfirm = async res => {\n try {\n let txData = ''\n\n if (res && res.psbtHex) {\n txData = res.psbtHex\n } else if (res && res.rawtx) {\n txData = res.rawtx\n } else if (contextData.rawTxInfo.rawtx) {\n txData = contextData.rawTxInfo.rawtx\n } else {\n throw new Error(t('invalid_transaction_data'))\n }\n\n const { success, txid, error } = await pushOrdinalsTx(txData)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n }\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [\n {\n psbtHex: contextData.rawTxInfo.psbtHex,\n toSignInputs: undefined,\n autoFinalized: true,\n },\n ],\n },\n }\n\n return {\n signPsbtParams,\n onSignPsbtConfirm,\n }\n}\n\nexport function useTransferableListLogic({ contextData, updateContextData }: BRC20SendStepParams) {\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const { t } = useI18n()\n\n const [items, setItems] = useState<TokenTransfer[]>([])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(false)\n const [loadingLump, setLoadingLump] = useState(false)\n const [pagination, setPagination] = useState({ currentPage: 1, pageSize: 100 })\n const [allSelected, setAllSelected] = useState(false)\n\n const tools = useTools()\n const fetchData = async () => {\n try {\n setLoading(true)\n const { list, total } = await wallet.getBRC20TransferableList(\n currentAccount.address,\n contextData.tokenBalance.ticker,\n pagination.currentPage,\n pagination.pageSize\n )\n setItems(list)\n setTotal(total)\n } catch (e) {\n tools.toastError((e as Error).message)\n } finally {\n setLoading(false)\n }\n }\n\n useEffect(() => {\n fetchData()\n }, [pagination])\n const totalAmount = items\n .reduce((pre, cur) => new BigNumber(cur.amount).plus(pre), new BigNumber(0))\n .toString()\n\n const selectedCount = useMemo(() => contextData.inscriptionIdSet.size, [contextData])\n\n const onClickItem = (item: TokenTransfer) => {\n if (contextData.inscriptionIdSet.has(item.inscriptionId)) {\n const inscriptionIdSet = new Set(contextData.inscriptionIdSet)\n inscriptionIdSet.delete(item.inscriptionId)\n const transferAmount = new BigNumber(contextData.transferAmount).minus(\n new BigNumber(item.amount)\n )\n updateContextData({\n inscriptionIdSet,\n transferAmount: transferAmount.toString(),\n })\n if (allSelected) {\n setAllSelected(false)\n }\n } else {\n const inscriptionIdSet = new Set(contextData.inscriptionIdSet)\n inscriptionIdSet.add(item.inscriptionId)\n const transferAmount = new BigNumber(contextData.transferAmount)\n .plus(new BigNumber(item.amount))\n .toString()\n updateContextData({\n inscriptionIdSet,\n transferAmount,\n })\n if (allSelected == false && transferAmount === totalAmount) {\n setAllSelected(true)\n }\n }\n }\n\n const onCheckBoxChange = e => {\n const val = e.target.checked\n setAllSelected(val)\n if (val) {\n const inscriptionIdSet = new Set(items.map(v => v.inscriptionId))\n updateContextData({\n inscriptionIdSet,\n transferAmount: totalAmount,\n })\n } else {\n updateContextData({\n inscriptionIdSet: new Set(),\n transferAmount: '0',\n })\n }\n }\n\n const onClickCheckBoxInMobile = () => {\n setLoadingLump(true)\n setAllSelected(!allSelected)\n startTransition(() => {\n if (!allSelected) {\n const inscriptionIdSet = new Set(items.map(v => v.inscriptionId))\n updateContextData({\n inscriptionIdSet,\n transferAmount: totalAmount,\n })\n } else {\n updateContextData({\n inscriptionIdSet: new Set(),\n transferAmount: '0',\n })\n }\n })\n setLoadingLump(false)\n }\n\n const onClickRefresh = () => {\n fetchData()\n }\n\n return {\n // data\n items,\n selectedCount,\n allSelected,\n loading,\n loadingLump,\n\n // actions\n onClickItem,\n onCheckBoxChange,\n onClickCheckBoxInMobile,\n onClickRefresh,\n\n // tools\n t,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription, SignPsbtParams, SignPsbtResult, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount, useFeeRateBar, useRunesTx } from 'src/hooks'\nimport { getAddressUtxoDust, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum BRC20SingleStepKey {\n STEP1 = 'STEP1',\n STEP2 = 'STEP2',\n STEP3 = 'STEP3',\n}\n\nexport function useBRC20SingleStepScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'BRC20SingleStepScreen'>()\n const { t } = useI18n()\n\n const tokenBalance = props.tokenBalance\n const tokenInfo = props.tokenInfo\n\n const tools = useTools()\n\n const runesTx = useRunesTx()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: runesTx.toAddress,\n domain: runesTx.toDomain,\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState(tokenBalance.overallBalance)\n const [error, setError] = useState('')\n\n const defaultOutputValue = 546\n\n const currentAccount = useCurrentAccount()\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n const dust1 = getAddressUtxoDust(currentAccount.address)\n const dust2 = getAddressUtxoDust(toInfo.address)\n return Math.max(dust1, dust2)\n } else {\n return 0\n }\n }, [toInfo.address, currentAccount.address])\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(inputAmount, availableBalance)! > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, outputValue, minOutputValue, availableBalance])\n\n const wallet = useWallet()\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {\n psbtHex: '',\n toSignInputs: [],\n },\n revealToSignData: {\n psbtHex: '',\n toSignInputs: [],\n },\n })\n const [step, setStep] = useState<BRC20SingleStepKey>(BRC20SingleStepKey.STEP1)\n\n const signPsbtParamsStep2: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const signPsbtParamsStep3: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onClickBack = () => {\n if (step === BRC20SingleStepKey.STEP1) {\n nav.goBack()\n } else if (step === BRC20SingleStepKey.STEP2) {\n setStep(BRC20SingleStepKey.STEP1)\n } else if (step === BRC20SingleStepKey.STEP3) {\n setStep(BRC20SingleStepKey.STEP2)\n } else {\n nav.goBack()\n }\n }\n\n const onClickConfirmStep1 = async () => {\n tools.showLoading(true)\n try {\n const step1 = await wallet.singleStepTransferBRC20Step1({\n userAddress: currentAccount.address,\n userPubkey: currentAccount.pubkey,\n receiver: toInfo.address,\n ticker: tokenBalance.ticker,\n amount: inputAmount,\n feeRate,\n })\n if (step1) {\n transferData.current.id = step1.orderId\n transferData.current.commitToSignData = step1.toSignData\n setStep(BRC20SingleStepKey.STEP2)\n }\n } catch (e) {\n const msg = (e as any).message\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickConfirmStep2 = async (signPsbtResult: SignPsbtResult) => {\n try {\n tools.showLoading(true)\n\n const step2 = await wallet.singleStepTransferBRC20Step2({\n orderId: transferData.current.id,\n commitTx: signPsbtResult[0].psbtHex,\n })\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(BRC20SingleStepKey.STEP3)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickConfirmStep3 = async (signPsbtResult: SignPsbtResult) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.singleStepTransferBRC20Step3({\n orderId: transferData.current.id,\n revealTx: signPsbtResult[0].psbtHex,\n })\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n // data\n signPsbtParamsStep2,\n signPsbtParamsStep3,\n\n availableBalance,\n tokenBalance,\n tokenInfo,\n inputAmount,\n setInputAmount,\n disabled,\n error,\n toInfo,\n setToInfo,\n\n // state\n step,\n\n // actions\n onClickBack,\n\n onClickConfirmStep1,\n onClickConfirmStep2,\n onClickConfirmStep3,\n\n // utils\n t,\n tools,\n }\n}\n","import { AddressTokenSummary, BRC20HistoryItem, Inscription } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useBRC20IconInfo,\n useChain,\n useChainType,\n useCurrentAccount,\n useI18n,\n useNavigation,\n useResetTxState,\n useTools,\n useWallet,\n} from '..'\nimport { shortAddress } from '../utils/ui-utils'\n\nimport BigNumber from 'bignumber.js'\nconst SWAP_MODULE_ADDRESS = '6a2095ee19329a210f8d5ded9b5cfa55b74fdd3b1e9af1e202072db6d1be82d45bfd'\nconst BRIDGE_BURN_ADDRESS = '6a20ada13e56859a2ab2eeb93cb4dc19c6e3f5e94d0ed38ed95a30ddc43711a0ff14'\nconst BRC20PROG_MODULE_ADDRESS = '6a09425243323050524f47'\nexport enum BRC20TokenScreenTabKey {\n DETAILS = 'details',\n HISTORY = 'history',\n}\n\nexport interface BRC20OutWalletBalanceItem {\n key: 'wallet' | 'swap' | 'prog'\n label: string\n amount: string\n}\n\nexport function useBRC20TokenHistoryLogic(props: { ticker: string; displayName?: string }) {\n const wallet = useWallet()\n const { t } = useI18n()\n\n const account = useCurrentAccount()\n\n const nav = useNavigation()\n const { ticker, displayName } = props\n\n const [items, setItems] = useState<BRC20HistoryItem[]>([])\n\n const [loading, setLoading] = useState(true)\n\n const [failed, setFailed] = useState(false)\n\n useEffect(() => {\n wallet\n .getBRC20RecentHistory(account.address, ticker)\n .then(setItems)\n .catch(() => setFailed(true))\n .finally(() => setLoading(false))\n }, [account.address, ticker])\n\n const groupedItems = useMemo(() => {\n const groups: { [date: string]: BRC20HistoryItem[] } = {}\n items.forEach(item => {\n let time = item.blocktime\n if (item.blocktime == 0) {\n time = Date.now() / 1000\n }\n const date = new Date(time * 1000).toLocaleDateString()\n if (!groups[date]) {\n groups[date] = []\n }\n groups[date].push(item)\n })\n return Object.entries(groups).map(([date, items]) => ({ date, items }))\n }, [items])\n\n const displayItems = useMemo(() => {\n return groupedItems\n .map(({ date, items }) => ({\n date,\n items: items\n .map(item => {\n const key = item.txid + item.type\n\n let mainTitle = item.type\n let subTitle = ''\n let icon = ''\n let isPending = false\n if (item.blocktime == 0) {\n isPending = true\n }\n\n if (item.type === 'send') {\n mainTitle = t('brc20_history_type_send')\n subTitle = t('brc20_history_to') + ' ' + shortAddress(item.to)\n icon = 'history_send'\n if (item.to === SWAP_MODULE_ADDRESS) {\n mainTitle = t('brc20_history_type_wrap')\n subTitle = t('brc20_history_to') + ' ' + 'InSwap'\n icon = 'history_wrap'\n } else if (item.to === BRC20PROG_MODULE_ADDRESS) {\n mainTitle = t('brc20_history_type_wrap')\n subTitle = t('brc20_history_to') + ' ' + 'brc2.0'\n icon = 'history_wrap'\n }\n } else if (item.type === 'single-step-transfer') {\n if (item.from === account.address) {\n mainTitle = t('brc20_history_type_send')\n subTitle = t('brc20_history_to') + ' ' + shortAddress(item.to)\n icon = 'history_send'\n } else {\n mainTitle = t('brc20_history_type_receive')\n subTitle = t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = 'history_receive'\n }\n } else if (item.type === 'receive') {\n mainTitle = t('brc20_history_type_receive')\n subTitle = t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = 'history_receive'\n } else if (item.type === 'withdraw') {\n mainTitle = t('brc20_history_type_unwrap')\n subTitle = t('brc20_history_from') + ' ' + 'InSwap'\n icon = 'history_unwrap'\n } else if (item.type === 'inscribe-transfer') {\n mainTitle = t('brc20_history_type_inscribe_transfer')\n icon = 'history_inscribe'\n } else if (item.type === 'inscribe-mint') {\n mainTitle = t('brc20_history_type_inscribe_mint')\n icon = 'history_inscribe'\n } else if (item.type === 'inscribe-deploy') {\n mainTitle = t('brc20_history_type_inscribe_deploy')\n icon = 'history_inscribe'\n } else if (item.type === 'brc20prog-withdraw-transfer') {\n mainTitle = t('brc20_history_type_unwrap')\n subTitle = t('brc20_history_from') + ' ' + 'brc2.0'\n icon = 'history_unwrap'\n } else if (item.type === 'brc20prog-withdraw-inscribe') {\n mainTitle = t('brc20_history_type_inscribe_transfer')\n subTitle = t('brc20_history_type_unwrap') + ' brc2.0'\n icon = 'history_inscribe'\n } else {\n const isSendLike = item.from === account.address\n mainTitle = isSendLike\n ? t('brc20_history_type_send')\n : t('brc20_history_type_receive')\n subTitle = isSendLike\n ? t('brc20_history_to') + ' ' + shortAddress(item.to)\n : t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = isSendLike ? 'history_send' : 'history_receive'\n }\n\n const amount = item.amount\n\n return {\n key,\n icon,\n mainTitle,\n subTitle,\n amount,\n pending: isPending,\n txid: item.txid,\n }\n })\n .filter(v => v !== null),\n }))\n .filter(group => group.items.length > 0)\n }, [account.address, t, groupedItems])\n\n return {\n displayItems,\n isFailed: failed,\n isEmpty: displayItems.length === 0,\n isLoading: loading,\n }\n}\n\nexport function useBRC20TokenScreenLogic() {\n const nav = useNavigation()\n const { ticker } = nav.getRouteState<'BRC20TokenScreen'>()\n const { t } = useI18n()\n\n const [activeTab, setActiveTab] = useState<BRC20TokenScreenTabKey>(BRC20TokenScreenTabKey.HISTORY)\n\n const [tokenSummary, setTokenSummary] = useState<AddressTokenSummary>({\n tokenBalance: {\n ticker,\n overallBalance: '',\n availableBalance: '',\n transferableBalance: '',\n availableBalanceSafe: '',\n availableBalanceUnSafe: '',\n selfMint: false,\n },\n tokenInfo: {\n totalSupply: '',\n totalMinted: '',\n decimal: 18,\n holder: '',\n inscriptionId: '',\n holdersCount: 0,\n historyCount: 0,\n logo: 'https://static.unisat.io/icon/brc20/unknown',\n },\n historyList: [],\n transferableList: [],\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n\n const [loading, setLoading] = useState(true)\n\n const [deployInscription, setDeployInscription] = useState<Inscription>()\n\n const resetTxState = useResetTxState()\n useEffect(() => {\n wallet\n .getBRC20Summary(account.address, ticker)\n .then(tokenSummary => {\n if (tokenSummary.tokenInfo.holder == account.address) {\n wallet\n .getInscriptionInfo(tokenSummary.tokenInfo.inscriptionId)\n .then(data => {\n setDeployInscription(data)\n })\n .finally(() => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n } else {\n setTokenSummary(tokenSummary)\n setLoading(false)\n }\n })\n .finally(() => {\n setLoading(false)\n })\n }, [])\n\n const enableMint = useMemo(() => {\n let enable = false\n if (tokenSummary.tokenBalance.selfMint) {\n if (tokenSummary.tokenInfo.holder == account.address) {\n if (tokenSummary.tokenInfo.totalMinted != tokenSummary.tokenInfo.totalSupply) {\n enable = true\n }\n }\n } else {\n if (tokenSummary.tokenInfo.totalMinted != tokenSummary.tokenInfo.totalSupply) {\n enable = true\n }\n }\n return enable\n }, [tokenSummary])\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (\n tokenSummary.tokenBalance.overallBalance !== '0' &&\n tokenSummary.tokenBalance.overallBalance !== ''\n ) {\n enable = true\n }\n return enable\n }, [tokenSummary])\n\n const tools = useTools()\n const chainType = useChainType()\n const chain = useChain()\n\n const isBrc20Prog = useMemo(() => {\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n if (ticker.length == 6) {\n return true\n }\n }\n return false\n }, [ticker, chainType])\n\n const enableTrade = useMemo(() => {\n if (\n chainType === ChainType.BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n ) {\n return true\n } else {\n return false\n }\n }, [chainType])\n\n const enableHistory = true\n\n const tabItems = useMemo(() => {\n if (enableHistory) {\n const items = [\n {\n key: BRC20TokenScreenTabKey.HISTORY,\n label: t('history'),\n },\n {\n key: BRC20TokenScreenTabKey.DETAILS,\n label: t('details'),\n },\n ]\n return items\n } else {\n return [\n {\n key: BRC20TokenScreenTabKey.DETAILS,\n label: t('details'),\n },\n ]\n }\n }, [t, enableHistory])\n\n const onSwapBalance = tokenSummary?.tokenBalance?.swapBalance\n const onProgBalance = tokenSummary?.tokenBalance?.progBalance\n const inWalletBalance = tokenSummary?.tokenBalance?.overallBalance\n const outWalletBalanceItems = useMemo<BRC20OutWalletBalanceItem[]>(() => {\n const items: BRC20OutWalletBalanceItem[] = [\n {\n key: 'wallet',\n label: t('brc20_in_wallet'),\n amount: inWalletBalance || '0',\n },\n ]\n\n if (onSwapBalance && onSwapBalance !== '0') {\n items.push({\n key: 'swap',\n label: t('brc20_on_swap'),\n amount: onSwapBalance,\n })\n }\n\n if (onProgBalance && onProgBalance !== '0') {\n items.push({\n key: 'prog',\n label: t('brc20_on_prog'),\n amount: onProgBalance,\n })\n }\n\n return items\n }, [inWalletBalance, onProgBalance, onSwapBalance, t])\n const totalBalance = useMemo(() => {\n if (!inWalletBalance) {\n return '--'\n }\n return new BigNumber(inWalletBalance)\n .plus(new BigNumber(onSwapBalance || 0))\n .plus(new BigNumber(onProgBalance || 0))\n .toString()\n }, [onSwapBalance, onProgBalance, inWalletBalance])\n\n let hasOutWalletBalance = false\n if (onSwapBalance && onSwapBalance !== '0') {\n hasOutWalletBalance = true\n }\n if (onProgBalance && onProgBalance !== '0') {\n hasOutWalletBalance = true\n }\n\n const onClickWrapBrc20Prog = () => {\n const url = `https://link.unisat.space/btc/wrap?tick=${encodeURIComponent(ticker)}`\n nav.navToUrl(url)\n }\n\n const onClickUnwrapBrc20Prog = () => {\n const url = `https://link.unisat.space/btc/wrap?action=unwrap&tick=${encodeURIComponent(ticker)}`\n nav.navToUrl(url)\n }\n\n const onClickSendBrc20Prog = () => {\n const url = `https://bestinslot.xyz/brc2.0/${encodeURIComponent(ticker)}/transfer`\n nav.navToUrl(url)\n }\n\n const onClickSwapInSwap = () => {\n const url = `https://inswap.cc/swap?t0=${encodeURIComponent(ticker)}`\n nav.navToUrl(url)\n }\n\n const onClickAddLiquidityInSwap = () => {\n const url = `https://inswap.cc/swap/pools?t0=${encodeURIComponent(ticker)}&t1=sFB___000&action=add`\n nav.navToUrl(url)\n }\n\n const onClickRemoveLiquidityInSwap = () => {\n const url = `https://inswap.cc/swap/pools?t0=${encodeURIComponent(ticker)}&t1=sFB___000&action=remove`\n nav.navToUrl(url)\n }\n\n const onClickWrapInSwap = () => {\n const url = `https://inswap.cc/swap?tab=deposit&t=${encodeURIComponent(ticker)}`\n nav.navToUrl(url)\n }\n\n const onClickUnwrapInSwap = () => {\n const url = `https://inswap.cc/swap?tab=withdraw&t=${encodeURIComponent(ticker)}`\n nav.navToUrl(url)\n }\n\n const onClickSendInSwap = () => {\n const url = `https://inswap.cc/swap/assets/account`\n nav.navToUrl(url)\n }\n\n const onClickMint = () => {\n nav.navToInscribeBrc20(ticker)\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('BRC20SendScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const onClickTrade = () => {\n nav.navToMarketPlaceBrc20(ticker)\n }\n\n const onClickSingleStepSend = () => {\n resetTxState()\n nav.navigate('BRC20SingleStepScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const iconInfo = useBRC20IconInfo(ticker)\n\n return {\n totalBalance,\n onSwapBalance,\n onProgBalance,\n inWalletBalance,\n outWalletBalanceItems,\n hasOutWalletBalance,\n enableHistory,\n enableTrade,\n enableMint,\n enableTransfer,\n loading,\n tokenSummary,\n deployInscription,\n activeTab,\n setActiveTab,\n tabItems,\n t,\n ticker,\n chain,\n tools,\n isBrc20Prog,\n iconInfo,\n onClickWrapBrc20Prog,\n onClickUnwrapBrc20Prog,\n onClickSendBrc20Prog,\n\n onClickSwapInSwap,\n onClickAddLiquidityInSwap,\n onClickRemoveLiquidityInSwap,\n onClickWrapInSwap,\n onClickUnwrapInSwap,\n onClickSendInSwap,\n\n onClickMint,\n onClickSend,\n onClickTrade,\n onClickSingleStepSend,\n }\n}\n","import { useEffect } from 'react'\n\nexport function shortAddress(address?: string, len = 8) {\n if (!address) return ''\n if (address.length <= len * 2) return address\n return address.slice(0, len) + '...' + address.slice(address.length - len)\n}\n\nexport function useAsyncEffect(\n effect: () => Promise<void | (() => void)>,\n deps: React.DependencyList = []\n) {\n useEffect(() => {\n let isMounted = true\n let cleanup: void | (() => void)\n ;(async () => {\n cleanup = await effect()\n })()\n\n return () => {\n isMounted = false\n if (cleanup) {\n cleanup()\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n}\n","import { useMemo, useState } from 'react'\n\nimport { keyringsActions, useAppDispatch, useI18n, useNavigation, useWallet } from '..'\nexport function useEditWalletNameScreenLogic() {\n const nav = useNavigation()\n const { keyring } = nav.getRouteState<'EditWalletNameScreen'>()\n const { t } = useI18n()\n const wallet = useWallet()\n const [alianName, setAlianName] = useState(keyring.alianName || '')\n const dispatch = useAppDispatch()\n const handleOnClick = async () => {\n try {\n const newKeyring = await wallet.setKeyringAlianName(keyring, alianName || keyring.alianName)\n //@ts-ignore SAFE\n dispatch(keyringsActions.updateKeyringName(newKeyring))\n nav.goBack()\n } catch (e) {\n console.log(e)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ('Enter' == e.key && e.ctrlKey) {\n handleOnClick()\n }\n }\n\n const isValidName = useMemo(() => {\n if (alianName.length == 0) {\n return false\n }\n return true\n }, [alianName])\n\n const truncatedTitle = useMemo(() => {\n if (keyring.alianName && keyring.alianName.length > 20) {\n return keyring.alianName.slice(0, 20) + '...'\n }\n return keyring.alianName || ''\n }, [keyring.alianName])\n\n const onInputChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n if (value.length <= 20) {\n setAlianName(value)\n }\n }\n\n return {\n t,\n keyring,\n isValidName,\n truncatedTitle,\n handleOnClick,\n handleOnKeyUp,\n onInputChange,\n }\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useI18n, useWallet } from '../context'\nimport { useChain, useFeeRateBar, useUpdateFeeRateBar } from '../hooks'\nimport { useAsyncEffect } from '../utils/ui-utils'\n\nenum FeeRateType {\n SLOW,\n AVG,\n FAST,\n CUSTOM,\n}\n\ninterface FeeOption {\n type?: FeeRateType\n title: string\n desc?: string\n feeRate: number\n}\n\nconst translationKeys = {\n [FeeRateType.SLOW]: { type: FeeRateType.SLOW, title: 'slow', desc: 'feerate_slow_desc' },\n [FeeRateType.AVG]: { type: FeeRateType.AVG, title: 'avg', desc: 'feerate_avg_desc' },\n [FeeRateType.FAST]: { type: FeeRateType.FAST, title: 'fast', desc: 'feerate_fast_desc' },\n} as const\n\nconst MAX_FEE_RATE = 10000\nconst DEFAULT_FEE_RATE = 1\nconst AVG_OPTION_INDEX = 1\n\n// Fee rate display rules:\n// if (Fast = Avg = Slow) -> show Fast time (30s) for all\n// if (Fast = Avg) -> show Fast time (30s) for both\n// if (Avg = Slow) -> show Avg time (1.5m) for both\n\nfunction getFractalFeeDesc(\n index: FeeRateType,\n fastRate: number,\n avgRate: number,\n slowRate: number,\n t: (key: string) => string\n): string {\n const { FAST, AVG, SLOW } = FeeRateType\n\n // All rates are equal\n if (fastRate === avgRate && avgRate === slowRate) {\n return t('feerate_fast_desc_fb')\n }\n\n // Fast equals Avg\n if (fastRate === avgRate) {\n return index === SLOW ? t('feerate_slow_desc_fb') : t('feerate_fast_desc_fb')\n }\n\n // Avg equals Slow\n if (avgRate === slowRate && (index === AVG || index === SLOW)) {\n return t('feerate_avg_desc_fb')\n }\n\n // Default descriptions\n const descriptions = {\n [FAST]: 'feerate_fast_desc_fb',\n [AVG]: 'feerate_avg_desc_fb',\n [SLOW]: 'feerate_slow_desc_fb',\n }\n\n return t(descriptions[index] || '')\n}\n\nfunction formatFeeRateTextKey(\n list: FeeOption[],\n isFractal: boolean,\n supportLowFeeMode: boolean,\n t: (key: string) => string\n): FeeOption[] {\n const { FAST, AVG, SLOW } = FeeRateType\n const fastRate = list[FAST]?.feeRate ?? 0\n const avgRate = list[AVG]?.feeRate ?? 0\n const slowRate = list[SLOW]?.feeRate ?? 0\n\n return list.map((option, index) => {\n const keys = translationKeys[index as FeeRateType]\n if (!keys) return option\n\n let title = t(keys.title)\n let desc = t(keys.desc)\n\n if (isFractal) {\n desc = getFractalFeeDesc(index, fastRate, avgRate, slowRate, t)\n } else {\n if (fastRate === slowRate) {\n desc = t('feerate_fast_desc')\n }\n\n if (supportLowFeeMode) {\n if (index === SLOW) {\n title = t('feerate_sub1_title')\n desc = ''\n }\n }\n }\n\n return {\n ...option,\n title,\n desc,\n }\n })\n}\n\nexport function useFeeRateBarLogic({ readonly }: { readonly?: boolean }) {\n const wallet = useWallet()\n const [feeOptions, setFeeOptions] = useState<FeeOption[]>([])\n const feeRateBarState = useFeeRateBar()\n const updateFeeRateBar = useUpdateFeeRateBar()\n const feeRateInputVal = feeRateBarState.feeRateInputVal\n const feeOptionIndex = feeRateBarState.feeOptionIndex\n const showCustomInput = feeRateBarState.showCustomInput\n const feeRate = feeRateBarState.feeRate\n const { t, isSpecialLocale } = useI18n()\n const chain = useChain()\n const isFractal = chain.isFractal\n const fontSize = useMemo(() => (isSpecialLocale ? 'xxxs' : 'xxs'), [isSpecialLocale])\n\n const [showLowFeeModeTipsPopover, setShowLowFeeModeTipsPopover] = useState(false)\n\n const supportLowFeeMode = chain.enableLowFeeMode ?? false\n\n useAsyncEffect(async () => {\n const feeSummary = await wallet.getFeeSummary()\n\n if (supportLowFeeMode) {\n const lowFeeSummary = await wallet.getLowFeeSummary()\n feeSummary.list[0] = lowFeeSummary.list[1]\n\n // try use slow fee rate if it's lower than 1 sat/vB\n if (feeSummary.list[0].feeRate > 1) {\n feeSummary.list[0] = lowFeeSummary.list[0]\n }\n\n // ensure slow fee rate is below 1 sat/vB\n if (feeSummary.list[0].feeRate > 1) {\n feeSummary.list[0].feeRate = 0.1\n }\n }\n\n const translatedList = formatFeeRateTextKey(feeSummary.list, isFractal, supportLowFeeMode, t)\n const options = readonly\n ? translatedList\n : [...translatedList, { type: FeeRateType.CUSTOM, title: t('custom'), feeRate: 0 }]\n\n setFeeOptions(options)\n }, [wallet, isFractal, t, supportLowFeeMode, readonly])\n\n // Memoize default value to avoid repeated calculations\n const defaultFeeRate = useMemo(\n () => feeOptions[AVG_OPTION_INDEX]?.feeRate ?? DEFAULT_FEE_RATE,\n [feeOptions]\n )\n\n useEffect(() => {\n let val = defaultFeeRate\n if (feeOptionIndex === FeeRateType.CUSTOM) {\n val = parseFloat(feeRateInputVal) || 0\n } else if (feeOptions.length > 0) {\n val = feeOptions[feeOptionIndex]?.feeRate ?? defaultFeeRate\n }\n\n if (val.toString() == feeRate.toString()) {\n return\n }\n\n if (val === feeRate) {\n return\n }\n\n updateFeeRateBar({ feeRate: val })\n }, [feeOptions, feeOptionIndex, feeRateInputVal, defaultFeeRate, feeRate])\n\n const adjustFeeRateInput = useCallback(\n (inputVal: string) => {\n // When user manually changes the input, check if we need to switch to CUSTOM\n const shouldSwitchToCustom = feeOptionIndex !== FeeRateType.CUSTOM && feeOptions.length > 0\n const selectedOption = feeOptions[feeOptionIndex]\n\n // If currently on SLOW/AVG/FAST and user changes the value, switch to CUSTOM\n if (shouldSwitchToCustom && selectedOption) {\n const currentValue = selectedOption.feeRate.toString()\n if (inputVal !== currentValue) {\n updateFeeRateBar({\n feeRateInputVal: inputVal,\n feeOptionIndex: FeeRateType.CUSTOM,\n })\n return\n }\n }\n\n // Allow empty input\n if (inputVal === '') {\n updateFeeRateBar({ feeRateInputVal: '' })\n return\n }\n\n const val = parseFloat(inputVal)\n\n // Check if input is a valid number\n if (isNaN(val)) {\n updateFeeRateBar({ feeRateInputVal: '' })\n return\n }\n\n // Allow intermediate input like \"0\" or \"0.\" for typing \"0.1\"\n if (inputVal === '0' || inputVal.endsWith('.')) {\n updateFeeRateBar({ feeRateInputVal: inputVal })\n return\n }\n\n // Validate and constrain the value\n if (val <= 0) {\n updateFeeRateBar({ feeRateInputVal: defaultFeeRate.toString() })\n } else if (val > MAX_FEE_RATE) {\n updateFeeRateBar({ feeRateInputVal: MAX_FEE_RATE.toString() })\n } else if (val < 1 && supportLowFeeMode == false) {\n updateFeeRateBar({ feeRateInputVal: '1' })\n } else if (val < 0.1) {\n updateFeeRateBar({ feeRateInputVal: '0.1' })\n } else {\n updateFeeRateBar({ feeRateInputVal: inputVal })\n }\n },\n [defaultFeeRate, updateFeeRateBar, feeOptionIndex, feeOptions, supportLowFeeMode]\n )\n\n const isCustomOption = useCallback((option: FeeOption) => option.type === FeeRateType.CUSTOM, [t])\n\n const toggleLowFeeRate = useCallback(async () => {\n const selectedOption = feeOptions[FeeRateType.SLOW]\n updateFeeRateBar({\n feeOptionIndex: FeeRateType.SLOW,\n showCustomInput: true,\n feeRateInputVal: selectedOption.feeRate.toString(),\n })\n }, [feeOptions, updateFeeRateBar, feeRateInputVal])\n\n const setFeeOptionIndex = useCallback(\n async (index: number) => {\n const selectedOption = feeOptions[index]\n if (supportLowFeeMode && index === FeeRateType.SLOW) {\n const acceptLowFeeMode = await wallet.getAcceptLowFeeMode()\n if (acceptLowFeeMode === false) {\n setShowLowFeeModeTipsPopover(true)\n return\n }\n }\n if (index !== FeeRateType.CUSTOM && selectedOption) {\n // When clicking on SLOW/AVG/FAST, show input and fill with the corresponding value\n updateFeeRateBar({\n feeOptionIndex: index,\n showCustomInput: true,\n feeRateInputVal: selectedOption.feeRate.toString(),\n })\n } else if (index === FeeRateType.CUSTOM) {\n // When clicking on CUSTOM, show input with current custom value or empty\n updateFeeRateBar({\n feeOptionIndex: index,\n showCustomInput: true,\n })\n }\n },\n [feeOptions, updateFeeRateBar]\n )\n\n const toggleCustomInput = useCallback(\n (show: boolean) => {\n updateFeeRateBar({ showCustomInput: show })\n },\n [updateFeeRateBar]\n )\n\n const isSub1FeeOptionOn = useMemo(() => {\n if (supportLowFeeMode && feeOptionIndex === FeeRateType.SLOW) {\n return true\n }\n return false\n }, [feeOptionIndex, supportLowFeeMode])\n\n return {\n feeOptions,\n feeOptionIndex,\n setFeeOptionIndex,\n feeRateInputVal,\n adjustFeeRateInput,\n isCustomOption,\n fontSize,\n isSpecialLocale,\n toggleLowFeeRate,\n showCustomInput: readonly ? false : showCustomInput,\n toggleCustomInput,\n supportLowFeeMode,\n showLowFeeModeTipsPopover,\n setShowLowFeeModeTipsPopover,\n isSub1FeeOptionOn,\n }\n}\n","import { getAutoLockTimes } from '@unisat/wallet-shared'\nimport { useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from '../context'\nimport { useAppDispatch, useAutoLockTimeId } from '../hooks'\nimport { settingsActions } from '../reducers'\n\nexport function useLockTimePageLogic() {\n const { t } = useI18n()\n const autoLockTimeId = useAutoLockTimeId()\n const autoLockTimes = getAutoLockTimes(t)\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n const [loading, setLoading] = useState(false)\n const nav = useNavigation()\n\n const handleSelectOption = async option => {\n if (loading) return\n\n setLoading(true)\n try {\n const lockTimeId = option.id\n await wallet.setAutoLockTimeId(lockTimeId)\n // @ts-ignore SAFE\n dispatch(settingsActions.updateSettings({ autoLockTimeId: lockTimeId }))\n tools.toastSuccess(`${t('the_auto_lock_time_has_been_changed_to')} ${option.label}`)\n\n setTimeout(() => {\n nav.goBack()\n }, 300)\n } catch (error) {\n console.error('Failed to set lock time:', error)\n } finally {\n setLoading(false)\n }\n }\n return {\n autoLockTimeId,\n autoLockTimes,\n loading,\n handleSelectOption,\n }\n}\n","import { AnnouncementLinkType, StoredNotification } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\n\nexport function useUnreadNotificationsCount() {\n const wallet = useWallet()\n const [unreadCount, setUnreadCount] = useState(0)\n\n useEffect(() => {\n const updateUnreadCount = async () => {\n const count = await wallet.getNotificationUnreadCount()\n setUnreadCount(count)\n }\n\n updateUnreadCount()\n\n // Poll every 3 seconds for unread count updates.\n const interval = setInterval(updateUnreadCount, 3000)\n return () => clearInterval(interval)\n }, [wallet])\n\n return unreadCount\n}\n\nexport function useNotificationsLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const [notifications, setNotifications] = useState<StoredNotification[]>([])\n const [loading, setLoading] = useState(true)\n\n const fetchNotifications = useCallback(async () => {\n try {\n setLoading(true)\n const data = await wallet.getNotifications()\n setNotifications(data)\n } catch (error) {\n console.error('Failed to fetch notifications:', error)\n setNotifications([])\n } finally {\n setLoading(false)\n }\n }, [wallet])\n\n useEffect(() => {\n fetchNotifications()\n }, [fetchNotifications])\n\n const handleReadNotification = useCallback(\n async (id: string) => {\n await wallet.readNotification(id)\n // Update local state\n setNotifications(prev => prev.map(n => (n.id === id ? { ...n, readAt: Date.now() } : n)))\n },\n [wallet]\n )\n\n const tools = useTools()\n const { t } = useI18n()\n const handleReadAll = useCallback(async () => {\n await wallet.readAllNotifications()\n // Update local state\n const now = Date.now()\n setNotifications(prev => prev.map(n => ({ ...n, readAt: now })))\n tools.toastSuccess(t('all_marked_as_read'))\n }, [wallet])\n\n const handleDeleteNotification = useCallback(\n async (id: string) => {\n await wallet.deleteNotification(id)\n // Update local state\n setNotifications(prev => prev.filter(n => n.id !== id))\n },\n [wallet]\n )\n\n const unreadCount = notifications.filter(n => n.readAt === undefined).length\n\n const handleCardClick = async (notification: StoredNotification) => {\n if (notification.readAt === undefined) {\n await handleReadNotification(notification.id)\n }\n if (notification.link) {\n if (notification.linkType === AnnouncementLinkType.EXTERNAL_LINK) {\n nav.navToUrl(notification.link, true)\n return\n }\n nav.navToUrl(notification.link)\n }\n }\n const formatTime = (timestamp: number) => {\n const now = Date.now()\n const diff = now - timestamp\n const minutes = Math.floor(diff / 60000)\n const hours = Math.floor(diff / 3600000)\n const days = Math.floor(diff / 86400000)\n\n if (minutes < 1) return t('just_now')\n if (minutes < 60) return String(minutes) + ' ' + t('minutes_ago')\n if (hours < 24) return String(hours) + ' ' + t('hours_ago')\n if (days < 7) return String(days) + ' ' + t('days_ago')\n return new Date(timestamp).toLocaleDateString()\n }\n\n return {\n notifications,\n loading,\n unreadCount,\n handleReadNotification,\n handleReadAll,\n handleDeleteNotification,\n fetchNotifications,\n handleCardClick,\n formatTime,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useFeeRateBar,\n useFetchUtxosCallback,\n useI18n,\n useNavigation,\n useOrdinalsTx,\n usePrepareSendOrdinalsInscriptionCallback,\n useTools,\n useWallet,\n} from '..'\nimport { getAddressUtxoDust, isValidAddress } from '../utils/bitcoin-utils'\n\nexport function useSendOrdinalsInscriptionScreenLogic() {\n const [disabled, setDisabled] = useState(true)\n const nav = useNavigation()\n\n const { inscription } = nav.getRouteState<'SendOrdinalsInscriptionScreen'>()\n const ordinalsTx = useOrdinalsTx()\n const [toInfo, setToInfo] = useState({\n address: ordinalsTx.toAddress,\n domain: ordinalsTx.toDomain,\n })\n const { t } = useI18n()\n\n const fetchBtcUtxos = useFetchUtxosCallback()\n const tools = useTools()\n useEffect(() => {\n tools.showLoading(true)\n fetchBtcUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const [error, setError] = useState('')\n const prepareSendOrdinalsInscription = usePrepareSendOrdinalsInscriptionCallback()\n const { feeRate } = useFeeRateBar()\n const defaultOutputValue = inscription ? inscription.outputValue : 10000\n\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const [inscriptions, setInscriptions] = useState<Inscription[]>([])\n\n const wallet = useWallet()\n useEffect(() => {\n wallet.getInscriptionUtxoDetail(inscription.inscriptionId).then(v => {\n setInscriptions(v.inscriptions)\n })\n }, [])\n\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n return getAddressUtxoDust(toInfo.address)\n } else {\n return 0\n }\n }, [toInfo.address])\n\n useEffect(() => {\n setDisabled(true)\n setError('')\n\n if (feeRate <= 0) {\n setError(t('invalid_fee_rate'))\n return\n }\n\n let dustUtxo = inscription.outputValue\n try {\n if (toInfo.address) {\n dustUtxo = getAddressUtxoDust(toInfo.address)\n }\n } catch (e) {\n // console.log(e);\n }\n\n const maxOffset = inscriptions.reduce((pre, cur) => {\n return Math.max(pre, cur.offset)\n }, 0)\n\n const minOutputValue = Math.max(maxOffset + 1, dustUtxo)\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, feeRate, outputValue, inscriptions])\n\n const onAddressInputChange = val => {\n setToInfo(val)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickNext = () => {\n prepareSendOrdinalsInscription({\n toAddressInfo: toInfo,\n inscriptionId: inscription.inscriptionId,\n feeRate,\n outputValue,\n })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n t,\n onAddressInputChange,\n toInfo,\n outputValue,\n minOutputValue,\n defaultOutputValue,\n setOutputValue,\n inscriptions,\n disabled,\n error,\n onClickBack,\n onClickNext,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { numUtils } from '@unisat/base-utils'\nimport { COIN_DUST } from '@unisat/wallet-shared'\nimport {\n useAccountBalance,\n useBTCUnit,\n useChain,\n useFeeRateBar,\n useFetchUtxosCallback,\n useI18n,\n useNavigation,\n usePrepareSendBTCCallback,\n useTools,\n useUiTxCreateScreen,\n useUpdateUiTxCreateScreen,\n useWalletConfig,\n} from '..'\nimport { isValidAddress } from '../utils/bitcoin-utils'\n\nexport function useTxCreateScreenLogic() {\n const { t, isSpecialLocale } = useI18n()\n const accountBalance = useAccountBalance()\n const nav = useNavigation()\n const btcUnit = useBTCUnit()\n\n const [disabled, setDisabled] = useState(true)\n\n const setUiState = useUpdateUiTxCreateScreen()\n const uiState = useUiTxCreateScreen()\n const feeRateBarState = useFeeRateBar()\n\n const toInfo = uiState.toInfo\n const inputAmount = uiState.inputAmount\n const feeRate = feeRateBarState.feeRate\n\n const [error, setError] = useState('')\n\n const [autoAdjust, setAutoAdjust] = useState(false)\n const fetchUtxos = useFetchUtxosCallback()\n\n const tools = useTools()\n useEffect(() => {\n tools.showLoading(true)\n fetchUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const prepareSendBTC = usePrepareSendBTCCallback()\n\n const toSatoshis = useMemo(() => {\n if (!inputAmount) return 0\n return numUtils.amountToSatoshis(inputAmount)\n }, [inputAmount])\n\n const dustAmount = useMemo(() => numUtils.satoshisToAmount(COIN_DUST), [COIN_DUST])\n\n const availableAmount = numUtils.satoshisToAmount(accountBalance.availableBalance)\n const unavailableAmount = numUtils.satoshisToAmount(accountBalance.unavailableBalance)\n\n const showUnavailable = accountBalance.unavailableBalance > 0\n\n const chain = useChain()\n useEffect(() => {\n setError('')\n setDisabled(true)\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!toSatoshis) {\n return\n }\n if (toSatoshis < COIN_DUST) {\n setError(`${t('amount_must_be_at_least')} ${dustAmount} ${btcUnit}`)\n return\n }\n\n if (toSatoshis > accountBalance.availableBalance) {\n setError(t('amount_exceeds_your_available_balance'))\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate])\n\n const walletConfig = useWalletConfig()\n\n const unavailableTipText = useMemo(() => {\n let tipText = ''\n tipText += t('unavailable_tooltip')\n\n if (walletConfig.disableUtxoTools) {\n tipText += t('future_versions_will_support_spending_these_assets')\n } else {\n tipText += t('you_can_unlock_these_assets_by_using_the_utxos_tools')\n }\n return tipText\n }, [chain.enum])\n\n const headerTitle = `${t('send')} ${btcUnit}`\n\n const onAddressInputChange = val => setUiState({ toInfo: val })\n\n const onAmountInputChange = amount => {\n if (autoAdjust == true) {\n setAutoAdjust(false)\n }\n setUiState({ inputAmount: amount })\n }\n\n const onAmountMaxClick = () => {\n setAutoAdjust(true)\n setUiState({ inputAmount: availableAmount.toString() })\n }\n\n const onClickNext = () => {\n prepareSendBTC({ toAddressInfo: toInfo, toAmount: toSatoshis, feeRate })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', {\n toSignData,\n })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n headerTitle,\n chain,\n\n toInfo,\n onAddressInputChange,\n\n toSatoshis,\n inputAmount,\n onAmountInputChange,\n onAmountMaxClick,\n\n showUnavailable,\n availableAmount,\n unavailableAmount,\n unavailableTipText,\n btcUnit,\n t,\n\n walletConfig,\n isSpecialLocale,\n\n error,\n disabled,\n\n onClickNext,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport {\n InscribeOrder,\n SignedData,\n SignPsbtParams,\n TokenBalance,\n TokenInfo,\n ToSignData,\n} from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useApproval, useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useBTCUnit,\n useCurrentAccount,\n useFeeRateBar,\n useFetchUtxosCallback,\n usePrepareSendBypassHeadOffsetsCallback,\n usePushBitcoinTxCallback,\n useUpdateFeeRateBar,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nenum Step {\n STEP1,\n STEP2,\n STEP3,\n STEP4,\n}\n\ninterface ContextData {\n step: Step\n ticker: string\n session?: any\n tokenBalance?: TokenBalance\n order?: InscribeOrder\n toSignData?: ToSignData\n amount?: string\n isApproval: boolean\n tokenInfo?: TokenInfo\n amountEditable?: boolean\n}\n\ninterface UpdateContextDataParams {\n step?: Step\n ticket?: string\n session?: any\n tokenBalance?: TokenBalance\n order?: InscribeOrder\n toSignData?: ToSignData\n amount?: string\n tokenInfo?: TokenInfo\n amountEditable?: boolean\n}\n\nexport interface BRC20InscribeTransferParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nexport function useBRC20InscribeTransferLogic() {\n const nav = useNavigation()\n const { ticker } = nav.getRouteState<'BRC20InscribeTransfer'>()\n\n const [contextData, setContextData] = useState<ContextData>({\n step: Step.STEP1,\n ticker: ticker,\n isApproval: false,\n })\n const updateContextData = useCallback(\n (params: UpdateContextDataParams) => {\n setContextData(Object.assign({}, contextData, params))\n },\n [contextData, setContextData]\n )\n return {\n contextData,\n updateContextData,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep1(params: BRC20InscribeTransferParams) {\n const { contextData, updateContextData } = params\n const { t } = useI18n()\n const nav = useNavigation()\n\n const { rejectApproval } = useApproval()\n\n const handleCancel = () => {\n rejectApproval(t('user_rejected_the_request'))\n }\n\n const wallet = useWallet()\n const account = useCurrentAccount()\n const feeRateBarState = useFeeRateBar()\n const updateFeeRateBar = useUpdateFeeRateBar()\n const [inputAmount, setInputAmount] = useState('')\n\n const tools = useTools()\n const prepareSendBypassHeadOffsets = usePrepareSendBypassHeadOffsetsCallback()\n\n const fetchUtxos = useFetchUtxosCallback()\n\n const [loading, setLoading] = useState(true)\n const [loadingOnly, setLoadingOnly] = useState(false)\n const [inputError, setInputError] = useState('')\n const [inputErrorAvailable, setInputErrorAvailable] = useState('')\n\n const [disabled, setDisabled] = useState(true)\n\n const [inputDisabled, setInputDisabled] = useState(false)\n\n const defaultOutputValue = 546\n // const defaultOutputValue = getAddressUtxoDust(account.address);\n\n const [outputValue, setOutputValue] = useState<number>(defaultOutputValue)\n\n useEffect(() => {\n if (contextData.amount) {\n setInputAmount(contextData.amount.toString())\n setInputDisabled(true)\n }\n }, [])\n\n useEffect(() => {\n setInputError('')\n setInputErrorAvailable('')\n setDisabled(true)\n if (!inputAmount) {\n return\n }\n\n if (inputAmount.split('.').length > 1) {\n const decimal = inputAmount.split('.')[1].length\n const token_decimal = contextData.tokenInfo?.decimal || 0\n if (decimal > token_decimal) {\n setInputError(\n `${t('this_token_only_supports_up_to')} ${token_decimal} ${t('decimal_places')}`\n )\n return\n }\n }\n\n const amount = new BigNumber(inputAmount)\n if (!amount) {\n return\n }\n\n if (!contextData.tokenBalance) {\n return\n }\n\n if (amount.lte(0)) {\n return\n }\n\n if (amount.gt(contextData.tokenBalance.availableBalanceSafe)) {\n setInputErrorAvailable(t('insufficient_balance'))\n return\n }\n\n if (feeRateBarState.feeRate <= 0) {\n return\n }\n\n const dust = getAddressUtxoDust(account.address)\n if (outputValue < dust) {\n setInputError(`${t('output_value_must_be_at_least')} ${dust}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n setDisabled(false)\n }, [inputAmount, feeRateBarState.feeRate, outputValue, contextData.tokenBalance])\n\n useEffect(() => {\n fetchUtxos()\n\n wallet\n .getBRC20Summary(account.address, contextData.ticker)\n .then(v => {\n updateContextData({ tokenBalance: v.tokenBalance, tokenInfo: v.tokenInfo })\n setTimeout(() => {\n setLoading(false)\n }, 100)\n })\n .catch(e => {\n tools.toastError(e.message)\n })\n }, [])\n\n const onClickInscribe = async () => {\n try {\n tools.showLoading(true)\n const amount = inputAmount\n const order = await wallet.inscribeBRC20Transfer(\n account.address,\n contextData.ticker,\n amount,\n feeRateBarState.feeRate,\n outputValue\n )\n\n const toSignData = await prepareSendBypassHeadOffsets({\n toAddressInfo: { address: order.payAddress, domain: '' },\n toAmount: order.totalFee,\n feeRate: feeRateBarState.feeRate,\n })\n updateContextData({ order, amount, toSignData, step: Step.STEP2 })\n } catch (e) {\n tools.toastError((e as Error).message.replace('Error:', ''))\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n onClickInscribe,\n loading,\n t,\n nav,\n inputAmount,\n inputError,\n setInputAmount,\n inputDisabled,\n inputErrorAvailable,\n defaultOutputValue,\n setOutputValue,\n disabled,\n loadingOnly,\n handleCancel,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep2(params: BRC20InscribeTransferParams) {\n const { contextData } = params\n const { order, tokenBalance, amount, toSignData, session } = contextData\n const btcUnit = useBTCUnit()\n const { t } = useI18n()\n\n if (!order || !tokenBalance || !toSignData) {\n return {\n isEmpty: true,\n networkFee: '0',\n outputValue: '0',\n minerFee: '0',\n originServiceFee: '0',\n serviceFee: '0',\n totalFee: '0',\n btcUnit,\n t,\n session,\n amount,\n tokenBalance,\n }\n }\n\n const fee = toSignData.estimatedFee || 0\n const networkFee = useMemo(() => numUtils.satoshisToAmount(fee), [fee])\n const outputValue = useMemo(\n () => numUtils.satoshisToAmount(order.outputValue),\n [order.outputValue]\n )\n const minerFee = useMemo(() => numUtils.satoshisToAmount(order.minerFee + fee), [order.minerFee])\n const originServiceFee = useMemo(\n () => numUtils.satoshisToAmount(order.originServiceFee),\n [order.originServiceFee]\n )\n const serviceFee = useMemo(() => numUtils.satoshisToAmount(order.serviceFee), [order.serviceFee])\n const totalFee = useMemo(() => numUtils.satoshisToAmount(order.totalFee + fee), [order.totalFee])\n\n return {\n networkFee,\n outputValue,\n minerFee,\n originServiceFee,\n serviceFee,\n totalFee,\n btcUnit,\n t,\n session,\n amount,\n tokenBalance,\n order,\n toSignData,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep3(params: BRC20InscribeTransferParams) {\n const { contextData, updateContextData } = params\n\n const pushBitcoinTx = usePushBitcoinTxCallback()\n const nav = useNavigation()\n\n const onHeaderBack = () => {\n updateContextData({\n step: Step.STEP2,\n })\n }\n\n const onSignPsbtHandleCancel = () => {\n updateContextData({\n step: Step.STEP2,\n })\n }\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [contextData.toSignData!],\n },\n }\n\n const tools = useTools()\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n return\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n signPsbtParams,\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onHeaderBack,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep4(params: BRC20InscribeTransferParams) {\n const { contextData } = params\n const { tokenBalance, order } = contextData\n const tools = useTools()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const { resolveApproval, rejectApproval } = useApproval()\n const nav = useNavigation()\n const [result, setResult] = useState<any>()\n const { t } = useI18n()\n const checkResult = async () => {\n const result = await wallet.getInscribeResult(order.orderId)\n if (!result) {\n setTimeout(() => {\n checkResult()\n }, 2000)\n return\n }\n tools.showLoading(false)\n setResult(result)\n }\n\n useEffect(() => {\n checkResult()\n }, [])\n\n const onClickConfirm = () => {\n tools.showLoading(true)\n wallet\n .getBRC20Summary(currentAccount.address, tokenBalance.ticker)\n .then(v => {\n if (contextData.isApproval) {\n resolveApproval({\n inscriptionId: result.inscriptionId,\n inscriptionNumber: result.inscriptionNumber,\n ticker: tokenBalance.ticker,\n amount: result.amount,\n })\n } else {\n nav.navigate('BRC20SendScreen', {\n tokenBalance: v.tokenBalance,\n selectedInscriptionIds: [result.inscriptionId],\n selectedAmount: result.amount,\n tokenInfo: v.tokenInfo,\n })\n }\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }\n\n return {\n t,\n result,\n onClickConfirm,\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useResetTxState } from 'src/hooks'\n\nexport function useAlkanesNFTScreenLogic() {\n const nav = useNavigation()\n const { alkanesInfo } = nav.getRouteState<'AlkanesNFTScreen'>()\n\n const { t } = useI18n()\n\n const resetTxState = useResetTxState()\n\n const [availableUtxo, setAvailableUtxo] = useState(0)\n const wallet = useWallet()\n\n useEffect(() => {\n const fetchData = async () => {\n const utxos = await wallet.getAssetUtxosAlkanes(alkanesInfo.alkaneid)\n setAvailableUtxo(utxos.length)\n }\n fetchData()\n }, [wallet])\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendAlkanesNFTScreen', {\n alkanesInfo,\n })\n }\n\n const disabledSend = availableUtxo <= 0\n\n return {\n alkanesInfo,\n t,\n availableUtxo,\n onClickBack,\n onClickSend,\n disabledSend,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { AddressAlkanesTokenSummary } from '@unisat/wallet-shared'\nimport {\n useAlkanesIconInfo,\n useCurrentAccount,\n useI18n,\n useNavigation,\n useResetTxState,\n useTools,\n useWallet,\n} from '..'\n\nexport function useAlkanesTokenScreenLogic() {\n const nav = useNavigation()\n const { alkaneid } = nav.getRouteState<'AlkanesTokenScreen'>()\n const [tokenSummary, setTokenSummary] = useState<AddressAlkanesTokenSummary>({\n tokenBalance: {\n alkaneid: '',\n name: '',\n amount: '',\n symbol: '',\n divisibility: 0,\n available: '',\n },\n tokenInfo: {\n alkaneid: '',\n name: '',\n symbol: '',\n totalSupply: '10000000000000',\n maxSupply: '10000000000000',\n cap: 0,\n mintable: false,\n perMint: '0',\n minted: 0,\n holders: 0,\n aligned: true,\n nftData: {\n collectionId: '',\n },\n logo: '',\n },\n tradeUrl: '',\n mintUrl: '',\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n\n const [loading, setLoading] = useState(true)\n\n const [warning, setWarning] = useState(false)\n\n const { t } = useI18n()\n\n useEffect(() => {\n wallet.getAddressAlkanesTokenSummary(account.address, alkaneid, false).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const resetTxState = useResetTxState()\n\n const enableMint = useMemo(() => {\n return tokenSummary.mintUrl && tokenSummary.mintUrl.trim() !== ''\n }, [tokenSummary.mintUrl])\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (tokenSummary.tokenBalance.amount !== '0') {\n enable = true\n }\n return enable\n }, [tokenSummary])\n\n const tools = useTools()\n\n const enableTrade = useMemo(() => {\n return tokenSummary.tradeUrl && tokenSummary.tradeUrl.trim() !== ''\n }, [tokenSummary.tradeUrl])\n\n const onClickMint = () => {\n if (tokenSummary.mintUrl) {\n nav.navToUrl(tokenSummary.mintUrl)\n }\n }\n\n const onClickSend = () => {\n if (tokenSummary.tokenInfo?.aligned === false) {\n // tools.toastError(t('important_to_not_transfer_this_token'));\n setWarning(true)\n return\n }\n\n resetTxState()\n nav.navigate('SendAlkanesScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const onClickTrade = () => {\n if (tokenSummary.tradeUrl) {\n nav.navToUrl(tokenSummary.tradeUrl)\n }\n }\n\n const iconInfo = useAlkanesIconInfo(\n tokenSummary.tokenBalance.name,\n tokenSummary.tokenBalance.alkaneid\n )\n\n return {\n tokenSummary,\n loading,\n enableMint,\n enableTransfer,\n enableTrade,\n warning,\n setWarning,\n t,\n tools,\n onClickMint,\n onClickSend,\n onClickTrade,\n iconInfo,\n }\n}\n","import { OW_HD_PATH, RESTORE_WALLETS, RestoreWalletType, WordsType } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useAppDispatch, useCreateAccountCallback } from 'src/hooks'\nimport { accountActions, keyringsActions } from 'src/reducers'\nimport { validateMnemonic } from 'src/utils/bitcoin-utils'\n\nexport enum TabType {\n STEP1 = 'STEP1',\n STEP2 = 'STEP2',\n CHOOSE_ADDRESS_TYPE = 'CHOOSE_ADDRESS_TYPE',\n}\n\nfunction normalizeWhitespace(str: string) {\n str = str.replace(/[\\n\\r\\t]+/g, ' ')\n str = str.replace(/\\s+/g, ' ')\n str = str.trim()\n return str\n}\n\nexport interface ContextData {\n mnemonics: string\n hdPath: string\n passphrase: string\n addressType: AddressType\n step1Completed: boolean\n tabType: TabType\n restoreWalletType: RestoreWalletType\n isRestore: boolean\n isCustom: boolean\n customHdPath: string\n addressTypeIndex: number\n wordsType: WordsType\n walletName?: string\n}\n\nexport interface UpdateContextDataParams {\n mnemonics?: string\n hdPath?: string\n passphrase?: string\n addressType?: AddressType\n step1Completed?: boolean\n tabType?: TabType\n restoreWalletType?: RestoreWalletType\n isCustom?: boolean\n customHdPath?: string\n addressTypeIndex?: number\n wordsType?: WordsType\n walletName?: string\n}\n\ninterface WordsItem {\n key: WordsType\n label: string\n count: number\n}\n\nconst getWords12Item = t => ({\n key: WordsType.WORDS_12,\n label: t('mnemonics_12_words'),\n count: 12,\n})\n\nconst getWords24Item = t => ({\n key: WordsType.WORDS_24,\n label: t('mnemonics_24_words'),\n count: 24,\n})\n\ninterface CreateWalletLogicParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nfunction textToWordsArray(text: string) {\n return text.split(' ').filter(v => v.trim() !== '')\n}\n\nexport function useCreateWalletLogicImportWordsStep(params: CreateWalletLogicParams) {\n const { contextData, updateContextData } = params\n const { t } = useI18n()\n\n const walletTypeConfig = RESTORE_WALLETS.find(\n item => item.value === contextData.restoreWalletType\n )\n const wordsItems: Array<WordsItem> = useMemo(() => {\n const supportedWordsItems: WordsItem[] = []\n if (walletTypeConfig) {\n if (walletTypeConfig.wordsTypes.includes(WordsType.WORDS_12)) {\n supportedWordsItems.push(getWords12Item(t))\n }\n if (walletTypeConfig.wordsTypes.includes(WordsType.WORDS_24)) {\n supportedWordsItems.push(getWords24Item(t))\n }\n return supportedWordsItems\n } else {\n return [getWords12Item(t), getWords24Item(t)]\n }\n }, [contextData.restoreWalletType, t])\n\n const wallet = useWallet()\n\n const [disabled, setDisabled] = useState(true)\n\n const [inputWords, setInputWords] = useState<Array<string>>(\n new Array(wordsItems[contextData.wordsType].count).fill('')\n )\n const [inputWordsText, setInputWordsText] = useState('')\n const [inputWordsError, setInputWordsError] = useState(false)\n const tools = useTools()\n\n const createAccount = useCreateAccountCallback()\n const nav = useNavigation()\n\n const dispatch = useAppDispatch()\n const [loading, setLoading] = useState(false)\n\n const [enteredWordsCount, setEnteredWordsCount] = useState(0)\n\n const enablePhrase = walletTypeConfig?.phraseSupport\n\n const maxWordsCount = wordsItems[contextData.wordsType].count\n\n const initKey = async () => {\n let totalKeyringCount = 0\n try {\n totalKeyringCount = await wallet.getTotalKeyringCount()\n } catch (e) {\n const error = e as Error\n tools.toastError(error.message)\n }\n updateContextData({ walletName: `HD Wallet #${totalKeyringCount + 1}` })\n }\n\n useEffect(() => {\n initKey()\n }, [])\n\n useEffect(() => {\n setDisabled(true)\n\n const words = textToWordsArray(inputWordsText)\n if (words.length !== maxWordsCount) {\n return\n }\n\n const mnemonic = words.join(' ')\n if (!validateMnemonic(mnemonic)) {\n return\n }\n\n setDisabled(false)\n }, [inputWordsText])\n\n const updateWords = (words: Array<string>, isEndedWithSpace?: boolean) => {\n setInputWords(words)\n let text = words.join(' ')\n setInputWordsText(isEndedWithSpace ? text + ' ' : text)\n\n const enteredWordsCount = words.filter(key => {\n return key.trim() != ''\n }).length\n\n setEnteredWordsCount(enteredWordsCount)\n\n if (!validateMnemonic(text) && enteredWordsCount >= maxWordsCount) {\n setInputWordsError(true)\n } else {\n setInputWordsError(false)\n }\n }\n\n const onInputWordsTextChange = (e: { target: { value: string } } | string) => {\n let value = typeof e === 'string' ? e : e.target.value\n let isEndedWithSpace = /\\s$/.test(value)\n value = normalizeWhitespace(value)\n\n const wordsArr = textToWordsArray(value)\n updateWords(wordsArr, isEndedWithSpace)\n }\n\n const onInputWordsChange = (e: { target: { value: string } } | string, index: number) => {\n let value = typeof e === 'string' ? e : e.target.value\n value = normalizeWhitespace(value)\n\n const newKeys = [...inputWords]\n newKeys.splice(index, 1, value)\n updateWords(newKeys)\n }\n\n // extension\n const onHandleEventPaste = (event, index: number) => {\n const copyText = event.clipboardData?.getData('text/plain')\n const textArr = normalizeWhitespace(copyText).split(' ')\n const newKeys = [...inputWords]\n if (textArr) {\n for (let i = 0; i < inputWords.length - index; i++) {\n if (textArr.length == i) {\n break\n }\n newKeys[index + i] = textArr[i]\n }\n updateWords(newKeys)\n }\n\n event.preventDefault()\n }\n\n const onInputWalletNameChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n updateContextData({ walletName: value })\n }\n\n const onClickNext = async () => {\n try {\n const mnemonics = inputWords.join(' ')\n\n if (contextData.wordsType === WordsType.WORDS_12) {\n if (inputWords.length !== 12) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_Not_12_words'))\n return\n }\n }\n\n if (contextData.wordsType === WordsType.WORDS_24) {\n if (inputWords.length !== 24) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_Not_24_words'))\n return\n }\n }\n\n if (!validateMnemonic(mnemonics)) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_InvalidMnemonic'))\n return\n }\n\n setLoading(true)\n\n if (contextData.restoreWalletType === RestoreWalletType.OW) {\n await createAccount(mnemonics, OW_HD_PATH, '', AddressType.P2TR, 1)\n const keyrings = await wallet.getKeyrings()\n const keyring = keyrings[keyrings.length - 1]\n if (contextData.walletName) {\n keyring.alianName = contextData.walletName\n await wallet.setKeyringAlianName(keyring, contextData.walletName)\n }\n await wallet.changeKeyring(keyring)\n const _keyrings = await wallet.getKeyrings()\n // @ts-ignore SAFE\n dispatch(keyringsActions.setKeyrings(_keyrings))\n // @ts-ignore SAFE\n dispatch(keyringsActions.setCurrent(keyring))\n // @ts-ignore SAFE\n dispatch(accountActions.setCurrent(keyring?.accounts[0]))\n\n nav.navToTab()\n } else {\n updateContextData({\n walletName: contextData.walletName,\n mnemonics,\n tabType: TabType.CHOOSE_ADDRESS_TYPE,\n })\n }\n } catch (e) {\n tools.toastError((e as any).message)\n } finally {\n setLoading(false)\n }\n }\n\n const onClickWordsItem = (wordsItem: WordsItem) => {\n updateContextData({ wordsType: wordsItem.key })\n setInputWordsText('')\n setInputWords(new Array(wordsItem.count).fill(''))\n }\n\n const shouldEnteredWordsCount = wordsItems[contextData.wordsType].count\n\n return {\n wordsItems,\n t,\n disabled,\n inputWords,\n inputWordsText,\n onHandleEventPaste,\n onClickNext,\n onClickWordsItem,\n inputWordsError,\n onInputWordsTextChange,\n onInputWordsChange,\n loading,\n enablePhrase,\n walletName: contextData.walletName,\n onInputWalletNameChange,\n enteredWordsCount,\n shouldEnteredWordsCount,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useCurrentAccount, useResetTxState } from 'src/hooks'\n\nconst HIGH_BALANCE = 10000\n\nenum TabKey {\n DETAILS = 'DETAILS',\n PROVENANCE = 'PROVENANCE',\n}\nexport function useOrdinalsInscriptionScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'OrdinalsInscriptionScreen'>()\n const inscriptionId = props.inscriptionId\n\n const [inscription, setInscription] = useState<Inscription>(props.inscription)\n const [isLoadingDetails, setIsLoadingDetails] = useState(false)\n const [isInitialLoading, setIsInitialLoading] = useState(!props.inscription)\n\n const currentAccount = useCurrentAccount()\n\n const resetTxState = useResetTxState()\n\n const { t } = useI18n()\n\n const [isNeedToSplit, setIsNeedToSplit] = useState(false)\n const [isMultiStuck, setIsMultiStuck] = useState(false)\n const wallet = useWallet()\n\n const [tabKey, setTabKey] = useState(TabKey.DETAILS)\n\n const resetState = useCallback(() => {\n setIsNeedToSplit(false)\n setIsMultiStuck(false)\n setIsLoadingDetails(false)\n setIsInitialLoading(!props?.inscription)\n setTabKey(TabKey.DETAILS)\n }, [props?.inscription])\n\n const fetchInscriptionData = async (id: string) => {\n if (!id) return\n\n // If we already have basic inscription data, show it immediately\n // and load details in the background\n const isBackgroundLoading = !!inscription\n\n if (isBackgroundLoading) {\n setIsLoadingDetails(true)\n } else {\n setIsInitialLoading(true)\n }\n\n try {\n const data = await wallet.getInscriptionInfo(id)\n setInscription(data)\n setTabKey(TabKey.DETAILS)\n\n if (data.multipleNFT) {\n setIsMultiStuck(true)\n\n if (data.sameOffset) {\n setIsNeedToSplit(false)\n } else {\n if (data.outputValue > HIGH_BALANCE) {\n setIsNeedToSplit(true)\n }\n }\n } else {\n if (data.outputValue > HIGH_BALANCE) {\n setIsNeedToSplit(true)\n }\n }\n } catch (e) {\n console.error('Failed to fetch inscription data:', e)\n } finally {\n setIsLoadingDetails(false)\n setIsInitialLoading(false)\n }\n }\n\n useEffect(() => {\n if (inscriptionId) {\n resetState()\n\n // Always fetch the latest data, but we'll show what we have immediately\n fetchInscriptionData(inscriptionId)\n }\n }, [inscriptionId])\n\n const onClickSplit = () => {\n resetTxState()\n nav.navigate('SplitOrdinalsInscriptionScreen', { inscription, inscriptionId })\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendOrdinalsInscriptionScreen', { inscription, inscriptionId })\n }\n\n const isUnconfirmed = inscription ? inscription.timestamp == 0 : false\n\n const withSend = inscription ? currentAccount.address === inscription.address : false\n\n const children = inscription ? inscription.children || [] : []\n const parents = inscription ? inscription.parents || [] : []\n\n const hasProvenance = children.length > 0 || parents.length > 0\n const shouldShowTabs = hasProvenance === true\n\n return {\n inscription,\n isLoadingDetails,\n isInitialLoading,\n isNeedToSplit,\n isMultiStuck,\n tabKey,\n setTabKey,\n TabKey,\n resetState,\n t,\n inscriptionId,\n onClickSend,\n onClickSplit,\n isUnconfirmed,\n withSend,\n shouldShowTabs,\n nav,\n }\n}\n","import { AddressRunesTokenSummary } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useChainType,\n useCurrentAccount,\n useOrdinalsWebsite,\n useResetTxState,\n useRunesIconInfo,\n useRunesInscribeUrl,\n useRunesMarketUrl,\n useTxExplorerUrl,\n} from 'src/hooks'\n\nexport function useRunesTokenScreenLogic() {\n const nav = useNavigation()\n const { runeid } = nav.getRouteState<'RunesTokenScreen'>()\n const [tokenSummary, setTokenSummary] = useState<AddressRunesTokenSummary>({\n runeBalance: {\n runeid: '',\n rune: '',\n spacedRune: '',\n amount: '',\n symbol: '',\n divisibility: 0,\n },\n runeInfo: {\n rune: '',\n runeid: '',\n spacedRune: '',\n symbol: '',\n premine: '',\n mints: '',\n divisibility: 0,\n etching: '',\n terms: {\n amount: '',\n cap: '',\n heightStart: 0,\n heightEnd: 0,\n offsetStart: 0,\n offsetEnd: 0,\n },\n number: 0,\n height: 0,\n txidx: 0,\n timestamp: 0,\n burned: '',\n holders: 0,\n transactions: 0,\n mintable: false,\n remaining: '',\n start: 0,\n end: 0,\n supply: '0',\n parent: '',\n },\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n\n const [loading, setLoading] = useState(true)\n\n const { t } = useI18n()\n\n useEffect(() => {\n wallet.getAddressRunesTokenSummary(account.address, runeid).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const enableMint = tokenSummary.runeInfo.mintable\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (tokenSummary.runeBalance.amount !== '0') {\n enable = true\n }\n return enable\n }, [tokenSummary])\n\n const tools = useTools()\n\n const ordinalsWebsite = useOrdinalsWebsite()\n\n const resetTxState = useResetTxState()\n\n const txExplorerUrl = useTxExplorerUrl(tokenSummary.runeInfo.etching)\n\n const chainType = useChainType()\n const enableTrade = useMemo(() => {\n if (\n chainType === ChainType.BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n ) {\n return true\n } else {\n return false\n }\n }, [chainType])\n\n const iconInfo = useRunesIconInfo(tokenSummary.runeInfo.spacedRune)\n const inscribeUrl = useRunesInscribeUrl(tokenSummary.runeInfo.rune)\n const marketPlaceUrl = useRunesMarketUrl(tokenSummary.runeInfo.spacedRune)\n\n const onClickMint = () => {\n nav.navToUrl(inscribeUrl)\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendRunesScreen', {\n runeBalance: tokenSummary.runeBalance,\n runeInfo: tokenSummary.runeInfo,\n })\n }\n\n const onClickTrade = () => {\n if (marketPlaceUrl) {\n nav.navToUrl(marketPlaceUrl)\n }\n }\n\n return {\n runeid,\n tokenSummary,\n iconInfo,\n\n loading,\n t,\n\n enableMint,\n onClickMint,\n\n tools,\n ordinalsWebsite,\n txExplorerUrl,\n\n enableTransfer,\n onClickSend,\n\n enableTrade,\n onClickTrade,\n }\n}\n","import { AddressTokenSummary, TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useMemo, useState } from 'react'\nimport { useI18n } from 'src/context'\nimport { useBRC20IconInfo, useChain, useCurrentAccount } from 'src/hooks'\n\nexport interface BRC20BalanceCardProps {\n tokenBalance: TokenBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useBRC20BalanceCardLogic(props: BRC20BalanceCardProps) {\n const {\n price,\n tokenBalance: {\n ticker,\n overallBalance,\n transferableBalance,\n selfMint,\n displayName,\n tag,\n swapBalance,\n progBalance,\n },\n onClick,\n } = props\n\n const account = useCurrentAccount()\n const [tokenSummary, setTokenSummary] = useState<AddressTokenSummary>()\n\n const { t } = useI18n()\n\n const deploy_count = tokenSummary ? (tokenSummary.tokenInfo.holder == account.address ? 1 : 0) : 0\n let _names: string[] = []\n const _amounts: string[] = []\n if (deploy_count > 0) {\n _names.push('Deploy')\n _amounts.push('')\n }\n if (tokenSummary) {\n tokenSummary.transferableList.forEach(v => {\n _names.push('Transfer')\n _amounts.push(v.amount)\n })\n }\n\n for (let i = 0; i < _names.length; i++) {\n if (i == 3) {\n if (_names.length > 4) {\n if (deploy_count > 0) {\n _names[i] = `${_names.length - 3}+`\n } else {\n _names[i] = `${_names.length - 2}+`\n }\n _amounts[i] = ''\n }\n break\n }\n }\n _names = _names.splice(0, 4)\n\n const onSwapBalance = swapBalance\n const onProgBalance = progBalance\n const inWalletBalance = overallBalance\n\n const totalBalance = useMemo(() => {\n return new BigNumber(inWalletBalance)\n .plus(new BigNumber(onSwapBalance || 0))\n .plus(new BigNumber(onProgBalance || 0))\n .toString()\n }, [inWalletBalance, onSwapBalance, onProgBalance])\n\n let hasOutWalletBalance = false\n if (onSwapBalance && onSwapBalance !== '0') {\n hasOutWalletBalance = true\n }\n if (onProgBalance && onProgBalance !== '0') {\n hasOutWalletBalance = true\n }\n\n // icon\n const iconInfo = useBRC20IconInfo(ticker)\n\n // price\n const chain = useChain()\n const showPrice = chain.showPrice\n\n return {\n // info\n ticker,\n displayName,\n selfMint,\n tag,\n\n // icon\n iconInfo,\n\n // balance\n totalBalance,\n hasOutWalletBalance,\n onProgBalance,\n inWalletBalance,\n onSwapBalance,\n\n // price\n price,\n showPrice,\n\n // click\n onClick,\n\n // others\n t,\n }\n}\n","import { ADDRESS_TYPES } from '@unisat/wallet-shared'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\ntype Status = '' | 'error' | 'warning' | undefined\n\nexport function useExportMnemonicsScreenLogic() {\n const nav = useNavigation()\n const { keyring } = nav.getRouteState<'ExportMnemonicsScreen'>()\n\n const { t } = useI18n()\n\n const [password, setPassword] = useState('')\n const [disabled, setDisabled] = useState(true)\n\n const [mnemonic, setMnemonic] = useState('')\n const [status, setStatus] = useState<Status>('')\n const [error, setError] = useState('')\n const wallet = useWallet()\n const tools = useTools()\n\n const [passphrase, setPassphrase] = useState('')\n\n const btnClick = async () => {\n try {\n const { mnemonic, hdPath, passphrase } = await wallet.getMnemonics(password, keyring)\n setMnemonic(mnemonic)\n setPassphrase(passphrase)\n } catch (e) {\n setStatus('error')\n setError((e as any).message)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ('Enter' == e.key) {\n btnClick()\n }\n }\n\n useEffect(() => {\n setDisabled(true)\n if (password) {\n setDisabled(false)\n setStatus('')\n setError('')\n }\n }, [password])\n\n function copy(str: string) {\n tools.copyToClipboard(str)\n }\n const words = mnemonic.split(' ')\n\n const pathName = ADDRESS_TYPES.find(v => v.hdPath === keyring.hdPath)?.name || 'custom'\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n words,\n pathName,\n t,\n setPassword,\n disabled,\n btnClick,\n handleOnKeyUp,\n mnemonic,\n passphrase,\n error,\n copy,\n keyring,\n onClickBack,\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\n\ntype Status = '' | 'error' | 'warning' | undefined\nexport function useExportPrivateKeyScreenLogic() {\n const { t } = useI18n()\n\n const nav = useNavigation()\n const { account } = nav.getRouteState<'ExportPrivateKeyScreen'>()\n\n const [password, setPassword] = useState('')\n const [disabled, setDisabled] = useState(true)\n\n const [privateKey, setPrivateKey] = useState({ hex: '', wif: '' })\n const [status, setStatus] = useState<Status>('')\n const [error, setError] = useState('')\n const wallet = useWallet()\n const tools = useTools()\n\n const btnClick = async () => {\n try {\n const _res = await wallet.getPrivateKey(password, account)\n setPrivateKey(_res)\n } catch (e) {\n setStatus('error')\n setError((e as any).message)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ('Enter' == e.key) {\n btnClick()\n }\n }\n\n useEffect(() => {\n setDisabled(true)\n if (password) {\n setDisabled(false)\n setStatus('')\n setError('')\n }\n }, [password])\n\n function copy(str: string) {\n tools.copyToClipboard(str)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n t,\n setPassword,\n disabled,\n btnClick,\n handleOnKeyUp,\n privateKey,\n error,\n copy,\n onClickBack,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription } from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n useFetchAssetUtxosRunesCallback,\n useFetchUtxosCallback,\n usePrepareSendRunesCallback,\n useRunesTx,\n} from 'src/hooks'\nimport { getAddressUtxoDust, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport function useSendRunesScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendRunesScreen'>()\n const { t } = useI18n()\n\n const runeBalance = props.runeBalance\n\n const runeInfo = props.runeInfo\n\n const runesTx = useRunesTx()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: runesTx.toAddress,\n domain: runesTx.toDomain,\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState('0')\n const [error, setError] = useState('')\n\n const defaultOutputValue = 546\n\n const currentAccount = useCurrentAccount()\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n const dust1 = getAddressUtxoDust(currentAccount.address)\n const dust2 = getAddressUtxoDust(toInfo.address)\n return Math.max(dust1, dust2)\n } else {\n return 0\n }\n }, [toInfo.address, currentAccount.address])\n\n const fetchUtxos = useFetchUtxosCallback()\n\n const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()\n const tools = useTools()\n useEffect(() => {\n fetchUtxos()\n tools.showLoading(true)\n fetchAssetUtxosRunes(runeInfo.runeid)\n .then(utxos => {\n let balance = new BigNumber(0)\n for (let i = 0; i < utxos.length; i++) {\n const utxo = utxos[i]\n if (utxo.runes) {\n utxo.runes.forEach(rune => {\n if (rune.runeid === runeInfo.runeid) {\n balance = balance.plus(new BigNumber(rune.amount))\n }\n })\n }\n }\n setAvailableBalance(balance.toString())\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const prepareSendRunes = usePrepareSendRunesCallback()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)\n if (feeRate <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(runeAmount, '0') <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(runeAmount, availableBalance) > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, outputValue, minOutputValue, availableBalance])\n\n const totalBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(runeBalance.amount, runeBalance.divisibility)\n }, [runeBalance])\n const availableBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(availableBalance, runeBalance?.divisibility)\n }, [availableBalance, runeBalance])\n\n const onClickBack = () => {\n nav.goBack()\n }\n const onClickNext = () => {\n const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)\n prepareSendRunes({\n toAddressInfo: toInfo,\n runeid: runeInfo.runeid,\n runeAmount: runeAmount,\n outputValue: outputValue,\n feeRate,\n })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n // info\n runeInfo,\n inputAmount,\n totalBalanceStr,\n availableBalanceStr,\n\n setInputAmount,\n disabled,\n toInfo,\n setToInfo,\n error,\n defaultOutputValue,\n minOutputValue,\n setOutputValue,\n t,\n\n // actions\n onClickBack,\n onClickNext,\n }\n}\n","import { CHAINS_MAP } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport function useEditContactScreenLogic() {\n const nav = useNavigation()\n\n // Required parameters\n const { address, chain, selectedNetworkFilter } = nav.getRouteState<'EditContactScreen'>()\n const wallet = useWallet()\n const [name, setName] = useState('')\n const [contactAddress, setContactAddress] = useState(address || '')\n const [originalAddress, setOriginalAddress] = useState('')\n const [originalChain, setOriginalChain] = useState<ChainType | undefined>()\n const [chainType, setChainType] = useState<ChainType>(ChainType.BITCOIN_MAINNET)\n const [error, setError] = useState('')\n const [loading, setLoading] = useState(false)\n const { t } = useI18n()\n\n useEffect(() => {\n if (address) {\n fetchContact()\n } else {\n const preselectedChainType = selectedNetworkFilter as ChainType\n\n if (preselectedChainType) {\n setChainType(preselectedChainType)\n }\n }\n }, [address, chain, selectedNetworkFilter])\n\n const fetchContact = async () => {\n if (!address || !chain) return\n\n try {\n const chainEnum = chain as ChainType\n const contact = await wallet.getContactByAddressAndChain(address, chainEnum)\n\n if (contact) {\n setName(contact.name)\n setContactAddress(contact.address)\n setOriginalAddress(contact.address)\n setOriginalChain(contact.chain)\n setChainType(contact.chain)\n } else {\n setError(t('contact_not_found'))\n setTimeout(() => {\n nav.navigate('ContactsScreen', {})\n }, 1500)\n }\n } catch (err) {\n console.error('Error fetching contact:', err)\n setError(t('failed_to_load_contact_information'))\n }\n }\n\n const handleSubmit = async () => {\n if (!name.trim()) {\n setError(t('please_enter_name'))\n return\n }\n\n if (!contactAddress.trim()) {\n setError(t('please_enter_address'))\n return\n }\n\n const networkType = CHAINS_MAP[chainType].networkType\n\n if (!isValidAddress(contactAddress, networkType)) {\n setError(t('invalid_address_format_for_selected_network'))\n return\n }\n\n setError('')\n setLoading(true)\n\n try {\n if (\n originalAddress &&\n originalChain &&\n (originalAddress !== contactAddress.trim() || originalChain !== chainType)\n ) {\n await wallet.removeContact(originalAddress, originalChain)\n }\n\n await wallet.updateContact({\n name: name.trim(),\n address: contactAddress.trim(),\n chain: chainType,\n isContact: true,\n isAlias: false,\n })\n\n nav.goBack()\n } catch (err) {\n setError(t('failed_to_save_contact'))\n } finally {\n setLoading(false)\n }\n }\n\n const handleDelete = async () => {\n if (!address || !originalChain) return\n\n setLoading(true)\n try {\n await wallet.removeContact(address, originalChain)\n\n nav.navigate('ContactsScreen', {\n returnWithNetwork: chainType,\n })\n } catch (err) {\n setError(t('failed_to_delete_contact'))\n } finally {\n setLoading(false)\n }\n }\n\n const handleAddressChange = (e: { target: { value: string } } | string) => {\n const value = (typeof e === 'string' ? e : e.target.value).trim()\n setContactAddress(value)\n\n if (error.includes('Invalid address') || !value) {\n setError('')\n }\n\n if (value) {\n const networkType = CHAINS_MAP[chainType].networkType\n\n if (value.length > 15 && !isValidAddress(value, networkType)) {\n setError(t('invalid_address_format_for_selected_network'))\n }\n }\n }\n\n const handleNameChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n setName(value)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n name,\n contactAddress,\n chainType,\n error,\n loading,\n handleNameChange,\n handleAddressChange,\n handleSubmit,\n handleDelete,\n onClickBack,\n address,\n t,\n }\n}\n","import { Account } from '@unisat/wallet-shared'\nimport { useMemo, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useAppDispatch } from 'src/hooks'\nimport { accountActions, keyringsActions } from 'src/reducers'\n\nexport function useEditAccountNameScreenLogic() {\n const nav = useNavigation()\n const { t } = useI18n()\n\n const { state } = useLocation()\n const { account } = state as {\n account: Account\n }\n\n const wallet = useWallet()\n const [alianName, setAlianName] = useState(account.alianName || '')\n const dispatch = useAppDispatch()\n const handleOnClick = async () => {\n const newAccount = await wallet.setAccountAlianName(account, alianName)\n // @ts-ignore SAFE\n dispatch(keyringsActions.updateAccountName(newAccount))\n // @ts-ignore SAFE\n dispatch(accountActions.updateAccountName(newAccount))\n nav.goBack()\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ('Enter' == e.key && e.ctrlKey) {\n handleOnClick()\n }\n }\n\n const isValidName = useMemo(() => {\n if (alianName.length == 0) {\n return false\n }\n return true\n }, [alianName])\n\n const truncatedTitle = useMemo(() => {\n const name = account.alianName || ''\n if (name.length > 20) {\n return name.slice(0, 10) + '...'\n }\n return name\n }, [account.alianName])\n\n const onInputChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n if (value.length <= 20) {\n setAlianName(value)\n }\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n return {\n alianName,\n handleOnClick,\n handleOnKeyUp,\n isValidName,\n truncatedTitle,\n t,\n account,\n onInputChange,\n onClickBack,\n }\n}\n","import { AlkanesCollection } from '@unisat/wallet-shared'\n\nimport { useEffect, useRef } from 'react'\nimport {\n AlkanesAssetTabKey,\n getSupportedAssets,\n useAlkanesAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesCollectionListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesCollection>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAlkanesCollectionList(\n currentAccount.address,\n page,\n pageSize\n )\n\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useAlkanesAssetTabKey()\n const isFocus = tabKey === AlkanesAssetTabKey.COLLECTION\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: AlkanesCollection) => {\n nav.navigate('AlkanesCollectionScreen', { collectionId: item.alkaneid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n OrdinalsAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useBRC20ListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<TokenBalance>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getBRC20List(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getBrc20sPrice(list.map(item => item.ticker)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.BRC20\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: TokenBalance) => {\n nav.navigate('BRC20TokenScreen', { tokenBalance: item, ticker: item.ticker })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { Inscription } from '@unisat/wallet-shared'\n\nimport { useEffect, useRef } from 'react'\nimport {\n OrdinalsAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useInscriptionListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<Inscription>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAllInscriptionList(\n currentAccount.address,\n page,\n pageSize\n )\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.ALL\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: Inscription) => {\n nav.navigate('OrdinalsInscriptionScreen', {\n inscription: item,\n inscriptionId: item.inscriptionId,\n })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { RuneBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n AssetTabKey,\n useAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useRunesListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<RuneBalance>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getRunesList(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getRunesPrice(list.map(item => item.spacedRune)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const assetTabKey = useAssetTabKey()\n const isFocus = assetTabKey === AssetTabKey.RUNES\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: RuneBalance) => {\n nav.navigate('RunesTokenScreen', { runeid: item.runeid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { CAT20Balance, CAT_VERSION, TickPriceItem } from '@unisat/wallet-shared'\n\nimport {\n CATAssetTabKey,\n getSupportedAssets,\n useCATAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useCAT20ListLogic(version: CAT_VERSION) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: tokens,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<CAT20Balance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.CAT20 || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getCAT20List(\n version,\n currentAccount.address,\n page,\n pageSize\n )\n if (list.length > 0) {\n wallet.getCAT20sPrice(list.map(item => item.tokenId)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, version, chainType],\n })\n\n const tabKey = useCATAssetTabKey()\n const isFocus = tabKey === CATAssetTabKey.CAT20 || CATAssetTabKey.CAT20_V2\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: CAT20Balance) => {\n nav.navigate('CAT20TokenScreen', { tokenId: item.tokenId, version })\n }\n\n return { tokens, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport {\n AddressCAT20UtxoSummary,\n Inscription,\n SignedData,\n SignPsbtParams,\n ToSignData,\n} from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport BigNumber from 'bignumber.js'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount, useFeeRateBar, useNetworkType } from 'src/hooks'\nimport { getAddressType, isValidAddress } from 'src/utils/bitcoin-utils'\n\nconst MAX_TOKEN_INPUT = 4\n\nexport enum SendCAT20ScreenStep {\n PREPARE = 0,\n SIGN_COMMIT = 1,\n WAITING = 2,\n SIGN_REVEAL = 3,\n}\n\nexport function useSendCAT20ScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendCAT20Screen'>()\n\n const cat20Balance = props.cat20Balance\n\n const cat20Info = props.cat20Info\n\n const wallet = useWallet()\n\n const { t } = useI18n()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(false)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [tokenUtxoSummary, setTokenUtxoSummary] = useState<AddressCAT20UtxoSummary>({\n totalUtxoCount: 0,\n availableUtxoCount: 0,\n availableTokenAmounts: [],\n })\n const [error, setError] = useState('')\n\n const account = useCurrentAccount()\n\n const networkType = useNetworkType()\n\n const [showMergeBTCUTXOPopover, setShowMergeBTCUTXOPopover] = useState(false)\n const tools = useTools()\n\n useEffect(() => {\n tools.showLoading(true)\n wallet\n .getAddressCAT20UtxoSummary(props.version, account.address, cat20Balance.tokenId)\n .then(data => {\n setTokenUtxoSummary(data)\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const availableTokenAmount = useMemo(() => {\n let amount = new BigNumber(0)\n for (\n let i = 0;\n i < Math.min(tokenUtxoSummary.availableTokenAmounts.length, MAX_TOKEN_INPUT);\n i++\n ) {\n amount = amount.plus(BigNumber(tokenUtxoSummary.availableTokenAmounts[i]))\n }\n return amount.toString()\n }, [tokenUtxoSummary])\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n const addressType = getAddressType(toInfo.address, networkType)\n if (addressType !== AddressType.P2TR && addressType !== AddressType.P2WPKH) {\n setError(t('the_recipient_must_be_p2tr_or_p2wpkh_address_type'))\n return\n }\n\n if (!inputAmount) {\n return\n }\n\n if (!feeRate) {\n return\n }\n\n const amt = bnUtils.fromDecimalAmount(inputAmount, cat20Balance.decimals)\n if (bnUtils.compareAmount(amt, '0') != 1) {\n return\n }\n\n if (bnUtils.compareAmount(amt, availableTokenAmount) > 0) {\n // insufficient balance\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, availableTokenAmount])\n\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {\n psbtHex: '',\n toSignInputs: [],\n autoFinalized: false,\n },\n revealToSignData: {\n psbtHex: '',\n toSignInputs: [],\n autoFinalized: false,\n },\n })\n const [step, setStep] = useState<SendCAT20ScreenStep>(SendCAT20ScreenStep.PREPARE)\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const cat20Amount = bnUtils.fromDecimalAmount(inputAmount, cat20Balance.decimals)\n const step1 = await wallet.transferCAT20Step1(\n props.version,\n toInfo.address,\n cat20Balance.tokenId,\n cat20Amount,\n feeRate\n )\n if (step1) {\n transferData.current.id = step1.id\n transferData.current.commitToSignData = step1.toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n if (msg.includes('-307')) {\n setShowMergeBTCUTXOPopover(true)\n return\n }\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickBack = () => {\n if (step === SendCAT20ScreenStep.PREPARE) {\n nav.goBack()\n return\n } else {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n }\n\n // sign commit psbt\n const signCommitPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const onSignCommitPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n try {\n tools.showLoading(true)\n const step2 = await wallet.transferCAT20Step2(\n props.version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(SendCAT20ScreenStep.WAITING)\n setTimeout(() => {\n setStep(SendCAT20ScreenStep.SIGN_REVEAL)\n }, 100)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignCommitPsbtHandleCancel = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n const onSignCommitPsbtHandleBack = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n // sign reveal psbt\n const signRevealPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onSignRevealPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.transferCAT20Step3(\n props.version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n // tools.toastError((e as any).message);\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignRevealPsbtHandleCancel = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n const onSignRevealPsbtHandleBack = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n // merge UTXO\n const shouldShowMerge = availableTokenAmount !== cat20Balance.amount\n\n const onClickMergeUTXO = () => {\n nav.navigate('MergeCAT20Screen', {\n version: props.version,\n cat20Balance: cat20Balance,\n cat20Info: cat20Info,\n })\n }\n\n return {\n // info\n cat20Info,\n cat20Balance,\n availableTokenAmount,\n toInfo,\n setToInfo,\n inputAmount,\n setInputAmount,\n error,\n disabled,\n step,\n showMergeBTCUTXOPopover,\n setShowMergeBTCUTXOPopover,\n shouldShowMerge,\n\n // actions\n onClickNext,\n onClickBack,\n\n // sign commit psbt actions\n onSignCommitPsbtHandleConfirm,\n onSignCommitPsbtHandleCancel,\n onSignCommitPsbtHandleBack,\n signCommitPsbtParams,\n\n // sign reveal psbt actions\n onSignRevealPsbtHandleConfirm,\n onSignRevealPsbtHandleCancel,\n onSignRevealPsbtHandleBack,\n signRevealPsbtParams,\n\n // merge UTXO action\n onClickMergeUTXO,\n\n // tools\n t,\n }\n}\n","import { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { useEffect, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useFeeRateBar, useNetworkType } from 'src/hooks'\nimport { getAddressType, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendCAT721ScreenStep {\n PREPARE = 0,\n SIGN_COMMIT = 1,\n WAITING = 2,\n SIGN_REVEAL = 3,\n}\nexport function useSendCAT721ScreenLogic() {\n const nav = useNavigation()\n const { version, localId, collectionInfo } = nav.getRouteState<'SendCAT721Screen'>()\n\n const wallet = useWallet()\n const { t } = useI18n()\n\n const [disabled, setDisabled] = useState(false)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [error, setError] = useState('')\n\n const networkType = useNetworkType()\n\n const [showMergeBTCUTXOPopover, setShowMergeBTCUTXOPopover] = useState(false)\n const tools = useTools()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n const addressType = getAddressType(toInfo.address, networkType)\n if (addressType !== AddressType.P2TR && addressType !== AddressType.P2WPKH) {\n setError(t('the_recipient_must_be_p2tr_or_p2wpkh_address_type'))\n return\n }\n\n setDisabled(false)\n }, [toInfo])\n\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {} as ToSignData,\n revealToSignData: {} as ToSignData,\n })\n const [step, setStep] = useState<SendCAT721ScreenStep>(SendCAT721ScreenStep.PREPARE)\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const step1 = await wallet.transferCAT721Step1(\n version,\n toInfo.address,\n collectionInfo.collectionId,\n localId,\n feeRate\n )\n if (step1) {\n transferData.current.id = step1.id\n transferData.current.commitToSignData = step1.toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n if (msg.includes('-307')) {\n setShowMergeBTCUTXOPopover(true)\n return\n }\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickBack = () => {\n if (step === SendCAT721ScreenStep.PREPARE) {\n nav.goBack()\n return\n } else {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n }\n\n // sign commit psbt\n const signCommitPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const onSignCommitPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n try {\n tools.showLoading(true)\n const step2 = await wallet.transferCAT721Step2(\n version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(SendCAT721ScreenStep.WAITING)\n setTimeout(() => {\n setStep(SendCAT721ScreenStep.SIGN_REVEAL)\n }, 100)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignCommitPsbtHandleCancel = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n const onSignCommitPsbtHandleBack = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n // sign reveal psbt\n const signRevealPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onSignRevealPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.transferCAT721Step3(\n version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n // tools.toastError((e as any).message);\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignRevealPsbtHandleCancel = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n const onSignRevealPsbtHandleBack = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n return {\n // info\n version,\n localId,\n collectionInfo,\n toInfo,\n setToInfo,\n error,\n disabled,\n step,\n showMergeBTCUTXOPopover,\n setShowMergeBTCUTXOPopover,\n\n // actions\n onClickNext,\n onClickBack,\n\n // sign commit psbt actions\n onSignCommitPsbtHandleConfirm,\n onSignCommitPsbtHandleCancel,\n onSignCommitPsbtHandleBack,\n signCommitPsbtParams,\n\n // sign reveal psbt actions\n onSignRevealPsbtHandleConfirm,\n onSignRevealPsbtHandleCancel,\n onSignRevealPsbtHandleBack,\n signRevealPsbtParams,\n\n // tools\n t,\n }\n}\n","import { AlkanesInfo } from '@unisat/wallet-shared'\n\nimport { getSupportedAssets, useChainType, useCurrentAccount, useNavigation, useWallet } from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesNFTListLogic(collectionId: string) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesInfo>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAlkanesCollectionItems(\n currentAccount.address,\n collectionId,\n page,\n pageSize\n )\n\n return { list, total }\n },\n dependencies: [currentAccount.address, collectionId, chainType],\n })\n\n const onClickItem = (item: AlkanesInfo) => {\n nav.navigate('AlkanesNFTScreen', { alkanesInfo: item })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n getSupportedAssets,\n OrdinalsAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useBRC20ProgListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<TokenBalance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.brc20Prog || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n\n const { list, total } = await wallet.getBRC20ProgList(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getBrc20sPrice(list.map(item => item.ticker)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.BRC20_6BYTE\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: TokenBalance) => {\n nav.navigate('BRC20TokenScreen', { tokenBalance: item, ticker: item.ticker })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useEffect, useRef } from 'react'\n\nimport { CAT721Balance, CAT_VERSION } from '@unisat/wallet-shared'\n\nimport {\n CATAssetTabKey,\n getSupportedAssets,\n useCATAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useCAT721ListLogic(version: CAT_VERSION) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const {\n data: tokens,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<CAT721Balance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.CAT20 || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getCAT721List(\n version,\n currentAccount.address,\n page,\n pageSize\n )\n return { list, total }\n },\n dependencies: [currentAccount.address, version, chainType],\n })\n\n const tabKey = useCATAssetTabKey()\n const isFocus = tabKey === CATAssetTabKey.CAT721 || CATAssetTabKey.CAT721_V2\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: CAT721Balance) => {\n nav.navigate('CAT721CollectionScreen', { collectionId: item.collectionId, version })\n }\n\n return { tokens, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { KeyringType } from '@unisat/keyring-service/types'\nimport { AddressCAT20TokenSummary, CAT_VERSION } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCAT20IconInfo,\n useCAT20MarketPlaceWebsite,\n useCAT20TokenInfoExplorerUrl,\n useChainType,\n useCurrentAccount,\n useCurrentKeyring,\n useResetTxState,\n} from 'src/hooks'\n\nexport function useCAT20TokenScreenLogic() {\n const nav = useNavigation()\n const { tokenId, version } = nav.getRouteState<'CAT20TokenScreen'>()\n const { t } = useI18n()\n const [tokenSummary, setTokenSummary] = useState<AddressCAT20TokenSummary>({\n cat20Balance: {\n tokenId: '',\n amount: '0',\n decimals: 0,\n symbol: '',\n name: '',\n },\n cat20Info: {\n tokenId: '',\n name: '',\n symbol: '',\n max: '0',\n premine: '0',\n limit: 0,\n },\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n const keyring = useCurrentKeyring()\n const [loading, setLoading] = useState(true)\n const tools = useTools()\n useEffect(() => {\n wallet.getAddressCAT20TokenSummary(version, account.address, tokenId).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const tokenUrl = useCAT20TokenInfoExplorerUrl(version, tokenSummary.cat20Info.tokenId)\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== '0') {\n enable = true\n }\n return enable\n }, [tokenSummary])\n\n const chainType = useChainType()\n const enableTrade = useMemo(() => {\n if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET && version === CAT_VERSION.V1) {\n return true\n } else {\n return false\n }\n }, [chainType])\n const marketPlaceUrl = useCAT20MarketPlaceWebsite(tokenId)\n\n const resetTxState = useResetTxState()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickMerge = e => {\n if (keyring.type === KeyringType.KeystoneKeyring) {\n tools.toastError(t('merge_utxos_is_not_supported_for_keystone_yet'))\n return\n }\n resetTxState()\n nav.navigate('MergeCAT20Screen', {\n version: version,\n cat20Balance: tokenSummary.cat20Balance,\n cat20Info: tokenSummary.cat20Info,\n })\n }\n\n const onClickSend = e => {\n if (keyring.type === KeyringType.KeystoneKeyring) {\n tools.toastError(t('send_cat20_is_not_supported_for_keystone_yet'))\n return\n }\n resetTxState()\n nav.navigate('SendCAT20Screen', {\n version: version,\n cat20Balance: tokenSummary.cat20Balance,\n cat20Info: tokenSummary.cat20Info,\n })\n }\n\n const onClickTrade = e => {\n nav.navToUrl(marketPlaceUrl)\n }\n\n const iconInfo = useCAT20IconInfo(tokenSummary.cat20Info.name, tokenSummary.cat20Info.tokenId)\n\n return {\n tokenSummary,\n loading,\n tokenUrl,\n enableTransfer,\n enableTrade,\n iconInfo,\n onClickMerge,\n onClickSend,\n onClickTrade,\n onClickBack,\n t,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport {\n useCreateSplitTxCallback,\n useCurrentAccount,\n useFeeRateBar,\n useOrdinalsTx,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nexport function useSplitOrdinalsInscriptionScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SplitOrdinalsInscriptionScreen'>()\n\n const inscription = props.inscription\n\n const [disabled, setDisabled] = useState(true)\n\n const ordinalsTx = useOrdinalsTx()\n\n const [error, setError] = useState('')\n const createSplitTx = useCreateSplitTxCallback()\n\n const defaultOutputValue = props.inscription ? props.inscription.outputValue : 10000\n const { t } = useI18n()\n const account = useCurrentAccount()\n const minOutputValue = getAddressUtxoDust(account.address)\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n\n const { feeRate } = useFeeRateBar()\n\n const [inscriptions, setInscriptions] = useState<Inscription[]>([])\n\n const [splitedCount, setSplitedCount] = useState(0)\n const wallet = useWallet()\n useEffect(() => {\n wallet.getInscriptionUtxoDetail(props.inscription.inscriptionId).then(v => {\n setInscriptions(v.inscriptions)\n })\n }, [])\n\n useEffect(() => {\n setDisabled(true)\n setError('')\n setSplitedCount(0)\n\n if (feeRate <= 0) {\n setError(t('invalid_fee_rate'))\n return\n }\n\n if (!outputValue) {\n return\n }\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n setDisabled(false)\n }, [feeRate, outputValue])\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onOutputValueChange = (value: number) => {\n setOutputValue(value)\n }\n\n const onClickNext = () => {\n createSplitTx({ inscriptionId: inscription.inscriptionId, feeRate, outputValue })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n t,\n inscriptions,\n minOutputValue,\n splitedCount,\n error,\n disabled,\n onOutputValueChange,\n onClickBack,\n onClickNext,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { getPasswordStrengthWord, MIN_PASSWORD_LENGTH } from 'src/utils/password-utils'\n\nexport function useCreatePasswordScreenLogic() {\n const nav = useNavigation()\n const { isNewAccount, isKeystone, fromColdWallet } = nav.getRouteState<'CreatePasswordScreen'>()\n const [newPassword, setNewPassword] = useState('')\n const { t } = useI18n()\n\n const [confirmPassword, setConfirmPassword] = useState('')\n\n const [disabled, setDisabled] = useState(true)\n\n const wallet = useWallet()\n\n const tools = useTools()\n const bootWithPassword = (password: string) => {\n wallet\n .boot(password)\n .then(() => {\n if (fromColdWallet) {\n nav.navigate('CreateColdWalletScreen', { fromUnlock: true })\n } else if (isKeystone) {\n nav.navigate('CreateKeystoneWalletScreen', { fromUnlock: true })\n } else if (isNewAccount) {\n nav.navigate('CreateHDWalletScreen', { isImport: false, fromUnlock: true })\n } else {\n nav.navigate('CreateHDWalletScreen', { isImport: true, fromUnlock: true })\n }\n })\n .catch(err => {\n tools.toastError(err)\n })\n }\n\n useEffect(() => {\n setDisabled(true)\n\n if (\n newPassword &&\n newPassword.length >= MIN_PASSWORD_LENGTH &&\n newPassword === confirmPassword\n ) {\n setDisabled(false)\n return\n }\n }, [newPassword, confirmPassword])\n\n const strongTextRenderData = useMemo(() => {\n if (!newPassword) {\n return null\n }\n return getPasswordStrengthWord(newPassword, t)\n }, [newPassword, t])\n\n const matchTextRenderData = useMemo(() => {\n if (!confirmPassword) {\n return null\n }\n\n if (newPassword !== confirmPassword) {\n return {\n text: t('passwords_dont_match'),\n }\n }\n return null\n }, [newPassword, confirmPassword])\n\n const onClickConfirm = () => {\n bootWithPassword(newPassword)\n }\n\n const onPasswordChange = (e: string | { target: { value: string } }) => {\n const val = typeof e === 'string' ? e : e.target.value\n setNewPassword(val)\n }\n\n const onConfirmPasswordChange = (e: string | { target: { value: string } }) => {\n const val = typeof e === 'string' ? e : e.target.value\n setConfirmPassword(val)\n }\n\n return {\n disabled,\n strongTextRenderData,\n matchTextRenderData,\n onClickConfirm,\n onPasswordChange,\n onConfirmPasswordChange,\n }\n}\n","export const MIN_PASSWORD_LENGTH = 8\nexport const UNRECOGNIZED_PASSWORD_STRENGTH = 'Unrecognized password strength.'\n\nconst calculatePasswordStrength = (password: string): number => {\n let score = 0\n\n // Length check\n if (password.length >= 8) score += 1\n if (password.length >= 12) score += 1\n if (password.length >= 16) score += 1\n\n // Character variety checks\n if (/[a-z]/.test(password)) score += 1 // lowercase\n if (/[A-Z]/.test(password)) score += 1 // uppercase\n if (/[0-9]/.test(password)) score += 1 // numbers\n if (/[^A-Za-z0-9]/.test(password)) score += 1 // special characters\n\n // Bonus for good mix\n if (\n password.length >= 10 &&\n /[a-z]/.test(password) &&\n /[A-Z]/.test(password) &&\n /[0-9]/.test(password) &&\n /[^A-Za-z0-9]/.test(password)\n ) {\n score += 1\n }\n\n // Penalty for common patterns\n if (/(.)\\1{2,}/.test(password)) score -= 1 // repeated characters (aaa, 111)\n if (/123|abc|qwe|asd|zxc/i.test(password)) score -= 1 // common sequences\n if (/password|123456|qwerty/i.test(password)) score -= 2 // common passwords\n\n return Math.max(0, Math.min(4, score))\n}\n\nconst colors = {\n red: '#ED334B',\n green: '#41B530',\n orange: '#FF7B21',\n}\n\nexport const getPasswordStrengthWord = (password: string, t) => {\n if (password.length < MIN_PASSWORD_LENGTH) {\n return {\n text: t('not_long_enough'),\n color: colors.red,\n tip: t('password_must_be_at_least_8_characters'),\n }\n }\n\n const strength = calculatePasswordStrength(password)\n\n if (strength <= 1) {\n return {\n text: t('weak'),\n color: colors.red,\n tip: t('strong_password_tip'),\n }\n } else if (strength === 2) {\n return {\n text: t('weak'),\n color: colors.red,\n tip: t('strong_password_tip'),\n }\n } else if (strength === 3) {\n return {\n text: t('average'),\n color: colors.orange,\n tip: t('strong_password_tip'),\n }\n } else {\n return {\n text: t('strong'),\n color: colors.green,\n }\n }\n}\n","import { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n usePrepareSendAlkanesCallback,\n usePushBitcoinTxCallback,\n} from 'src/hooks'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendAlkanesNFTScreenStep {\n CREATE_TX = 0,\n SIGN_TX = 1,\n}\nexport function useSendAlkanesNFTScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendAlkanesNFTScreen'>()\n\n const { t } = useI18n()\n\n const alkanesInfo = props.alkanesInfo\n\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [error, setError] = useState('')\n\n const currentAccount = useCurrentAccount()\n\n const tools = useTools()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, feeRate])\n\n const transferData = useRef<{\n id: string\n toSignData: ToSignData\n }>({\n id: '',\n toSignData: null,\n })\n\n const [step, setStep] = useState(0)\n\n const prepareSendAlkanes = usePrepareSendAlkanesCallback()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const onCreateTxHandleConfirm = async () => {\n tools.showLoading(true)\n try {\n const toSignData = await prepareSendAlkanes(toInfo, alkanesInfo.alkaneid, '1', feeRate, 'nft')\n if (toSignData) {\n transferData.current.toSignData = toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onCreateTxHandleBack = () => {\n nav.goBack()\n }\n\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignPsbtHandleCancel = () => {\n setStep(SendAlkanesNFTScreenStep.CREATE_TX)\n }\n\n const onSignPsbtHandleBack = () => {\n setStep(SendAlkanesNFTScreenStep.CREATE_TX)\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.toSignData],\n },\n }\n\n return {\n step,\n t,\n alkanesInfo,\n toInfo,\n disabled,\n error,\n setToInfo,\n\n onCreateTxHandleConfirm,\n onCreateTxHandleBack,\n\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onSignPsbtHandleBack,\n signPsbtParams,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n usePrepareSendAlkanesCallback,\n usePushBitcoinTxCallback,\n} from 'src/hooks'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendAlkanesScreenStep {\n CREATE_TX = 0,\n SIGN_TX = 1,\n}\n\nexport function useSendAlkanesScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendAlkanesScreen'>()\n\n const { t } = useI18n()\n\n const tokenBalance = props.tokenBalance\n\n const tokenInfo = props.tokenInfo\n\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState(tokenBalance.amount)\n const [error, setError] = useState('')\n\n const totalBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(tokenBalance.amount, tokenBalance.divisibility)\n }, [tokenBalance])\n const availableBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(availableBalance, tokenBalance?.divisibility)\n }, [availableBalance, tokenBalance])\n\n const currentAccount = useCurrentAccount()\n\n const tools = useTools()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n const run = async () => {\n const tokenSummary = await wallet.getAddressAlkanesTokenSummary(\n currentAccount.address,\n tokenBalance.alkaneid,\n true\n )\n setAvailableBalance(tokenSummary.tokenBalance.available)\n }\n\n run()\n }, [])\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n const sendingAmount = bnUtils.fromDecimalAmount(inputAmount, tokenBalance.divisibility)\n\n if (bnUtils.compareAmount(sendingAmount, '0') <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(sendingAmount, availableBalance)! > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, availableBalance, feeRate])\n\n const transferData = useRef<{\n id: string\n toSignData: ToSignData\n }>({\n id: '',\n toSignData: null,\n })\n\n const [step, setStep] = useState(SendAlkanesScreenStep.CREATE_TX)\n\n const wallet = useWallet()\n\n const prepareSendAlkanes = usePrepareSendAlkanesCallback()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const toSignData = await prepareSendAlkanes(\n toInfo,\n tokenBalance.alkaneid,\n bnUtils.fromDecimalAmount(inputAmount, tokenBalance.divisibility),\n feeRate,\n 'ft'\n )\n if (toSignData) {\n transferData.current.toSignData = toSignData\n setStep(1)\n }\n } catch (e) {\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.toSignData],\n },\n }\n\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignPsbtHandleCancel = () => {\n setStep(SendAlkanesScreenStep.CREATE_TX)\n }\n\n const onSignPsbtHandleBack = () => {\n setStep(SendAlkanesScreenStep.CREATE_TX)\n }\n return {\n step,\n t,\n tokenBalance,\n tokenInfo,\n toInfo,\n totalBalanceStr,\n availableBalanceStr,\n\n inputAmount,\n disabled,\n error,\n\n // actions\n setToInfo,\n setInputAmount,\n onClickBack,\n onClickNext,\n\n // sign psbt actions\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onSignPsbtHandleBack,\n signPsbtParams,\n }\n}\n","import { bnUtils, numUtils } from '@unisat/base-utils'\nimport { RuneBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useChain, useRunesIconInfo } from 'src/hooks'\n\nexport interface RunesBalanceCardProps {\n tokenBalance: RuneBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useRunesBalanceCardLogic(props: RunesBalanceCardProps) {\n const { tokenBalance, price, onClick } = props\n\n // balance\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.divisibility)\n let balanceStr = balance.toString()\n if (balance.lt(0.0001)) {\n balanceStr = '<0.0001'\n } else {\n balanceStr = numUtils.showLongNumber(balance.toString())\n }\n\n // price\n const chain = useChain()\n const showPrice = chain.showPrice\n\n // icon\n const iconInfo = useRunesIconInfo(tokenBalance.spacedRune)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n showPrice,\n price,\n\n // icon\n iconInfo,\n\n onClick,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { CAT20Balance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useCAT20IconInfo } from 'src/hooks'\n\nexport interface CAT20BalanceCardProps {\n tokenBalance: CAT20Balance\n onClick?: () => void\n showPrice?: boolean\n price?: TickPriceItem\n}\n\nexport function useCAT20BalanceCardLogic(props: CAT20BalanceCardProps) {\n const { tokenBalance, onClick, showPrice, price } = props\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.decimals)\n const balanceStr = balance.toString()\n\n const iconInfo = useCAT20IconInfo(tokenBalance.name, tokenBalance.tokenId)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n price,\n showPrice,\n\n // icon\n iconInfo,\n\n // click\n onClick,\n }\n}\n","import { bnUtils, numUtils } from '@unisat/base-utils'\nimport { AlkanesBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useAlkanesIconInfo, useChain } from 'src/hooks'\n\nexport interface AlkanesBalanceCardProps {\n tokenBalance: AlkanesBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useAlkanesBalanceCardLogic(props: AlkanesBalanceCardProps) {\n const { tokenBalance, onClick, price } = props\n\n const chain = useChain()\n const showPrice = chain.showPrice && price !== undefined\n\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.divisibility)\n let balanceStr = balance.toString()\n if (balance.lt(0.0001)) {\n balanceStr = '<0.0001'\n } else {\n balanceStr = numUtils.showLongNumber(balance.toString())\n }\n\n const iconInfo = useAlkanesIconInfo(tokenBalance.name, tokenBalance.alkaneid)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n showPrice,\n price,\n\n // icon\n iconInfo,\n\n onClick,\n }\n}\n","import { useI18n, useNavigation } from 'src/context'\nimport { useResetTxState } from 'src/hooks'\n\nexport function useCAT721NFTScreenLogic() {\n const nav = useNavigation()\n const { collectionInfo, localId, version } = nav.getRouteState<'CAT721NFTScreen'>()\n\n const { t } = useI18n()\n\n const resetTxState = useResetTxState()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendCAT721Screen', {\n version: version,\n collectionInfo: collectionInfo,\n localId: localId,\n })\n }\n\n return {\n // info\n collectionInfo,\n localId,\n version,\n // i18n\n t,\n\n // actions\n onClickBack,\n onClickSend,\n }\n}\n","import { KeyringType } from '@unisat/keyring-service/types'\nimport { SignedMessage, SignState, ToSignMessage, WebsiteResult } from '@unisat/wallet-shared'\nimport logger from 'loglevel'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useApproval, useI18n, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount } from 'src/hooks'\nimport { shortAddress, useAsyncEffect } from 'src/utils/ui-utils'\nexport interface SignMessageProps {\n header?: React.ReactNode\n params: {\n data: {\n toSignMessages: ToSignMessage[]\n }\n session?: {\n origin: string\n icon: string\n name: string\n }\n }\n handleCancel?: () => void\n handleConfirm?: (signedMessages: SignedMessage[]) => void\n}\n\nexport function useSignMessageLogic(props: SignMessageProps) {\n const {\n params: {\n data: { toSignMessages },\n session,\n },\n handleCancel,\n handleConfirm,\n } = props\n\n const { resolveApproval, rejectApproval } = useApproval()\n\n const [loading, setLoading] = useState(false)\n const [isKeystoneSigning, setIsKeystoneSigning] = useState(false)\n const [isColdWalletSigning, setIsColdWalletSigning] = useState(false)\n\n const wallet = useWallet()\n const tools = useTools()\n const currentAccount = useCurrentAccount()\n const keyringType = currentAccount.type\n\n const { t } = useI18n()\n\n const [disclaimerVisible, setDisclaimerVisible] = useState(false)\n\n const [signingTxIndex, setSigningTxIndex] = useState(toSignMessages.length > 1 ? -1 : 0)\n const [signedStates, setSignedStates] = useState<SignState[]>(\n toSignMessages.map(() => SignState.PENDING)\n )\n\n const [websiteResult, setWebsiteResult] = useState<WebsiteResult>({\n isScammer: false,\n warning: '',\n allowQuickMultiSign: false,\n })\n\n const isMultipleViewMode = toSignMessages.length > 1\n const [allowQuickMultiSign, setAllowQuickMultiSign] = useState(false)\n\n useEffect(() => {\n if (toSignMessages.length <= 1) {\n return\n }\n\n if (\n keyringType === KeyringType.KeystoneKeyring ||\n keyringType === KeyringType.ColdWalletKeyring\n ) {\n return\n }\n\n setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignMessages.length > 1)\n }, [websiteResult, keyringType])\n\n useAsyncEffect(async () => {\n const website = session?.origin\n if (website) {\n const result = await wallet.checkWebsite(website)\n setWebsiteResult(result)\n\n // Also check local user-granted trust\n if (!result.allowQuickMultiSign && toSignMessages.length > 1) {\n const sites = await wallet.getConnectedSites()\n const site = sites.find(s => s.origin === website)\n if (site?.allowQuickMultiSign) {\n setAllowQuickMultiSign(true)\n }\n }\n }\n }, [])\n\n const currentToSignMessage = toSignMessages[signingTxIndex]\n\n const signedMessages = useRef<SignedMessage[]>([])\n\n const isScammer = websiteResult ? websiteResult.isScammer : false\n\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n const signedCount = signedStates.filter(state => state === SignState.SUCCESS).length\n\n const defaultHandleCancel = () => rejectApproval()\n const actualHandleCancel = handleCancel || defaultHandleCancel\n\n const multiSignList = useMemo(() => {\n return toSignMessages.map((data, index) => {\n const signState = signedStates[index]\n let buttonText = 'View'\n if (signState == SignState.PENDING) {\n buttonText = t('view')\n } else if (signState == SignState.SUCCESS) {\n buttonText = t('signed')\n } else if (signState == SignState.FAILED) {\n buttonText = t('reject')\n }\n\n let buttonPreset = 'primary'\n if (signState === SignState.SUCCESS) {\n buttonPreset = 'approval'\n } else if (signState === SignState.FAILED) {\n buttonPreset = 'danger'\n }\n\n let title = shortAddress(data.text, 10)\n\n const onClick = () => {\n setSigningTxIndex(index)\n }\n return {\n index,\n title,\n buttonText,\n buttonPreset,\n onClick,\n }\n })\n }, [toSignMessages, signedStates, t])\n\n // action\n const onClickBack = () => {\n if (isMultipleViewMode && signingTxIndex != -1) {\n // back to multi sign view\n setSigningTxIndex(-1)\n return\n }\n actualHandleCancel()\n }\n\n const onClickSign = () => {\n onNextStep()\n }\n\n const onTryMultiSign = async () => {\n setDisclaimerVisible(true)\n }\n\n const onTrustSite = async () => {\n const origin = session?.origin\n if (!origin) return\n await wallet.updateConnectSite(origin, { allowQuickMultiSign: true })\n setAllowQuickMultiSign(true)\n }\n\n const onQuickMultiSign = async () => {\n for (let i = 0; i < toSignMessages.length; i++) {\n try {\n const toSignMessage = toSignMessages[i]\n const signedData = await wallet.signMessage(toSignMessage)\n onSignedData(signedData, i)\n } catch (e) {\n signedStates[i] = SignState.FAILED\n setSignedStates([...signedStates])\n logger.error(`Quick signing message ${i} failed:`, e)\n }\n }\n }\n\n const localSign = async () => {\n try {\n const toSignMessage = toSignMessages[signingTxIndex]\n const signedData = await wallet.signMessage(toSignMessage)\n onSignedData(signedData, signingTxIndex)\n } catch (e) {\n signedStates[signingTxIndex] = SignState.FAILED\n setSignedStates([...signedStates])\n logger.error('Local signing failed:', e)\n }\n }\n\n const onNextStep = () => {\n if (keyringType === KeyringType.KeystoneKeyring) {\n setIsKeystoneSigning(true)\n } else if (keyringType === KeyringType.ColdWalletKeyring) {\n setIsColdWalletSigning(true)\n } else {\n localSign()\n }\n }\n\n const onSignedData = (data: SignedMessage, signingTxIndex: number) => {\n signedStates[signingTxIndex] = SignState.SUCCESS\n setSignedStates([...signedStates])\n\n signedMessages.current[signingTxIndex] = data\n\n // check if all signed\n\n // single mode\n if (!isMultipleViewMode) {\n if (handleConfirm) {\n handleConfirm(signedMessages.current)\n } else {\n resolveApproval(signedMessages.current)\n }\n return\n }\n\n // multiple mode\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n if (isAllSigned) {\n if (handleConfirm) {\n handleConfirm(signedMessages.current)\n } else {\n resolveApproval(signedMessages.current)\n }\n return\n } else {\n setSigningTxIndex(-1)\n return\n }\n }\n\n // keystone\n const onKeystoneSigningSuccess = (data: SignedMessage) => {\n setIsKeystoneSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onKeystoneSigningBack = () => {\n setIsKeystoneSigning(false)\n }\n\n // coldwallet\n const onColdWalletSigningSuccess = (data: SignedMessage) => {\n setIsColdWalletSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onColdWalletSigningBack = () => {\n setIsColdWalletSigning(false)\n }\n\n // disclaimer modal\n const onDisclaimerModalClose = () => {\n setDisclaimerVisible(false)\n }\n\n const showMultiSignView = isMultipleViewMode && signingTxIndex == -1\n\n return {\n loading,\n t,\n session,\n\n // page state\n isKeystoneSigning,\n isColdWalletSigning,\n showMultiSignView,\n\n disclaimerVisible,\n\n // data\n toSignMessages,\n currentToSignMessage,\n\n // state\n isScammer,\n allowQuickMultiSign,\n\n // multiple sign state\n isAllSigned,\n signedCount,\n multiSignList,\n\n // actions\n onClickBack,\n onClickSign,\n onQuickMultiSign,\n onTryMultiSign,\n onTrustSite,\n\n onKeystoneSigningSuccess,\n onKeystoneSigningBack,\n\n onColdWalletSigningSuccess,\n onColdWalletSigningBack,\n\n onDisclaimerModalClose,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport { KeyringType, ToSignInput } from '@unisat/keyring-service/types'\nimport {\n ApprovalSession,\n ContractResult,\n DecodedPsbt,\n LocalPsbtSummary,\n SignedData,\n SignState,\n TickPriceItem,\n ToSignData,\n WebsiteResult,\n} from '@unisat/wallet-shared'\nimport logger from 'loglevel'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useApproval, useI18n, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount } from 'src/hooks'\nimport { useAsyncEffect } from 'src/utils/ui-utils'\n\ninterface InscriptionInfo {\n id: string\n isSent: boolean\n}\n\nexport interface TxInfo {\n changedBalance: number\n changedInscriptions: InscriptionInfo[]\n rawtx: string\n psbtHex: string\n toSignInputs: ToSignInput[]\n txError: string\n decodedPsbt: DecodedPsbt\n contractResults: ContractResult[]\n}\n\nexport const initTxInfo: TxInfo = {\n changedBalance: 0,\n changedInscriptions: [],\n rawtx: '',\n psbtHex: '',\n toSignInputs: [],\n txError: '',\n decodedPsbt: {\n inputInfos: [],\n outputInfos: [],\n fee: 0,\n feeRate: 0,\n risks: [],\n features: {\n rbf: false,\n },\n inscriptions: {},\n isScammer: false,\n shouldWarnFeeRate: false,\n recommendedFeeRate: 1,\n isCompleted: false,\n },\n contractResults: [],\n}\n\nexport interface SignPsbtProps {\n header?: React.ReactNode\n params: {\n data: {\n toSignDatas: ToSignData[]\n }\n session?: ApprovalSession\n }\n handleCancel?: () => void\n handleConfirm?: (signedDatas: SignedData[]) => void\n fromApproval?: boolean\n}\n\nexport function useSignPsbtLogic(props: SignPsbtProps) {\n const {\n params: {\n data: { toSignDatas },\n session,\n },\n handleCancel,\n handleConfirm,\n } = props\n const { resolveApproval, rejectApproval } = useApproval()\n\n const [loading, setLoading] = useState(false)\n const [isPsbtSigning, setIsPsbtSigning] = useState(false)\n const [isPsbtRiskPopoverVisible, setIsPsbtRiskPopoverVisible] = useState(false)\n const [isKeystoneSigning, setIsKeystoneSigning] = useState(false)\n const [isColdWalletSigning, setIsColdWalletSigning] = useState(false)\n\n const [contractPopoverData, setContractPopoverData] = useState(undefined)\n\n const wallet = useWallet()\n const tools = useTools()\n const currentAccount = useCurrentAccount()\n const keyringType = currentAccount.type\n\n const { t } = useI18n()\n\n const [disclaimerVisible, setDisclaimerVisible] = useState(false)\n const [localPsbtSummary, setLocalPsbtSummary] = useState<LocalPsbtSummary | null>(null)\n\n const [signingTxIndex, setSigningTxIndex] = useState(toSignDatas.length > 1 ? -1 : 0)\n const [signedStates, setSignedStates] = useState<SignState[]>(\n toSignDatas.map(() => SignState.PENDING)\n )\n\n const [websiteResult, setWebsiteResult] = useState<WebsiteResult>({\n isScammer: false,\n warning: '',\n allowQuickMultiSign: false,\n })\n\n const isMultipleViewMode = toSignDatas.length > 1\n\n const [allowQuickMultiSign, setAllowQuickMultiSign] = useState(false)\n\n //\n\n useEffect(() => {\n if (toSignDatas.length <= 1) {\n return\n }\n\n if (\n keyringType === KeyringType.KeystoneKeyring ||\n keyringType === KeyringType.ColdWalletKeyring\n ) {\n return\n }\n\n setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignDatas.length > 1)\n }, [websiteResult, keyringType])\n\n useAsyncEffect(async () => {\n const website = session?.origin\n if (website) {\n const result = await wallet.checkWebsite(website)\n setWebsiteResult(result)\n\n // Also check local user-granted trust\n if (!result.allowQuickMultiSign && toSignDatas.length > 1) {\n const sites = await wallet.getConnectedSites()\n const site = sites.find(s => s.origin === website)\n if (site?.allowQuickMultiSign) {\n setAllowQuickMultiSign(true)\n }\n }\n }\n }, [])\n\n const currentToSignData = toSignDatas[signingTxIndex]\n\n const signedDatas = useRef<SignedData[]>([])\n\n const decodedPsbtDatas = useRef<DecodedPsbt[]>([])\n useAsyncEffect(async () => {\n if (decodedPsbtDatas.current[signingTxIndex]) {\n return\n }\n if (!currentToSignData) {\n return\n }\n try {\n setLoading(true)\n\n const decodedPsbt = await wallet.decodePsbt(currentToSignData.psbtHex, session?.origin || '')\n decodedPsbtDatas.current[signingTxIndex] = decodedPsbt\n } catch (e) {\n logger.error('Failed to decode PSBT data:', e)\n } finally {\n setLoading(false)\n }\n }, [signingTxIndex, currentToSignData])\n\n const currentDecodedPsbt = decodedPsbtDatas.current[signingTxIndex]\n\n const [brc20PriceMap, setBrc20PriceMap] = useState<Record<string, TickPriceItem>>()\n const [runesPriceMap, setRunesPriceMap] = useState<Record<string, TickPriceItem>>()\n\n useEffect(() => {\n if (!currentDecodedPsbt?.inputInfos) return\n\n const runesMap = {}\n const brc20Map = {}\n\n // collect asset information\n currentDecodedPsbt.inputInfos.forEach(v => {\n if (v.runes) {\n v.runes.forEach(w => {\n runesMap[w.spacedRune] = true\n })\n }\n\n if (v.inscriptions) {\n v.inscriptions.forEach(w => {\n const inscription = currentDecodedPsbt.inscriptions[w.inscriptionId]\n if (inscription && inscription.brc20) {\n brc20Map[inscription.brc20.tick] = true\n }\n })\n }\n })\n\n // get asset price\n if (Object.keys(runesMap).length > 0) {\n wallet\n .getRunesPrice(Object.keys(runesMap))\n .then(setRunesPriceMap)\n .catch(e => tools.toastError(e.message))\n }\n\n if (Object.keys(brc20Map).length > 0) {\n wallet\n .getBrc20sPrice(Object.keys(brc20Map))\n .then(setBrc20PriceMap)\n .catch(e => tools.toastError(e.message))\n }\n }, [currentDecodedPsbt])\n\n const networkFee = currentDecodedPsbt ? numUtils.satoshisToAmount(currentDecodedPsbt.fee) : '0'\n const isValid = currentDecodedPsbt ? currentDecodedPsbt.inputInfos.length > 0 : false\n const hasRisk = currentDecodedPsbt ? currentDecodedPsbt.risks.length > 0 : false\n\n let showFeeSection = false\n if (currentDecodedPsbt && currentDecodedPsbt.isCompleted) {\n showFeeSection = true\n }\n\n let isScammer = false\n if (currentDecodedPsbt && currentDecodedPsbt.isScammer == true) {\n isScammer = true\n }\n if (websiteResult && websiteResult.isScammer == true) {\n isScammer = true\n }\n\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n const signedCount = signedStates.filter(state => state === SignState.SUCCESS).length\n\n const defaultHandleCancel = () => rejectApproval()\n const actualHandleCancel = handleCancel || defaultHandleCancel\n\n const multiSignList = useMemo(() => {\n return toSignDatas.map((data, index) => {\n const signState = signedStates[index]\n let buttonText = 'View'\n if (signState == SignState.PENDING) {\n buttonText = t('view')\n } else if (signState == SignState.SUCCESS) {\n buttonText = t('signed')\n } else if (signState == SignState.FAILED) {\n buttonText = t('reject')\n }\n\n let buttonPreset = 'primary'\n if (signState === SignState.SUCCESS) {\n buttonPreset = 'approval'\n } else if (signState === SignState.FAILED) {\n buttonPreset = 'danger'\n }\n\n const psbtInfo = localPsbtSummary?.items?.[index]\n\n const onClick = () => {\n setSigningTxIndex(index)\n }\n return {\n index,\n buttonText,\n buttonPreset,\n psbtInfo,\n onClick,\n }\n })\n }, [toSignDatas, signedStates, localPsbtSummary, t])\n\n // action\n const onClickBack = () => {\n if (isMultipleViewMode && signingTxIndex != -1) {\n // back to multi sign view\n setSigningTxIndex(-1)\n setIsPsbtRiskPopoverVisible(false)\n return\n }\n actualHandleCancel()\n }\n\n const onClickSign = () => {\n if (currentDecodedPsbt?.risks?.length > 0) {\n setIsPsbtRiskPopoverVisible(true)\n return\n }\n onNextStep()\n }\n\n useAsyncEffect(async () => {\n if (toSignDatas.length <= 1) return\n try {\n const summary = await wallet.analyzeLocalPsbts(toSignDatas)\n setLocalPsbtSummary(summary)\n } catch (e) {\n logger.error('analyzeLocalPsbts failed:', e)\n }\n }, [])\n\n const onTryMultiSign = async () => {\n setDisclaimerVisible(true)\n }\n\n const onTrustSite = async () => {\n const origin = session?.origin\n if (!origin) return\n await wallet.updateConnectSite(origin, { allowQuickMultiSign: true })\n setAllowQuickMultiSign(true)\n }\n\n const onQuickMultiSign = async () => {\n // Run analysis if not yet done (user clicked before async summary completed)\n\n try {\n setIsPsbtSigning(true)\n // Yield to the JS event loop so the loading UI can render before heavy signing work begins\n await new Promise<void>(resolve => setTimeout(resolve, 50))\n const summary = localPsbtSummary ?? (await wallet.analyzeLocalPsbts(toSignDatas))\n if (!localPsbtSummary) setLocalPsbtSummary(summary)\n\n if (summary.parseErrorCount > 0) {\n tools.toastError(t('failed_to_parse_psbt'))\n return\n }\n if (summary.hasSighashNone) {\n tools.toastError(t('sighash_none_detected'))\n return\n }\n if (summary.hasAssets) {\n tools.toastError(t('quick_sign_assets_detected'))\n return\n }\n\n for (let i = 0; i < toSignDatas.length; i++) {\n try {\n const toSignData = toSignDatas[i]\n const signedData = await wallet.signPsbtV2(toSignData)\n onSignedData(signedData, i)\n } catch (e) {\n signedStates[i] = SignState.FAILED\n setSignedStates([...signedStates])\n tools.toastError(`Signing failed for PSBT ${i}: ${e.message}`)\n }\n }\n } catch (e) {\n } finally {\n setIsPsbtSigning(false)\n setDisclaimerVisible(false)\n }\n }\n\n const localSign = async () => {\n try {\n const toSignData = toSignDatas[signingTxIndex]\n const signedData = await wallet.signPsbtV2(toSignData)\n onSignedData(signedData, signingTxIndex)\n } catch (e) {\n logger.error('Local signing failed:', e)\n if (e.message.includes('Can not sign for input')) {\n tools.toastError(t('sign_psbt_input_error'))\n } else {\n tools.toastError(e.message)\n }\n signedStates[signingTxIndex] = SignState.FAILED\n setSignedStates([...signedStates])\n }\n }\n\n const onNextStep = () => {\n if (keyringType === KeyringType.KeystoneKeyring) {\n setIsKeystoneSigning(true)\n } else if (keyringType === KeyringType.ColdWalletKeyring) {\n setIsColdWalletSigning(true)\n } else {\n localSign()\n }\n }\n\n const onSignedData = (data: SignedData, signingTxIndex: number) => {\n signedStates[signingTxIndex] = SignState.SUCCESS\n setSignedStates([...signedStates])\n\n signedDatas.current[signingTxIndex] = data\n\n // single mode\n if (!isMultipleViewMode) {\n if (handleConfirm) {\n handleConfirm(signedDatas.current)\n } else {\n resolveApproval(signedDatas.current)\n }\n return\n }\n\n // multiple mode\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n if (isAllSigned) {\n if (handleConfirm) {\n handleConfirm(signedDatas.current)\n } else {\n resolveApproval(signedDatas.current)\n }\n return\n } else {\n setSigningTxIndex(-1)\n setIsPsbtRiskPopoverVisible(false)\n return\n }\n }\n\n // keystone\n const onKeystoneSigningSuccess = (data: SignedData) => {\n setIsKeystoneSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onKeystoneSigningBack = () => {\n setIsKeystoneSigning(false)\n }\n\n // coldwallet\n const onColdWalletSigningSuccess = (data: { psbtHex: string; rawtx: string }) => {\n setIsColdWalletSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onColdWalletSigningBack = () => {\n setIsColdWalletSigning(false)\n }\n\n // risk popover\n const onRiskPopoverConfirm = () => {\n setIsPsbtRiskPopoverVisible(false)\n onNextStep()\n }\n\n const onRiskPopoverClose = () => {\n setIsPsbtRiskPopoverVisible(false)\n }\n\n // disclaimer modal\n const onDisclaimerModalClose = () => {\n setDisclaimerVisible(false)\n }\n\n const showMultiSignView = isMultipleViewMode && signingTxIndex == -1\n\n const isWaitingData = showMultiSignView == false && (!currentDecodedPsbt || !currentToSignData)\n\n const showLoading = isWaitingData || loading\n\n const backButtonText = isMultipleViewMode ? t('back') : t('reject')\n\n return {\n isPsbtRiskPopoverVisible,\n contractPopoverData,\n setContractPopoverData,\n t,\n brc20PriceMap,\n runesPriceMap,\n session,\n isPsbtSigning,\n\n // page state\n isKeystoneSigning,\n isColdWalletSigning,\n showMultiSignView,\n showLoading,\n\n disclaimerVisible,\n localPsbtSummary,\n\n // data\n toSignDatas,\n currentToSignData,\n currentDecodedPsbt,\n\n // state\n networkFee,\n isValid,\n hasRisk,\n showFeeSection,\n isScammer,\n allowQuickMultiSign,\n\n // multiple sign state\n isAllSigned,\n signedCount,\n multiSignList,\n\n // actions\n backButtonText,\n onClickBack,\n onClickSign,\n onQuickMultiSign,\n onTryMultiSign,\n onTrustSite,\n\n onKeystoneSigningSuccess,\n onKeystoneSigningBack,\n\n onColdWalletSigningSuccess,\n onColdWalletSigningBack,\n\n onRiskPopoverConfirm,\n onRiskPopoverClose,\n\n onDisclaimerModalClose,\n }\n}\n","import { SignPsbtParams, SignPsbtResult } from '@unisat/wallet-shared'\nimport { useI18n, useNavigation } from 'src/context'\nimport { usePushBitcoinTxCallback } from 'src/hooks'\n\nexport function useTxConfirmScreenLogic() {\n const { t } = useI18n()\n const nav = useNavigation()\n const { toSignData } = nav.getRouteState<'TxConfirmScreen'>()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [toSignData],\n },\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickCancel = () => {\n nav.goBack()\n }\n\n const onClickConfirm = async (signedDatas: SignPsbtResult) => {\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n }\n }\n\n return {\n // data\n signPsbtParams,\n\n // actions\n onClickBack,\n onClickCancel,\n onClickConfirm,\n }\n}\n","import { useI18n, useNavigation } from 'src/context'\n\nexport function useTxFailScreenLogic() {\n const nav = useNavigation()\n const { error } = nav.getRouteState<'TxFailScreen'>()\n const { t } = useI18n()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickDone = () => {\n nav.navigate('TabMainScreen')\n }\n return {\n // info\n error,\n\n // actions\n onClickBack,\n onClickDone,\n\n // tools\n t,\n }\n}\n","import { useI18n, useNavigation, useTools } from 'src/context'\n\nexport function useTxSuccessScreenLogic() {\n const nav = useNavigation()\n const { txid } = nav.getRouteState<'TxSuccessScreen'>()\n const { t } = useI18n()\n const tools = useTools()\n\n const onClickExploreTx = () => {\n nav.navToExplorerTx(txid)\n }\n\n const onClickDone = () => {\n nav.navigate('MainScreen')\n }\n\n const onClickCopy = () => {\n tools.copyToClipboard(txid)\n }\n\n return {\n // data\n txid,\n\n // actions\n onClickExploreTx,\n onClickDone,\n onClickCopy,\n\n // tools\n t,\n }\n}\n","import {\n DecodedPsbt,\n Inscription,\n PsbtActionDetailType,\n PsbtActionInfo,\n PsbtActionType,\n} from '@unisat/wallet-shared'\nimport { useMemo } from 'react'\nimport { useI18n } from 'src/context'\nimport { useChain, useCurrentAddress } from 'src/hooks'\n\nexport interface ActionOverviewSectionProps {\n action: PsbtActionInfo\n decodedPsbt: DecodedPsbt\n}\n\nexport function useActionOverviewSectionLogic({ action, decodedPsbt }: ActionOverviewSectionProps) {\n const { t } = useI18n()\n\n const chain = useChain()\n\n const currentAddress = useCurrentAddress()\n\n const spendSatoshis = useMemo(() => {\n const inValue = decodedPsbt.inputInfos\n .filter(v => v.address === currentAddress)\n .reduce((pre, cur) => cur.value + pre, 0)\n const outValue = decodedPsbt.outputInfos\n .filter(v => v.address === currentAddress)\n .reduce((pre, cur) => cur.value + pre, 0)\n const spend = inValue - outValue\n return spend\n }, [decodedPsbt, currentAddress])\n\n const spendingInscriptionCount = useMemo(() => {\n let count = 0\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.inscriptions.forEach(inscription => {\n const inscriptionInfo: Inscription = decodedPsbt.inscriptions[inscription.inscriptionId]\n if (inscriptionInfo.brc20 && inscriptionInfo.brc20.op === 'transfer') {\n // skip brc20\n } else {\n count++\n }\n })\n }\n })\n return count\n }, [decodedPsbt, currentAddress])\n\n const spendingBrc20Count = useMemo(() => {\n let count = 0\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.inscriptions.forEach(inscription => {\n const inscriptionInfo: Inscription = decodedPsbt.inscriptions[inscription.inscriptionId]\n if (inscriptionInfo.brc20 && inscriptionInfo.brc20.op === 'transfer') {\n count++\n }\n })\n }\n })\n return count\n }, [decodedPsbt, currentAddress])\n\n const spendingRunesCount = useMemo(() => {\n const runeMap: { [key: string]: string } = {}\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.runes.forEach(rune => {\n runeMap[rune.runeid] = rune.runeid\n })\n }\n })\n return Object.keys(runeMap).length\n }, [decodedPsbt, currentAddress])\n\n const spendingAlkanesCount = useMemo(() => {\n const alkaneMap: { [key: string]: string } = {}\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.alkanes.forEach(alkane => {\n alkaneMap[alkane.alkaneid] = alkane.alkaneid\n })\n }\n })\n return Object.keys(alkaneMap).length\n }, [decodedPsbt, currentAddress])\n\n if (!action) {\n action = {\n name: '',\n description: '',\n type: PsbtActionType.DEFAULT,\n }\n }\n\n if (action.details?.length === 0) {\n action.details = []\n }\n\n if (action.type === PsbtActionType.DEFAULT) {\n action.name = t('sign_transaction')\n action.description = ''\n action.details = []\n\n if (\n spendingInscriptionCount > 0 ||\n spendingBrc20Count > 0 ||\n spendingAlkanesCount > 0 ||\n spendingRunesCount > 0\n ) {\n action.details.push({\n type: PsbtActionDetailType.MULTIASSETS,\n label: t('spending_assets'),\n value: {\n inscriptionCount: spendingInscriptionCount,\n brc20Count: spendingBrc20Count,\n runesCount: spendingRunesCount,\n alkanesCount: spendingAlkanesCount,\n },\n })\n }\n }\n\n const commonDetails: any[] = []\n if (spendSatoshis > 0) {\n commonDetails.push({\n type: PsbtActionDetailType.SATOSHIS,\n label: t('spending_amount'),\n value: `${spendSatoshis}`,\n })\n }\n\n if (spendSatoshis < 0) {\n commonDetails.push({\n type: PsbtActionDetailType.SATOSHIS,\n label: t('receive'),\n value: `${-spendSatoshis}`,\n })\n }\n\n return {\n decodedPsbt,\n action,\n commonDetails,\n chain,\n }\n}\n","import { KeyringType } from '@unisat/keyring-service/types'\nimport { ADDRESS_TYPES, FEEDBACK_URL, PlatformEnv } from '@unisat/wallet-shared'\nimport { useMemo, useState } from 'react'\nimport { useDevice, useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useChain, useCurrentAccount, useCurrentKeyring, useVersionInfo } from 'src/hooks'\n\nexport interface SettingsItemType {\n key: string\n label?: string\n value?: string\n desc?: string\n danger?: boolean\n right: boolean\n icon?: string\n badge?: string\n onClick?: () => void\n}\n\nexport function useSettingsTabScreenLogic() {\n const nav = useNavigation()\n const currentKeyring = useCurrentKeyring()\n const currentAccount = useCurrentAccount()\n const chain = useChain()\n const wallet = useWallet()\n const tools = useTools()\n const [connected, setConnected] = useState(false)\n const versionInfo = useVersionInfo()\n const hasUpdate =\n versionInfo.latestVersion && versionInfo.latestVersion !== versionInfo.currentVesion\n const { t } = useI18n()\n\n const { isExtensionInExpandView } = useDevice()\n\n const isCustomHdPath = useMemo(() => {\n const item = ADDRESS_TYPES[currentKeyring.addressType]\n return currentKeyring.hdPath !== '' && item.hdPath !== currentKeyring.hdPath\n }, [currentKeyring])\n\n const settings_connectedSites: SettingsItemType = useMemo(() => {\n const value = connected ? t('connected') : t('not_connected')\n return {\n key: 'settings_connectedSites',\n label: t('connected_sites'),\n value,\n desc: '',\n right: true,\n icon: 'connectedSites',\n onClick: () => {\n nav.navigate('ConnectedSitesScreen')\n },\n }\n }, [t, connected])\n\n const settings_addressBook: SettingsItemType = useMemo(() => {\n return {\n key: 'settings_addressBook',\n label: t('address_book'),\n value: t('addressbook_desc'),\n desc: '',\n right: true,\n icon: 'addressBook',\n onClick: () => {\n // todo\n nav.navigate('ContactsScreen', {})\n },\n }\n }, [t])\n const settings_addressType: SettingsItemType = useMemo(() => {\n let value = ''\n const item = ADDRESS_TYPES[currentKeyring.addressType]\n const hdPath = currentKeyring.hdPath || item.hdPath\n if (currentKeyring.type === KeyringType.SimpleKeyring) {\n value = `${item.name}`\n } else {\n value = `${item.name} (${hdPath}/${currentAccount.index})`\n }\n return {\n key: 'settings_addressType',\n label: t('address_type'),\n value,\n desc: '',\n right: true,\n icon: 'addressType',\n onClick: () => {\n if (isCustomHdPath) {\n tools.showTip(\n t(\n 'the_wallet_currently_uses_a_custom_hd_path_and_does_not_support_switching_address_types'\n )\n )\n return\n }\n nav.navigate('AddressTypeScreen')\n },\n }\n }, [t, isCustomHdPath])\n\n const settings_advanced = useMemo(() => {\n return {\n key: 'settings_advanced',\n label: t('settings'),\n value: t('advanced_settings'),\n desc: '',\n right: true,\n icon: 'advance',\n onClick: () => {\n nav.navigate('AdvancedScreen')\n },\n }\n }, [t])\n\n const settings_feedback = useMemo(() => {\n return {\n key: 'settings_feedback',\n label: t('feedback'),\n value: t('let_us_know_what_you_think'),\n desc: '',\n route: '',\n right: true,\n icon: 'feedback',\n onClick: () => {\n const addressParam = currentAccount.address\n\n let feedbackUrl = FEEDBACK_URL\n feedbackUrl += `?address=${addressParam}&category=wallet`\n\n nav.navToUrl(feedbackUrl)\n },\n }\n }, [t])\n\n const settings_rateus = useMemo(() => {\n return {\n key: 'settings_rateus',\n label: t('rate_us'),\n value: t('like_our_wallet_wed_love_your_rating'),\n desc: '',\n route: '',\n right: true,\n icon: 'rateUs',\n onClick: () => {\n nav.navToUrl(PlatformEnv.REVIEW_URL)\n },\n }\n }, [t])\n\n const settings_aboutus = useMemo(() => {\n return {\n key: 'settings_aboutus',\n label: t('about_us'),\n value: '',\n desc: '',\n right: true,\n icon: 'aboutUsLogo',\n badge: hasUpdate ? t('new_version') : undefined,\n onClick: () => {\n nav.navigate('AboutUsScreen')\n },\n }\n }, [t, hasUpdate])\n\n const settings_lockwallet = useMemo(() => {\n return {\n key: 'settings_lockwallet',\n label: '',\n value: '',\n desc: t('lock_immediately'),\n right: false,\n onClick: () => {\n wallet.lockWallet()\n\n // Add small delay to ensure lock state updates before navigation\n // Prevents race condition where unlock screen might redirect back to main\n setTimeout(() => {\n nav.navToLock({\n autoUnlockByFace: false,\n })\n }, 10)\n return\n },\n }\n }, [t])\n\n const settings_expandview = useMemo(() => {\n if (isExtensionInExpandView) {\n return null\n }\n return {\n key: 'settings_expandview',\n label: '',\n value: '',\n desc: t('expand_view'),\n right: false,\n onClick: () => {\n nav.openExtensionInTab()\n },\n }\n }, [t])\n\n return {\n settings_connectedSites,\n settings_addressBook,\n settings_addressType,\n settings_advanced,\n settings_feedback,\n settings_rateus,\n settings_aboutus,\n settings_lockwallet,\n settings_expandview,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { accountActions, AppState, uiActions } from 'src'\nimport { useI18n, useNavigation } from '../context'\nimport {\n useAccountBalance,\n useBalanceCardDetailExpanded,\n useBTCUnit,\n useChain,\n useFetchBalanceCallback,\n useToggleBalanceCardDetailExpanded,\n useWalletConfig,\n} from '../hooks'\n\nconst DEBOUNCE_DELAY = 1000\n\nexport function useBalanceCardLogic() {\n const { t } = useI18n()\n\n const walletConfig = useWalletConfig()\n\n const accountBalance = useAccountBalance()\n const chain = useChain()\n const dispatch = useDispatch()\n\n const fetchBalance = useFetchBalanceCallback()\n\n const btcUnit = useBTCUnit()\n const nav = useNavigation()\n\n const isBtcMainnet = chain.enum === ChainType.BITCOIN_MAINNET\n\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Detail expand state\n const isDetailExpanded = useBalanceCardDetailExpanded()\n const toggleBalanceCardDetailExpanded = useToggleBalanceCardDetailExpanded()\n const handleExpandToggle = () => {\n toggleBalanceCardDetailExpanded()\n }\n\n // Balance visibility\n const isBalanceHidden = useSelector((state: AppState) => state.ui.isBalanceHidden)\n const handleHiddenToggle = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation()\n dispatch(uiActions['setBalanceHidden'](!isBalanceHidden))\n }\n\n const isCurrentChainBalance = chain.enum == accountBalance.chainType\n const balanceValue = useMemo(() => {\n if (!isCurrentChainBalance) {\n return '--'\n }\n return numUtils.satoshisToAmount(accountBalance.totalBalance)\n }, [accountBalance.totalBalance, isCurrentChainBalance])\n\n const unavailableTipText = useMemo(() => {\n let tipText = ''\n tipText += t('unavailable_tooltip')\n\n if (walletConfig.disableUtxoTools) {\n tipText += t('future_versions_will_support_spending_these_assets')\n } else {\n tipText += t('you_can_unlock_these_assets_by_using_the_utxos_tools')\n }\n return tipText\n }, [t, walletConfig.disableUtxoTools])\n\n const showUtxoToolButton = walletConfig.disableUtxoTools\n ? false\n : isCurrentChainBalance && accountBalance.unavailableBalance > 0\n\n const totalBalance = accountBalance.totalBalance\n const availableBalance = accountBalance.availableBalance\n const unavailableBalance = accountBalance.unavailableBalance\n\n const totalAmount = numUtils.satoshisToAmount(accountBalance.totalBalance)\n const availableAmount = numUtils.satoshisToAmount(accountBalance.availableBalance)\n const unavailableAmount = numUtils.satoshisToAmount(accountBalance.unavailableBalance)\n\n const totalAmountMainPart = isBtcMainnet ? totalAmount.slice(0, -4) : totalAmount.slice(0, -8)\n const totalAmountSubPart = isBtcMainnet ? totalAmount.slice(-4) : totalAmount.slice(-8)\n\n // Passive refresh every 10 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n dispatch(accountActions['expireBalance'](null))\n fetchBalance()\n }, 10000)\n\n return () => clearInterval(intervalId)\n }, [dispatch, fetchBalance])\n\n const refreshBalance = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation()\n }\n\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n debounceTimerRef.current = setTimeout(() => {\n dispatch((accountActions as any).expireBalance(null))\n fetchBalance()\n debounceTimerRef.current = null\n }, DEBOUNCE_DELAY)\n },\n [dispatch, fetchBalance]\n )\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n const handleUnlock = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation()\n if (walletConfig.disableUtxoTools) return\n\n nav.navToUtxoTools()\n }\n\n return {\n // state\n totalBalance,\n availableBalance,\n unavailableBalance,\n\n totalAmount,\n availableAmount,\n unavailableAmount,\n\n totalAmountMainPart,\n totalAmountSubPart,\n\n balanceValue,\n unavailableTipText,\n isCurrentChainBalance,\n showUtxoToolButton,\n\n // action\n handleUnlock,\n\n isDetailExpanded,\n handleExpandToggle,\n\n isBalanceHidden,\n handleHiddenToggle,\n\n refreshBalance,\n btcUnit,\n isBtcMainnet,\n\n chain,\n t,\n }\n}\n","import { ChainType } from '@unisat/wallet-types'\nimport { useChainType } from 'src/hooks'\n\nexport function useBtcDisplayLogic(balance: string) {\n const chainType = useChainType()\n\n const totalAmountMainPart =\n chainType === ChainType.BITCOIN_MAINNET ? balance.slice(0, -4) : balance.slice(0, -8)\n const totalAmountSubPart =\n chainType === ChainType.BITCOIN_MAINNET ? balance.slice(-4) : balance.slice(-8)\n\n return {\n totalAmountMainPart,\n totalAmountSubPart,\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/reducers/accounts.ts","../src/actions/global.ts","../src/reducers/discovery.ts","../src/reducers/global.ts","../src/reducers/keyrings.ts","../src/reducers/settings.ts","../src/reducers/transactions.ts","../src/reducers/ui.ts","../src/types/ui.ts","../src/reducers/browser.ts","../src/context/ApprovalContext.tsx","../src/context/DeviceContext.tsx","../src/context/I18nContext.tsx","../src/context/NavigationContext.tsx","../src/context/PriceContext.tsx","../src/context/WalletContext.tsx","../src/hooks/settings.ts","../src/utils/bitcoin-utils.ts","../src/hooks/accounts.ts","../src/hooks/base.ts","../src/hooks/keyrings.ts","../src/context/StorageContext.tsx","../src/context/ToolsContext.tsx","../src/hooks/discovery.ts","../src/hooks/global.ts","../src/hooks/transactions.ts","../src/hooks/ui.ts","../src/hooks/browser.ts","../src/updater/accounts.ts","../src/utils/eventBus.ts","../src/ui-hooks/useAddressTypeScreenLogic.ts","../src/ui-hooks/useAlkanesListLogic.ts","../src/ui-hooks/useInfiniteList.ts","../src/ui-hooks/useAmountInputLogic.ts","../src/ui-hooks/useAnnouncementCardLogic.ts","../src/ui-hooks/useBRC20SendScreenLogic.ts","../src/ui-hooks/useBRC20SingleStepScreenLogic.ts","../src/ui-hooks/useBRC20TokenScreenLogic.ts","../src/utils/ui-utils.ts","../src/ui-hooks/useEditWalletNameScreenLogic.ts","../src/ui-hooks/useFeeRateBarLogic.ts","../src/ui-hooks/useLockTimePageLogic.ts","../src/ui-hooks/useNotificationsLogic.ts","../src/ui-hooks/useSendOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useTxCreateScreenLogic.ts","../src/ui-hooks/useBRC20InscribeTransferLogic.ts","../src/ui-hooks/useAlkanesNFTScreenLogic.ts","../src/ui-hooks/useAlkanesTokenScreenLogic.ts","../src/ui-hooks/useCreateWalletLogicImportWordsStep.ts","../src/ui-hooks/useOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useRunesTokenScreenLogic.ts","../src/ui-hooks/useBRC20BalanceCardLogic.ts","../src/ui-hooks/useExportMnemonicsScreenLogic.ts","../src/ui-hooks/useExportPrivateKeyScreenLogic.ts","../src/ui-hooks/useSendRunesScreenLogic.ts","../src/ui-hooks/useEditContactScreenLogic.ts","../src/ui-hooks/useEditAccountNameScreenLogic.ts","../src/ui-hooks/useAlkanesCollectionListLogic.ts","../src/ui-hooks/useBRC20ListLogic.ts","../src/ui-hooks/useInscriptionListLogic.ts","../src/ui-hooks/useRunesListLogic.ts","../src/ui-hooks/useCAT20ListLogic.ts","../src/ui-hooks/useSendCAT20ScreenLogic.ts","../src/ui-hooks/useSendCAT721ScreenLogic.ts","../src/ui-hooks/useAlkanesNFTListLogic.ts","../src/ui-hooks/useBRC20ProgListLogic.ts","../src/ui-hooks/useCAT721ListLogic.ts","../src/ui-hooks/useCAT20TokenScreenLogic.ts","../src/ui-hooks/useSplitOrdinalsInscriptionScreenLogic.ts","../src/ui-hooks/useCreatePasswordScreenLogic.ts","../src/utils/password-utils.ts","../src/ui-hooks/useSendAlkanesNFTScreenLogic.ts","../src/ui-hooks/useSendAlkanesScreenLogic.ts","../src/ui-hooks/useRunesBalanceCardLogic.ts","../src/ui-hooks/useCAT20BalanceCardLogic.ts","../src/ui-hooks/useAlkanesBalanceCardLogic.ts","../src/ui-hooks/useCAT721NFTScreenLogic.ts","../src/ui-hooks/useSignMessageLogic.ts","../src/ui-hooks/useSignPsbtLogic.ts","../src/ui-hooks/useTxConfirmScreenLogic.ts","../src/ui-hooks/useTxFailScreenLogic.ts","../src/ui-hooks/useTxSuccessScreenLogic.ts","../src/ui-hooks/useActionOverviewSectionLogic.ts","../src/ui-hooks/useSettingsTabScreenLogic.ts","../src/ui-hooks/useBalanceCardLogic.ts","../src/ui-hooks/useBtcDisplayLogic.ts"],"names":["createSlice","initialState","slice","ChainType","AssetTabKey","OrdinalsAssetTabKey","CATAssetTabKey","AlkanesAssetTabKey","MoreAssetTabKey","NavigationSource","WalletTabScreenTabKey","React","useContext","initContext","useCallback","useEffect","useState","AddressType","NetworkType","validateMnemonic","appSummary","chain","jsx","useMemo","CHAINS_MAP","useRef","numUtils","KeyringType","getAccountCapabilities","total","BRC20SendTabKey","BRC20SingleStepKey","BigNumber","BRC20TokenScreenTabKey","items","tokenSummary","FeeRateType","AnnouncementLinkType","enableRBF","minOutputValue","result","enteredWordsCount","TabKey","ADDRESS_TYPES","mnemonic","passphrase","bnUtils","MAX_ALIAS_NAME_LENGTH","SendCAT20ScreenStep","SendCAT721ScreenStep","CAT_VERSION","SendAlkanesNFTScreenStep","error","SendAlkanesScreenStep","signingTxIndex","isAllSigned","AccountSignMethod","SignState","logger","PlatformEnv","useDispatch","useSelector"],"mappings":"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","sourcesContent":["import { load, save } from 'redux-localstorage-simple'\n\nimport { configureStore } from '@reduxjs/toolkit'\nimport { setupListeners } from '@reduxjs/toolkit/dist/query/react/index.js'\n\nimport accounts from './reducers/accounts'\nimport discovery from './reducers/discovery'\nimport { updateVersion } from './actions/global'\nimport global from './reducers/global'\nimport keyrings from './reducers/keyrings'\nimport settings from './reducers/settings'\nimport transactions from './reducers/transactions'\nimport ui from './reducers/ui'\nimport browser from './reducers/browser'\n\nconst PERSISTED_KEYS: string[] = ['ui', 'discovery']\n\nexport function createAppStore() {\n const store = configureStore({\n reducer: {\n accounts,\n transactions,\n settings,\n global,\n keyrings,\n ui,\n discovery,\n browser,\n },\n middleware: getDefaultMiddleware =>\n getDefaultMiddleware({ thunk: true }).concat(\n save({ states: PERSISTED_KEYS, debounce: 1000 })\n ),\n preloadedState: load({ states: PERSISTED_KEYS, disableWarnings: true }),\n })\n\n store.dispatch(updateVersion())\n setupListeners(store.dispatch)\n\n return store\n}\n\nexport type AppStore = ReturnType<typeof createAppStore>\nexport type AppState = ReturnType<AppStore['getState']>\nexport type AppDispatch = AppStore['dispatch']\n\nexport * from './context'\nexport * from './hooks'\nexport * from './updater'\nexport * from './reducers'\nexport * from './types'\nexport * from './ui-hooks'\nexport { uiEventBus } from './utils/eventBus'\nexport { useAsyncEffect } from './utils/ui-utils'\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport {\n Account,\n AddressSummary,\n AppSummary,\n BitcoinBalanceV2,\n Inscription,\n InscriptionSummary,\n TxHistoryItem,\n} from '@unisat/wallet-shared'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface Molels {\n states: boolean\n}\n\nexport interface MolelsPopover {\n state: boolean\n title: string\n data: any\n}\n\nexport interface AccountsState {\n accounts: Account[]\n current: Account\n loading: boolean\n balanceMap: {\n [key: string]: {\n amount: string\n btc_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n inscription_amount: string\n expired: boolean\n }\n }\n balanceV2Map: {\n [key: string]: BitcoinBalanceV2\n }\n historyMap: {\n [key: string]: {\n list: TxHistoryItem[]\n expired: boolean\n }\n }\n inscriptionsMap: {\n [key: string]: {\n list: Inscription[]\n expired: boolean\n }\n }\n appSummary: AppSummary\n inscriptionSummary: InscriptionSummary\n addressSummary: AddressSummary\n model: Molels\n molelsPopover: MolelsPopover\n}\n\nconst initialAccount = {\n type: '',\n address: '',\n brandName: '',\n alianName: '',\n displayBrandName: '',\n index: 0,\n balance: 0,\n pubkey: '',\n key: '',\n flag: 0,\n}\n\nexport const initialState: AccountsState = {\n accounts: [],\n current: initialAccount,\n loading: false,\n balanceMap: {},\n balanceV2Map: {},\n historyMap: {},\n inscriptionsMap: {},\n appSummary: {\n apps: [],\n },\n inscriptionSummary: {\n mintedList: [],\n },\n addressSummary: {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n },\n\n model: { states: false },\n molelsPopover: { state: false, title: '', data: null },\n}\n\nconst slice: Slice<AccountsState> = createSlice({\n name: 'accounts',\n initialState,\n reducers: {\n pendingLogin(state) {\n state.loading = true\n },\n setCurrent(state, action: { payload: Account }) {\n const { payload } = action\n state.current = payload || initialAccount\n },\n setAccounts(state, action: { payload: Account[] }) {\n const { payload } = action\n state.accounts = payload\n },\n setBalance(\n state,\n action: {\n payload: {\n address: string\n amount: string\n btc_amount: string\n inscription_amount: string\n confirm_btc_amount: string\n pending_btc_amount: string\n }\n }\n ) {\n const {\n payload: {\n address,\n amount,\n btc_amount,\n inscription_amount,\n confirm_btc_amount,\n pending_btc_amount,\n },\n } = action\n state.balanceMap[address] = state.balanceMap[address] || {\n amount: '0',\n btc_amount: '0',\n inscription_amount: '0',\n confirm_btc_amount: '0',\n pending_btc_amount: '0',\n expired: true,\n }\n state.balanceMap[address]!.amount = amount\n state.balanceMap[address]!.btc_amount = btc_amount\n state.balanceMap[address]!.inscription_amount = inscription_amount\n state.balanceMap[address]!.confirm_btc_amount = confirm_btc_amount\n state.balanceMap[address]!.pending_btc_amount = pending_btc_amount\n state.balanceMap[address]!.expired = false\n },\n setBalanceV2(\n state,\n action: {\n payload: {\n address: string\n balance: BitcoinBalanceV2\n }\n }\n ) {\n const {\n payload: {\n balance: { availableBalance, unavailableBalance, totalBalance, chainType },\n address,\n },\n } = action\n state.balanceV2Map[address] = state.balanceV2Map[address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n chainType,\n }\n state.balanceV2Map[address].availableBalance = availableBalance\n state.balanceV2Map[address].unavailableBalance = unavailableBalance\n state.balanceV2Map[address].totalBalance = totalBalance\n state.balanceV2Map[address].chainType = chainType\n },\n setAddressSummary(state, action: { payload: any }) {\n state.addressSummary = action.payload\n },\n setModelPopover(state, action: { payload: MolelsPopover }) {\n state.molelsPopover = action.payload\n },\n expireBalance(state) {\n const balance = state.balanceMap[state.current.address]\n if (balance) {\n balance.expired = true\n }\n },\n setHistory(state, action: { payload: { address: string; list: TxHistoryItem[] } }) {\n const {\n payload: { address, list },\n } = action\n state.historyMap[address] = state.historyMap[address] || {\n list: [],\n expired: true,\n }\n state.historyMap[address].list = list\n state.historyMap[address].expired = false\n },\n expireHistory(state) {\n const history = state.historyMap[state.current.address]\n if (history) {\n history.expired = true\n }\n },\n setInscriptions(state, action: { payload: { address: string; list: Inscription[] } }) {\n const {\n payload: { address, list },\n } = action\n state.inscriptionsMap[address] = state.inscriptionsMap[address] || {\n list: [],\n expired: true,\n }\n state.inscriptionsMap[address].list = list\n state.inscriptionsMap[address].expired = false\n },\n expireInscriptions(state) {\n const inscriptions = state.inscriptionsMap[state.current.address]\n if (inscriptions) {\n inscriptions.expired = true\n }\n },\n setCurrentAccountName(state, action: { payload: string }) {\n const { payload } = action\n state.current.alianName = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.alianName = payload\n }\n },\n setCurrentAddressFlag(state, action: { payload: number }) {\n const { payload } = action\n state.current.flag = payload\n const account = state.accounts.find(v => v.address === state.current.address)\n if (account) {\n account.flag = payload\n }\n },\n setInscriptionSummary(state, action: { payload: InscriptionSummary }) {\n const { payload } = action\n state.inscriptionSummary = payload\n },\n setAppSummary(state, action: { payload: AppSummary }) {\n const { payload } = action\n state.appSummary = payload\n },\n rejectLogin(state) {\n state.loading = false\n },\n reset(state) {\n return initialState\n },\n updateAccountName(\n state,\n action: {\n payload: Account\n }\n ) {\n const account = action.payload\n if (state.current.key === account.key) {\n state.current.alianName = account.alianName!\n }\n state.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.addressSummary) {\n state.addressSummary = {\n totalSatoshis: 0,\n btcSatoshis: 0,\n assetSatoshis: 0,\n inscriptionCount: 0,\n brc20Count: 0,\n brc20Count5Byte: 0,\n brc20Count6Byte: 0,\n loading: true,\n address: '',\n runesCount: 0,\n }\n }\n\n if (!state.balanceV2Map) {\n state.balanceV2Map = {}\n }\n })\n },\n})\n\nexport const accountActions = slice.actions\nexport default slice.reducer\n","import { createAction } from '@reduxjs/toolkit'\n\n// fired once when the app reloads but before the app renders\n// allows any updates to be applied to store data loaded from localStorage\nexport const updateVersion = createAction<void>('global/updateVersion')\n","import { ChainType } from '@unisat/wallet-types'\nimport { AppInfo } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nexport interface DiscoveryState {\n bannerList: { id: string; img: string; link: string }[]\n appList: { tab: string; items: AppInfo[] }[]\n lastFetchTime: number\n lastFetchChainType: ChainType\n cachedBannerIds: string[]\n hasNewBanner: boolean\n}\n\nexport const initialState: DiscoveryState = {\n bannerList: [],\n appList: [],\n lastFetchTime: 0,\n lastFetchChainType: ChainType.BITCOIN_MAINNET,\n cachedBannerIds: [],\n hasNewBanner: true,\n}\n\nconst slice: Slice<DiscoveryState> = createSlice({\n name: 'discovery',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n setBannerList(\n state,\n action: {\n payload: {\n bannerList: { id: string; img: string; link: string }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n const newBannerIds = payload.bannerList.map(banner => banner.id)\n const hasNewBanner = newBannerIds.some(id => !state.cachedBannerIds.includes(id))\n\n state.bannerList = payload.bannerList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n state.hasNewBanner = hasNewBanner\n\n state.cachedBannerIds = newBannerIds\n },\n setAppList(\n state,\n action: {\n payload: {\n appList: { tab: string; items: AppInfo[] }[]\n chainType: ChainType\n fetchTime: number\n }\n }\n ) {\n const { payload } = action\n state.appList = payload.appList\n state.lastFetchChainType = payload.chainType\n state.lastFetchTime = payload.fetchTime\n },\n clearNewBannerFlag(state) {\n state.hasNewBanner = false\n },\n },\n})\n\nexport const discoveryActions = slice.actions\nexport default slice.reducer\n","import { createSlice, PayloadAction, SliceCaseReducers } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\nimport { TabOption } from '../types'\n\nexport interface GlobalState {\n tab: TabOption\n isUnlocked: boolean\n isReady: boolean\n isBooted: boolean\n screenState?: {\n type: string\n options: any\n }\n isRefresh: boolean\n backRefresh: boolean\n wallRefresh: boolean\n wallTabRefresh: boolean\n unlockRefres: boolean\n unlockRead: boolean\n layerState: boolean\n isUnlockTimeRefres: boolean\n infiniteListScrollOffset: number\n infiniteListScrollDirection: 'up' | 'down'\n infiniteListScrollActiveTime: number\n isScrollViewTop: number\n isScrollViewBot: number\n isBiometricsSupported: boolean\n hasBiometricsKey: boolean\n wallTabFocusRefresh: 0\n goBackRefresh: 0\n switchChainModalVisible: boolean\n isLockedOverlayVisible: boolean\n}\n\nexport const initialState: GlobalState = {\n tab: 'home',\n isUnlocked: false,\n isReady: false,\n isBooted: false,\n screenState: undefined,\n isRefresh: false,\n backRefresh: false,\n wallRefresh: false,\n wallTabRefresh: false,\n unlockRefres: false,\n unlockRead: false,\n layerState: false,\n isUnlockTimeRefres: false,\n infiniteListScrollOffset: 0,\n infiniteListScrollDirection: 'down',\n infiniteListScrollActiveTime: 0,\n isScrollViewTop: 0,\n isScrollViewBot: 0,\n isBiometricsSupported: false,\n hasBiometricsKey: false,\n wallTabFocusRefresh: 0,\n goBackRefresh: 0,\n switchChainModalVisible: false,\n isLockedOverlayVisible: false,\n}\n\nconst reducers: SliceCaseReducers<GlobalState> = {\n reset: state => initialState,\n update: (\n state,\n action: PayloadAction<{\n tab?: TabOption\n isUnlocked?: boolean\n isReady?: boolean\n isBooted?: boolean\n screenState?: {\n type: string\n options: any\n }\n isRefresh?: boolean\n backRefresh?: boolean\n wallRefresh?: boolean\n wallTabRefresh?: boolean\n unlockRefres?: boolean\n layerState?: boolean\n unlockRead?: boolean\n isUnlockTimeRefres?: boolean\n infiniteListScrollOffset?: number\n infiniteListScrollDirection?: 'up' | 'down'\n infiniteListScrollActiveTime?: number\n isScrollViewTop?: number\n isScrollViewBot?: number\n isBiometricsSupported?: boolean\n hasBiometricsKey?: boolean\n wallTabFocusRefresh?: number\n goBackRefresh?: number\n switchChainModalVisible?: boolean\n lockedOverlayVisible?: boolean\n }>\n ) => {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n}\n\nconst slice = createSlice({\n name: 'global',\n initialState,\n reducers,\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const globalActions = slice.actions as any\n\nexport default slice.reducer\n","import { Account, WalletKeyring } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface KeyringsState {\n keyrings: WalletKeyring[]\n current: WalletKeyring\n}\n\nconst initialKeyring: WalletKeyring = {\n key: '',\n index: 0,\n type: '',\n addressType: AddressType.P2TR,\n accounts: [],\n alianName: '',\n hdPath: '',\n}\n\nexport const initialState: KeyringsState = {\n keyrings: [],\n current: initialKeyring,\n}\n\nconst slice: Slice<KeyringsState> = createSlice({\n name: 'keyrings',\n initialState,\n reducers: {\n setCurrent(state, action: { payload: WalletKeyring }) {\n const { payload } = action\n state.current = payload || initialKeyring\n },\n setKeyrings(state, action: { payload: WalletKeyring[] }) {\n const { payload } = action\n state.keyrings = payload\n },\n\n reset(state) {\n return initialState\n },\n\n updateKeyringName(state, action: { payload: WalletKeyring }) {\n const keyring = action.payload\n if (state.current.key === keyring.key) {\n state.current.alianName = keyring.alianName\n }\n state.keyrings.forEach(v => {\n if (v.key === keyring.key) {\n v.alianName = keyring.alianName\n }\n })\n },\n\n updateAccountName(state, action: { payload: Account }) {\n const account = action.payload\n\n state.current.accounts.forEach(v => {\n if (v.key === account.key) {\n v.alianName = account.alianName!\n }\n })\n\n state.keyrings.forEach(v => {\n v.accounts.forEach(w => {\n if (w.key === account.key) {\n w.alianName = account.alianName!\n }\n })\n })\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n })\n },\n})\n\nexport const keyringsActions = slice.actions\nexport default slice.reducer\n","import { DEFAULT_LOCKTIME_ID, WalletConfig } from '@unisat/wallet-shared'\nimport { ChainType, NetworkType } from '@unisat/wallet-types'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface SettingsState {\n locale: string\n networkType: NetworkType\n chainType: ChainType\n walletConfig: WalletConfig\n skippedVersion: string\n autoLockTimeId: number\n developerMode: boolean\n}\n\nexport const initialState: SettingsState = {\n locale: 'English',\n networkType: NetworkType.MAINNET,\n chainType: ChainType.BITCOIN_MAINNET,\n walletConfig: {\n version: '',\n moonPayEnabled: true,\n statusMessage: '',\n endpoint: '',\n chainTip: '',\n disableUtxoTools: true,\n },\n skippedVersion: '',\n autoLockTimeId: DEFAULT_LOCKTIME_ID,\n developerMode: false,\n}\n\nconst slice: Slice<SettingsState> = createSlice({\n name: 'settings',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateSettings(\n state,\n action: {\n payload: {\n locale?: string\n networkType?: NetworkType\n walletConfig?: WalletConfig\n skippedVersion?: string\n chainType?: ChainType\n autoLockTimeId?: number\n developerMode?: boolean\n }\n }\n ) {\n const { payload } = action\n state = Object.assign({}, state, payload)\n return state\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.networkType) {\n state.networkType = NetworkType.MAINNET\n }\n })\n },\n})\n\nexport const settingsActions = slice.actions\nexport default slice.reducer\n","import { Inscription, UnspentOutput } from '@unisat/wallet-shared'\nimport { createSlice, Slice } from '@reduxjs/toolkit'\n\nimport { updateVersion } from '../actions/global'\n\nexport interface BitcoinTx {\n fromAddress: string\n toAddress: string\n toSatoshis: number\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n autoAdjust: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n}\n\nexport interface OrdinalsTx {\n fromAddress: string\n toAddress: string\n inscription: Inscription\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n}\n\nexport interface RunesTx {\n fromAddress: string\n toAddress: string\n rawtx: string\n txid: string\n fee: number\n estimateFee: number\n changeSatoshis: number\n sending: boolean\n psbtHex: string\n feeRate: number\n toDomain: string\n outputValue: number\n runeid?: string\n runeAmount?: string\n}\n\nexport interface TransactionsState {\n bitcoinTx: BitcoinTx\n ordinalsTx: OrdinalsTx\n runesTx: RunesTx\n utxos: UnspentOutput[]\n spendUnavailableUtxos: UnspentOutput[]\n assetUtxos_inscriptions: UnspentOutput[]\n assetUtxos_runes: UnspentOutput[]\n}\n\nexport const initialState: TransactionsState = {\n bitcoinTx: {\n fromAddress: '',\n toAddress: '',\n toSatoshis: 0,\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n autoAdjust: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n },\n ordinalsTx: {\n fromAddress: '',\n toAddress: '',\n inscription: {\n inscriptionId: '',\n inscriptionNumber: 0,\n address: '',\n outputValue: 0,\n preview: '',\n content: '',\n contentType: '',\n contentLength: 0,\n timestamp: 0,\n genesisTransaction: '',\n location: '',\n output: '',\n offset: 0,\n contentBody: '',\n utxoHeight: 0,\n utxoConfirmation: 0,\n },\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n },\n\n runesTx: {\n fromAddress: '',\n toAddress: '',\n rawtx: '',\n txid: '',\n fee: 0,\n estimateFee: 0,\n changeSatoshis: 0,\n sending: false,\n psbtHex: '',\n feeRate: 5,\n toDomain: '',\n outputValue: 10000,\n },\n utxos: [],\n spendUnavailableUtxos: [],\n assetUtxos_inscriptions: [],\n assetUtxos_runes: [],\n}\n\nconst slice: Slice<TransactionsState> = createSlice({\n name: 'transactions',\n initialState,\n reducers: {\n updateBitcoinTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n toSatoshis?: number\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n autoAdjust?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n }\n }\n ) {\n const { payload } = action\n state.bitcoinTx = Object.assign({}, state.bitcoinTx, payload)\n },\n updateOrdinalsTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n inscription?: Inscription\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n }\n }\n ) {\n const { payload } = action\n state.ordinalsTx = Object.assign({}, state.ordinalsTx, payload)\n },\n\n updateRunesTx(\n state,\n action: {\n payload: {\n fromAddress?: string\n toAddress?: string\n changeSatoshis?: number\n rawtx?: string\n txid?: string\n fee?: number\n estimateFee?: number\n sending?: boolean\n psbtHex?: string\n feeRate?: number\n toDomain?: string\n outputValue?: number\n runeid?: string\n runeAmount?: string\n }\n }\n ) {\n const { payload } = action\n state.runesTx = Object.assign({}, state.runesTx, payload)\n },\n setUtxos(state, action: { payload: UnspentOutput[] }) {\n state.utxos = action.payload\n },\n setSpendUnavailableUtxos(state, action: { payload: UnspentOutput[] }) {\n state.spendUnavailableUtxos = action.payload\n },\n\n setAssetUtxosInscriptions(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_inscriptions = action.payload\n },\n setAssetUtxosRunes(state, action: { payload: UnspentOutput[] }) {\n state.assetUtxos_runes = action.payload\n },\n reset(state) {\n return initialState\n },\n },\n\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n if (!state.assetUtxos_inscriptions) {\n state.assetUtxos_inscriptions = []\n }\n\n if (!state.spendUnavailableUtxos) {\n state.spendUnavailableUtxos = []\n }\n\n if (!state.assetUtxos_runes) {\n state.assetUtxos_runes = []\n }\n })\n },\n})\n\nexport const transactionsActions = slice.actions\nexport default slice.reducer\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport { Inscription } from '@unisat/wallet-shared'\n\nimport { updateVersion } from '../actions/global'\nimport {\n AlkanesAssetTabKey,\n AssetTabKey,\n CATAssetTabKey,\n MoreAssetTabKey,\n NavigationSource,\n OrdinalsAssetTabKey,\n} from '../types'\n\nexport enum WallettopTabScreenTabKey {\n Ordinals,\n Atomicals,\n Runes,\n CAT20,\n Alkanes,\n}\n\nexport interface UIState {\n assetTabKey: AssetTabKey\n ordinalsAssetTabKey: OrdinalsAssetTabKey\n catAssetTabKey: CATAssetTabKey\n alkanesAssetTabKey: AlkanesAssetTabKey\n moreAssetTabKey: MoreAssetTabKey\n uiTxCreateScreen: {\n toInfo: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount: string\n enableRBF: boolean\n }\n addressInput: {\n address: string\n domain: string\n inscription?: Inscription\n }\n amountInput: {\n amount: string\n }\n feeRateBar: {\n feeRate: number\n feeRateInputVal: string\n enableLowFeeRate: boolean\n feeOptionIndex: number\n showCustomInput: boolean\n }\n babylonSendScreen: {\n inputAmount: string\n memo: string\n }\n navigationSource: NavigationSource\n isBalanceHidden: boolean\n balanceDetailExpanded: boolean\n\n walletTopTabScreen: {\n toptabKey: WallettopTabScreenTabKey\n }\n}\n\nexport const initialState: UIState = {\n assetTabKey: AssetTabKey.ORDINALS,\n ordinalsAssetTabKey: OrdinalsAssetTabKey.ALL,\n catAssetTabKey: CATAssetTabKey.CAT20,\n alkanesAssetTabKey: AlkanesAssetTabKey.TOKEN,\n moreAssetTabKey: MoreAssetTabKey.ALKANES_TOKEN,\n uiTxCreateScreen: {\n toInfo: {\n address: '',\n domain: '',\n },\n inputAmount: '',\n enableRBF: true,\n },\n addressInput: {\n address: '',\n domain: '',\n },\n amountInput: {\n amount: '',\n },\n feeRateBar: {\n feeRate: 1,\n feeRateInputVal: '',\n enableLowFeeRate: false,\n feeOptionIndex: 1, // Default to AVG\n showCustomInput: false,\n },\n babylonSendScreen: {\n inputAmount: '',\n memo: '',\n },\n navigationSource: NavigationSource.NORMAL,\n isBalanceHidden: false,\n balanceDetailExpanded: true,\n\n walletTopTabScreen: {\n toptabKey: WallettopTabScreenTabKey.Ordinals,\n },\n}\n\nconst slice: Slice<UIState> = createSlice({\n name: 'ui',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateAssetTabScreen(\n state,\n action: {\n payload: {\n assetTabKey?: AssetTabKey\n ordinalsAssetTabKey?: OrdinalsAssetTabKey\n catAssetTabKey?: CATAssetTabKey\n alkanesAssetTabKey?: AlkanesAssetTabKey\n moreAssetTabKey?: MoreAssetTabKey\n }\n }\n ) {\n const { payload } = action\n if (payload.assetTabKey !== undefined) {\n state.assetTabKey = payload.assetTabKey\n }\n if (payload.ordinalsAssetTabKey !== undefined) {\n state.ordinalsAssetTabKey = payload.ordinalsAssetTabKey\n }\n\n if (payload.catAssetTabKey !== undefined) {\n state.catAssetTabKey = payload.catAssetTabKey\n }\n if (payload.alkanesAssetTabKey !== undefined) {\n state.alkanesAssetTabKey = payload.alkanesAssetTabKey\n }\n if (payload.moreAssetTabKey !== undefined) {\n state.moreAssetTabKey = payload.moreAssetTabKey\n }\n return state\n },\n updateTxCreateScreen(\n state,\n action: {\n payload: {\n toInfo?: {\n address: string\n domain: string\n inscription?: Inscription\n }\n inputAmount?: string\n enableRBF?: boolean\n }\n }\n ) {\n if (action.payload.toInfo !== undefined) {\n state.uiTxCreateScreen.toInfo = action.payload.toInfo\n }\n if (action.payload.inputAmount !== undefined) {\n state.uiTxCreateScreen.inputAmount = action.payload.inputAmount\n }\n if (action.payload.enableRBF !== undefined) {\n state.uiTxCreateScreen.enableRBF = action.payload.enableRBF\n }\n\n state.uiTxCreateScreen = { ...state.uiTxCreateScreen }\n },\n updateFeeRateBar(\n state,\n action: {\n payload: {\n feeRate?: number\n feeRateInputVal?: string\n enableLowFeeRate?: boolean\n feeOptionIndex?: number\n showCustomInput?: boolean\n }\n }\n ) {\n if (action.payload.feeRate !== undefined) {\n state.feeRateBar.feeRate = action.payload.feeRate\n }\n if (action.payload.feeRateInputVal !== undefined) {\n state.feeRateBar.feeRateInputVal = action.payload.feeRateInputVal\n }\n if (action.payload.enableLowFeeRate !== undefined) {\n state.feeRateBar.enableLowFeeRate = action.payload.enableLowFeeRate\n }\n if (action.payload.feeOptionIndex !== undefined) {\n state.feeRateBar.feeOptionIndex = action.payload.feeOptionIndex\n }\n if (action.payload.showCustomInput !== undefined) {\n state.feeRateBar.showCustomInput = action.payload.showCustomInput\n }\n state.feeRateBar = { ...state.feeRateBar }\n },\n resetFeeRateBar(state) {\n state.feeRateBar = initialState.feeRateBar\n },\n\n updateAddressInput(\n state,\n action: {\n payload: {\n address?: string\n domain?: string\n }\n }\n ) {\n if (action.payload.address !== undefined) {\n state.addressInput.address = action.payload.address\n }\n if (action.payload.domain !== undefined) {\n state.addressInput.domain = action.payload.domain\n }\n state.addressInput = { ...state.addressInput }\n },\n\n resetAddressInput(state) {\n state.addressInput = initialState.addressInput\n },\n\n updateAmountInput(\n state,\n action: {\n payload: {\n amount?: string\n }\n }\n ) {\n if (action.payload.amount !== undefined) {\n state.amountInput.amount = action.payload.amount\n }\n state.amountInput = { ...state.amountInput }\n },\n\n resetAmountInput(state) {\n state.amountInput = initialState.amountInput\n },\n\n resetTxCreateScreen(state) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n },\n updateBabylonSendScreen(\n state,\n action: {\n payload: {\n inputAmount?: string\n memo?: string\n }\n }\n ) {\n if (action.payload.inputAmount !== undefined) {\n state.babylonSendScreen.inputAmount = action.payload.inputAmount\n }\n if (action.payload.memo !== undefined) {\n state.babylonSendScreen.memo = action.payload.memo\n }\n },\n resetBabylonSendScreen(state) {\n state.babylonSendScreen = initialState.babylonSendScreen\n },\n setNavigationSource(state, action: { payload: NavigationSource }) {\n state.navigationSource = action.payload\n },\n setBalanceHidden(state, action: { payload: boolean }) {\n state.isBalanceHidden = action.payload\n },\n setBalanceDetailExpanded(state, action: { payload: boolean }) {\n state.balanceDetailExpanded = action.payload\n },\n },\n extraReducers: builder => {\n builder.addCase(updateVersion, state => {\n // todo\n if (!state.assetTabKey) {\n state.assetTabKey = AssetTabKey.ORDINALS\n }\n if (!state.ordinalsAssetTabKey) {\n state.ordinalsAssetTabKey = OrdinalsAssetTabKey.ALL\n }\n if (!state.catAssetTabKey) {\n state.catAssetTabKey = CATAssetTabKey.CAT20\n }\n if (!state.alkanesAssetTabKey) {\n state.alkanesAssetTabKey = AlkanesAssetTabKey.TOKEN\n }\n if (state.moreAssetTabKey === undefined) {\n state.moreAssetTabKey = MoreAssetTabKey.ALKANES_TOKEN\n }\n if (state.assetTabKey === (4 as AssetTabKey)) {\n state.assetTabKey = AssetTabKey.MORE\n }\n if (!state.uiTxCreateScreen) {\n state.uiTxCreateScreen = initialState.uiTxCreateScreen\n } else if (state.uiTxCreateScreen.enableRBF === undefined) {\n state.uiTxCreateScreen.enableRBF = true\n }\n if (!state.feeRateBar) {\n state.feeRateBar = initialState.feeRateBar\n }\n if (!state.babylonSendScreen) {\n state.babylonSendScreen = initialState.babylonSendScreen\n }\n if (state.isBalanceHidden === undefined) {\n state.isBalanceHidden = false\n }\n if (state.balanceDetailExpanded === undefined) {\n state.balanceDetailExpanded = true\n }\n })\n },\n})\n\nexport const uiActions = slice.actions\nexport default slice.reducer\n","export enum AssetTabKey {\n ORDINALS = 0,\n ATOMICALS = 1, // IGNORED\n RUNES = 2,\n CAT = 3,\n MORE = 4,\n}\n\nexport enum OrdinalsAssetTabKey {\n ALL = 0,\n BRC20 = 1,\n BRC20_6BYTE = 2,\n}\n\nexport enum CATAssetTabKey {\n CAT20,\n CAT721,\n CAT20_V2,\n CAT721_V2,\n}\n\nexport enum AlkanesAssetTabKey {\n TOKEN,\n COLLECTION,\n}\n\nexport enum MoreAssetTabKey {\n ALKANES_TOKEN,\n ALKANES_COLLECTION,\n}\n\nexport enum NavigationSource {\n BACK,\n NORMAL,\n}\n","import { createSlice, Slice } from '@reduxjs/toolkit'\nimport { AppInfo } from '@unisat/wallet-shared'\nexport enum WalletTabScreenTabKey {\n ALL,\n BRC20,\n}\n\ntype suspensionType = {\n suspensionIf: boolean\n info: AppInfo | object | any\n web: any\n}\n\ntype wcars = {\n if?: boolean\n url: string\n}\n\ntype guideListsType = {\n id: number\n title: string\n content: string\n img: string\n}\n\nexport interface setSessionDateProps {\n icon: string\n name: string\n origin: string\n}\n\nconst wcarss: wcars = {\n if: false,\n url: '',\n}\nconst riskIfs: boolean = false\n\nconst suspensions: suspensionType = {\n suspensionIf: false,\n info: {},\n web: '',\n}\n\nconst collects: any = [\n {\n id: 4,\n name: 'My favorites',\n icon: 'collect_white',\n list: null,\n },\n]\n\nconst yys: any = false\n\nconst riseHeights: number = 100\n\nconst ScanDatas: string = ''\n\nconst historyLists: any = []\n\nconst mnemonicAids: any = []\n\nconst amountValues: string = null\n\nconst guideLists: guideListsType[] = [\n {\n id: 1,\n title: 'Welcome to UniSat',\n content: 'Your trusted Bitcoin wallet with full support for Ordinals and Atomicals protocols.',\n img: 'guide1',\n },\n {\n id: 2,\n title: 'Effortless Bitcoin Asset Management',\n content: 'Easily switch between accounts and wallets for seamless asset management.',\n img: 'guide2',\n },\n {\n id: 3,\n title: 'Discover Web3 on Bitcoin',\n content: 'Let us guide you through the world of Bitcoin web3 with ease.',\n img: 'guide3',\n },\n]\n\nconst popUps: boolean = false\n\nconst setStatusBars: boolean = false\n\nconst setSessionDates: setSessionDateProps = {\n icon: '',\n name: '',\n origin: '',\n}\n\nconst i18Classs: string = 'ru'\n\nconst webViewLods: boolean = true\n\nexport interface BrowserState {\n walletTabScreen: {\n tabKey: wcars\n riskIf: boolean\n collect: any\n historyList: any\n suspension: suspensionType\n yy: any\n riseHeight: number\n ScanData: string\n amountValue: string\n guideList: guideListsType[]\n popUp: boolean\n setStatusBar: boolean\n i18Class: string\n setSessionDate: setSessionDateProps\n webViewLod: boolean\n }\n}\n\nexport const initialState: BrowserState = {\n walletTabScreen: {\n tabKey: wcarss,\n riskIf: riskIfs,\n collect: collects,\n historyList: historyLists,\n suspension: suspensions,\n yy: yys,\n riseHeight: riseHeights,\n ScanData: ScanDatas,\n amountValue: amountValues,\n guideList: guideLists,\n popUp: popUps,\n setStatusBar: setStatusBars,\n i18Class: i18Classs,\n setSessionDate: setSessionDates,\n webViewLod: webViewLods,\n },\n}\nconst slice: Slice<BrowserState> = createSlice({\n name: 'browser',\n initialState,\n reducers: {\n reset(state) {\n return initialState\n },\n updateWalletRisk(\n state,\n action: {\n payload: {\n tabKey: wcars\n }\n }\n ) {\n const { payload } = action\n state.walletTabScreen.tabKey = payload.tabKey\n return state\n },\n usedatariskIfs(state, action) {\n state.walletTabScreen.riskIf = action.payload\n return state\n },\n usedataricollect(state, action) {\n if (!action.payload) {\n state.walletTabScreen.collect[0].list = null\n } else {\n state.walletTabScreen.collect[0].list = action.payload\n }\n return state\n },\n usedatariInfo(state, action) {\n return state\n },\n usedatarihistoryList(state, action) {\n state.walletTabScreen.historyList = action.payload\n return state\n },\n usedatarisuspension(state, action) {\n state.walletTabScreen.suspension = action.payload\n return state\n },\n usedatarisyyn(state, action) {\n state.walletTabScreen.yy = action.payload\n return state\n },\n usedatarisriseHeight(state, action) {\n state.walletTabScreen.riseHeight = action.payload\n return state\n },\n usedataScanData(state, action) {\n state.walletTabScreen.ScanData = action.payload\n return state\n },\n usedatamnemonicAid(state, action) {\n return state\n },\n usedatamountValue(state, action) {\n state.walletTabScreen.amountValue = action.payload\n return state\n },\n usedatapopUp(state, action) {\n state.walletTabScreen.popUp = action.payload\n return state\n },\n usedatasetStatusBar(state, action) {\n state.walletTabScreen.setStatusBar = action.payload\n return state\n },\n usedatasetSessionDate(state, action) {\n state.walletTabScreen.setSessionDate = action.payload\n return state\n },\n usedatawebViewLod(state, action) {\n state.walletTabScreen.webViewLod = action.payload\n return state\n },\n },\n extraReducers: builder => {\n // todo\n },\n})\n\nexport const browserActions = slice.actions\nexport default slice.reducer\n","/* eslint-disable indent */\nimport React, { useContext } from 'react'\n\nexport interface ApprovalContextType {\n getApproval: () => Promise<any>\n resolveApproval: (data?: any, stay?: boolean, forceReject?: boolean) => Promise<void>\n rejectApproval: (reason?: string, stay?: boolean, isInternal?: boolean) => Promise<void>\n}\n\nconst initContext = {\n getApproval: () => {\n return Promise.resolve()\n },\n resolveApproval: (data?: any, stay?: boolean, forceReject?: boolean) => {\n return Promise.resolve()\n },\n rejectApproval: (reason?: string, stay?: boolean, isInternal?: boolean) => {\n return Promise.resolve()\n },\n}\n\nexport const ApprovalContext = React.createContext<ApprovalContextType>(initContext)\n\nexport function useApproval() {\n const ctx = useContext(ApprovalContext)\n return ctx\n}\n","import React, { useContext } from 'react'\n\nexport interface DeviceContextType {\n isMobile: boolean\n isIOS: boolean\n isAndroid: boolean\n isExtensionInExpandView: boolean\n isExtensionInSideBar: boolean\n isExtension: boolean\n isMobileScreenSize: boolean\n isDesktopScreenSize: boolean\n platform: string\n hasBottomButton: boolean\n cardColumnsInList: number\n}\n\nconst initContext = {\n isMobile: false,\n isIOS: false,\n isAndroid: false,\n isExtension: false,\n isExtensionInExpandView: false,\n isExtensionInSideBar: false,\n isMobileScreenSize: false,\n isDesktopScreenSize: false,\n platform: 'unknown',\n hasBottomButton: false,\n cardColumnsInList: 2,\n}\n\nexport const DeviceContext = React.createContext<DeviceContextType>(initContext)\n\nexport function useDevice() {\n const ctx = useContext(DeviceContext)\n return ctx\n}\n","import { FALLBACK_LOCALE } from '@unisat/wallet-shared'\nimport log from 'loglevel'\nimport React, { createContext, useContext, useEffect, useState } from 'react'\n\nexport interface I18nContextType {\n t: (key: string, substitutions?: string | string[] | Record<string, string | number>) => string\n locale: string\n supportedLocales: string[]\n localeNames: Record<string, string>\n changeLocale: (locale: string) => Promise<void>\n addResourceBundle?: (locale: string) => Promise<void>\n isSpecialLocale: boolean\n}\n\n// Create context\nexport const I18nContext = createContext<I18nContextType>({\n t: key => key,\n locale: FALLBACK_LOCALE,\n supportedLocales: [],\n localeNames: {},\n changeLocale: async () => {},\n addResourceBundle: async () => {},\n isSpecialLocale: false,\n})\n\nexport function useI18n() {\n const context = useContext(I18nContext)\n if (!context) {\n throw Error('Feature flag hooks can only be used by children of BridgeProvider.')\n } else {\n return context\n }\n}\n","import {\n Account,\n AlkanesBalance,\n AlkanesInfo,\n BabylonTxInfo,\n CAT20Balance,\n CAT20TokenInfo,\n CAT721CollectionInfo,\n CAT_VERSION,\n Inscription,\n RuneBalance,\n RuneInfo,\n TokenBalance,\n TokenInfo,\n ToSignData,\n WalletKeyring,\n} from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport React, { useContext } from 'react'\n\nexport type RouteParamList = {\n WelcomeScreen: undefined\n UnlockScreen: {\n autoUnlockByFace: boolean\n }\n CreatePasswordScreen: {\n isNewAccount?: boolean\n isKeystone?: boolean\n fromColdWallet?: boolean\n }\n\n MainScreen: undefined\n\n // tabs\n WalletTabScreen: undefined\n AppTabScreen: undefined\n TabMainScreen: undefined\n DiscoverTabScreen: undefined\n SettingsTabScreen: undefined\n\n // WALLET\n CreateHDWalletScreen: {\n restoreTiTle?: boolean\n topTitle?: boolean\n finalButton?: string\n existingMnemonic?: string\n isBackupFlow?: boolean\n\n isImport?: boolean\n comeFrom?: string\n fromUnlock?: boolean\n goBack?: boolean\n }\n CreateSimpleWalletScreen: undefined\n CreateWatchWalletScreen: undefined\n CreateReadonlyWalletScreen: undefined\n CreateColdWalletScreen: {\n fromUnlock?: boolean\n }\n CreateKeystoneWalletScreen: {\n fromUnlock?: boolean\n }\n\n EditWalletNameScreen: {\n keyring: WalletKeyring\n }\n ExportMnemonicsScreen: { keyring: WalletKeyring }\n ExportPrivateKeyScreen: {\n account: Account\n }\n SwitchAccountScreen: undefined\n ReceiveScreen: undefined\n HistoryScreen: undefined\n KeyringOrAccountScreen: undefined\n AddKeyringScreen: undefined\n ImportHDWalletScreen: {\n comeFrom?: string\n }\n CreateAccountScreen: {\n keyringKey?: string\n }\n CreateKeystoneScreen: {\n comeFrom?: string\n goBack?: boolean\n }\n EditAccountNameScreen: {\n account: Account\n }\n KeyringDetailScreen: {\n keyringKey?: string\n }\n\n // Settings\n ConnectedSitesScreen: undefined\n AddressTypeScreen: undefined\n AdvancedScreen: undefined\n ContactsScreen: {\n returnWithNetwork?: ChainType\n lastEditedContactAddress?: string\n }\n EditContactScreen: {\n address?: string\n chain?: string\n selectedNetworkFilter: string\n }\n AboutUsScreen: undefined\n LanguageScreen: undefined\n ChangePasswordScreen: undefined\n ModuleAssets: undefined\n NotificationListScreen: undefined\n\n // Tools\n UtxoToolsMainScreen: undefined\n ScanScreen: {\n from?: string\n }\n BrowserScreen: {\n info: any\n }\n\n // BTC\n TxCreateScreen: undefined\n\n // INSCRIPTIONS\n OrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n withSend?: boolean\n }\n SendOrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n }\n SplitOrdinalsInscriptionScreen: {\n inscription: Inscription\n inscriptionId?: string\n }\n\n // BRC20\n BRC20TokenScreen: {\n ticker: string\n tokenBalance?: TokenBalance\n }\n BRC20SendScreen: {\n tokenBalance: TokenBalance\n tokenInfo: TokenInfo\n selectedInscriptionIds?: string[]\n selectedAmount?: string\n }\n BRC20InscribeTransfer: {\n ticker: string\n }\n BRC20SingleStepScreen: {\n tokenBalance: TokenBalance\n tokenInfo: TokenInfo\n }\n InscribeTransferScreen: {\n ticker: string\n }\n\n // RUNES\n RunesTokenScreen: {\n runeid: string\n }\n SendRunesScreen: {\n runeBalance: RuneBalance\n runeInfo: RuneInfo\n }\n\n // Alkanes\n AlkanesTokenScreen: {\n alkaneid: string\n }\n SendAlkanesScreen: {\n tokenBalance: AlkanesBalance\n tokenInfo: AlkanesInfo\n }\n AlkanesCollectionScreen: {\n collectionId: string\n }\n AlkanesNFTScreen: {\n alkanesInfo: AlkanesInfo\n }\n SendAlkanesNFTScreen: {\n alkanesInfo: AlkanesInfo\n }\n\n // CAT\n CAT20TokenScreen: {\n tokenId: string\n version: CAT_VERSION\n }\n SendCAT20Screen: {\n version: CAT_VERSION\n cat20Balance: CAT20Balance\n cat20Info: CAT20TokenInfo\n }\n MergeCAT20Screen: {\n version: CAT_VERSION\n cat20Balance: CAT20Balance\n cat20Info: CAT20TokenInfo\n }\n CAT721CollectionScreen: {\n collectionId: string\n version: CAT_VERSION\n }\n CAT721NFTScreen: {\n version: CAT_VERSION\n collectionInfo: CAT721CollectionInfo\n localId: string\n }\n SendCAT721Screen: {\n version: CAT_VERSION\n collectionInfo: CAT721CollectionInfo\n localId: string\n }\n\n // Babylon\n BabylonTxConfirmScreen: {\n txInfo: BabylonTxInfo\n }\n BabylonStakingScreen: undefined\n SendBabyScreen: undefined\n\n // TX\n TxConfirmScreen: {\n toSignData: ToSignData\n }\n TxSuccessScreen: {\n txid: string\n }\n TxFailScreen: {\n error: string\n }\n}\n\nexport type RouteTypes = keyof RouteParamList\n\ntype NavigateArgs<T extends RouteTypes> = RouteParamList[T] extends undefined\n ? [screenName: T]\n : [screenName: T, params: RouteParamList[T]]\n\nexport interface NavigationContextType {\n navigate<T extends RouteTypes>(...args: NavigateArgs<T>): void\n\n replace<T extends RouteTypes>(...args: NavigateArgs<T>): void\n\n poptotop: () => void\n goBack: () => void\n navToTab: () => void\n navToTest: () => void\n navToLock: (params?: any) => void\n navToWelcome: () => void\n\n getRouteState<T extends RouteTypes>(): RouteParamList[T]\n\n navToUtxoTools: () => void\n navToUrl: (url: string, externalBrowser?: boolean) => void\n\n navToExplorerTx: (txid: string) => void\n navToExplorerAddress: (address: string) => void\n\n navToMarketPlace: () => void\n navToMarketPlaceBrc20: (ticker: string) => void\n navToInscribeBrc20: (ticker: string) => void\n\n openExtensionInTab?: () => void // in extension only\n navToRootHome: () => void // in extension only\n}\n\nconst initContext = {\n navigate: () => {},\n poptotop: () => {},\n goBack: () => {},\n replace: () => {},\n navToTab: () => {},\n navToTest: () => {},\n navToLock: () => {},\n navToWelcome: () => {},\n\n getRouteState<T>(): T {\n // todo\n return undefined as T\n },\n\n navToUtxoTools: () => {},\n\n navToUrl: (url: string, externalBrowser?: boolean) => {},\n navToExplorerTx: (txid: string) => {},\n navToExplorerAddress: (address: string) => {},\n\n navToMarketPlace: () => {},\n navToMarketPlaceBrc20: (ticker: string) => {},\n navToInscribeBrc20: (ticker: string) => {},\n\n // in extension only\n openExtensionInTab: () => {},\n navToRootHome: () => {},\n}\n\nexport const NavigationContext = React.createContext<NavigationContextType>(initContext)\n\nexport function useNavigation() {\n const ctx = useContext(NavigationContext)\n return ctx\n}\n","import React, { ReactNode, useCallback, useContext, useEffect, useState } from 'react'\n\nimport { CoinPrice } from '@unisat/wallet-shared'\nimport { useWallet } from './WalletContext'\n\nimport { useChain, useChainType } from '../hooks/settings'\n\ninterface PriceContextType {\n isLoadingCoinPrice: boolean\n coinPrice: CoinPrice\n refreshCoinPrice: () => void\n}\n\nconst PriceContext = React.createContext<PriceContextType>({} as PriceContextType)\n\nexport function usePrice() {\n const context = useContext(PriceContext)\n if (!context) {\n throw Error('Feature flag hooks can only be used by children of BridgeProvider.')\n } else {\n return context\n }\n}\n\nlet isRequestingCoinPrice = false\nlet refreshCoinPriceTime = 0\n\nexport function PriceProvider({ children }: { children: ReactNode }) {\n const wallet = useWallet()\n const chainType = useChainType()\n const chain = useChain()\n const [isLoadingCoinPrice, setIsLoadingCoinPrice] = useState(false)\n const [coinPrice, setCoinPrice] = useState<CoinPrice>({\n btc: 0,\n fb: 0,\n })\n\n const refreshCoinPrice = useCallback(() => {\n if (chain.showPrice === false) {\n return\n }\n if (isRequestingCoinPrice) {\n return\n }\n // 30s cache\n if (Date.now() - refreshCoinPriceTime < 30 * 1000) {\n return\n }\n isRequestingCoinPrice = true\n setIsLoadingCoinPrice(true)\n\n wallet\n .getCoinPrice()\n .then(res => {\n refreshCoinPriceTime = Date.now()\n setCoinPrice(res)\n })\n .catch(e => {\n setCoinPrice({\n btc: 0,\n fb: 0,\n })\n })\n .finally(() => {\n setIsLoadingCoinPrice(false)\n isRequestingCoinPrice = false\n })\n }, [chainType, chain])\n\n useEffect(() => {\n refreshCoinPrice()\n }, [refreshCoinPrice])\n\n const value = {\n isLoadingCoinPrice,\n coinPrice,\n refreshCoinPrice,\n }\n\n return <PriceContext.Provider value={value}>{children}</PriceContext.Provider>\n}\n","import React, { ReactNode, useContext } from 'react'\n\nimport { BabylonConfigV2 } from '@unisat/babylon-service/types'\n\nimport {\n Account,\n AddressAlkanesTokenSummary,\n AddressCAT20TokenSummary,\n AddressCAT20UtxoSummary,\n AddressCAT721CollectionSummary,\n AddressFlagType,\n AddressRunesTokenSummary,\n AddressSummary,\n AddressTokenSummary,\n AlkanesBalance,\n AlkanesCollection,\n AlkanesInfo,\n Announcement,\n AppInfo,\n AppExtra,\n AppSummary,\n BRC20HistoryItem,\n BabylonAddressSummary,\n BitcoinBalance,\n BitcoinBalanceV2,\n BtcChannelItem,\n CAT20Balance,\n CAT20MergeOrder,\n CAT721Balance,\n CoinPrice,\n ConnectedSite,\n CosmosBalance,\n CosmosSignDataType,\n DecodedPsbt,\n DummyTxType,\n FeeSummary,\n InscribeOrder,\n Inscription,\n InscriptionSummary,\n LocalPsbtSummary,\n RateUsStatus,\n RuneBalance,\n SignPsbtOptions,\n SignedData,\n SignedMessage,\n StoredNotification,\n TickPriceItem,\n ToSignData,\n ToSignInput,\n ToSignMessage,\n TokenBalance,\n TokenTransfer,\n TxHistoryItem,\n UTXO,\n UTXO_Detail,\n UnspentOutput,\n VersionDetail,\n WalletConfig,\n WalletKeyring,\n WebsiteResult,\n} from '@unisat/wallet-shared'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\n\ninterface ContactBookItem {\n name: string\n address: string\n chain: ChainType\n isAlias: boolean\n isContact: boolean\n sortIndex?: number\n}\ntype ContactBookStore = Record<string, ContactBookItem | undefined>\n\nexport interface WalletController {\n openapi: {\n [key: string]: (...params: any) => Promise<any>\n }\n // for development use only\n requestMethod: (...params: any) => Promise<any>\n\n setBackgroundInited(value: boolean): Promise<void>\n getBackgroundInited(): Promise<boolean>\n\n getDesc: () => string\n boot(password: string): Promise<void>\n isBooted(): Promise<boolean>\n\n getApproval(): Promise<any>\n resolveApproval(data?: any, data2?: any): Promise<void>\n rejectApproval(data?: any, data2?: any, data3?: any): Promise<void>\n\n hasVault(): Promise<boolean>\n\n verifyPassword(password: string): Promise<boolean>\n changePassword: (password: string, newPassword: string) => Promise<void>\n\n unlock(password: string): Promise<void>\n isUnlocked(): Promise<boolean>\n\n lockWallet(): Promise<void>\n setPopupOpen(isOpen: boolean): void\n isReady(): Promise<boolean>\n\n getIsFirstOpen(): Promise<boolean>\n updateIsFirstOpen(): Promise<void>\n\n getAddressBalanceV2(address: string): Promise<BitcoinBalanceV2>\n getAddressBalance(address: string): Promise<BitcoinBalance>\n getAddressCacheBalance(address: string): Promise<BitcoinBalance>\n getMultiAddressAssets(addresses: string): Promise<AddressSummary[]>\n findGroupAssets(\n groups: { type: number; address_arr: string[]; pubkey_arr: string[] }[]\n ): Promise<\n { type: number; address_arr: string[]; pubkey_arr: string[]; satoshis_arr: number[] }[]\n >\n\n getAddressInscriptions(\n address: string,\n cursor: number,\n size: number\n ): Promise<{ list: Inscription[]; total: number }>\n\n getAddressHistory: (params: {\n address: string\n start: number\n limit: number\n }) => Promise<{ start: number; total: number; detail: TxHistoryItem[] }>\n getAddressCacheHistory: (address: string) => Promise<TxHistoryItem[]>\n\n getLocale(): Promise<string>\n setLocale(locale: string): Promise<void>\n\n getCurrency(): Promise<string>\n setCurrency(currency: string): Promise<void>\n\n clearKeyrings(): Promise<void>\n getPrivateKey(\n password: string,\n account: { address: string; type: string }\n ): Promise<{ hex: string; wif: string }>\n getMnemonics(\n password: string,\n keyring: WalletKeyring\n ): Promise<{\n hdPath: string\n mnemonic: string\n passphrase: string\n }>\n createKeyringWithPrivateKey(\n data: string,\n addressType: AddressType,\n alianName?: string\n ): Promise<Account[]>\n getPreMnemonics(): Promise<any>\n generatePreMnemonic(): Promise<string>\n removePreMnemonics(): void\n createKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation?: boolean\n ): Promise<{ address: string; type: string }[]>\n createKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount: number,\n filterPubkey?: string[],\n connectionType?: 'USB' | 'QR'\n ): Promise<{ address: string; type: string }[]>\n createTmpKeyringWithPrivateKey(\n privateKey: string,\n addressType: AddressType\n ): Promise<WalletKeyring>\n createTmpKeyringWithKeystone(\n urType: string,\n urCbor: string,\n addressType: AddressType,\n hdPath: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n createKeyringWithColdWallet(\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ): Promise<WalletKeyring>\n\n deriveAccountsFromXpub(\n xpub: string,\n addressType: AddressType,\n hdPath?: string,\n accountCount?: number\n ): Promise<{ pubkey: string; address: string }[]>\n\n createTmpKeyringWithMnemonics(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount?: number,\n accountIndexDerivation?: boolean\n ): Promise<WalletKeyring>\n\n createTmpKeyringWithMnemonics2(\n mnemonic: string,\n passphrase: string,\n hdPaths: string[],\n addressTypes: AddressType[]\n ): Promise<WalletKeyring[]>\n\n createTmpKeyringWithMnemonicsScan(\n mnemonic: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation?: boolean\n ): Promise<WalletKeyring>\n\n removeKeyring(keyring: WalletKeyring): Promise<WalletKeyring>\n deriveNewAccountFromMnemonic(keyring: WalletKeyring, alianName?: string): Promise<string[]>\n getAccountsCount(): Promise<number>\n getAllAlianName: () => (ContactBookItem | undefined)[]\n getContactsByMap: () => ContactBookStore\n\n getCurrentAccount(): Promise<Account>\n getAccounts(): Promise<Account[]>\n getNextAlianName: (keyring: WalletKeyring) => Promise<string>\n\n getCurrentKeyringAccounts(): Promise<Account[]>\n\n signPsbtV2(toSignData: ToSignData): Promise<SignedData>\n\n signMessage(params: ToSignMessage): Promise<SignedMessage>\n\n createSendBTCPsbt(data: {\n to: string\n amount: number\n btcUtxos: UnspentOutput[]\n feeRate: number\n enableRBF?: boolean\n memo?: string\n memos?: string[]\n }): Promise<ToSignData>\n\n createSendAllBTCPsbt(data: {\n to: string\n btcUtxos: UnspentOutput[]\n feeRate: number\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n createSendInscriptionPsbt(data: {\n to: string\n inscriptionId: string\n feeRate: number\n outputValue?: number\n btcUtxos: UnspentOutput[]\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n createSendMultipleInscriptionsPsbt(data: {\n to: string\n inscriptionIds: string[]\n feeRate: number\n btcUtxos: UnspentOutput[]\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n createSplitInscriptionPsbt(data: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n btcUtxos: UnspentOutput[]\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n pushTx(rawtx: string): Promise<string>\n\n queryDomainInfo(domain: string): Promise<Inscription>\n\n getInscriptionSummary(): Promise<InscriptionSummary>\n getAppSummary(): Promise<AppSummary>\n getBTCUtxos(): Promise<UnspentOutput[]>\n getAssetUtxosInscriptions(inscriptionId: string): Promise<UnspentOutput[]>\n\n getNetworkType(): Promise<NetworkType>\n setNetworkType(type: NetworkType): Promise<void>\n\n getChainType(): Promise<ChainType>\n setChainType(type: ChainType): Promise<void>\n\n getConnectedSites(): Promise<ConnectedSite[]>\n removeConnectedSite(origin: string): Promise<void>\n getCurrentConnectedSite(id: string): Promise<ConnectedSite>\n updateConnectSite(origin: string, data: Partial<ConnectedSite>): Promise<void>\n\n getCurrentKeyring(): Promise<WalletKeyring>\n getKeyrings(): Promise<WalletKeyring[]>\n getTotalKeyringCount(): Promise<number>\n changeKeyring(keyring: WalletKeyring, accountIndex?: number): Promise<void>\n getAllAddresses(keyring: WalletKeyring, index: number): Promise<string[]>\n\n setKeyringAlianName(keyring: WalletKeyring, name: string): Promise<WalletKeyring>\n changeAddressType(addressType: AddressType): Promise<void>\n\n setAccountAlianName(account: Account, name: string): Promise<Account>\n getFeeSummary(): Promise<FeeSummary>\n getLowFeeSummary(): Promise<FeeSummary>\n getCoinPrice(): Promise<CoinPrice>\n getBrc20sPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getRunesPrice(ticks: string[]): Promise<{ [tick: string]: TickPriceItem }>\n getCAT20sPrice(tokenIds: string[]): Promise<{ [tokenId: string]: TickPriceItem }>\n getAlkanesPrice(alkaneid: string[]): Promise<{ [tick: string]: TickPriceItem }>\n\n setEditingKeyring(keyringIndex: number): Promise<void>\n getEditingKeyring(): Promise<WalletKeyring>\n\n setEditingAccount(account: Account): Promise<void>\n getEditingAccount(): Promise<Account>\n\n inscribeBRC20Transfer(\n address: string,\n tick: string,\n amount: string,\n feeRate: number,\n outputValue: number\n ): Promise<InscribeOrder>\n getInscribeResult(orderId: string): Promise<TokenTransfer>\n\n decodePsbt(psbtHex: string, website: string): Promise<DecodedPsbt>\n analyzeLocalPsbts(toSignDatas: ToSignData[]): Promise<LocalPsbtSummary>\n\n decodeContracts(contracts: any[], account: any): Promise<any[]>\n\n getAllInscriptionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20List({\n address,\n currentPage,\n pageSize,\n }: {\n address: string\n currentPage: number\n pageSize: number\n }): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20ProgList({\n address,\n currentPage,\n pageSize,\n }: {\n address: string\n currentPage: number\n pageSize: number\n }): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenBalance[] }>\n\n getBRC20TransferableList({\n address,\n ticker,\n tickerHex,\n currentPage,\n pageSize,\n }: {\n address: string\n ticker: string\n tickerHex: string\n currentPage: number\n pageSize: number\n }): Promise<{ currentPage: number; pageSize: number; total: number; list: TokenTransfer[] }>\n\n getOrdinalsInscriptions(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: Inscription[] }>\n\n getBRC20Summary({\n address,\n ticker,\n }: {\n address: string\n ticker: string\n }): Promise<AddressTokenSummary>\n\n expireUICachedData(address: string): Promise<void>\n\n getWalletConfig(): Promise<WalletConfig>\n\n getSkippedVersion(): Promise<string>\n setSkippedVersion(version: string): Promise<void>\n\n getInscriptionUtxoDetail(inscriptionId: string): Promise<UTXO_Detail>\n getUtxoByInscriptionId(inscriptionId: string): Promise<UTXO>\n getInscriptionInfo(inscriptionId: string): Promise<Inscription>\n\n checkWebsite(website: string): Promise<WebsiteResult>\n\n readTab(tabName: string): Promise<void>\n readApp(appid: number): Promise<void>\n\n formatOptionsToSignInputs(psbtHex: string, options?: SignPsbtOptions): Promise<ToSignInput[]>\n\n getAddressSummary(address: string): Promise<AddressSummary>\n\n getShowSafeNotice(): Promise<boolean>\n setShowSafeNotice(show: boolean): Promise<void>\n\n // address flag\n addAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n removeAddressFlag(account: Account, flag: AddressFlagType): Promise<Account>\n\n getVersionDetail(version: string): Promise<VersionDetail>\n\n genSignPsbtUr(psbtHex: string): Promise<{ type: string; cbor: string }>\n parseSignPsbtUr(\n type: string,\n cbor: string,\n isFinalize?: boolean\n ): Promise<{ psbtHex: string; rawtx?: string }>\n genSignMsgUr(\n text: string,\n msgType?: string\n ): Promise<{ type: string; cbor: string; requestId: string }>\n parseSignMsgUr(type: string, cbor: string, msgType: string): Promise<{ signature: string }>\n getKeystoneConnectionType(): Promise<'USB' | 'QR'>\n genSignCosmosUr(cosmosSignRequest: {\n requestId?: string\n signData: string\n dataType: CosmosSignDataType\n path: string\n chainId?: string\n accountNumber?: string\n address?: string\n }): Promise<{ type: string; cbor: string; requestId: string }>\n parseCosmosSignUr(type: string, cbor: string): Promise<any>\n\n cosmosSignData(\n chainId: string,\n signBytesHex: string\n ): Promise<{\n publicKey: string\n signature: string\n }>\n\n getEnableSignData(): Promise<boolean>\n setEnableSignData(enable: boolean): Promise<void>\n\n getRunesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: RuneBalance[] }>\n\n getAssetUtxosRunes(rune: string): Promise<UnspentOutput[]>\n\n getAddressRunesTokenSummary(address: string, runeid: string): Promise<AddressRunesTokenSummary>\n\n createSendRunesPsbt(data: {\n to: string\n runeid: string\n runeAmount: string\n feeRate: number\n btcUtxos?: UnspentOutput[]\n assetUtxos?: UnspentOutput[]\n outputValue?: number\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n setAutoLockTimeId(timeId: number): Promise<void>\n getAutoLockTimeId(): Promise<number>\n\n getDeveloperMode(): Promise<boolean>\n setDeveloperMode(developerMode: boolean): Promise<void>\n\n getCAT20List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT20Balance[] }>\n\n getAddressCAT20TokenSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20TokenSummary>\n\n getAddressCAT20UtxoSummary(\n version: 'v1' | 'v2',\n address: string,\n tokenId: string\n ): Promise<AddressCAT20UtxoSummary>\n\n transferCAT20Step1(\n version: 'v1' | 'v2',\n to: string,\n tokenId: string,\n tokenAmount: string,\n feeRate: number\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n transferCAT20Step2(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ toSignData: ToSignData }>\n transferCAT20Step3(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ txid: string }>\n\n mergeCAT20Prepare(\n version: 'v1' | 'v2',\n tokenId: string,\n utxoCount: number,\n feeRate: number\n ): Promise<CAT20MergeOrder>\n transferCAT20Step1ByMerge(\n version: 'v1' | 'v2',\n mergeId: string\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n getMergeCAT20Status(version: 'v1' | 'v2', mergeId: string): Promise<any>\n\n getAppList(): Promise<{ tab: string; items: AppInfo[] }[]>\n getAppExtra(id: string | number, locale?: string): Promise<AppExtra>\n getBannerList(): Promise<{ id: string; img: string; link: string }[]>\n getBlockActiveInfo(): Promise<{ allTransactions: number; allAddrs: number }>\n\n getCAT721List(\n version: 'v1' | 'v2',\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: CAT721Balance[] }>\n\n getAddressCAT721CollectionSummary(\n version: 'v1' | 'v2',\n address: string,\n collectionId: string\n ): Promise<AddressCAT721CollectionSummary>\n\n transferCAT721Step1(\n version: 'v1' | 'v2',\n to: string,\n collectionId: string,\n localId: string,\n feeRate: number\n ): Promise<{ id: string; feeRate: number; toSignData: ToSignData }>\n transferCAT721Step2(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ toSignData: ToSignData }>\n transferCAT721Step3(\n version: 'v1' | 'v2',\n transferId: string,\n psbtHex: string\n ): Promise<{ txid: string }>\n\n getBuyCoinChannelList(coin: string): Promise<BtcChannelItem[]>\n createBuyCoinPaymentUrl(coin: string, address: string, channel: string): Promise<string>\n\n getBabylonAddress(address: string): Promise<string>\n\n getBabylonAddressSummary(\n chainId: string,\n babylonConfig?: BabylonConfigV2\n ): Promise<BabylonAddressSummary>\n\n createSendTokenStep1(\n chainId: string,\n tokenBalance: CosmosBalance,\n to: string,\n memo: string,\n {\n gasLimit,\n gasPrice,\n gasAdjustment,\n }: {\n gasLimit: number\n gasPrice: string\n gasAdjustment?: number\n }\n ): Promise<string>\n createSendTokenStep2(chainId: string, signature: string): Promise<string>\n\n simulateBabylonGas(\n chainId: string,\n recipient: string,\n amount: { denom: string; amount: string },\n memo: string\n ): Promise<number>\n\n getBabylonConfig(): Promise<BabylonConfigV2>\n\n getContactByAddress(address: string): Promise<ContactBookItem | undefined>\n getContactByAddressAndChain(\n address: string,\n chain: ChainType\n ): Promise<ContactBookItem | undefined>\n updateContact(data: ContactBookItem): Promise<void>\n removeContact(address: string, chain?: ChainType): Promise<void>\n listContacts(): Promise<ContactBookItem[]>\n saveContactsOrder(contacts: ContactBookItem[]): Promise<void>\n\n singleStepTransferBRC20Step1(params: {\n userAddress: string\n userPubkey: string\n receiver: string\n ticker: string\n amount: string\n feeRate: number\n }): Promise<{\n orderId: string\n toSignData: ToSignData\n }>\n\n singleStepTransferBRC20Step2(params: { orderId: string; commitTx: string }): Promise<{\n toSignData: ToSignData\n }>\n\n singleStepTransferBRC20Step3(params: {\n orderId: string\n revealTx: string\n }): Promise<{ txid: string }>\n\n setLastActiveTime(): void\n\n getOpenInSidePanel(): Promise<boolean>\n setOpenInSidePanel(openInSidePanel: boolean): Promise<void>\n\n createSendBTCOffsetPsbt(\n tos: { address: string; satoshis: number }[],\n feeRate: number,\n enableRBF?: boolean\n ): Promise<ToSignData>\n\n getAlkanesList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; total: number; list: AlkanesBalance[] }>\n\n getAssetUtxosAlkanes(rune: string): Promise<UnspentOutput[]>\n\n getAddressAlkanesTokenSummary(\n address: string,\n alkaneid: string,\n fetchAvailable: boolean\n ): Promise<AddressAlkanesTokenSummary>\n\n createSendAlkanesPsbt(params: {\n to: string\n alkaneid: string\n amount: string\n feeRate: number\n type: 'ft' | 'nft'\n enableRBF?: boolean\n }): Promise<ToSignData>\n\n getAlkanesCollectionList(\n address: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ list: AlkanesCollection[]; total: number }>\n getAlkanesCollectionItems(\n address: string,\n collectionId: string,\n currentPage: number,\n pageSize: number\n ): Promise<{ currentPage: number; pageSize: number; list: AlkanesInfo[]; total: number }>\n\n getBRC20RecentHistory(address: string, ticker: string): Promise<BRC20HistoryItem[]>\n\n resetAllData(): Promise<void>\n\n getGuideReaded(): Promise<boolean>\n setGuideReaded(): Promise<void>\n\n getRateUsStatus(): Promise<RateUsStatus>\n\n setHasRated(hasRated: boolean): Promise<void>\n setRatePromptDismissedAt(timestamp: number | null): Promise<void>\n setHasShownSecondPrompt(hasShown: boolean): Promise<void>\n resetRateUsStatus(): Promise<void>\n getAnnouncements(\n cursor: number,\n size: number\n ): Promise<{\n hasMore: boolean\n list: Announcement[]\n }>\n\n getNotifications(): Promise<StoredNotification[]>\n readNotification(id: string): Promise<void>\n readAllNotifications(): Promise<void>\n deleteNotification(id: string): Promise<void>\n getNotificationUnreadCount(): Promise<number>\n\n getAcceptLowFeeMode(): Promise<boolean>\n setAcceptLowFeeMode(accept: boolean): Promise<void>\n getEnableRBF(): Promise<boolean>\n setEnableRBF(enableRBF: boolean): Promise<void>\n\n createTmpKeyringWithPublicKey(publicKey: string, addressType: AddressType): Promise<WalletKeyring>\n\n createKeyringWithPublicKey(data: string, addressType: AddressType): Promise<void>\n\n createTmpKeyringWithAddress(address: string): Promise<WalletKeyring>\n\n createKeyringWithAddress(address: string): Promise<void>\n\n createDummyPsbt(params: { txType: DummyTxType }): Promise<ToSignData>\n}\n\nconst WalletContext = React.createContext<{\n wallet: WalletController\n} | null>(null)\n\nconst WalletProvider = ({\n children,\n wallet,\n}: {\n children?: ReactNode\n wallet: WalletController\n}) => <WalletContext.Provider value={{ wallet }}>{children}</WalletContext.Provider>\n\nconst useWallet = () => {\n const { wallet } = useContext(WalletContext) as {\n wallet: WalletController\n }\n\n return wallet\n}\n\nexport { WalletProvider, useWallet }\n","import compareVersions from 'compare-versions'\nimport { useCallback } from 'react'\n\nimport { BABYLON_CONFIG_MAP } from '@unisat/babylon-service/types'\nimport { CAT_VERSION, CHAINS_MAP, PlatformEnv } from '@unisat/wallet-shared'\nimport { AddressType, ChainType, NetworkType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\nimport { getAddressType } from '../utils/bitcoin-utils'\n\nimport { useI18n } from 'src/context/I18nContext'\nimport { AppState } from '..'\nimport { useCurrentAccount } from '../hooks/accounts'\nimport { settingsActions } from '../reducers/settings'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useSettingsState(): AppState['settings'] {\n return useAppSelector(state => state.settings)\n}\n\nexport function useLocale() {\n const settings = useSettingsState()\n return settings.locale\n}\n\nexport function useChangeLocaleCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const i18n = useI18n()\n return useCallback(\n async (locale: string) => {\n await wallet.setLocale(locale)\n await i18n.addResourceBundle(locale)\n i18n.changeLocale(locale)\n dispatch(\n (settingsActions as any).updateSettings({\n locale,\n })\n )\n\n // @ts-ignore\n window.location.reload()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useNetworkType() {\n const accountsState = useSettingsState()\n const chain = CHAINS_MAP[accountsState.chainType]\n if (chain) {\n return chain.networkType\n } else {\n return NetworkType.TESTNET\n }\n}\n\nexport function useChangeNetworkTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: NetworkType) => {\n if (type === NetworkType.MAINNET) {\n await wallet.setChainType(ChainType.BITCOIN_MAINNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_MAINNET,\n })\n )\n } else if (type === NetworkType.TESTNET) {\n await wallet.setChainType(ChainType.BITCOIN_TESTNET)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: ChainType.BITCOIN_TESTNET,\n })\n )\n }\n },\n [dispatch]\n )\n}\n\nexport function useChainType() {\n const accountsState = useSettingsState()\n return accountsState.chainType\n}\n\nexport function useChain() {\n const accountsState = useSettingsState()\n return CHAINS_MAP[accountsState.chainType]\n}\n\nexport function useChangeChainTypeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (type: ChainType) => {\n await wallet.setChainType(type)\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: type,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useBTCUnit() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unit\n}\n\nexport function useTxExplorerUrl(txid: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n}\n\nexport function useGetTxExplorerUrlCallback() {\n const chain = useChain()!\n return useCallback(\n (txid: string) => {\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/tx/${txid}`\n } else {\n return `${chain.unisatExplorerUrl}/tx/${txid}`\n }\n },\n [chain]\n )\n}\n\nexport function useAddressExplorerUrl(address: string) {\n const chain = useChain()!\n if (chain.enum === ChainType.BITCOIN_MAINNET) {\n return `${chain.unisatExplorerUrl}/address/${address}`\n } else if (chain.defaultExplorer === 'mempool-space') {\n return `${chain.mempoolSpaceUrl}/address/${address}`\n } else {\n return `${chain.unisatExplorerUrl}/address/${address}`\n }\n}\n\nexport function useCAT20TokenInfoExplorerUrl(version: CAT_VERSION, tokenId: string) {\n const chain = useChain()!\n if (version === CAT_VERSION.V1) {\n return `${chain.unisatExplorerUrl}/cat20/${tokenId}`\n } else {\n return `${chain.unisatExplorerUrl}/cat20-v2/${tokenId}`\n }\n}\n\nexport function useBRC20TokenInfoExplorerUrl(ticker: string) {\n const chain = useChain()!\n return `${chain.unisatExplorerUrl}/brc20/${encodeURIComponent(ticker)}`\n}\n\nexport function useRunesTokenInfoExplorerUrl(runeId: string) {\n const chain = useChain()!\n return `${chain.unisatExplorerUrl}/runes/detail/${encodeURIComponent(runeId)}`\n}\n\nexport function useAlkanesTokenInfoExplorerUrl(alkaneId: string) {\n const chain = useChain()!\n return `${chain.unisatExplorerUrl}/alkanes/detail/${encodeURIComponent(alkaneId)}`\n}\n\nexport function useUnisatWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.unisatUrl\n}\n\nexport function useIconBaseUrl() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.iconBaseUrl\n}\n\nexport function useOrdinalsWebsite() {\n const chainType = useChainType()\n return CHAINS_MAP[chainType]!.ordinalsUrl\n}\n\nexport function useWalletConfig() {\n const accountsState = useSettingsState()\n return accountsState.walletConfig\n}\n\nexport function useVersionInfo() {\n const accountsState = useSettingsState()\n const walletConfig = accountsState.walletConfig\n const newVersion = walletConfig.version\n const skippedVersion = accountsState.skippedVersion\n const currentVesion = PlatformEnv.VERSION\n let skipped = false\n let latestVersion = ''\n // skip if new version is empty\n if (!newVersion) {\n skipped = true\n }\n\n // skip if skipped\n if (newVersion == skippedVersion) {\n skipped = true\n }\n\n // skip if current version is greater or equal to new version\n if (currentVesion && newVersion) {\n if (compareVersions(currentVesion, newVersion) >= 0) {\n skipped = true\n } else {\n latestVersion = newVersion\n }\n }\n\n // skip if current version is 0.0.0\n if (currentVesion === '0.0.0') {\n skipped = true\n }\n return {\n currentVesion,\n newVersion,\n latestVersion,\n skipped,\n downloadUrl: '',\n isNewest: false,\n }\n}\n\nexport function useSkipVersionCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n return useCallback((version: string) => {\n wallet.setSkippedVersion(version).then(v => {\n dispatch((settingsActions as any).updateSettings({ skippedVersion: version }))\n })\n }, [])\n}\n\nexport function useAutoLockTimeId() {\n const state = useSettingsState()\n return state.autoLockTimeId\n}\n\nexport function useAddressTips() {\n const chain = useChain()!\n const account = useCurrentAccount()\n const address = account.address\n const chanEnum = chain.enum\n const { t } = useI18n()\n let ret = {\n homeTip: '',\n sendTip: '',\n }\n try {\n const chain = CHAINS_MAP[chanEnum]!\n const addressType = getAddressType(address, chain.networkType)\n if (chain.isFractal && addressType === AddressType.P2PKH) {\n ret = {\n homeTip: t('legacy_address_warning_3'),\n sendTip: t('legacy_address_warning_4'),\n }\n }\n } catch (e) {\n console.log(e)\n }\n\n return ret\n}\n\nexport function useCAT721NFTContentBaseUrl(version: CAT_VERSION) {\n const chainType = useChainType()\n if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n if (version === CAT_VERSION.V1) {\n return 'https://tracker-fractal-mainnet.catprotocol.org'\n } else {\n return 'https://tracker2-fractal-mainnet.catprotocol.org'\n }\n } else if (chainType === ChainType.FRACTAL_BITCOIN_TESTNET) {\n return 'https://tracker-fractal-testnet.catprotocol.org'\n } else {\n return ''\n }\n}\n\nexport function useBabylonConfig() {\n const chainType = useChainType()\n return BABYLON_CONFIG_MAP[chainType] || BABYLON_CONFIG_MAP[ChainType.BITCOIN_MAINNET]\n}\n\nexport function useIsMainnetChain() {\n const chainType = useChainType()\n return chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n}\n\nexport function useDeveloperMode() {\n const settings = useSettingsState()\n return settings.developerMode\n}\n\nexport function useSetDeveloperModeCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (developerMode: boolean) => {\n await wallet.setDeveloperMode(developerMode)\n dispatch(\n (settingsActions as any).updateSettings({\n developerMode,\n })\n )\n },\n [dispatch, wallet]\n )\n}\n","import { addressUtils } from '@unisat/base-utils'\nimport { AddressType, NetworkType } from '@unisat/wallet-types'\nimport * as bip39 from 'bip39'\nexport function getAddressType(address: string, networkType?: NetworkType) {\n if (address.startsWith('bc1q') || address.startsWith('tb1q')) {\n return AddressType.P2WPKH\n } else if (address.startsWith('bc1p') || address.startsWith('tb1p')) {\n return AddressType.P2TR\n } else if (address.startsWith('1') || address.startsWith('m') || address.startsWith('n')) {\n return AddressType.P2PKH\n } else if (address.startsWith('3') || address.startsWith('2')) {\n return AddressType.P2SH_P2WPKH\n } else {\n return AddressType.UNKNOWN\n }\n}\n\nexport function isValidAddress(address: string, networkType?: NetworkType) {\n return addressUtils.isAddressLikelyValid(address)\n}\n\nexport function getAddressUtxoDust(address: string) {\n const addressType = getAddressType(address)\n if (addressType === AddressType.P2WPKH) {\n if (address.length === 42) {\n return 294\n } else {\n return 330\n }\n } else if (addressType === AddressType.P2TR) {\n return 330\n } else {\n return 546\n }\n}\n\nexport function isValidHdPath(path: string): boolean {\n if (!path || typeof path !== 'string') {\n return false\n }\n\n // HD path should start with 'm' or 'M'\n if (!path.startsWith('m') && !path.startsWith('M')) {\n return false\n }\n\n // Split by '/' and validate each component\n const components = path.split('/')\n\n // First component should be 'm' or 'M'\n if (components[0] !== 'm' && components[0] !== 'M') {\n return false\n }\n\n // Validate each path component after 'm'\n for (let i = 1; i < components.length; i++) {\n const component = components[i]\n\n if (!component) {\n return false\n }\n\n // Check if it's a hardened path (ends with ')\n const isHardened = component.endsWith(\"'\")\n const numberPart = isHardened ? component.slice(0, -1) : component\n\n // Check if the number part is a valid integer\n if (!/^\\d+$/.test(numberPart)) {\n return false\n }\n\n const num = parseInt(numberPart, 10)\n\n // Check if number is within valid range (0 to 2^31-1)\n if (num < 0 || num >= Math.pow(2, 31)) {\n return false\n }\n }\n\n return true\n}\n\nexport function validateMnemonic(mnemonic: string): boolean {\n // do not use bip39.validateMnemonic here to reduce bundle size\n // const words = mnemonic.trim().split(/\\s+/);\n // const wordCount = words.length;\n // return [12, 15, 18, 21, 24].includes(wordCount);\n\n return bip39.validateMnemonic(mnemonic)\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { Account, getAccountCapabilities } from '@unisat/wallet-shared'\n\nimport { KeyringType } from '@unisat/keyring-service/types'\nimport { AddressType, ChainType } from '@unisat/wallet-types'\n\nimport { AppState } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { accountActions } from '../reducers/accounts'\nimport { keyringsActions } from '../reducers/keyrings'\nimport { settingsActions } from '../reducers/settings'\nimport { useAppDispatch, useAppSelector } from './base'\nimport { useCurrentKeyring } from './keyrings'\n\nexport function useAccountsState(): AppState['accounts'] {\n return useAppSelector(state => state.accounts)\n}\n\nexport function useCurrentAccount() {\n const accountsState = useAccountsState()\n return accountsState.current\n}\n\nexport function useCurrentAddress() {\n const accountsState = useAccountsState()\n return accountsState.current.address\n}\n\nexport function useCurrentAccountCapabilities() {\n const currentAccount = useCurrentAccount()\n return useMemo(() => getAccountCapabilities(currentAccount), [currentAccount])\n}\n\nexport function useAccounts() {\n const accountsState = useAccountsState()\n return accountsState.accounts\n}\n\nexport function useAccountBalance() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return (\n accountsState.balanceV2Map[currentAccount.address] || {\n availableBalance: 0,\n unavailableBalance: 0,\n totalBalance: 0,\n chainType: ChainType.BITCOIN_MAINNET,\n }\n )\n}\n\nexport function useAddressSummary() {\n const accountsState = useAccountsState()\n return accountsState.addressSummary\n}\n\nexport function useAccountInscriptions() {\n const accountsState = useAccountsState()\n const currentAccount = useCurrentAccount()\n return accountsState.inscriptionsMap[currentAccount.address] || { list: [], expired: true }\n}\n\nexport function useInscriptionSummary() {\n const accountsState = useAccountsState()\n return accountsState.inscriptionSummary\n}\n\nexport function useAppSummary() {\n const accountsState = useAccountsState()\n return accountsState.appSummary\n}\n\nexport function useUnreadAppSummary() {\n const accountsState = useAccountsState()\n const summary = accountsState.appSummary\n return summary.apps.find(w => w.time && summary.readTabTime && w.time > summary.readTabTime)\n}\n\nexport function useReadTab() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (name: 'app' | 'home' | 'settings') => {\n await wallet.readTab(name)\n if (name == 'app') {\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n }\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useReadApp() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const appSummary = useAppSummary()\n return useCallback(\n async (id: number) => {\n await wallet.readApp(id)\n const appSummary = await wallet.getAppSummary()\n dispatch(accountActions['setAppSummary']!(appSummary))\n },\n [dispatch, wallet, appSummary]\n )\n}\n\nexport function useHistory() {\n const accountsState = useAccountsState()\n const address = useAccountAddress()\n return accountsState.historyMap[address] || { list: [], expired: true }\n}\n\nexport function useAccountAddress() {\n const currentAccount = useCurrentAccount()\n return currentAccount.address\n}\n\nexport function useSetCurrentAccountCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (account: Account) => {\n dispatch(accountActions['setCurrent']!(account))\n },\n [dispatch]\n )\n}\n\nexport function useImportAccountCallback() {\n const wallet = useWallet()\n const dispatch = useAppDispatch()\n const currentKeyring = useCurrentKeyring()\n return useCallback(\n async (privateKey: string, addressType: AddressType) => {\n let success = false\n let error\n try {\n const alianName = await wallet.getNextAlianName(currentKeyring)\n await wallet.createKeyringWithPrivateKey(privateKey, addressType, alianName)\n const currentAccount = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(currentAccount))\n\n success = true\n } catch (e) {\n console.log(e)\n error = (e as any).message\n }\n return { success, error }\n },\n [dispatch, wallet, currentKeyring]\n )\n}\n\nexport function useChangeAddressFlagCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n return useCallback(\n async (isAdd: boolean, flag: number) => {\n const account = isAdd\n ? await wallet.addAddressFlag(currentAccount, flag)\n : await wallet.removeAddressFlag(currentAccount, flag)\n dispatch(accountActions['setCurrentAddressFlag']!(account.flag))\n },\n [dispatch, wallet, currentAccount]\n )\n}\n\n// export function useFetchHistoryCallback() {\n// const dispatch = useAppDispatch();\n// const wallet = useWallet();\n// const address = useAccountAddress();\n// return useCallback(async () => {\n// const _accountHistory = await wallet.getAddressHistory(address);\n// dispatch(\n// accountActions.setHistory({\n// address: address,\n// list: _accountHistory\n// })\n// );\n// }, [dispatch, wallet, address]);\n// }\n\nexport function useFetchBalanceCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const balance = useAccountBalance()\n return useCallback(async () => {\n if (!currentAccount.address) return\n // const cachedBalance = await wallet.getAddressCacheBalance(currentAccount.address);\n // const _accountBalance = await wallet.getAddressBalance(currentAccount.address);\n // dispatch(\n // accountActions.setBalance({\n // address: currentAccount.address,\n // amount: _accountBalance.amount,\n // btc_amount: _accountBalance.btc_amount,\n // inscription_amount: _accountBalance.inscription_amount,\n // confirm_btc_amount: _accountBalance.confirm_btc_amount,\n // pending_btc_amount: _accountBalance.pending_btc_amount\n // })\n // );\n // if (cachedBalance.amount !== _accountBalance.amount) {\n // wallet.expireUICachedData(currentAccount.address);\n // dispatch(accountActions.expireHistory());\n // }\n\n const summary = await wallet.getAddressSummary(currentAccount.address)\n summary.address = currentAccount.address\n dispatch(accountActions['setAddressSummary']!(summary))\n\n const balanceV2 = await wallet.getAddressBalanceV2(currentAccount.address)\n dispatch(\n accountActions['setBalanceV2']!({\n address: currentAccount.address,\n balance: balanceV2,\n chainType: balanceV2.chainType,\n })\n )\n }, [dispatch, wallet, currentAccount, balance])\n}\n\nexport function useReloadAccounts() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(async () => {\n const keyrings = await wallet.getKeyrings()\n dispatch(keyringsActions['setKeyrings']!(keyrings))\n\n const currentKeyring = await wallet.getCurrentKeyring()\n dispatch(keyringsActions['setCurrent']!(currentKeyring))\n\n const _accounts = await wallet.getAccounts()\n dispatch(accountActions['setAccounts']!(_accounts))\n\n const account = await wallet.getCurrentAccount()\n dispatch(accountActions['setCurrent']!(account))\n\n dispatch(accountActions['expireBalance']!(null))\n dispatch(accountActions['expireInscriptions']!(null))\n\n wallet.getWalletConfig().then(data => {\n dispatch(settingsActions['updateSettings']!({ walletConfig: data }))\n })\n }, [dispatch, wallet])\n}\n\nexport function useIsKeystoneWallet() {\n const currentKeyring = useCurrentKeyring()\n return currentKeyring.type === KeyringType.KeystoneKeyring\n}\nexport function useModelPopover() {\n const modelState = useAccountsState()\n return modelState.molelsPopover\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux'\n\nimport { AppDispatch, AppState } from '../index'\n\nexport const useAppDispatch = () => useDispatch<AppDispatch>()\nexport const useAppSelector: TypedUseSelectorHook<AppState> = useSelector\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useKeyringsState(): AppState['keyrings'] {\n return useAppSelector(state => state.keyrings)\n}\n\nexport function useKeyrings() {\n const keyringsState = useKeyringsState()\n return keyringsState.keyrings\n}\n\nexport function useCurrentKeyring() {\n const keyringsState = useKeyringsState()\n return keyringsState.current\n}\n","/* eslint-disable indent */\nimport { VersionDetail } from '@unisat/wallet-shared'\nimport React, { useContext } from 'react'\n\nenum StorageType {\n ENABLE_FACEID = 'FACEIDDEFAULT',\n AUTO_LOCK_TIME = 'AutomaticLockTime',\n ENABLE_EXPLORE = 'ENABLE_EXPLORE',\n UTXO_MANAGE_VISITED = 'UTXO_MANAGE_VISITED',\n BALANCE_HIDDEN = 'HIDE_BALANCE',\n ANNOUNCEMENT_DISMISSED_IDS_KEY = '@announcement_dismissed_ids',\n\n I18N_SAVED_LANG = 'i18nextLng',\n\n WEB_SEARCH_HISTORY = 'historyList',\n WEB_RISK_WARNING = 'RiskWarning',\n\n UNBACKUP_KEYRINGS = 'unbackedup_keyrings',\n\n VERSION_DETAIL = 'version_detail',\n\n THEME_MODE = 'PREFERENCES',\n}\n\ntype AutoLockTime = {\n id: number\n time: number\n label: string\n}\n\ntype WebSearchHistoryItem = string\n\ntype WebRiskWarningItem = {\n url: string\n}\n\nconst defaultVersionDetail: VersionDetail = {\n version: '',\n title: '',\n changelogs: [],\n notice: '',\n}\n\ntype ThemeMode = 'light' | 'dark'\nconst defaultThemeMode = 'light'\n\nexport interface BaseStorageProvider {\n // storage should json.parse value after get\n get: (key: string) => Promise<any>\n\n // storage should json.stringify value before set\n set: (key: string, value: any) => Promise<void>\n}\n\nexport interface StorageContextType {\n get: (key: string) => Promise<string>\n set: (key: string, value: string) => Promise<void>\n clear: () => Promise<void>\n\n getAutomaticLockTime: () => Promise<AutoLockTime>\n clearAutomaticLockTime: () => Promise<void>\n\n getAnnouncementDismissedIds: () => Promise<string[]>\n setAnnouncementDismissedIds: (ids: string[]) => Promise<void>\n clearAnnouncementDismissedIds: () => Promise<void>\n\n getI18nSavedLang: () => Promise<string>\n setI18nSavedLang: (lang: string) => Promise<void>\n clearI18nSavedLang: () => Promise<void>\n\n getWebSearchHistory: () => Promise<WebSearchHistoryItem[]>\n setWebSearchHistory: (history: WebSearchHistoryItem[]) => Promise<void>\n clearWebSearchHistory: () => Promise<void>\n\n getWebRiskWarning: () => Promise<WebRiskWarningItem[]>\n setWebRiskWarning: (warnings: WebRiskWarningItem[]) => Promise<void>\n clearWebRiskWarning: () => Promise<void>\n\n getEnableExplore: () => Promise<boolean>\n setEnableExplore: (enable: boolean) => Promise<void>\n clearEnableExplore: () => Promise<void>\n\n getUnbackupKeyringIds: () => Promise<string[]>\n setUnbackupKeyringIds: (keyrings: string[]) => Promise<void>\n clearUnbackupKeyringIds: () => Promise<void>\n\n getEnableFaceId: () => Promise<boolean>\n setEnableFaceId: (enable: boolean) => Promise<void>\n clearEnableFaceId: () => Promise<void>\n\n getBalanceHidden: () => Promise<boolean>\n setBalanceHidden: (enable: boolean) => Promise<void>\n clearBalanceHidden: () => Promise<void>\n\n getVersionDetail: () => Promise<VersionDetail>\n setVersionDetail: (detail: VersionDetail) => Promise<void>\n clearVersionDetail: () => Promise<void>\n\n getThemeMode: () => Promise<string>\n setThemeMode: (mode: string) => Promise<void>\n clearThemeMode: () => Promise<void>\n\n getUtxoManageVisited: () => Promise<boolean>\n setUtxoManageVisited: () => Promise<void>\n clearUtxoManageVisited: () => Promise<void>\n}\n\nconst defaultContext: StorageContextType = {\n async get(key: string) {\n return ''\n },\n async set(key: string, content: string) {},\n\n async clear() {},\n\n async getAutomaticLockTime() {\n return null\n },\n async clearAutomaticLockTime() {},\n\n async getAnnouncementDismissedIds() {\n return []\n },\n async setAnnouncementDismissedIds(ids: string[]) {},\n async clearAnnouncementDismissedIds() {},\n\n async getI18nSavedLang() {\n return ''\n },\n async setI18nSavedLang(lang: string) {},\n async clearI18nSavedLang() {},\n\n async getWebSearchHistory() {\n return []\n },\n async setWebSearchHistory(history: WebSearchHistoryItem[]) {},\n async clearWebSearchHistory() {},\n\n async getWebRiskWarning() {\n return []\n },\n async setWebRiskWarning(warnings: WebRiskWarningItem[]) {},\n async clearWebRiskWarning() {},\n\n async getEnableExplore() {\n return false\n },\n async setEnableExplore(enable: boolean) {},\n async clearEnableExplore() {},\n\n async getUnbackupKeyringIds() {\n return []\n },\n async setUnbackupKeyringIds(keyringIds: string[]) {},\n async clearUnbackupKeyringIds() {},\n\n async getEnableFaceId() {\n return false\n },\n async setEnableFaceId(enable: boolean) {},\n async clearEnableFaceId() {},\n\n async getBalanceHidden() {\n return false\n },\n async setBalanceHidden(enable) {},\n async clearBalanceHidden() {},\n\n async getVersionDetail() {\n return defaultVersionDetail\n },\n async setVersionDetail(detail: VersionDetail) {},\n async clearVersionDetail() {},\n\n async getThemeMode() {\n return defaultThemeMode\n },\n async setThemeMode(mode: string) {},\n async clearThemeMode() {},\n\n async getUtxoManageVisited() {\n return false\n },\n async setUtxoManageVisited() {},\n async clearUtxoManageVisited() {},\n}\n\nfunction legacyParseObjectValue(val: any) {\n let parsedObj = null\n if (val && typeof val !== 'string') {\n return val\n }\n\n if (typeof val === 'string' && val.length > 0) {\n try {\n parsedObj = JSON.parse(val)\n } catch (e) {\n parsedObj = null\n }\n }\n\n // legacy double stringify\n val = parsedObj\n if (val && typeof val === 'string' && val.length > 0) {\n try {\n parsedObj = JSON.parse(val)\n } catch (e) {\n parsedObj = null\n }\n }\n\n return parsedObj\n}\n\nfunction isLegacyStringifiedObject(val: any) {\n if (typeof val === 'string' && val.length > 0) {\n try {\n const parsedObj = JSON.parse(val)\n if (parsedObj && typeof parsedObj === 'string' && parsedObj.length > 0) {\n try {\n JSON.parse(parsedObj)\n return true\n } catch (e) {\n return false\n }\n }\n } catch (e) {\n return false\n }\n }\n return false\n}\n\nexport function createStorageProvider(base: BaseStorageProvider): StorageContextType {\n const funcs = {\n ...base,\n\n async getAutomaticLockTime(): Promise<AutoLockTime | null> {\n const val = await base.get(StorageType.AUTO_LOCK_TIME)\n return legacyParseObjectValue(val)\n },\n async clearAutomaticLockTime() {\n await base.set(StorageType.AUTO_LOCK_TIME, null)\n },\n\n async getAnnouncementDismissedIds(): Promise<string[]> {\n const val = await base.get(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY)\n return legacyParseObjectValue(val) || []\n },\n async setAnnouncementDismissedIds(ids: string[]) {\n await base.set(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY, ids)\n },\n async clearAnnouncementDismissedIds() {\n await base.set(StorageType.ANNOUNCEMENT_DISMISSED_IDS_KEY, [])\n },\n\n async getI18nSavedLang() {\n const val = await base.get(StorageType.I18N_SAVED_LANG)\n return val || ''\n },\n async setI18nSavedLang(lang: string) {\n await base.set(StorageType.I18N_SAVED_LANG, lang)\n },\n async clearI18nSavedLang() {\n await base.set(StorageType.I18N_SAVED_LANG, '')\n },\n\n async getWebSearchHistory(): Promise<WebSearchHistoryItem[]> {\n const val = await base.get(StorageType.WEB_SEARCH_HISTORY)\n return legacyParseObjectValue(val) || []\n },\n async setWebSearchHistory(history: WebSearchHistoryItem[]) {\n await base.set(StorageType.WEB_SEARCH_HISTORY, history)\n },\n async clearWebSearchHistory() {\n await base.set(StorageType.WEB_SEARCH_HISTORY, [])\n },\n\n async getWebRiskWarning(): Promise<WebRiskWarningItem[]> {\n const val = await base.get(StorageType.WEB_RISK_WARNING)\n return legacyParseObjectValue(val) || []\n },\n async setWebRiskWarning(warnings: WebRiskWarningItem[]) {\n await base.set(StorageType.WEB_RISK_WARNING, warnings)\n },\n async clearWebRiskWarning() {\n await base.set(StorageType.WEB_RISK_WARNING, [])\n },\n\n async getEnableExplore() {\n const val = await base.get(StorageType.ENABLE_EXPLORE)\n return val === 'true'\n },\n async setEnableExplore(enable: boolean) {\n await base.set(StorageType.ENABLE_EXPLORE, String(enable))\n },\n async clearEnableExplore() {\n await base.set(StorageType.ENABLE_EXPLORE, 'false')\n },\n\n async getUnbackupKeyringIds(): Promise<string[]> {\n const val = await base.get(StorageType.UNBACKUP_KEYRINGS)\n return legacyParseObjectValue(val) || []\n },\n async setUnbackupKeyringIds(keyringIds: string[]) {\n await base.set(StorageType.UNBACKUP_KEYRINGS, keyringIds)\n },\n async clearUnbackupKeyringIds() {\n await base.set(StorageType.UNBACKUP_KEYRINGS, [])\n },\n\n //\n async getEnableFaceId() {\n const val = await base.get(StorageType.ENABLE_FACEID)\n return val === 'true' || val == true\n },\n async setEnableFaceId(enable: boolean) {\n await base.set(StorageType.ENABLE_FACEID, String(enable))\n },\n async clearEnableFaceId() {\n await base.set(StorageType.ENABLE_FACEID, 'false')\n },\n\n async getBalanceHidden() {\n const val = await base.get(StorageType.BALANCE_HIDDEN)\n return val === 'true'\n },\n async setBalanceHidden(enable: boolean) {\n await base.set(StorageType.BALANCE_HIDDEN, String(enable))\n },\n async clearBalanceHidden() {\n await base.set(StorageType.BALANCE_HIDDEN, 'false')\n },\n\n async getVersionDetail() {\n const val = await base.get(StorageType.VERSION_DETAIL)\n return legacyParseObjectValue(val) || defaultVersionDetail\n },\n async setVersionDetail(detail: VersionDetail) {\n await base.set(StorageType.VERSION_DETAIL, detail)\n },\n async clearVersionDetail() {\n await base.set(StorageType.VERSION_DETAIL, defaultVersionDetail)\n },\n\n async getThemeMode() {\n const val = await base.get(StorageType.THEME_MODE)\n return val || defaultThemeMode\n },\n async setThemeMode(mode: string) {\n await base.set(StorageType.THEME_MODE, mode)\n },\n async clearThemeMode() {\n await base.set(StorageType.THEME_MODE, defaultThemeMode)\n },\n\n async getUtxoManageVisited() {\n const val = await base.get(StorageType.UTXO_MANAGE_VISITED)\n return val === 'true'\n },\n async setUtxoManageVisited() {\n await base.set(StorageType.UTXO_MANAGE_VISITED, 'true')\n },\n async clearUtxoManageVisited() {\n await base.set(StorageType.UTXO_MANAGE_VISITED, 'false')\n },\n }\n\n return {\n ...funcs,\n async clear() {\n await funcs.clearAutomaticLockTime()\n await funcs.clearAnnouncementDismissedIds()\n await funcs.clearI18nSavedLang()\n await funcs.clearWebSearchHistory()\n await funcs.clearWebRiskWarning()\n await funcs.clearEnableExplore()\n await funcs.clearUnbackupKeyringIds()\n await funcs.clearEnableFaceId()\n await funcs.clearBalanceHidden()\n await funcs.clearVersionDetail()\n await funcs.clearThemeMode()\n await funcs.clearUtxoManageVisited()\n },\n }\n}\n\nexport const StorageContext = React.createContext<StorageContextType>(defaultContext)\n\nexport function useStorage() {\n const ctx = useContext(StorageContext)\n return ctx\n}\n","/* eslint-disable indent */\nimport React, { useCallback, useContext, useRef, useState } from 'react'\n\ntype ToastFunction = (content: string) => void\ntype LoadingFunction = (visible: boolean, content?: string) => void\n\nexport interface ToolsContextType {\n toast: ToastFunction\n toastSuccess: ToastFunction\n toastError: ToastFunction\n toastWarning: ToastFunction\n showLoading: LoadingFunction\n showTip: ToastFunction\n copyToClipboard: (text: string) => void\n openUrl: (url: string) => void\n}\n\nconst initContext = {\n toast: (content: string) => {\n // todo\n },\n toastSuccess: (content: string) => {\n // todo\n },\n toastError: (content: string) => {\n // todo\n },\n toastWarning: (content: string) => {\n // todo\n },\n showLoading: () => {\n // todo\n },\n showTip: (content: string) => {\n // todo\n },\n copyToClipboard: (text: string) => {\n // todo\n },\n openUrl(url: string) {\n // todo\n },\n}\n\nexport const ToolsContext = React.createContext<ToolsContextType>(initContext)\n\nexport function useTools() {\n const ctx = useContext(ToolsContext)\n return ctx\n}\n","import { AppState } from '..'\nimport { useAppSelector } from './base'\n\nexport function useDiscoveryState(): AppState['discovery'] {\n return useAppSelector(state => state.discovery)\n}\n\nexport function useAppList() {\n const state = useDiscoveryState()\n return state.appList\n}\n\nexport function useBannerList() {\n const state = useDiscoveryState()\n return state.bannerList\n}\n\nexport function useLastFetchInfo() {\n const state = useDiscoveryState()\n return {\n lastFetchTime: state.lastFetchTime,\n lasfFetchChainType: state.lastFetchChainType,\n }\n}\n\nexport function useHasNewBanner() {\n const state = useDiscoveryState()\n return state.hasNewBanner\n}\n","import { useCallback } from 'react'\n\nimport { AddressType } from '@unisat/wallet-types'\n\nimport { AppState, useApproval, useNavigation } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { globalActions } from '../reducers/global'\nimport { TabOption } from '../types'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useGlobalState(): AppState['global'] {\n return useAppSelector(state => state.global)\n}\n\nexport function useTab() {\n const globalState = useGlobalState()\n return globalState.tab\n}\n\nexport function useScreenState() {\n const globalState = useGlobalState()\n return globalState.screenState\n}\n\nexport function useUpdateScreenStateCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (screenState: Partial<AppState['global']['screenState']>) => {\n dispatch(\n globalActions['updateScreenState']!({\n screenState,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useSetTabCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (tab: TabOption) => {\n dispatch(\n globalActions['update']!({\n tab,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useBooted() {\n const globalState = useGlobalState()\n return globalState.isBooted\n}\n\nexport function useIsUnlocked() {\n const globalState = useGlobalState()\n return globalState.isUnlocked\n}\n\nexport function useIsReady() {\n const globalState = useGlobalState()\n return globalState.isReady\n}\n\nexport function useIsRefresh() {\n const globalState = useGlobalState()\n return globalState.isRefresh\n}\n\nexport function useBackRefresh() {\n const globalState = useGlobalState()\n return globalState.backRefresh\n}\n\nexport function useWallRefresh() {\n const globalState = useGlobalState()\n return globalState.wallRefresh\n}\n\nexport function useWallTabRefresh() {\n const globalState = useGlobalState()\n return globalState.wallTabRefresh\n}\n\nexport function useWallTabFocusRefresh() {\n const globalState = useGlobalState()\n return globalState.wallTabFocusRefresh\n}\n\nexport function useGoBackRefresh() {\n const globalState = useGlobalState()\n return globalState.goBackRefresh\n}\n\nexport function useLayerState() {\n const globalState = useGlobalState()\n return globalState.layerState\n}\n\nexport function useUnlockRefresh() {\n const globalState = useGlobalState()\n return globalState.unlockRefres\n}\n\nexport function useUnlockRead() {\n const globalState = useGlobalState()\n return globalState.unlockRead\n}\nexport function useIsUnlockTimeRefres() {\n const globalState = useGlobalState()\n return globalState.isUnlockTimeRefres\n}\n\nexport function useInfiniteListScrollOffset() {\n const globalState = useGlobalState()\n return globalState.infiniteListScrollOffset\n}\n\nexport function useInfiniteListScrollState() {\n const globalState = useGlobalState()\n return {\n offset: globalState.infiniteListScrollOffset,\n direction: globalState.infiniteListScrollDirection,\n activeTime: globalState.infiniteListScrollActiveTime,\n }\n}\n\nexport function useIsScrollViewTop() {\n const globalState = useGlobalState()\n return globalState.isScrollViewTop\n}\n\nexport function useIsScrollViewBot() {\n const globalState = useGlobalState()\n return globalState.isScrollViewBot\n}\n\nexport function useIsBiometricsSupported() {\n const globalState = useGlobalState()\n return globalState.isBiometricsSupported\n}\n\nexport function useHasBiometricsKey() {\n const globalState = useGlobalState()\n return globalState.hasBiometricsKey\n}\n\nexport function useSwitchChainModalVisible() {\n const globalState = useGlobalState()\n return globalState.switchChainModalVisible\n}\n\nexport function useSetLockedOverlayVisibleCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (visible: boolean) => {\n dispatch(\n globalActions['update']!({\n isLockedOverlayVisible: visible,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useLockedOverlayVisible() {\n const globalState = useGlobalState()\n return globalState.isLockedOverlayVisible\n}\n\nexport function useLockCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const navigation = useNavigation()\n return useCallback(async () => {\n dispatch(globalActions.update({ isLockedOverlayVisible: true }))\n await wallet.lockWallet()\n const isBooted = await wallet.isBooted()\n const isUnlocked = await wallet.isUnlocked()\n dispatch(globalActions.update({ isUnlocked: false }))\n\n setTimeout(() => {\n dispatch(globalActions.update({ isLockedOverlayVisible: false }))\n }, 300)\n\n if (!isBooted) {\n navigation.navToWelcome()\n return\n }\n\n if (!isUnlocked && !isBooted) {\n navigation.navToWelcome()\n return\n }\n\n if (!isUnlocked && isBooted) {\n navigation.navToLock({ autoUnlockByFace: false })\n return\n }\n const currentAccount = await wallet.getCurrentAccount()\n if (!currentAccount) {\n navigation.navToWelcome()\n }\n }, [dispatch, wallet])\n}\n\nexport function useUnlockCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const { resolveApproval } = useApproval()\n return useCallback(\n async (password: string) => {\n await wallet.unlock(password)\n dispatch(globalActions.update({ isUnlocked: true }))\n resolveApproval()\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateAccountCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n mnemonics: string,\n hdPath: string,\n passphrase: string,\n addressType: AddressType,\n accountCount: number,\n accountIndexDerivation = false\n ) => {\n await wallet.createKeyringWithMnemonics(\n mnemonics,\n hdPath,\n passphrase,\n addressType,\n accountCount,\n accountIndexDerivation\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useImportAccountsFromKeystoneCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n urType: string,\n urCbor: string,\n addressType: AddressType,\n accountCount: number,\n hdPath: string,\n filterPubkey?: string[],\n connectionType: 'USB' | 'QR' = 'USB'\n ) => {\n await wallet.createKeyringWithKeystone(\n urType,\n urCbor,\n addressType,\n hdPath,\n accountCount,\n filterPubkey,\n connectionType\n )\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n\nexport function useCreateColdWalletCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n return useCallback(\n async (\n xpub: string,\n addressType: AddressType,\n alianName?: string,\n hdPath?: string,\n accountCount?: number\n ) => {\n await wallet.createKeyringWithColdWallet(xpub, addressType, alianName, hdPath, accountCount)\n dispatch(globalActions.update({ isUnlocked: true }))\n },\n [dispatch, wallet]\n )\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { ToAddressInfo, ToSignData, UnspentOutput } from '@unisat/wallet-shared'\n\nimport { numUtils, timeUtils } from '@unisat/base-utils'\nimport { AppState, useI18n, useTools } from '..'\nimport { useWallet } from '../context/WalletContext'\nimport { useAccountAddress, useCurrentAccount, useCurrentAccountCapabilities } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { transactionsActions } from '../reducers/transactions'\nimport { useAppDispatch, useAppSelector } from './base'\n\nexport function useTransactionsState(): AppState['transactions'] {\n return useAppSelector(state => state.transactions)\n}\n\nexport function useBitcoinTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.bitcoinTx\n}\n\nexport function usePrepareSendBTCCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n memo,\n memos,\n disableAutoAdjust,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate?: number\n memo?: string\n memos?: string[]\n disableAutoAdjust?: boolean\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n let _utxos: UnspentOutput[] = utxos\n if (_utxos.length === 0) {\n _utxos = await fetchUtxos()\n }\n const safeBalance = _utxos\n .filter(v => v.inscriptions.length == 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n if (safeBalance < toAmount) {\n throw new Error(t('insufficient_balance'))\n }\n\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n let res: ToSignData\n\n if (safeBalance === toAmount && !disableAutoAdjust) {\n res = await wallet.createSendAllBTCPsbt({\n to: toAddressInfo.address,\n btcUtxos: _utxos,\n feeRate,\n enableRBF,\n })\n } else {\n res = await wallet.createSendBTCPsbt({\n to: toAddressInfo.address,\n amount: toAmount,\n btcUtxos: _utxos,\n feeRate,\n enableRBF,\n memo: memo!,\n memos: memos!,\n })\n }\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos, fetchUtxos, accountCapabilities.canCreateSigningRequest, t]\n )\n}\n\nexport function usePrepareSendBypassHeadOffsetsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n toAmount,\n feeRate,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n toAmount: number\n feeRate: number\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n const res = await wallet.createSendBTCOffsetPsbt(\n [\n {\n address: toAddressInfo.address,\n satoshis: toAmount,\n },\n ],\n feeRate,\n enableRBF\n )\n return res\n },\n [dispatch, wallet, accountCapabilities.canCreateSigningRequest, t]\n )\n}\n\nexport function usePushBitcoinTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateBitcoinTx({ txid }))\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet, tools]\n )\n}\n\nexport function useOrdinalsTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.ordinalsTx\n}\n\nexport function usePrepareSendOrdinalsInscriptionCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionId: string\n feeRate?: number\n outputValue?: number\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const toSignData = await wallet.createSendInscriptionPsbt({\n to: toAddressInfo.address,\n inscriptionId,\n feeRate,\n outputValue: outputValue!,\n btcUtxos,\n enableRBF,\n })\n\n return toSignData\n },\n [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]\n )\n}\n\nexport function usePrepareSendOrdinalsInscriptionsCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const fetchUtxos = useFetchUtxosCallback()\n const utxos = useUtxos()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n inscriptionIds,\n feeRate,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n inscriptionIds: string[]\n feeRate?: number\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n const res = await wallet.createSendMultipleInscriptionsPsbt({\n to: toAddressInfo.address,\n inscriptionIds,\n feeRate,\n btcUtxos,\n enableRBF,\n })\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]\n )\n}\n\nexport function useCreateSplitTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n return useCallback(\n async ({\n inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n }: {\n inscriptionId: string\n feeRate: number\n outputValue: number\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n const res = await wallet.createSplitInscriptionPsbt({\n inscriptionId,\n feeRate,\n outputValue,\n btcUtxos,\n enableRBF,\n })\n\n return res\n },\n [dispatch, wallet, fromAddress, utxos, accountCapabilities.canCreateSigningRequest, t]\n )\n}\n\nexport function usePushOrdinalsTxCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n return useCallback(\n async (rawtx: string) => {\n const ret = {\n success: false,\n txid: '',\n error: '',\n }\n try {\n tools.showLoading(true)\n const txid = await wallet.pushTx(rawtx)\n await timeUtils.sleep(3) // Wait for transaction synchronization\n tools.showLoading(false)\n dispatch((transactionsActions as any).updateOrdinalsTx({ txid }))\n\n dispatch((accountActions as any).expireBalance())\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 2000)\n setTimeout(() => {\n dispatch((accountActions as any).expireBalance())\n }, 5000)\n\n ret.success = true\n ret.txid = txid\n } catch (e) {\n console.log(e)\n ret.error = (e as Error).message\n tools.showLoading(false)\n }\n\n return ret\n },\n [dispatch, wallet]\n )\n}\n\nexport function useUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.utxos\n}\n\nexport function useFetchUtxosCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(async () => {\n const data = await wallet.getBTCUtxos()\n dispatch((transactionsActions as any).setUtxos(data))\n return data\n }, [wallet, account])\n}\n\nexport function useSpendUnavailableUtxos() {\n const transactionsState = useTransactionsState()\n return transactionsState.spendUnavailableUtxos\n}\n\nexport function useSetSpendUnavailableUtxosCallback() {\n const dispatch = useAppDispatch()\n return useCallback(\n (utxos: UnspentOutput[]) => {\n dispatch((transactionsActions as any).setSpendUnavailableUtxos(utxos))\n },\n [dispatch]\n )\n}\n\nexport function useSafeBalance() {\n const utxos = useUtxos()\n return useMemo(() => {\n const satoshis = utxos\n .filter(v => v.inscriptions.length === 0)\n .reduce((pre, cur) => pre + cur.satoshis, 0)\n return numUtils.satoshisToAmount(satoshis)\n }, [utxos])\n}\n\nexport function useAssetUtxosRunes() {\n const transactionsState = useTransactionsState()\n return transactionsState.assetUtxos_runes\n}\n\nexport function useFetchAssetUtxosRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const account = useCurrentAccount()\n return useCallback(\n async (rune: string) => {\n const data = await wallet.getAssetUtxosRunes(rune)\n dispatch((transactionsActions as any).setAssetUtxosRunes(data))\n return data\n },\n [wallet, account]\n )\n}\n\nexport function usePrepareSendRunesCallback() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const fromAddress = useAccountAddress()\n const utxos = useUtxos()\n const fetchUtxos = useFetchUtxosCallback()\n const assetUtxosRunes = useAssetUtxosRunes()\n const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n return useCallback(\n async ({\n toAddressInfo,\n runeid,\n runeAmount,\n outputValue,\n feeRate,\n enableRBF,\n }: {\n toAddressInfo: ToAddressInfo\n runeid: string\n runeAmount: string\n outputValue?: number\n feeRate: number\n enableRBF?: boolean\n }) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n if (!feeRate) {\n const summary = await wallet.getFeeSummary()\n feeRate = summary.list[1]!.feeRate\n }\n\n let btcUtxos = utxos\n if (btcUtxos.length === 0) {\n btcUtxos = await fetchUtxos()\n }\n\n let assetUtxos = assetUtxosRunes\n if (assetUtxos.length == 0) {\n assetUtxos = await fetchAssetUtxosRunes(runeid)\n }\n\n const toSignData = await wallet.createSendRunesPsbt({\n to: toAddressInfo.address,\n runeid,\n runeAmount,\n outputValue: outputValue!,\n feeRate,\n btcUtxos,\n assetUtxos,\n enableRBF,\n })\n\n return toSignData\n },\n [\n dispatch,\n wallet,\n fromAddress,\n utxos,\n assetUtxosRunes,\n fetchAssetUtxosRunes,\n account,\n accountCapabilities.canCreateSigningRequest,\n t,\n ]\n )\n}\n\nexport function useRunesTx() {\n const transactionsState = useTransactionsState()\n return transactionsState.runesTx\n}\n\nexport function usePrepareSendAlkanesCallback() {\n const wallet = useWallet()\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n const { t } = useI18n()\n const callback = useCallback(\n async (\n toAddressInfo: ToAddressInfo,\n alkaneid: string,\n amount: string,\n feeRate: number,\n type: 'ft' | 'nft',\n enableRBF?: boolean\n ) => {\n if (!accountCapabilities.canCreateSigningRequest) {\n throw new Error(t('not_supported'))\n }\n return await wallet.createSendAlkanesPsbt({\n to: toAddressInfo.address,\n alkaneid,\n amount,\n feeRate,\n type,\n enableRBF,\n })\n },\n [wallet, account, accountCapabilities.canCreateSigningRequest, t]\n )\n return callback\n}\n","import { useCallback, useMemo } from 'react'\n\nimport { CHAINS_MAP, Inscription } from '@unisat/wallet-shared'\nimport { AddressType, ChainType } from '@unisat/wallet-types'\nimport { getAddressType } from '../utils/bitcoin-utils'\n\nimport { AppState, AssetTabKey } from '..'\nimport { useCurrentAddress } from '../hooks/accounts'\nimport { useAppDispatch, useAppSelector } from '../hooks/base'\nimport { useChainType, useIconBaseUrl, useUnisatWebsite } from '../hooks/settings'\nimport { uiActions } from '../reducers/ui'\nexport function useUIState(): AppState['ui'] {\n return useAppSelector(state => state.ui)\n}\n\nexport function useAssetTabKey() {\n const uiState = useUIState()\n return uiState.assetTabKey\n}\n\nexport function useOrdinalsAssetTabKey() {\n const uiState = useUIState()\n return uiState.ordinalsAssetTabKey\n}\n\nexport function useCATAssetTabKey() {\n const uiState = useUIState()\n return uiState.catAssetTabKey\n}\n\nexport function useAlkanesAssetTabKey() {\n const uiState = useUIState()\n return uiState.alkanesAssetTabKey\n}\n\nexport function useMoreAssetTabKey() {\n const uiState = useUIState()\n return uiState.moreAssetTabKey\n}\n\nexport function useUiTxCreateScreen() {\n const uiState = useUIState()\n return uiState.uiTxCreateScreen\n}\n\nexport function useUpdateUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return useCallback(\n ({\n toInfo,\n inputAmount,\n enableRBF,\n }: {\n toInfo?: { address: string; domain: string; inscription?: Inscription }\n inputAmount?: string\n enableRBF?: boolean\n }) => {\n dispatch(\n (uiActions as any).updateTxCreateScreen({\n toInfo,\n inputAmount,\n enableRBF,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useFeeRateBar() {\n const uiState = useUIState()\n return uiState.feeRateBar\n}\n\nexport function useUpdateFeeRateBar() {\n const dispatch = useAppDispatch()\n return useCallback(\n ({\n feeRate,\n feeRateInputVal,\n enableLowFeeRate,\n feeOptionIndex,\n showCustomInput,\n }: {\n feeRate?: number\n feeRateInputVal?: string\n enableLowFeeRate?: boolean\n feeOptionIndex?: number\n showCustomInput?: boolean\n }) => {\n dispatch(\n (uiActions as any).updateFeeRateBar({\n feeRate,\n feeRateInputVal,\n enableLowFeeRate,\n feeOptionIndex,\n showCustomInput,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useResetFeeRateBar() {\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).resetFeeRateBar())\n }, [dispatch])\n}\n\nexport function useAddressInput() {\n const uiState = useUIState()\n return uiState.addressInput\n}\n\nexport function useUpdateAddressInput() {\n const dispatch = useAppDispatch()\n return useCallback(\n ({ address, domain }: { address?: string; domain?: string }) => {\n dispatch(\n (uiActions as any).updateAddressInput({\n address,\n domain,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useResetAddressInput() {\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).resetAddressInput())\n }, [dispatch])\n}\n\nexport function useAmountInput() {\n const uiState = useUIState()\n return uiState.amountInput\n}\n\nexport function useUpdateAmountInput() {\n const dispatch = useAppDispatch()\n return useCallback(\n ({ amount }: { amount?: string }) => {\n dispatch(\n (uiActions as any).updateAmountInput({\n amount,\n })\n )\n },\n [dispatch]\n )\n}\n\nexport function useResetAmountInput() {\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).resetAmountInput())\n }, [dispatch])\n}\n\nexport function useResetTxState() {\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).resetTxCreateScreen())\n dispatch((uiActions as any).resetFeeRateBar())\n }, [dispatch])\n}\n\nexport function useResetUiTxCreateScreen() {\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).resetTxCreateScreen())\n }, [dispatch])\n}\n\nexport const useThrottle = (callback, delay, lastCallRef) => {\n return useCallback(\n (...args) => {\n const now = Date.now()\n if (now - lastCallRef.current > delay) {\n lastCallRef.current = now\n callback(...args)\n }\n },\n [callback, delay, lastCallRef]\n )\n}\n\nexport function getSupportedAssets(chainType: ChainType, address: string) {\n const assetTabKeys: AssetTabKey[] = []\n\n const chain = CHAINS_MAP[chainType]\n const networkType = chain.networkType\n const addressType = getAddressType(address, networkType)\n\n const assets = {\n ordinals: false,\n runes: false,\n CAT20: false,\n alkanes: false,\n brc20Prog: false,\n }\n\n assets.ordinals = true\n assetTabKeys.push(AssetTabKey.ORDINALS)\n\n assets.runes = true\n assetTabKeys.push(AssetTabKey.RUNES)\n\n if (\n (chainType === ChainType.FRACTAL_BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_TESTNET) &&\n (addressType == AddressType.P2TR || addressType == AddressType.P2WPKH)\n ) {\n assets.CAT20 = true\n assetTabKeys.push(AssetTabKey.CAT)\n }\n\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n assets.alkanes = true\n assetTabKeys.push(AssetTabKey.MORE)\n }\n\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n assets.brc20Prog = true\n }\n\n return {\n assets,\n tabKeys: assetTabKeys,\n key: chainType + address + assetTabKeys.join(','),\n }\n}\nexport function useSupportedAssets() {\n const chainType = useChainType()\n const currentAddress = useCurrentAddress()\n const supportedAssets = getSupportedAssets(chainType, currentAddress)\n return supportedAssets\n}\n\nexport const useIsInExpandView = () => {\n // @ts-ignore\n if (typeof window === 'undefined') {\n return false\n }\n return useMemo(() => {\n // @ts-ignore\n if (window.innerWidth > 156 * 3) {\n return true\n } else {\n return false\n }\n // @ts-ignore\n }, [window.innerWidth])\n}\n\nexport function useWalletTopTabScreenState() {\n const uiState = useUIState()\n return uiState.walletTopTabScreen\n}\n\nexport function useBRC20IconInfo(ticker: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/brc20/${ticker}`\n const iconShortName = ticker.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useRunesIconInfo(spacedRune: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/runes/${spacedRune}`\n const iconShortName = spacedRune.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useAlkanesIconInfo(name: string, alkaneid: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/alkanes/${name}/${alkaneid}`\n const iconShortName = name.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useCAT20IconInfo(name: string, tokenId: string) {\n const baseUrl = useIconBaseUrl()\n const iconUrl = `${baseUrl}/cat20/${name}/${tokenId}`\n const iconShortName = name.substring(0, 2)\n const chainType = useChainType()\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.FRACTAL_BITCOIN_MAINNET) {\n return { iconUrl, iconShortName }\n }\n\n return { iconUrl: '', iconShortName }\n}\n\nexport function useBRC20MarketPlaceWebsite(ticker: string) {\n const chainType = useChainType()\n const unisatWebsite = useUnisatWebsite()\n if (chainType === ChainType.BITCOIN_MAINNET) {\n if (ticker.length == 6) {\n return `${unisatWebsite}/market/brc20_prog?tick=${ticker}`\n }\n }\n return `${unisatWebsite}/market/brc20?tick=${ticker}`\n}\n\nexport function useRunesMarketUrl(ticker: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/runes/market?tick=${ticker}`\n}\n\nexport function useAlkanesMarketPlaceWebsite(alkaneid: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/alkanes/market?tick=${alkaneid}`\n}\n\nexport function useCAT20MarketPlaceWebsite(tokenId: string) {\n const unisatWebsite = useUnisatWebsite()\n return `${unisatWebsite}/dex/cat20/${tokenId}`\n}\n\nexport function useRunesInscribeUrl(rune: string) {\n const unisatWebsite = useUnisatWebsite()\n const newUrl = `${unisatWebsite}/runes/inscribe?only=1&tab=mint&rune=${rune}`\n return newUrl\n}\n\nexport function useBalanceCardDetailExpanded() {\n const uiState = useUIState()\n return uiState.balanceDetailExpanded\n}\n\nexport function useToggleBalanceCardDetailExpanded() {\n const { balanceDetailExpanded } = useUIState()\n const dispatch = useAppDispatch()\n return useCallback(() => {\n dispatch((uiActions as any).setBalanceDetailExpanded(!balanceDetailExpanded))\n }, [dispatch, balanceDetailExpanded])\n}\n","import { AppState } from '..'\nimport { useAppSelector } from '../hooks'\n\nexport function useBrowserState(): AppState['browser'] {\n return useAppSelector(state => state.browser)\n}\n\nexport function useWalletTabScreenState() {\n const state = useBrowserState()\n return state.walletTabScreen\n}\n","import { useCallback, useEffect, useRef } from 'react'\n\nimport { Account, BUS_METHODS } from '@unisat/wallet-shared'\nimport { uiEventBus } from '../utils/eventBus'\n\nimport { useIsUnlocked } from '../hooks/global'\nimport { globalActions } from '../reducers/global'\nimport { useAppDispatch } from '../hooks/base'\nimport { settingsActions } from '../reducers/settings'\nimport { useCurrentAccount, useFetchBalanceCallback, useReloadAccounts } from '../hooks/accounts'\nimport { accountActions } from '../reducers/accounts'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useWallet } from '../context/WalletContext'\n\nexport function AccountUpdater() {\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const isUnlocked = useIsUnlocked()\n const selfRef = useRef({\n preAccountKey: '_',\n loadingBalance: false,\n loadingHistory: false,\n })\n const self = selfRef.current\n\n const reloadAccounts = useReloadAccounts()\n const onCurrentChange = useCallback(async () => {\n if (isUnlocked && currentAccount && currentAccount.key != self.preAccountKey) {\n self.preAccountKey = currentAccount.key\n\n // setLoading(true);\n\n reloadAccounts()\n\n // setLoading(false);\n }\n }, [dispatch, currentAccount, wallet, isUnlocked])\n\n useEffect(() => {\n onCurrentChange()\n }, [currentAccount && currentAccount.key, isUnlocked])\n\n const fetchBalance = useFetchBalanceCallback()\n useEffect(() => {\n if (self.loadingBalance) {\n return\n }\n if (!isUnlocked) {\n return\n }\n self.loadingBalance = true\n fetchBalance().finally(() => {\n self.loadingBalance = false\n })\n }, [fetchBalance, wallet, isUnlocked, self])\n\n useEffect(() => {\n const accountChangeHandler = (account: Account) => {\n if (account && account.address) {\n dispatch((accountActions as any).setCurrent(account))\n }\n }\n uiEventBus.addEventListener(BUS_METHODS.ACCOUNTS_CHANGED, accountChangeHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.ACCOUNTS_CHANGED, accountChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const chaintChangeHandler = (params: { type: ChainType }) => {\n dispatch(\n (settingsActions as any).updateSettings({\n chainType: params.type,\n })\n )\n\n reloadAccounts()\n }\n uiEventBus.addEventListener(BUS_METHODS.CHAIN_CHANGED, chaintChangeHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.CHAIN_CHANGED, chaintChangeHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const lockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: false }))\n }\n uiEventBus.addEventListener(BUS_METHODS.LOCKED, lockHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.LOCKED, lockHandler)\n }\n }, [dispatch])\n\n useEffect(() => {\n const unlockHandler = () => {\n dispatch(globalActions.update({ isUnlocked: true }))\n }\n uiEventBus.addEventListener(BUS_METHODS.UNLOCKED, unlockHandler)\n return () => {\n uiEventBus.removeEventListener(BUS_METHODS.UNLOCKED, unlockHandler)\n }\n }, [dispatch])\n\n return null\n}\n","type Listener = (params?: any) => void\n\nclass EventBus {\n events: Record<string, Listener[]> = {}\n\n emit = (type: string, params?: any) => {\n const listeners = this.events[type]\n if (listeners) {\n listeners.forEach(fn => {\n fn(params)\n })\n }\n }\n\n once = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n const func = (...params: any[]) => {\n fn(...params)\n this.events[type] = this.events[type]!.filter(item => item !== func)\n }\n if (listeners) {\n this.events[type]!.push(func)\n } else {\n this.events[type] = [func]\n }\n }\n\n addEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type]!.push(fn)\n } else {\n this.events[type] = [fn]\n }\n }\n\n removeEventListener = (type: string, fn: Listener) => {\n const listeners = this.events[type]\n if (listeners) {\n this.events[type] = this.events[type]!.filter(item => item !== fn)\n }\n }\n\n removeAllEventListeners = (type: string) => {\n this.events[type] = []\n }\n}\n\nconst uiEventBus = new EventBus()\nexport { uiEventBus }\n","import { useEffect, useMemo, useRef, useState } from 'react'\n\nimport { numUtils } from '@unisat/base-utils'\nimport { ADDRESS_TYPES, KeyringType } from '@unisat/keyring-service/types'\nimport { getAccountCapabilities, getAccountDerivationPath } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport {\n useAppDispatch,\n useCurrentAccount,\n useCurrentKeyring,\n useI18n,\n useNavigation,\n useReloadAccounts,\n useTools,\n useWallet,\n} from '..'\n\ninterface AddressTypeItem {\n address: string\n assets: { total_btc: string; satoshis: number; total_inscription: number }\n name: string\n value: AddressType\n}\n\nexport function useAddressTypeScreenLogic() {\n // const isInTab = useExtensionIsInTab()\n const { t } = useI18n()\n\n const wallet = useWallet()\n const currentKeyring = useCurrentKeyring()\n const account = useCurrentAccount()\n const currentKeyringCapabilities = useMemo(\n () => getAccountCapabilities({ type: currentKeyring.type }),\n [currentKeyring.type]\n )\n\n const nav = useNavigation()\n const dispatch = useAppDispatch()\n const reloadAccounts = useReloadAccounts()\n const [addresses, setAddresses] = useState<string[]>([])\n const [addressAssets, setAddressAssets] = useState<{\n [key: string]: { total_btc: string; satoshis: number; total_inscription: number }\n }>({})\n\n const selfRef = useRef<{\n addressAssets: {\n [key: string]: { total_btc: string; satoshis: number; total_inscription: number }\n }\n }>({\n addressAssets: {},\n })\n const self = selfRef.current\n\n const tools = useTools()\n const loadAddresses = async () => {\n try {\n tools.showLoading(true)\n const _res = await wallet.getAllAddresses(currentKeyring, account.index || 0)\n setAddresses(_res)\n const balances = await wallet.getMultiAddressAssets(_res.join(','))\n for (let i = 0; i < _res.length; i++) {\n const address = _res[i]\n const balance = balances[i]\n const satoshis = balance.totalSatoshis\n self.addressAssets[address] = {\n total_btc: numUtils.satoshisToAmount(balance.totalSatoshis),\n satoshis,\n total_inscription: balance.inscriptionCount,\n }\n }\n setAddressAssets(self.addressAssets)\n } catch (e) {\n console.error(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n useEffect(() => {\n loadAddresses()\n }, [])\n\n const addressTypes = useMemo(() => {\n // Wallets backed by a fixed address do not allow switching address types.\n if (!currentKeyringCapabilities.canChangeAddressType) {\n return ADDRESS_TYPES.filter(v => v.value === currentKeyring.addressType)\n }\n\n if (currentKeyring.type === KeyringType.HdKeyring) {\n return ADDRESS_TYPES.filter(v => {\n if (v.displayIndex < 0) {\n return false\n }\n // MagicEden only supports P2WPKH and P2TR\n if (currentKeyring.accountIndexDerivation) {\n return v.value === AddressType.P2WPKH || v.value === AddressType.P2TR\n }\n const address = addresses[v.value]\n const balance = addressAssets[address]\n if (v.isUnisatLegacy) {\n if (!balance || balance.satoshis == 0) {\n return false\n }\n }\n return true\n }).sort((a, b) => a.displayIndex - b.displayIndex)\n } else {\n return ADDRESS_TYPES.filter(v => v.displayIndex >= 0 && v.isUnisatLegacy != true).sort(\n (a, b) => a.displayIndex - b.displayIndex\n )\n }\n }, [\n currentKeyring.type,\n currentKeyring.addressType,\n currentKeyringCapabilities.canChangeAddressType,\n currentKeyring.accountIndexDerivation,\n addressAssets,\n addresses,\n ])\n\n const items: AddressTypeItem[] = useMemo(() => {\n return addressTypes.map(v => {\n const address = addresses[v.value]\n const assets = addressAssets[address] || {\n total_btc: '--',\n satoshis: 0,\n total_inscription: 0,\n }\n const derivedPath = getAccountDerivationPath(\n v.hdPath,\n account.index || 0,\n currentKeyring.accountIndexDerivation\n )\n let name = `${v.name} (${derivedPath})`\n if (currentKeyring.type === KeyringType.SimpleKeyring) {\n name = `${v.name}`\n } else if (currentKeyring.type === KeyringType.ColdWalletKeyring) {\n name = `❄️ ${v.name} (${derivedPath}) - ${t('Fixed by cold wallet')}`\n }\n\n return {\n address,\n assets,\n name,\n value: v.value,\n }\n })\n }, [addressTypes])\n\n const onClickItem = async (item: AddressTypeItem) => {\n if (item.value == currentKeyring.addressType) {\n return\n }\n\n if (!currentKeyringCapabilities.canChangeAddressType) {\n tools.toastError(t('not_supported'))\n return\n }\n\n await wallet.changeAddressType(item.value)\n reloadAccounts()\n // navigate('MainScreen')\n tools.toastSuccess(t('address_type_changed'))\n\n nav.navToTab()\n }\n\n return {\n currentKeyring,\n items,\n wallet,\n onClickItem,\n }\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { AlkanesBalance, TickPriceItem } from '@unisat/wallet-shared'\n\nimport {\n AlkanesAssetTabKey,\n getSupportedAssets,\n useAlkanesAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesBalance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n\n const { list, total } = await wallet.getAlkanesList(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getAlkanesPrice(list.map(item => item.alkaneid)).then(setPriceMap)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useAlkanesAssetTabKey()\n const isFocus = tabKey === AlkanesAssetTabKey.TOKEN\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: AlkanesBalance) => {\n nav.navigate('AlkanesTokenScreen', { alkaneid: item.alkaneid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\ninterface UseInfiniteListOptions<T> {\n fetcher: (page: number, pageSize: number) => Promise<{ list: T[]; total: number }>\n pageSize?: number\n dependencies?: any[]\n}\n\nexport function useInfiniteList<T>({\n fetcher,\n pageSize = 20,\n dependencies = [],\n}: UseInfiniteListOptions<T>) {\n const [data, setData] = useState<T[]>([])\n const [total, setTotal] = useState(0)\n const [loading, _setLoading] = useState(false)\n const [hasMore, setHasMore] = useState(true)\n const [page, _setPage] = useState(1)\n\n const pageRef = useRef(1)\n const loadingRef = useRef(false)\n\n const setLoading = (v: boolean) => {\n loadingRef.current = v\n _setLoading(v)\n }\n\n const setPage = (v: number) => {\n pageRef.current = v\n _setPage(v)\n }\n\n const loadData = useCallback(\n async (isRefresh = false) => {\n if (loadingRef.current) return\n\n loadingRef.current = true\n setLoading(true)\n try {\n const pageToLoad = isRefresh ? 1 : pageRef.current\n const { list, total } = await fetcher(pageToLoad, pageSize)\n\n setTotal(total)\n setData(prev => (isRefresh ? list : [...prev, ...list]))\n\n const loadedCount = (pageToLoad - 1) * pageSize + list.length\n setHasMore(loadedCount < total)\n\n const nextPage = isRefresh ? 2 : pageToLoad + 1\n pageRef.current = nextPage\n setPage(nextPage)\n } catch (e) {\n console.error(e)\n } finally {\n loadingRef.current = false\n setLoading(false)\n }\n },\n [fetcher, pageSize]\n )\n\n const onRefresh = () => loadData(true)\n const onLoadMore = () => {\n if (hasMore && !loadingRef.current) loadData(false)\n }\n\n useEffect(() => {\n // reset\n setData([])\n setPage(1)\n setHasMore(true)\n\n loadData(true)\n }, dependencies)\n\n return {\n data,\n total,\n loading,\n hasMore,\n page,\n onRefresh,\n onLoadMore,\n }\n}\n","import { useCallback, useEffect, useRef, useState } from 'react'\n\nexport interface AmountInputProps {}\n\nexport function useAmountInputLogic(props: {\n value?: string\n runesDecimal?: number\n disableDecimal?: boolean\n enableBrc20Decimal?: boolean\n onAmountInputChange?: (amount: string) => void\n\n min?: number\n step?: number\n}) {\n const { disableDecimal, enableBrc20Decimal, runesDecimal, onAmountInputChange, min, step } = props\n\n const [inputValue, setInputValue] = useState(props.value || '')\n\n useEffect(() => {\n onAmountInputChange(inputValue)\n }, [inputValue])\n\n const propValueRef = useRef(props.value)\n useEffect(() => {\n if (props.value !== propValueRef.current) {\n propValueRef.current = props.value\n setInputValue(props.value || '')\n }\n }, [props.value])\n\n const handleInputAmount = useCallback(\n (e: { target: { value: string } } | string) => {\n const raw = typeof e === 'string' ? e : e.target.value\n\n let regex: RegExp\n if (disableDecimal) {\n regex = /^[1-9]\\d*$/\n } else if (enableBrc20Decimal) {\n regex = /^(0(\\.\\d{0,18})?|[1-9]\\d*\\.?\\d{0,18})$/\n } else if (runesDecimal !== undefined) {\n regex = new RegExp(`^(0(\\\\.\\\\d{0,${runesDecimal}})?|[1-9]\\\\d*\\\\.?\\\\d{0,${runesDecimal}})$`)\n } else {\n regex = /^(0(\\.\\d{0,8})?|[1-9]\\d*\\.?\\d{0,8})$/\n }\n\n if (regex.test(raw) || raw === '') {\n setInputValue(raw)\n }\n },\n [disableDecimal, enableBrc20Decimal, runesDecimal]\n )\n\n const handleStepUp = useCallback(() => {\n setInputValue(prev => {\n const currentVal = parseFloat(prev) || 0\n const decimal = runesDecimal ?? 2\n return (currentVal + step).toFixed(decimal)\n })\n }, [step, runesDecimal])\n\n const handleStepDown = useCallback(() => {\n setInputValue(prev => {\n const currentVal = parseFloat(prev) || 0\n const decimal = runesDecimal ?? 2\n return Math.max(min, currentVal - step).toFixed(decimal)\n })\n }, [step, min, runesDecimal])\n\n const handleReset = useCallback(() => {\n setInputValue('')\n }, [])\n\n return {\n handleInputAmount,\n handleStepUp,\n handleStepDown,\n handleReset,\n inputValue,\n }\n}\n","import { Announcement, AnnouncementLinkType } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useStorage, useWallet } from 'src/context'\n\nconst AUTO_PLAY_INTERVAL = 5000\n\nexport function useAnnouncementCardLogic() {\n const wallet = useWallet()\n const storage = useStorage()\n\n const [activeIndex, setActiveIndex] = useState(0)\n const [dismissedIds, setDismissedIds] = useState<string[]>([])\n const [announcements, setAnnouncements] = useState<Announcement[]>([])\n const [loading, setLoading] = useState(false)\n const [dismissedLoaded, setDismissedLoaded] = useState(false)\n const timerRef = useRef<ReturnType<typeof setInterval> | null>(null)\n\n useEffect(() => {\n const init = async () => {\n try {\n await loadDismissedIds()\n await fetchAnnouncements()\n } finally {\n setDismissedLoaded(true)\n }\n }\n init()\n }, [])\n\n const fetchAnnouncements = async () => {\n try {\n const response = await wallet.getAnnouncements(0, 10)\n setAnnouncements(Array.isArray(response?.list) ? response.list : [])\n } catch {\n setAnnouncements([])\n }\n }\n\n const loadDismissedIds = async () => {\n const saved = await storage.getAnnouncementDismissedIds()\n setDismissedIds(saved)\n }\n\n const validAnnouncements = useMemo(\n () =>\n announcements.filter(a => {\n const now = Date.now()\n return now >= a.startTime && now <= a.endTime && !dismissedIds.includes(a.id)\n }),\n [announcements, dismissedIds],\n )\n\n // Auto-play: hook is the single timing authority\n useEffect(() => {\n if (validAnnouncements.length <= 1) return undefined\n timerRef.current = setInterval(() => {\n setActiveIndex(prev => (prev + 1) % validAnnouncements.length)\n }, AUTO_PLAY_INTERVAL)\n return () => {\n if (timerRef.current) clearInterval(timerRef.current)\n }\n }, [validAnnouncements.length])\n\n const handleDotClick = useCallback((index: number) => {\n setActiveIndex(index)\n }, [])\n\n const handleDismissAll = useCallback(async () => {\n const ids = validAnnouncements.map(a => a.id)\n if (ids.length === 0) return\n const newIds = [...dismissedIds, ...ids]\n setDismissedIds(newIds)\n await storage.setAnnouncementDismissedIds(newIds)\n }, [validAnnouncements, dismissedIds, storage])\n\n const isLinkable = useCallback((announcement: Announcement) => {\n return announcement.linkType !== AnnouncementLinkType.NONE && !!announcement.link\n }, [])\n\n const current = validAnnouncements[activeIndex] ?? validAnnouncements[0]\n\n return {\n loading,\n validAnnouncements,\n current,\n activeIndex,\n handleDotClick,\n handleDismissAll,\n isLinkable,\n }\n}\n","import {\n RawTxInfo,\n SignPsbtParams,\n TokenBalance,\n TokenInfo,\n TokenTransfer,\n} from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { startTransition, useCallback, useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n useFetchUtxosCallback,\n usePrepareSendOrdinalsInscriptionCallback,\n usePrepareSendOrdinalsInscriptionsCallback,\n usePushOrdinalsTxCallback,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nexport enum BRC20SendTabKey {\n STEP1,\n STEP2,\n STEP3,\n}\n\nexport interface ContextData {\n tabKey: BRC20SendTabKey\n tokenBalance: TokenBalance\n transferAmount: string\n transferableList: TokenTransfer[]\n inscriptionIdSet: Set<string>\n receiver: string\n enableRBF: boolean\n rawTxInfo: RawTxInfo\n tokenInfo: TokenInfo\n}\n\nexport interface UpdateContextDataParams {\n tabKey?: BRC20SendTabKey\n tokenBalance?: TokenBalance\n transferAmount?: string\n transferableList?: TokenTransfer[]\n inscriptionIdSet?: Set<string>\n receiver?: string\n enableRBF?: boolean\n rawTxInfo?: RawTxInfo\n}\n\nexport interface BRC20SendStepParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nexport function useBRC20SendScreenLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n\n const props = nav.getRouteState<'BRC20SendScreen'>()\n\n const tokenBalance = props.tokenBalance\n const selectedInscriptionIds = props.selectedInscriptionIds || []\n const selectedAmount = props.selectedAmount || '0'\n\n const [contextData, setContextData] = useState<ContextData>({\n tabKey: BRC20SendTabKey.STEP1,\n tokenBalance,\n transferAmount: selectedAmount,\n transferableList: [],\n inscriptionIdSet: new Set(selectedInscriptionIds),\n receiver: '',\n enableRBF: true,\n rawTxInfo: {\n psbtHex: '',\n rawtx: '',\n },\n tokenInfo: {\n totalSupply: '0',\n totalMinted: '0',\n decimal: 18,\n holder: '',\n inscriptionId: '',\n historyCount: 0,\n holdersCount: 0,\n logo: '',\n },\n })\n\n const updateContextData = useCallback((params: UpdateContextDataParams) => {\n setContextData(prev => {\n let changed = false\n const next = { ...prev }\n for (const key in params) {\n if (prev[key] !== params[key]) {\n next[key] = params[key]\n changed = true\n }\n }\n\n return changed ? next : prev\n })\n }, [])\n\n const onHeaderBack = () => {\n if (contextData.tabKey === BRC20SendTabKey.STEP2) {\n updateContextData({ tabKey: BRC20SendTabKey.STEP1 })\n return\n }\n nav.goBack()\n }\n\n const onTabClick = (key: string) => {\n updateContextData({ tabKey: key as any })\n }\n\n const { t } = useI18n()\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n updateContextData({ enableRBF })\n })\n }, [wallet, updateContextData])\n\n return {\n t,\n contextData,\n updateContextData,\n onHeaderBack,\n onTabClick,\n }\n}\n\nexport function useBRC20SendScreenLogicStep1({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const { tokenBalance } = contextData\n\n const { t } = useI18n()\n\n const [disabled, setDisabled] = useState(true)\n\n useEffect(() => {\n setDisabled(true)\n if (new BigNumber(contextData.transferAmount).lte(0)) {\n return\n }\n\n setDisabled(false)\n }, [contextData.transferAmount])\n\n const onClickNext = () => {\n updateContextData({\n tabKey: BRC20SendTabKey.STEP2,\n })\n }\n\n return {\n t,\n disabled,\n tokenBalance,\n onClickNext,\n }\n}\nexport function useBRC20SendScreenLogicStep2({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const nav = useNavigation()\n const fetchUtxos = useFetchUtxosCallback()\n const tools = useTools()\n const { t } = useI18n()\n useEffect(() => {\n tools.showLoading(true)\n fetchUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const feeRateBar = useFeeRateBar()\n\n const prepareSendOrdinalsInscriptions = usePrepareSendOrdinalsInscriptionsCallback()\n const prepareSendOrdinalsInscription = usePrepareSendOrdinalsInscriptionCallback()\n\n const [disabled, setDisabled] = useState(true)\n\n useEffect(() => {\n setDisabled(true)\n if (!contextData.receiver) {\n return\n }\n if (!feeRateBar.feeRate) {\n return\n }\n setDisabled(false)\n }, [contextData.receiver, feeRateBar.feeRate])\n\n const onStep2ClickNext = async () => {\n try {\n tools.showLoading(true)\n const inscriptionIds = Array.from(contextData.inscriptionIdSet)\n if (inscriptionIds.length === 1) {\n const toSignData = await prepareSendOrdinalsInscription({\n toAddressInfo: { address: contextData.receiver, domain: '' },\n inscriptionId: inscriptionIds[0],\n feeRate: feeRateBar.feeRate,\n outputValue: getAddressUtxoDust(contextData.receiver),\n enableRBF: contextData.enableRBF,\n })\n nav.navigate('TxConfirmScreen', { toSignData })\n } else {\n const toSignData = await prepareSendOrdinalsInscriptions({\n toAddressInfo: { address: contextData.receiver, domain: '' },\n inscriptionIds,\n feeRate: feeRateBar.feeRate,\n enableRBF: contextData.enableRBF,\n })\n nav.navigate('TxConfirmScreen', { toSignData })\n }\n\n // updateContextData({ tabKey: TabKey.STEP3, rawTxInfo: txInfo });\n } catch (e) {\n const error = e as Error\n console.log(error)\n tools.toastError(error.message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onStep2ClickBack = async () => {\n if (contextData.tabKey === BRC20SendTabKey.STEP2) {\n updateContextData({ tabKey: BRC20SendTabKey.STEP1 })\n }\n }\n return {\n t,\n disabled,\n onStep2ClickNext,\n onStep2ClickBack,\n }\n}\n\nexport function useBRC20SendScreenLogicStep3({\n contextData,\n updateContextData,\n}: BRC20SendStepParams) {\n const { t } = useI18n()\n const nav = useNavigation()\n const pushOrdinalsTx = usePushOrdinalsTxCallback()\n\n const onSignPsbtConfirm = async res => {\n try {\n let txData = ''\n\n if (res && res.psbtHex) {\n txData = res.psbtHex\n } else if (res && res.rawtx) {\n txData = res.rawtx\n } else if (contextData.rawTxInfo.rawtx) {\n txData = contextData.rawTxInfo.rawtx\n } else {\n throw new Error(t('invalid_transaction_data'))\n }\n\n const { success, txid, error } = await pushOrdinalsTx(txData)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n }\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [\n {\n psbtHex: contextData.rawTxInfo.psbtHex,\n toSignInputs: undefined,\n autoFinalized: true,\n },\n ],\n },\n }\n\n return {\n signPsbtParams,\n onSignPsbtConfirm,\n }\n}\n\nexport function useTransferableListLogic({ contextData, updateContextData }: BRC20SendStepParams) {\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const { t } = useI18n()\n\n const [items, setItems] = useState<TokenTransfer[]>([])\n const [total, setTotal] = useState(0)\n const [loading, setLoading] = useState(false)\n const [loadingLump, setLoadingLump] = useState(false)\n const [pagination, setPagination] = useState({ currentPage: 1, pageSize: 100 })\n const [allSelected, setAllSelected] = useState(false)\n\n const tools = useTools()\n const fetchData = async () => {\n try {\n setLoading(true)\n const { list, total } = await wallet.getBRC20TransferableList({\n address: currentAccount.address,\n ticker: contextData.tokenBalance.ticker,\n tickerHex: contextData.tokenBalance.tickerHex,\n currentPage: pagination.currentPage,\n pageSize: pagination.pageSize,\n })\n setItems(list)\n setTotal(total)\n } catch (e) {\n tools.toastError((e as Error).message)\n } finally {\n setLoading(false)\n }\n }\n\n useEffect(() => {\n fetchData()\n }, [pagination])\n const totalAmount = items\n .reduce((pre, cur) => new BigNumber(cur.amount).plus(pre), new BigNumber(0))\n .toString()\n\n const selectedCount = useMemo(() => contextData.inscriptionIdSet.size, [contextData])\n\n const onClickItem = (item: TokenTransfer) => {\n if (contextData.inscriptionIdSet.has(item.inscriptionId)) {\n const inscriptionIdSet = new Set(contextData.inscriptionIdSet)\n inscriptionIdSet.delete(item.inscriptionId)\n const transferAmount = new BigNumber(contextData.transferAmount).minus(\n new BigNumber(item.amount)\n )\n updateContextData({\n inscriptionIdSet,\n transferAmount: transferAmount.toString(),\n })\n if (allSelected) {\n setAllSelected(false)\n }\n } else {\n const inscriptionIdSet = new Set(contextData.inscriptionIdSet)\n inscriptionIdSet.add(item.inscriptionId)\n const transferAmount = new BigNumber(contextData.transferAmount)\n .plus(new BigNumber(item.amount))\n .toString()\n updateContextData({\n inscriptionIdSet,\n transferAmount,\n })\n if (allSelected == false && transferAmount === totalAmount) {\n setAllSelected(true)\n }\n }\n }\n\n const onCheckBoxChange = e => {\n const val = e.target.checked\n setAllSelected(val)\n if (val) {\n const inscriptionIdSet = new Set(items.map(v => v.inscriptionId))\n updateContextData({\n inscriptionIdSet,\n transferAmount: totalAmount,\n })\n } else {\n updateContextData({\n inscriptionIdSet: new Set(),\n transferAmount: '0',\n })\n }\n }\n\n const onClickCheckBoxInMobile = () => {\n setLoadingLump(true)\n setAllSelected(!allSelected)\n startTransition(() => {\n if (!allSelected) {\n const inscriptionIdSet = new Set(items.map(v => v.inscriptionId))\n updateContextData({\n inscriptionIdSet,\n transferAmount: totalAmount,\n })\n } else {\n updateContextData({\n inscriptionIdSet: new Set(),\n transferAmount: '0',\n })\n }\n })\n setLoadingLump(false)\n }\n\n const onClickRefresh = () => {\n fetchData()\n }\n\n return {\n // data\n items,\n selectedCount,\n allSelected,\n loading,\n loadingLump,\n\n // actions\n onClickItem,\n onCheckBoxChange,\n onClickCheckBoxInMobile,\n onClickRefresh,\n\n // tools\n t,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription, SignPsbtParams, SignPsbtResult, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount, useFeeRateBar, useRunesTx } from 'src/hooks'\nimport { getAddressUtxoDust, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum BRC20SingleStepKey {\n STEP1 = 'STEP1',\n STEP2 = 'STEP2',\n STEP3 = 'STEP3',\n}\n\nexport function useBRC20SingleStepScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'BRC20SingleStepScreen'>()\n const { t } = useI18n()\n\n const tokenBalance = props.tokenBalance\n const tokenInfo = props.tokenInfo\n\n const tools = useTools()\n\n const runesTx = useRunesTx()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: runesTx.toAddress,\n domain: runesTx.toDomain,\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState(tokenBalance.overallBalance)\n const [error, setError] = useState('')\n\n const defaultOutputValue = 546\n\n const currentAccount = useCurrentAccount()\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n const dust1 = getAddressUtxoDust(currentAccount.address)\n const dust2 = getAddressUtxoDust(toInfo.address)\n return Math.max(dust1, dust2)\n } else {\n return 0\n }\n }, [toInfo.address, currentAccount.address])\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(inputAmount, availableBalance)! > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, outputValue, minOutputValue, availableBalance])\n\n const wallet = useWallet()\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {\n psbtHex: '',\n toSignInputs: [],\n },\n revealToSignData: {\n psbtHex: '',\n toSignInputs: [],\n },\n })\n const [step, setStep] = useState<BRC20SingleStepKey>(BRC20SingleStepKey.STEP1)\n\n const signPsbtParamsStep2: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const signPsbtParamsStep3: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onClickBack = () => {\n if (step === BRC20SingleStepKey.STEP1) {\n nav.goBack()\n } else if (step === BRC20SingleStepKey.STEP2) {\n setStep(BRC20SingleStepKey.STEP1)\n } else if (step === BRC20SingleStepKey.STEP3) {\n setStep(BRC20SingleStepKey.STEP2)\n } else {\n nav.goBack()\n }\n }\n\n const onClickConfirmStep1 = async () => {\n tools.showLoading(true)\n try {\n const step1 = await wallet.singleStepTransferBRC20Step1({\n userAddress: currentAccount.address,\n userPubkey: currentAccount.pubkey,\n receiver: toInfo.address,\n ticker: tokenBalance.ticker,\n amount: inputAmount,\n feeRate,\n })\n if (step1) {\n transferData.current.id = step1.orderId\n transferData.current.commitToSignData = step1.toSignData\n setStep(BRC20SingleStepKey.STEP2)\n }\n } catch (e) {\n const msg = (e as any).message\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickConfirmStep2 = async (signPsbtResult: SignPsbtResult) => {\n try {\n tools.showLoading(true)\n\n const step2 = await wallet.singleStepTransferBRC20Step2({\n orderId: transferData.current.id,\n commitTx: signPsbtResult[0].psbtHex,\n })\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(BRC20SingleStepKey.STEP3)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickConfirmStep3 = async (signPsbtResult: SignPsbtResult) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.singleStepTransferBRC20Step3({\n orderId: transferData.current.id,\n revealTx: signPsbtResult[0].psbtHex,\n })\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n // data\n signPsbtParamsStep2,\n signPsbtParamsStep3,\n\n availableBalance,\n tokenBalance,\n tokenInfo,\n inputAmount,\n setInputAmount,\n disabled,\n error,\n toInfo,\n setToInfo,\n\n // state\n step,\n\n // actions\n onClickBack,\n\n onClickConfirmStep1,\n onClickConfirmStep2,\n onClickConfirmStep3,\n\n // utils\n t,\n tools,\n }\n}\n","import { AddressTokenSummary, BRC20HistoryItem, Inscription } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport {\n useBRC20IconInfo,\n useChain,\n useChainType,\n useCurrentAccount,\n useCurrentAccountCapabilities,\n useI18n,\n useNavigation,\n useResetTxState,\n useTools,\n useWallet,\n} from '..'\nimport { shortAddress } from '../utils/ui-utils'\n\nimport BigNumber from 'bignumber.js'\nconst SWAP_MODULE_ADDRESS = '6a2095ee19329a210f8d5ded9b5cfa55b74fdd3b1e9af1e202072db6d1be82d45bfd'\nconst BRIDGE_BURN_ADDRESS = '6a20ada13e56859a2ab2eeb93cb4dc19c6e3f5e94d0ed38ed95a30ddc43711a0ff14'\nconst BRC20PROG_MODULE_ADDRESS = '6a09425243323050524f47'\nexport enum BRC20TokenScreenTabKey {\n DETAILS = 'details',\n HISTORY = 'history',\n}\n\nexport interface BRC20OutWalletBalanceItem {\n key: 'wallet' | 'swap' | 'prog'\n label: string\n amount: string\n}\n\nconst INSWAP_SWAP_ANCHOR = '#swap'\n\nexport function useBRC20TokenHistoryLogic(props: { ticker: string; displayName?: string }) {\n const wallet = useWallet()\n const { t } = useI18n()\n\n const account = useCurrentAccount()\n\n const nav = useNavigation()\n const { ticker, displayName } = props\n\n const [items, setItems] = useState<BRC20HistoryItem[]>([])\n\n const [loading, setLoading] = useState(true)\n\n const [failed, setFailed] = useState(false)\n\n useEffect(() => {\n wallet\n .getBRC20RecentHistory(account.address, ticker)\n .then(setItems)\n .catch(() => setFailed(true))\n .finally(() => setLoading(false))\n }, [account.address, ticker])\n\n const groupedItems = useMemo(() => {\n const groups: { [date: string]: BRC20HistoryItem[] } = {}\n items.forEach(item => {\n let time = item.blocktime\n if (item.blocktime == 0) {\n time = Date.now() / 1000\n }\n const date = new Date(time * 1000).toLocaleDateString()\n if (!groups[date]) {\n groups[date] = []\n }\n groups[date].push(item)\n })\n return Object.entries(groups).map(([date, items]) => ({ date, items }))\n }, [items])\n\n const displayItems = useMemo(() => {\n return groupedItems\n .map(({ date, items }) => ({\n date,\n items: items\n .map(item => {\n const key = item.txid + item.type\n\n let mainTitle = item.type\n let subTitle = ''\n let icon = ''\n let isPending = false\n if (item.blocktime == 0) {\n isPending = true\n }\n\n if (item.type === 'send') {\n mainTitle = t('brc20_history_type_send')\n subTitle = t('brc20_history_to') + ' ' + shortAddress(item.to)\n icon = 'history_send'\n if (item.to === SWAP_MODULE_ADDRESS) {\n mainTitle = t('brc20_history_type_wrap')\n subTitle = t('brc20_history_to') + ' ' + 'InSwap'\n icon = 'history_wrap'\n } else if (item.to === BRC20PROG_MODULE_ADDRESS) {\n mainTitle = t('brc20_history_type_wrap')\n subTitle = t('brc20_history_to') + ' ' + 'brc2.0'\n icon = 'history_wrap'\n }\n } else if (item.type === 'single-step-transfer') {\n if (item.from === account.address) {\n mainTitle = t('brc20_history_type_send')\n subTitle = t('brc20_history_to') + ' ' + shortAddress(item.to)\n icon = 'history_send'\n } else {\n mainTitle = t('brc20_history_type_receive')\n subTitle = t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = 'history_receive'\n }\n } else if (item.type === 'receive') {\n mainTitle = t('brc20_history_type_receive')\n subTitle = t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = 'history_receive'\n } else if (item.type === 'withdraw') {\n mainTitle = t('brc20_history_type_unwrap')\n subTitle = t('brc20_history_from') + ' ' + 'InSwap'\n icon = 'history_unwrap'\n } else if (item.type === 'inscribe-transfer') {\n mainTitle = t('brc20_history_type_inscribe_transfer')\n icon = 'history_inscribe'\n } else if (item.type === 'inscribe-mint') {\n mainTitle = t('brc20_history_type_inscribe_mint')\n icon = 'history_inscribe'\n } else if (item.type === 'inscribe-deploy') {\n mainTitle = t('brc20_history_type_inscribe_deploy')\n icon = 'history_inscribe'\n } else if (item.type === 'brc20prog-withdraw-transfer') {\n mainTitle = t('brc20_history_type_unwrap')\n subTitle = t('brc20_history_from') + ' ' + 'brc2.0'\n icon = 'history_unwrap'\n } else if (item.type === 'brc20prog-withdraw-inscribe') {\n mainTitle = t('brc20_history_type_inscribe_transfer')\n subTitle = t('brc20_history_type_unwrap') + ' brc2.0'\n icon = 'history_inscribe'\n } else {\n const isSendLike = item.from === account.address\n mainTitle = isSendLike\n ? t('brc20_history_type_send')\n : t('brc20_history_type_receive')\n subTitle = isSendLike\n ? t('brc20_history_to') + ' ' + shortAddress(item.to)\n : t('brc20_history_from') + ' ' + shortAddress(item.from)\n icon = isSendLike ? 'history_send' : 'history_receive'\n }\n\n const amount = item.amount\n\n return {\n key,\n icon,\n mainTitle,\n subTitle,\n amount,\n pending: isPending,\n txid: item.txid,\n }\n })\n .filter(v => v !== null),\n }))\n .filter(group => group.items.length > 0)\n }, [account.address, t, groupedItems])\n\n return {\n displayItems,\n isFailed: failed,\n isEmpty: displayItems.length === 0,\n isLoading: loading,\n }\n}\n\nexport function useBRC20TokenScreenLogic() {\n const nav = useNavigation()\n const { ticker } = nav.getRouteState<'BRC20TokenScreen'>()\n const { t } = useI18n()\n\n const [activeTab, setActiveTab] = useState<BRC20TokenScreenTabKey>(BRC20TokenScreenTabKey.HISTORY)\n\n const [tokenSummary, setTokenSummary] = useState<AddressTokenSummary>({\n tokenBalance: {\n ticker,\n tickerHex: Buffer.from(ticker).toString('hex'),\n overallBalance: '',\n availableBalance: '',\n transferableBalance: '',\n availableBalanceSafe: '',\n availableBalanceUnSafe: '',\n selfMint: false,\n },\n tokenInfo: {\n totalSupply: '',\n totalMinted: '',\n decimal: 18,\n holder: '',\n inscriptionId: '',\n holdersCount: 0,\n historyCount: 0,\n logo: 'https://static.unisat.io/icon/brc20/unknown',\n },\n historyList: [],\n transferableList: [],\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const [loading, setLoading] = useState(true)\n\n const [deployInscription, setDeployInscription] = useState<Inscription>()\n\n const resetTxState = useResetTxState()\n useEffect(() => {\n wallet\n .getBRC20Summary({\n address: account.address,\n ticker,\n })\n .then(tokenSummary => {\n if (tokenSummary.tokenInfo.holder == account.address) {\n wallet\n .getInscriptionInfo(tokenSummary.tokenInfo.inscriptionId)\n .then(data => {\n setDeployInscription(data)\n })\n .finally(() => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n } else {\n setTokenSummary(tokenSummary)\n setLoading(false)\n }\n })\n .finally(() => {\n setLoading(false)\n })\n }, [])\n\n const enableMint = useMemo(() => {\n let enable = false\n if (tokenSummary.tokenBalance.selfMint) {\n if (tokenSummary.tokenInfo.holder == account.address) {\n if (tokenSummary.tokenInfo.totalMinted != tokenSummary.tokenInfo.totalSupply) {\n enable = true\n }\n }\n } else {\n if (tokenSummary.tokenInfo.totalMinted != tokenSummary.tokenInfo.totalSupply) {\n enable = true\n }\n }\n return enable\n }, [tokenSummary])\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (\n accountCapabilities.canCreateSigningRequest &&\n tokenSummary.tokenBalance.overallBalance !== '0' &&\n tokenSummary.tokenBalance.overallBalance !== ''\n ) {\n enable = true\n }\n return enable\n }, [accountCapabilities.canCreateSigningRequest, tokenSummary])\n\n const tools = useTools()\n const chainType = useChainType()\n const chain = useChain()\n\n const isBrc20Prog = useMemo(() => {\n if (chainType === ChainType.BITCOIN_MAINNET || chainType === ChainType.BITCOIN_SIGNET) {\n if (ticker.length == 6) {\n return true\n }\n }\n return false\n }, [ticker, chainType])\n\n const enableTrade = useMemo(() => {\n if (\n chainType === ChainType.BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n ) {\n return true\n } else {\n return false\n }\n }, [chainType])\n\n const enableHistory = true\n\n const tabItems = useMemo(() => {\n if (enableHistory) {\n const items = [\n {\n key: BRC20TokenScreenTabKey.HISTORY,\n label: t('history'),\n },\n {\n key: BRC20TokenScreenTabKey.DETAILS,\n label: t('details'),\n },\n ]\n return items\n } else {\n return [\n {\n key: BRC20TokenScreenTabKey.DETAILS,\n label: t('details'),\n },\n ]\n }\n }, [t, enableHistory])\n\n const showSwapBalance = chain.isFractal\n const showProgBalance = chain.enableBrc20Prog\n const swapSiteEnabled = chain.enum === ChainType.FRACTAL_BITCOIN_MAINNET\n const progSiteEnabled = chain.enum === ChainType.BITCOIN_MAINNET\n\n const onSwapBalance = tokenSummary?.tokenBalance?.swapBalance\n const onProgBalance = tokenSummary?.tokenBalance?.progBalance\n\n const inWalletBalance = tokenSummary?.tokenBalance?.overallBalance\n const outWalletBalanceItems = useMemo<BRC20OutWalletBalanceItem[]>(() => {\n const items: BRC20OutWalletBalanceItem[] = [\n {\n key: 'wallet',\n label: t('brc20_in_wallet'),\n amount: inWalletBalance || '0',\n },\n ]\n\n if (showSwapBalance) {\n items.push({\n key: 'swap',\n label: t('brc20_on_swap'),\n amount: onSwapBalance,\n })\n }\n\n if (showProgBalance) {\n items.push({\n key: 'prog',\n label: t('brc20_on_prog'),\n amount: onProgBalance,\n })\n }\n\n return items\n }, [inWalletBalance, onProgBalance, onSwapBalance, t])\n const totalBalance = useMemo(() => {\n if (!inWalletBalance) {\n return '--'\n }\n return new BigNumber(inWalletBalance)\n .plus(new BigNumber(onSwapBalance || 0))\n .plus(new BigNumber(onProgBalance || 0))\n .toString()\n }, [onSwapBalance, onProgBalance, inWalletBalance])\n\n const brc20prog_ticker = encodeURIComponent(ticker)\n const ensureSiteEnabled = (enabled: boolean) => {\n if (!enabled) {\n tools.toastError(t('not_supported'))\n return false\n }\n return true\n }\n\n // brc20prog\n const onClickWrapBrc20Prog = () => {\n if (!ensureSiteEnabled(progSiteEnabled)) return\n const url = `https://link.unisat.space/btc/wrap?tick=${brc20prog_ticker}`\n nav.navToUrl(url)\n }\n\n const onClickUnwrapBrc20Prog = () => {\n if (!ensureSiteEnabled(progSiteEnabled)) return\n const url = `https://link.unisat.space/btc/wrap?action=unwrap&tick=${brc20prog_ticker}`\n nav.navToUrl(url)\n }\n\n const onClickSendBrc20Prog = () => {\n if (!ensureSiteEnabled(progSiteEnabled)) return\n const url = `https://bestinslot.xyz/brc2.0/${brc20prog_ticker}/transfer`\n nav.navToUrl(url)\n }\n\n const inswap_ticker = encodeURIComponent(ticker)\n\n // inswap\n const onClickSwapInSwap = () => {\n if (!ensureSiteEnabled(swapSiteEnabled)) return\n const url = `https://inswap.cc/swap/pools?q=${inswap_ticker}`\n nav.navToUrl(url)\n }\n\n const onClickAddLiquidityInSwap = () => {\n if (!ensureSiteEnabled(swapSiteEnabled)) return\n const url = `https://inswap.cc/swap/pools?q=${inswap_ticker}`\n nav.navToUrl(url)\n }\n\n const onClickWrapInSwap = () => {\n if (!ensureSiteEnabled(swapSiteEnabled)) return\n const url = `https://inswap.cc/swap?tab=deposit&t=${inswap_ticker}${INSWAP_SWAP_ANCHOR}`\n nav.navToUrl(url)\n }\n\n const onClickUnwrapInSwap = () => {\n if (!ensureSiteEnabled(swapSiteEnabled)) return\n const url = `https://inswap.cc/swap?tab=withdraw&t=${inswap_ticker}${INSWAP_SWAP_ANCHOR}`\n nav.navToUrl(url)\n }\n\n const onClickSendInSwap = () => {\n if (!ensureSiteEnabled(swapSiteEnabled)) return\n const url = `https://inswap.cc/swap/assets/account?tab=assets&t=${inswap_ticker}&action=send`\n nav.navToUrl(url)\n }\n\n const onClickMint = () => {\n nav.navToInscribeBrc20(ticker)\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('BRC20SendScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const onClickTrade = () => {\n nav.navToMarketPlaceBrc20(ticker)\n }\n\n const onClickSingleStepSend = () => {\n resetTxState()\n nav.navigate('BRC20SingleStepScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const iconInfo = useBRC20IconInfo(ticker)\n\n return {\n totalBalance,\n onSwapBalance,\n onProgBalance,\n inWalletBalance,\n outWalletBalanceItems,\n enableHistory,\n enableTrade,\n enableMint,\n enableTransfer,\n loading,\n tokenSummary,\n deployInscription,\n activeTab,\n setActiveTab,\n tabItems,\n t,\n ticker,\n chain,\n tools,\n isBrc20Prog,\n iconInfo,\n showProgBalance,\n showSwapBalance,\n onClickWrapBrc20Prog,\n onClickUnwrapBrc20Prog,\n onClickSendBrc20Prog,\n\n onClickSwapInSwap,\n onClickAddLiquidityInSwap,\n onClickWrapInSwap,\n onClickUnwrapInSwap,\n onClickSendInSwap,\n\n onClickMint,\n onClickSend,\n onClickTrade,\n onClickSingleStepSend,\n }\n}\n","import { useEffect } from 'react'\n\nexport function shortAddress(address?: string, len = 8) {\n if (!address) return ''\n if (address.length <= len * 2) return address\n return address.slice(0, len) + '...' + address.slice(address.length - len)\n}\n\nexport function useAsyncEffect(\n effect: () => Promise<void | (() => void)>,\n deps: React.DependencyList = []\n) {\n useEffect(() => {\n let isMounted = true\n let cleanup: void | (() => void)\n ;(async () => {\n cleanup = await effect()\n })()\n\n return () => {\n isMounted = false\n if (cleanup) {\n cleanup()\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n}\n","import { useMemo, useState } from 'react'\n\nimport { MAX_ALIAS_NAME_LENGTH } from '@unisat/wallet-shared'\n\nimport { keyringsActions, useAppDispatch, useI18n, useNavigation, useWallet } from '..'\nexport function useEditWalletNameScreenLogic() {\n const nav = useNavigation()\n const { keyring } = nav.getRouteState<'EditWalletNameScreen'>()\n const { t } = useI18n()\n const wallet = useWallet()\n const [alianName, setAlianName] = useState(keyring.alianName || '')\n const dispatch = useAppDispatch()\n const handleOnClick = async () => {\n try {\n const newKeyring = await wallet.setKeyringAlianName(keyring, alianName || keyring.alianName)\n //@ts-ignore SAFE\n dispatch(keyringsActions.updateKeyringName(newKeyring))\n nav.goBack()\n } catch (e) {\n console.log(e)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ('Enter' == e.key && e.ctrlKey) {\n handleOnClick()\n }\n }\n\n const isValidName = useMemo(() => {\n if (alianName.length == 0) {\n return false\n }\n return true\n }, [alianName])\n\n const truncatedTitle = useMemo(() => {\n if (keyring.alianName && keyring.alianName.length > MAX_ALIAS_NAME_LENGTH) {\n return keyring.alianName.slice(0, MAX_ALIAS_NAME_LENGTH) + '...'\n }\n return keyring.alianName || ''\n }, [keyring.alianName])\n\n const onInputChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n if (value.length <= MAX_ALIAS_NAME_LENGTH) {\n setAlianName(value)\n }\n }\n\n return {\n t,\n keyring,\n isValidName,\n truncatedTitle,\n handleOnClick,\n handleOnKeyUp,\n onInputChange,\n }\n}\n","import { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useI18n, useWallet } from '../context'\nimport { useChain, useFeeRateBar, useUpdateFeeRateBar } from '../hooks'\nimport { useAsyncEffect } from '../utils/ui-utils'\n\nenum FeeRateType {\n SLOW,\n AVG,\n FAST,\n CUSTOM,\n}\n\ninterface FeeOption {\n type?: FeeRateType\n title: string\n desc?: string\n feeRate: number\n}\n\nconst translationKeys = {\n [FeeRateType.SLOW]: { type: FeeRateType.SLOW, title: 'slow', desc: 'feerate_slow_desc' },\n [FeeRateType.AVG]: { type: FeeRateType.AVG, title: 'avg', desc: 'feerate_avg_desc' },\n [FeeRateType.FAST]: { type: FeeRateType.FAST, title: 'fast', desc: 'feerate_fast_desc' },\n} as const\n\nconst MAX_FEE_RATE = 10000\nconst DEFAULT_FEE_RATE = 1\nconst AVG_OPTION_INDEX = 1\n\n// Fee rate display rules:\n// if (Fast = Avg = Slow) -> show Fast time (30s) for all\n// if (Fast = Avg) -> show Fast time (30s) for both\n// if (Avg = Slow) -> show Avg time (1.5m) for both\n\nfunction getFractalFeeDesc(\n index: FeeRateType,\n fastRate: number,\n avgRate: number,\n slowRate: number,\n t: (key: string) => string\n): string {\n const { FAST, AVG, SLOW } = FeeRateType\n\n // All rates are equal\n if (fastRate === avgRate && avgRate === slowRate) {\n return t('feerate_fast_desc_fb')\n }\n\n // Fast equals Avg\n if (fastRate === avgRate) {\n return index === SLOW ? t('feerate_slow_desc_fb') : t('feerate_fast_desc_fb')\n }\n\n // Avg equals Slow\n if (avgRate === slowRate && (index === AVG || index === SLOW)) {\n return t('feerate_avg_desc_fb')\n }\n\n // Default descriptions\n const descriptions = {\n [FAST]: 'feerate_fast_desc_fb',\n [AVG]: 'feerate_avg_desc_fb',\n [SLOW]: 'feerate_slow_desc_fb',\n }\n\n return t(descriptions[index] || '')\n}\n\nfunction formatFeeRateTextKey(\n list: FeeOption[],\n isFractal: boolean,\n supportLowFeeMode: boolean,\n t: (key: string) => string\n): FeeOption[] {\n const { FAST, AVG, SLOW } = FeeRateType\n const fastRate = list[FAST]?.feeRate ?? 0\n const avgRate = list[AVG]?.feeRate ?? 0\n const slowRate = list[SLOW]?.feeRate ?? 0\n\n return list.map((option, index) => {\n const keys = translationKeys[index as FeeRateType]\n if (!keys) return option\n\n let title = t(keys.title)\n let desc = t(keys.desc)\n\n if (isFractal) {\n desc = getFractalFeeDesc(index, fastRate, avgRate, slowRate, t)\n } else {\n if (fastRate === slowRate) {\n desc = t('feerate_fast_desc')\n }\n\n if (supportLowFeeMode) {\n if (index === SLOW) {\n title = t('feerate_sub1_title')\n desc = ''\n }\n }\n }\n\n return {\n ...option,\n title,\n desc,\n }\n })\n}\n\nexport function useFeeRateBarLogic({ readonly }: { readonly?: boolean }) {\n const wallet = useWallet()\n const [feeOptions, setFeeOptions] = useState<FeeOption[]>([])\n const feeRateBarState = useFeeRateBar()\n const updateFeeRateBar = useUpdateFeeRateBar()\n const feeRateInputVal = feeRateBarState.feeRateInputVal\n const feeOptionIndex = feeRateBarState.feeOptionIndex\n const showCustomInput = feeRateBarState.showCustomInput\n const feeRate = feeRateBarState.feeRate\n const { t, isSpecialLocale } = useI18n()\n const chain = useChain()\n const isFractal = chain.isFractal\n const fontSize = useMemo(() => (isSpecialLocale ? 'xxxs' : 'xxs'), [isSpecialLocale])\n\n const [showLowFeeModeTipsPopover, setShowLowFeeModeTipsPopover] = useState(false)\n\n const supportLowFeeMode = chain.enableLowFeeMode ?? false\n\n useAsyncEffect(async () => {\n const feeSummary = await wallet.getFeeSummary()\n\n if (supportLowFeeMode) {\n const lowFeeSummary = await wallet.getLowFeeSummary()\n feeSummary.list[0] = lowFeeSummary.list[1]\n\n // try use slow fee rate if it's lower than 1 sat/vB\n if (feeSummary.list[0].feeRate > 1) {\n feeSummary.list[0] = lowFeeSummary.list[0]\n }\n\n // ensure slow fee rate is below 1 sat/vB\n if (feeSummary.list[0].feeRate > 1) {\n feeSummary.list[0].feeRate = 0.1\n }\n }\n\n const translatedList = formatFeeRateTextKey(feeSummary.list, isFractal, supportLowFeeMode, t)\n const options = readonly\n ? translatedList\n : [...translatedList, { type: FeeRateType.CUSTOM, title: t('custom'), feeRate: 0 }]\n\n setFeeOptions(options)\n }, [wallet, isFractal, t, supportLowFeeMode, readonly])\n\n // Memoize default value to avoid repeated calculations\n const defaultFeeRate = useMemo(\n () => feeOptions[AVG_OPTION_INDEX]?.feeRate ?? DEFAULT_FEE_RATE,\n [feeOptions]\n )\n\n useEffect(() => {\n let val = defaultFeeRate\n if (feeOptionIndex === FeeRateType.CUSTOM) {\n val = parseFloat(feeRateInputVal) || 0\n } else if (feeOptions.length > 0) {\n val = feeOptions[feeOptionIndex]?.feeRate ?? defaultFeeRate\n }\n\n if (val.toString() == feeRate.toString()) {\n return\n }\n\n if (val === feeRate) {\n return\n }\n\n updateFeeRateBar({ feeRate: val })\n }, [feeOptions, feeOptionIndex, feeRateInputVal, defaultFeeRate, feeRate])\n\n const adjustFeeRateInput = useCallback(\n (inputVal: string) => {\n // When user manually changes the input, check if we need to switch to CUSTOM\n const shouldSwitchToCustom = feeOptionIndex !== FeeRateType.CUSTOM && feeOptions.length > 0\n const selectedOption = feeOptions[feeOptionIndex]\n\n // If currently on SLOW/AVG/FAST and user changes the value, switch to CUSTOM\n if (shouldSwitchToCustom && selectedOption) {\n const currentValue = selectedOption.feeRate.toString()\n if (inputVal !== currentValue) {\n updateFeeRateBar({\n feeRateInputVal: inputVal,\n feeOptionIndex: FeeRateType.CUSTOM,\n })\n return\n }\n }\n\n // Allow empty input\n if (inputVal === '') {\n updateFeeRateBar({ feeRateInputVal: '' })\n return\n }\n\n const val = parseFloat(inputVal)\n\n // Check if input is a valid number\n if (isNaN(val)) {\n updateFeeRateBar({ feeRateInputVal: '' })\n return\n }\n\n // Allow intermediate input like \"0\" or \"0.\" for typing \"0.1\"\n if (inputVal === '0' || inputVal.endsWith('.')) {\n updateFeeRateBar({ feeRateInputVal: inputVal })\n return\n }\n\n // Validate and constrain the value\n if (val <= 0) {\n updateFeeRateBar({ feeRateInputVal: defaultFeeRate.toString() })\n } else if (val > MAX_FEE_RATE) {\n updateFeeRateBar({ feeRateInputVal: MAX_FEE_RATE.toString() })\n } else if (val < 1 && supportLowFeeMode == false) {\n updateFeeRateBar({ feeRateInputVal: '1' })\n } else if (val < 0.1) {\n updateFeeRateBar({ feeRateInputVal: '0.1' })\n } else {\n updateFeeRateBar({ feeRateInputVal: inputVal })\n }\n },\n [defaultFeeRate, updateFeeRateBar, feeOptionIndex, feeOptions, supportLowFeeMode]\n )\n\n const isCustomOption = useCallback((option: FeeOption) => option.type === FeeRateType.CUSTOM, [t])\n\n const toggleLowFeeRate = useCallback(async () => {\n const selectedOption = feeOptions[FeeRateType.SLOW]\n updateFeeRateBar({\n feeOptionIndex: FeeRateType.SLOW,\n showCustomInput: true,\n feeRateInputVal: selectedOption.feeRate.toString(),\n })\n }, [feeOptions, updateFeeRateBar, feeRateInputVal])\n\n const setFeeOptionIndex = useCallback(\n async (index: number) => {\n const selectedOption = feeOptions[index]\n if (supportLowFeeMode && index === FeeRateType.SLOW) {\n const acceptLowFeeMode = await wallet.getAcceptLowFeeMode()\n if (acceptLowFeeMode === false) {\n setShowLowFeeModeTipsPopover(true)\n return\n }\n }\n if (index !== FeeRateType.CUSTOM && selectedOption) {\n // When clicking on SLOW/AVG/FAST, show input and fill with the corresponding value\n updateFeeRateBar({\n feeOptionIndex: index,\n showCustomInput: true,\n feeRateInputVal: selectedOption.feeRate.toString(),\n })\n } else if (index === FeeRateType.CUSTOM) {\n // When clicking on CUSTOM, show input with current custom value or empty\n updateFeeRateBar({\n feeOptionIndex: index,\n showCustomInput: true,\n })\n }\n },\n [feeOptions, updateFeeRateBar]\n )\n\n const toggleCustomInput = useCallback(\n (show: boolean) => {\n updateFeeRateBar({ showCustomInput: show })\n },\n [updateFeeRateBar]\n )\n\n const isSub1FeeOptionOn = useMemo(() => {\n if (supportLowFeeMode && feeOptionIndex === FeeRateType.SLOW) {\n return true\n }\n return false\n }, [feeOptionIndex, supportLowFeeMode])\n\n return {\n feeOptions,\n feeOptionIndex,\n setFeeOptionIndex,\n feeRateInputVal,\n adjustFeeRateInput,\n isCustomOption,\n fontSize,\n isSpecialLocale,\n toggleLowFeeRate,\n showCustomInput: readonly ? false : showCustomInput,\n toggleCustomInput,\n supportLowFeeMode,\n showLowFeeModeTipsPopover,\n setShowLowFeeModeTipsPopover,\n isSub1FeeOptionOn,\n }\n}\n","import { getAutoLockTimes } from '@unisat/wallet-shared'\nimport { useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from '../context'\nimport { useAppDispatch, useAutoLockTimeId } from '../hooks'\nimport { settingsActions } from '../reducers'\n\nexport function useLockTimePageLogic() {\n const { t } = useI18n()\n const autoLockTimeId = useAutoLockTimeId()\n const autoLockTimes = getAutoLockTimes(t)\n const dispatch = useAppDispatch()\n const wallet = useWallet()\n const tools = useTools()\n const [loading, setLoading] = useState(false)\n const nav = useNavigation()\n\n const handleSelectOption = async option => {\n if (loading) return\n\n setLoading(true)\n try {\n const lockTimeId = option.id\n await wallet.setAutoLockTimeId(lockTimeId)\n // @ts-ignore SAFE\n dispatch(settingsActions.updateSettings({ autoLockTimeId: lockTimeId }))\n tools.toastSuccess(`${t('the_auto_lock_time_has_been_changed_to')} ${option.label}`)\n\n setTimeout(() => {\n nav.goBack()\n }, 300)\n } catch (error) {\n console.error('Failed to set lock time:', error)\n } finally {\n setLoading(false)\n }\n }\n return {\n autoLockTimeId,\n autoLockTimes,\n loading,\n handleSelectOption,\n }\n}\n","import { AnnouncementLinkType, StoredNotification } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\n\nexport function useUnreadNotificationsCount() {\n const wallet = useWallet()\n const [unreadCount, setUnreadCount] = useState(0)\n\n useEffect(() => {\n const updateUnreadCount = async () => {\n const count = await wallet.getNotificationUnreadCount()\n setUnreadCount(count)\n }\n\n updateUnreadCount()\n\n // Poll every 3 seconds for unread count updates.\n const interval = setInterval(updateUnreadCount, 3000)\n return () => clearInterval(interval)\n }, [wallet])\n\n return unreadCount\n}\n\nexport function useNotificationsLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const [notifications, setNotifications] = useState<StoredNotification[]>([])\n const [loading, setLoading] = useState(true)\n\n const fetchNotifications = useCallback(async () => {\n try {\n setLoading(true)\n const data = await wallet.getNotifications()\n setNotifications(data)\n } catch (error) {\n console.error('Failed to fetch notifications:', error)\n setNotifications([])\n } finally {\n setLoading(false)\n }\n }, [wallet])\n\n useEffect(() => {\n fetchNotifications()\n }, [fetchNotifications])\n\n const handleReadNotification = useCallback(\n async (id: string) => {\n await wallet.readNotification(id)\n // Update local state\n setNotifications(prev => prev.map(n => (n.id === id ? { ...n, readAt: Date.now() } : n)))\n },\n [wallet]\n )\n\n const tools = useTools()\n const { t } = useI18n()\n const handleReadAll = useCallback(async () => {\n await wallet.readAllNotifications()\n // Update local state\n const now = Date.now()\n setNotifications(prev => prev.map(n => ({ ...n, readAt: now })))\n tools.toastSuccess(t('all_marked_as_read'))\n }, [wallet])\n\n const handleDeleteNotification = useCallback(\n async (id: string) => {\n await wallet.deleteNotification(id)\n // Update local state\n setNotifications(prev => prev.filter(n => n.id !== id))\n },\n [wallet]\n )\n\n const unreadCount = notifications.filter(n => n.readAt === undefined).length\n\n const handleCardClick = async (notification: StoredNotification) => {\n if (notification.readAt === undefined) {\n await handleReadNotification(notification.id)\n }\n if (notification.link) {\n if (notification.linkType === AnnouncementLinkType.EXTERNAL_LINK) {\n nav.navToUrl(notification.link, true)\n return\n }\n nav.navToUrl(notification.link)\n }\n }\n const formatTime = (timestamp: number) => {\n const now = Date.now()\n const diff = now - timestamp\n const minutes = Math.floor(diff / 60000)\n const hours = Math.floor(diff / 3600000)\n const days = Math.floor(diff / 86400000)\n\n if (minutes < 1) return t('just_now')\n if (minutes < 60) return String(minutes) + ' ' + t('minutes_ago')\n if (hours < 24) return String(hours) + ' ' + t('hours_ago')\n if (days < 7) return String(days) + ' ' + t('days_ago')\n return new Date(timestamp).toLocaleDateString()\n }\n\n return {\n notifications,\n loading,\n unreadCount,\n handleReadNotification,\n handleReadAll,\n handleDeleteNotification,\n fetchNotifications,\n handleCardClick,\n formatTime,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from '../context'\nimport {\n useFeeRateBar,\n useFetchUtxosCallback,\n useOrdinalsTx,\n usePrepareSendOrdinalsInscriptionCallback,\n} from '../hooks'\nimport { getAddressUtxoDust, isValidAddress } from '../utils/bitcoin-utils'\n\nexport function useSendOrdinalsInscriptionScreenLogic() {\n const [disabled, setDisabled] = useState(true)\n const nav = useNavigation()\n\n const { inscription } = nav.getRouteState<'SendOrdinalsInscriptionScreen'>()\n const ordinalsTx = useOrdinalsTx()\n const [toInfo, setToInfo] = useState({\n address: ordinalsTx.toAddress,\n domain: ordinalsTx.toDomain,\n })\n const { t } = useI18n()\n\n const fetchBtcUtxos = useFetchUtxosCallback()\n const tools = useTools()\n useEffect(() => {\n tools.showLoading(true)\n fetchBtcUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const [error, setError] = useState('')\n const prepareSendOrdinalsInscription = usePrepareSendOrdinalsInscriptionCallback()\n const { feeRate } = useFeeRateBar()\n const defaultOutputValue = inscription ? inscription.outputValue : 10000\n\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const [enableRBF, setEnableRBF] = useState(true)\n const [inscriptions, setInscriptions] = useState<Inscription[]>([])\n\n const wallet = useWallet()\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setEnableRBF(enableRBF)\n })\n }, [wallet])\n\n useEffect(() => {\n wallet.getInscriptionUtxoDetail(inscription.inscriptionId).then(v => {\n setInscriptions(v.inscriptions)\n })\n }, [])\n\n const onEnableRBFChange = (value: boolean) => {\n setEnableRBF(value)\n wallet.setEnableRBF(value)\n }\n\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n return getAddressUtxoDust(toInfo.address)\n } else {\n return 0\n }\n }, [toInfo.address])\n\n useEffect(() => {\n setDisabled(true)\n setError('')\n\n if (feeRate <= 0) {\n setError(t('invalid_fee_rate'))\n return\n }\n\n let dustUtxo = inscription.outputValue\n try {\n if (toInfo.address) {\n dustUtxo = getAddressUtxoDust(toInfo.address)\n }\n } catch (e) {\n // console.log(e);\n }\n\n const maxOffset = inscriptions.reduce((pre, cur) => {\n return Math.max(pre, cur.offset)\n }, 0)\n\n const minOutputValue = Math.max(maxOffset + 1, dustUtxo)\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, feeRate, outputValue, inscriptions])\n\n const onAddressInputChange = val => {\n setToInfo(val)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickNext = () => {\n prepareSendOrdinalsInscription({\n toAddressInfo: toInfo,\n inscriptionId: inscription.inscriptionId,\n feeRate,\n outputValue,\n enableRBF,\n })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n t,\n onAddressInputChange,\n toInfo,\n outputValue,\n enableRBF,\n setEnableRBF: onEnableRBFChange,\n minOutputValue,\n defaultOutputValue,\n setOutputValue,\n inscriptions,\n disabled,\n error,\n onClickBack,\n onClickNext,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { numUtils } from '@unisat/base-utils'\nimport { COIN_DUST } from '@unisat/wallet-shared'\nimport {\n useAccountBalance,\n useBTCUnit,\n useChain,\n useFeeRateBar,\n useFetchUtxosCallback,\n useI18n,\n useNavigation,\n usePrepareSendBTCCallback,\n useTools,\n useWallet,\n useUiTxCreateScreen,\n useUpdateUiTxCreateScreen,\n useWalletConfig,\n} from '..'\nimport { isValidAddress } from '../utils/bitcoin-utils'\n\nexport function useTxCreateScreenLogic() {\n const { t, isSpecialLocale } = useI18n()\n const accountBalance = useAccountBalance()\n const nav = useNavigation()\n const btcUnit = useBTCUnit()\n\n const [disabled, setDisabled] = useState(true)\n\n const setUiState = useUpdateUiTxCreateScreen()\n const uiState = useUiTxCreateScreen()\n const feeRateBarState = useFeeRateBar()\n\n const toInfo = uiState.toInfo\n const inputAmount = uiState.inputAmount\n const enableRBF = uiState.enableRBF\n const feeRate = feeRateBarState.feeRate\n\n const [error, setError] = useState('')\n\n const [autoAdjust, setAutoAdjust] = useState(false)\n const fetchUtxos = useFetchUtxosCallback()\n const wallet = useWallet()\n\n const tools = useTools()\n useEffect(() => {\n tools.showLoading(true)\n fetchUtxos().finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setUiState({ enableRBF })\n })\n }, [wallet, setUiState])\n\n const prepareSendBTC = usePrepareSendBTCCallback()\n\n const toSatoshis = useMemo(() => {\n if (!inputAmount) return 0\n return numUtils.amountToSatoshis(inputAmount)\n }, [inputAmount])\n\n const dustAmount = useMemo(() => numUtils.satoshisToAmount(COIN_DUST), [COIN_DUST])\n\n const availableAmount = numUtils.satoshisToAmount(accountBalance.availableBalance)\n const unavailableAmount = numUtils.satoshisToAmount(accountBalance.unavailableBalance)\n\n const showUnavailable = accountBalance.unavailableBalance > 0\n\n const chain = useChain()\n useEffect(() => {\n setError('')\n setDisabled(true)\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!toSatoshis) {\n return\n }\n if (toSatoshis < COIN_DUST) {\n setError(`${t('amount_must_be_at_least')} ${dustAmount} ${btcUnit}`)\n return\n }\n\n if (toSatoshis > accountBalance.availableBalance) {\n setError(t('amount_exceeds_your_available_balance'))\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate])\n\n const walletConfig = useWalletConfig()\n\n const unavailableTipText = useMemo(() => {\n let tipText = ''\n tipText += t('unavailable_tooltip')\n\n if (walletConfig.disableUtxoTools) {\n tipText += t('future_versions_will_support_spending_these_assets')\n } else {\n tipText += t('you_can_unlock_these_assets_by_using_the_utxos_tools')\n }\n return tipText\n }, [chain.enum])\n\n const headerTitle = `${t('send')} ${btcUnit}`\n\n const onAddressInputChange = val => setUiState({ toInfo: val })\n\n const onAmountInputChange = amount => {\n if (autoAdjust == true) {\n setAutoAdjust(false)\n }\n setUiState({ inputAmount: amount })\n }\n\n const onAmountMaxClick = () => {\n setAutoAdjust(true)\n setUiState({ inputAmount: availableAmount.toString() })\n }\n\n const onRBFChange = (value: boolean) => {\n setUiState({ enableRBF: value })\n wallet.setEnableRBF(value)\n }\n\n const onClickNext = () => {\n prepareSendBTC({ toAddressInfo: toInfo, toAmount: toSatoshis, feeRate, enableRBF })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', {\n toSignData,\n })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n headerTitle,\n chain,\n\n toInfo,\n onAddressInputChange,\n\n toSatoshis,\n inputAmount,\n onAmountInputChange,\n onAmountMaxClick,\n enableRBF,\n onRBFChange,\n\n showUnavailable,\n availableAmount,\n unavailableAmount,\n unavailableTipText,\n btcUnit,\n t,\n\n walletConfig,\n isSpecialLocale,\n\n error,\n disabled,\n\n onClickNext,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport {\n InscribeOrder,\n SignedData,\n SignPsbtParams,\n TokenBalance,\n TokenInfo,\n ToSignData,\n} from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useCallback, useEffect, useMemo, useState } from 'react'\nimport { useApproval, useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useBTCUnit,\n useCurrentAccount,\n useFeeRateBar,\n useFetchUtxosCallback,\n usePrepareSendBypassHeadOffsetsCallback,\n usePushBitcoinTxCallback,\n useUpdateFeeRateBar,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nenum Step {\n STEP1,\n STEP2,\n STEP3,\n STEP4,\n}\n\ninterface ContextData {\n step: Step\n ticker: string\n session?: any\n tokenBalance?: TokenBalance\n order?: InscribeOrder\n toSignData?: ToSignData\n amount?: string\n isApproval: boolean\n tokenInfo?: TokenInfo\n amountEditable?: boolean\n enableRBF: boolean\n}\n\ninterface UpdateContextDataParams {\n step?: Step\n ticket?: string\n session?: any\n tokenBalance?: TokenBalance\n order?: InscribeOrder\n toSignData?: ToSignData\n amount?: string\n tokenInfo?: TokenInfo\n amountEditable?: boolean\n enableRBF?: boolean\n}\n\nexport interface BRC20InscribeTransferParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nexport function useBRC20InscribeTransferLogic() {\n const nav = useNavigation()\n const { ticker } = nav.getRouteState<'BRC20InscribeTransfer'>()\n\n const [contextData, setContextData] = useState<ContextData>({\n step: Step.STEP1,\n ticker: ticker,\n isApproval: false,\n enableRBF: true,\n })\n const updateContextData = useCallback((params: UpdateContextDataParams) => {\n setContextData(prev => Object.assign({}, prev, params))\n }, [])\n return {\n contextData,\n updateContextData,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep1(params: BRC20InscribeTransferParams) {\n const { contextData, updateContextData } = params\n const { t } = useI18n()\n const nav = useNavigation()\n\n const { rejectApproval } = useApproval()\n\n const handleCancel = () => {\n rejectApproval(t('user_rejected_the_request'))\n }\n\n const wallet = useWallet()\n const account = useCurrentAccount()\n const feeRateBarState = useFeeRateBar()\n const updateFeeRateBar = useUpdateFeeRateBar()\n const [inputAmount, setInputAmount] = useState('')\n\n const tools = useTools()\n const prepareSendBypassHeadOffsets = usePrepareSendBypassHeadOffsetsCallback()\n\n const fetchUtxos = useFetchUtxosCallback()\n\n const [loading, setLoading] = useState(true)\n const [loadingOnly, setLoadingOnly] = useState(false)\n const [inputError, setInputError] = useState('')\n const [inputErrorAvailable, setInputErrorAvailable] = useState('')\n\n const [disabled, setDisabled] = useState(true)\n\n const [inputDisabled, setInputDisabled] = useState(false)\n\n const defaultOutputValue = 546\n // const defaultOutputValue = getAddressUtxoDust(account.address);\n\n const [outputValue, setOutputValue] = useState<number>(defaultOutputValue)\n\n useEffect(() => {\n if (contextData.amount) {\n setInputAmount(contextData.amount.toString())\n setInputDisabled(true)\n }\n }, [])\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n updateContextData({ enableRBF })\n })\n }, [])\n\n useEffect(() => {\n setInputError('')\n setInputErrorAvailable('')\n setDisabled(true)\n if (!inputAmount) {\n return\n }\n\n if (inputAmount.split('.').length > 1) {\n const decimal = inputAmount.split('.')[1].length\n const token_decimal = contextData.tokenInfo?.decimal || 0\n if (decimal > token_decimal) {\n setInputError(\n `${t('this_token_only_supports_up_to')} ${token_decimal} ${t('decimal_places')}`\n )\n return\n }\n }\n\n const amount = new BigNumber(inputAmount)\n if (!amount) {\n return\n }\n\n if (!contextData.tokenBalance) {\n return\n }\n\n if (amount.lte(0)) {\n return\n }\n\n if (amount.gt(contextData.tokenBalance.availableBalanceSafe)) {\n setInputErrorAvailable(t('insufficient_balance'))\n return\n }\n\n if (feeRateBarState.feeRate <= 0) {\n return\n }\n\n const dust = getAddressUtxoDust(account.address)\n if (outputValue < dust) {\n setInputError(`${t('output_value_must_be_at_least')} ${dust}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n setDisabled(false)\n }, [inputAmount, feeRateBarState.feeRate, outputValue, contextData.tokenBalance])\n\n useEffect(() => {\n fetchUtxos()\n\n wallet\n .getBRC20Summary({\n address: account.address,\n ticker: contextData.ticker,\n })\n .then(v => {\n updateContextData({ tokenBalance: v.tokenBalance, tokenInfo: v.tokenInfo })\n setTimeout(() => {\n setLoading(false)\n }, 100)\n })\n .catch(e => {\n tools.toastError(e.message)\n })\n }, [])\n\n const onClickInscribe = async () => {\n try {\n tools.showLoading(true)\n const amount = inputAmount\n const order = await wallet.inscribeBRC20Transfer(\n account.address,\n contextData.ticker,\n amount,\n feeRateBarState.feeRate,\n outputValue\n )\n\n const toSignData = await prepareSendBypassHeadOffsets({\n toAddressInfo: { address: order.payAddress, domain: '' },\n toAmount: order.totalFee,\n feeRate: feeRateBarState.feeRate,\n enableRBF: contextData.enableRBF,\n })\n updateContextData({ order, amount, toSignData, step: Step.STEP2 })\n } catch (e) {\n tools.toastError((e as Error).message.replace('Error:', ''))\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n onClickInscribe,\n loading,\n t,\n nav,\n inputAmount,\n inputError,\n setInputAmount,\n inputDisabled,\n inputErrorAvailable,\n defaultOutputValue,\n setOutputValue,\n disabled,\n enableRBF: contextData.enableRBF,\n setEnableRBF: (value: boolean) => {\n updateContextData({ enableRBF: value })\n wallet.setEnableRBF(value)\n },\n loadingOnly,\n handleCancel,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep2(params: BRC20InscribeTransferParams) {\n const { contextData } = params\n const { order, tokenBalance, amount, toSignData, session } = contextData\n const btcUnit = useBTCUnit()\n const { t } = useI18n()\n\n if (!order || !tokenBalance || !toSignData) {\n return {\n isEmpty: true,\n networkFee: '0',\n outputValue: '0',\n minerFee: '0',\n originServiceFee: '0',\n serviceFee: '0',\n totalFee: '0',\n btcUnit,\n t,\n session,\n amount,\n tokenBalance,\n }\n }\n\n const fee = toSignData.estimatedFee || 0\n const networkFee = useMemo(() => numUtils.satoshisToAmount(fee), [fee])\n const outputValue = useMemo(\n () => numUtils.satoshisToAmount(order.outputValue),\n [order.outputValue]\n )\n const minerFee = useMemo(() => numUtils.satoshisToAmount(order.minerFee + fee), [order.minerFee])\n const originServiceFee = useMemo(\n () => numUtils.satoshisToAmount(order.originServiceFee),\n [order.originServiceFee]\n )\n const serviceFee = useMemo(() => numUtils.satoshisToAmount(order.serviceFee), [order.serviceFee])\n const totalFee = useMemo(() => numUtils.satoshisToAmount(order.totalFee + fee), [order.totalFee])\n\n return {\n networkFee,\n outputValue,\n minerFee,\n originServiceFee,\n serviceFee,\n totalFee,\n btcUnit,\n t,\n session,\n amount,\n tokenBalance,\n order,\n toSignData,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep3(params: BRC20InscribeTransferParams) {\n const { contextData, updateContextData } = params\n\n const pushBitcoinTx = usePushBitcoinTxCallback()\n const nav = useNavigation()\n\n const onHeaderBack = () => {\n updateContextData({\n step: Step.STEP2,\n })\n }\n\n const onSignPsbtHandleCancel = () => {\n updateContextData({\n step: Step.STEP2,\n })\n }\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [contextData.toSignData!],\n },\n }\n\n const tools = useTools()\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n updateContextData({\n step: Step.STEP4,\n })\n } else {\n throw new Error(error)\n }\n return\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n return {\n signPsbtParams,\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onHeaderBack,\n }\n}\n\nexport function useBRC20InscribeTransferLogicStep4(params: BRC20InscribeTransferParams) {\n const { contextData } = params\n const { tokenBalance, order } = contextData\n const tools = useTools()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const { resolveApproval, rejectApproval } = useApproval()\n const nav = useNavigation()\n const [result, setResult] = useState<any>()\n const { t } = useI18n()\n const checkResult = async () => {\n const result = await wallet.getInscribeResult(order.orderId)\n if (!result) {\n setTimeout(() => {\n checkResult()\n }, 2000)\n return\n }\n tools.showLoading(false)\n setResult(result)\n }\n\n useEffect(() => {\n checkResult()\n }, [])\n\n const onClickConfirm = () => {\n tools.showLoading(true)\n wallet\n .getBRC20Summary({\n address: currentAccount.address,\n ticker: tokenBalance.ticker,\n })\n .then(v => {\n if (contextData.isApproval) {\n resolveApproval({\n inscriptionId: result.inscriptionId,\n inscriptionNumber: result.inscriptionNumber,\n ticker: tokenBalance.ticker,\n amount: result.amount,\n })\n } else {\n nav.navigate('BRC20SendScreen', {\n tokenBalance: v.tokenBalance,\n selectedInscriptionIds: [result.inscriptionId],\n selectedAmount: result.amount,\n tokenInfo: v.tokenInfo,\n })\n }\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }\n\n return {\n t,\n result,\n onClickConfirm,\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useCurrentAccountCapabilities, useResetTxState } from 'src/hooks'\n\nexport function useAlkanesNFTScreenLogic() {\n const nav = useNavigation()\n const { alkanesInfo } = nav.getRouteState<'AlkanesNFTScreen'>()\n\n const { t } = useI18n()\n\n const resetTxState = useResetTxState()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const [availableUtxo, setAvailableUtxo] = useState(0)\n const wallet = useWallet()\n\n useEffect(() => {\n const fetchData = async () => {\n const utxos = await wallet.getAssetUtxosAlkanes(alkanesInfo.alkaneid)\n setAvailableUtxo(utxos.length)\n }\n fetchData()\n }, [wallet])\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendAlkanesNFTScreen', {\n alkanesInfo,\n })\n }\n\n const disabledSend = !accountCapabilities.canCreateSigningRequest || availableUtxo <= 0\n\n return {\n alkanesInfo,\n t,\n availableUtxo,\n onClickBack,\n onClickSend,\n disabledSend,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\n\nimport { AddressAlkanesTokenSummary } from '@unisat/wallet-shared'\nimport {\n useAlkanesIconInfo,\n useAlkanesTokenInfoExplorerUrl,\n useCurrentAccount,\n useCurrentAccountCapabilities,\n useI18n,\n useNavigation,\n useResetTxState,\n useTools,\n useWallet,\n} from '..'\n\nexport function useAlkanesTokenScreenLogic() {\n const nav = useNavigation()\n const { alkaneid } = nav.getRouteState<'AlkanesTokenScreen'>()\n const [tokenSummary, setTokenSummary] = useState<AddressAlkanesTokenSummary>({\n tokenBalance: {\n alkaneid: '',\n name: '',\n amount: '',\n symbol: '',\n divisibility: 0,\n available: '',\n },\n tokenInfo: {\n alkaneid: '',\n name: '',\n symbol: '',\n totalSupply: '10000000000000',\n maxSupply: '10000000000000',\n cap: 0,\n mintable: false,\n perMint: '0',\n minted: 0,\n holders: 0,\n aligned: true,\n nftData: {\n collectionId: '',\n },\n logo: '',\n },\n tradeUrl: '',\n mintUrl: '',\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const [loading, setLoading] = useState(true)\n\n const [warning, setWarning] = useState(false)\n\n const { t } = useI18n()\n\n useEffect(() => {\n wallet.getAddressAlkanesTokenSummary(account.address, alkaneid, false).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const resetTxState = useResetTxState()\n\n const enableMint = useMemo(() => {\n return tokenSummary.mintUrl && tokenSummary.mintUrl.trim() !== ''\n }, [tokenSummary.mintUrl])\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (accountCapabilities.canCreateSigningRequest && tokenSummary.tokenBalance.amount !== '0') {\n enable = true\n }\n return enable\n }, [accountCapabilities.canCreateSigningRequest, tokenSummary])\n\n const tools = useTools()\n\n const enableTrade = useMemo(() => {\n return tokenSummary.tradeUrl && tokenSummary.tradeUrl.trim() !== ''\n }, [tokenSummary.tradeUrl])\n\n const onClickMint = () => {\n if (tokenSummary.mintUrl) {\n nav.navToUrl(tokenSummary.mintUrl)\n }\n }\n\n const onClickSend = () => {\n if (tokenSummary.tokenInfo?.aligned === false) {\n // tools.toastError(t('important_to_not_transfer_this_token'));\n setWarning(true)\n return\n }\n\n resetTxState()\n nav.navigate('SendAlkanesScreen', {\n tokenBalance: tokenSummary.tokenBalance,\n tokenInfo: tokenSummary.tokenInfo,\n })\n }\n\n const onClickTrade = () => {\n if (tokenSummary.tradeUrl) {\n nav.navToUrl(tokenSummary.tradeUrl)\n }\n }\n\n const iconInfo = useAlkanesIconInfo(\n tokenSummary.tokenBalance.name,\n tokenSummary.tokenBalance.alkaneid\n )\n\n const alkanesExplorerUrl = useAlkanesTokenInfoExplorerUrl(tokenSummary.tokenInfo.alkaneid)\n\n const onClickViewOnExplorer = () => {\n nav.navToUrl(alkanesExplorerUrl)\n }\n\n return {\n tokenSummary,\n loading,\n enableMint,\n enableTransfer,\n enableTrade,\n warning,\n setWarning,\n t,\n tools,\n onClickMint,\n onClickSend,\n onClickTrade,\n onClickViewOnExplorer,\n iconInfo,\n }\n}\n","import { OW_HD_PATH, RESTORE_WALLETS, RestoreWalletType, WordsType } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useAppDispatch, useCreateAccountCallback } from 'src/hooks'\nimport { accountActions, keyringsActions } from 'src/reducers'\nimport { validateMnemonic } from 'src/utils/bitcoin-utils'\n\nexport enum TabType {\n STEP1 = 'STEP1',\n STEP2 = 'STEP2',\n CHOOSE_ADDRESS_TYPE = 'CHOOSE_ADDRESS_TYPE',\n}\n\nfunction normalizeWhitespace(str: string) {\n str = str.replace(/[\\n\\r\\t]+/g, ' ')\n str = str.replace(/\\s+/g, ' ')\n str = str.trim()\n return str\n}\n\nexport interface ContextData {\n mnemonics: string\n hdPath: string\n passphrase: string\n addressType: AddressType\n step1Completed: boolean\n tabType: TabType\n restoreWalletType: RestoreWalletType\n isRestore: boolean\n isCustom: boolean\n customHdPath: string\n addressTypeIndex: number\n wordsType: WordsType\n walletName?: string\n}\n\nexport interface UpdateContextDataParams {\n mnemonics?: string\n hdPath?: string\n passphrase?: string\n addressType?: AddressType\n step1Completed?: boolean\n tabType?: TabType\n restoreWalletType?: RestoreWalletType\n isCustom?: boolean\n customHdPath?: string\n addressTypeIndex?: number\n wordsType?: WordsType\n walletName?: string\n}\n\ninterface WordsItem {\n key: WordsType\n label: string\n count: number\n}\n\nconst getWords12Item = t => ({\n key: WordsType.WORDS_12,\n label: t('mnemonics_12_words'),\n count: 12,\n})\n\nconst getWords24Item = t => ({\n key: WordsType.WORDS_24,\n label: t('mnemonics_24_words'),\n count: 24,\n})\n\ninterface CreateWalletLogicParams {\n contextData: ContextData\n updateContextData: (params: UpdateContextDataParams) => void\n}\n\nfunction textToWordsArray(text: string) {\n return text.split(' ').filter(v => v.trim() !== '')\n}\n\nexport function useCreateWalletLogicImportWordsStep(params: CreateWalletLogicParams) {\n const { contextData, updateContextData } = params\n const { t } = useI18n()\n\n const walletTypeConfig = RESTORE_WALLETS.find(\n item => item.value === contextData.restoreWalletType\n )\n const wordsItems: Array<WordsItem> = useMemo(() => {\n const supportedWordsItems: WordsItem[] = []\n if (walletTypeConfig) {\n if (walletTypeConfig.wordsTypes.includes(WordsType.WORDS_12)) {\n supportedWordsItems.push(getWords12Item(t))\n }\n if (walletTypeConfig.wordsTypes.includes(WordsType.WORDS_24)) {\n supportedWordsItems.push(getWords24Item(t))\n }\n return supportedWordsItems\n } else {\n return [getWords12Item(t), getWords24Item(t)]\n }\n }, [contextData.restoreWalletType, t])\n\n const wallet = useWallet()\n\n const [disabled, setDisabled] = useState(true)\n\n const [inputWords, setInputWords] = useState<Array<string>>(\n new Array(wordsItems[contextData.wordsType].count).fill('')\n )\n const [inputWordsText, setInputWordsText] = useState('')\n const [inputWordsError, setInputWordsError] = useState(false)\n const tools = useTools()\n\n const createAccount = useCreateAccountCallback()\n const nav = useNavigation()\n\n const dispatch = useAppDispatch()\n const [loading, setLoading] = useState(false)\n\n const [enteredWordsCount, setEnteredWordsCount] = useState(0)\n\n const enablePhrase = walletTypeConfig?.phraseSupport\n\n const maxWordsCount = wordsItems[contextData.wordsType].count\n\n const initKey = async () => {\n let totalKeyringCount = 0\n try {\n totalKeyringCount = await wallet.getTotalKeyringCount()\n } catch (e) {\n const error = e as Error\n tools.toastError(error.message)\n }\n updateContextData({ walletName: `HD Wallet #${totalKeyringCount + 1}` })\n }\n\n useEffect(() => {\n initKey()\n }, [])\n\n useEffect(() => {\n setDisabled(true)\n\n const words = textToWordsArray(inputWordsText)\n if (words.length !== maxWordsCount) {\n return\n }\n\n const mnemonic = words.join(' ')\n if (!validateMnemonic(mnemonic)) {\n return\n }\n\n setDisabled(false)\n }, [inputWordsText])\n\n const updateWords = (words: Array<string>, isEndedWithSpace?: boolean) => {\n setInputWords(words)\n let text = words.join(' ')\n setInputWordsText(isEndedWithSpace ? text + ' ' : text)\n\n const enteredWordsCount = words.filter(key => {\n return key.trim() != ''\n }).length\n\n setEnteredWordsCount(enteredWordsCount)\n\n if (!validateMnemonic(text) && enteredWordsCount >= maxWordsCount) {\n setInputWordsError(true)\n } else {\n setInputWordsError(false)\n }\n }\n\n const onInputWordsTextChange = (e: { target: { value: string } } | string) => {\n let value = typeof e === 'string' ? e : e.target.value\n let isEndedWithSpace = /\\s$/.test(value)\n value = normalizeWhitespace(value)\n\n const wordsArr = textToWordsArray(value)\n updateWords(wordsArr, isEndedWithSpace)\n }\n\n const onInputWordsChange = (e: { target: { value: string } } | string, index: number) => {\n let value = typeof e === 'string' ? e : e.target.value\n value = normalizeWhitespace(value)\n\n const newKeys = [...inputWords]\n newKeys.splice(index, 1, value)\n updateWords(newKeys)\n }\n\n // extension\n const onHandleEventPaste = (event, index: number) => {\n const copyText = event.clipboardData?.getData('text/plain')\n const textArr = normalizeWhitespace(copyText).split(' ')\n const newKeys = [...inputWords]\n if (textArr) {\n for (let i = 0; i < inputWords.length - index; i++) {\n if (textArr.length == i) {\n break\n }\n newKeys[index + i] = textArr[i]\n }\n updateWords(newKeys)\n }\n\n event.preventDefault()\n }\n\n const onInputWalletNameChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n updateContextData({ walletName: value })\n }\n\n const onClickNext = async () => {\n try {\n const mnemonics = inputWords.join(' ')\n\n if (contextData.wordsType === WordsType.WORDS_12) {\n if (inputWords.length !== 12) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_Not_12_words'))\n return\n }\n }\n\n if (contextData.wordsType === WordsType.WORDS_24) {\n if (inputWords.length !== 24) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_Not_24_words'))\n return\n }\n }\n\n if (!validateMnemonic(mnemonics)) {\n tools.toastError(t('ErrorPrompt_CreateHDwallet_StepImport_InvalidMnemonic'))\n return\n }\n\n setLoading(true)\n\n if (contextData.restoreWalletType === RestoreWalletType.OW) {\n await createAccount(mnemonics, OW_HD_PATH, '', AddressType.P2TR, 1)\n const keyrings = await wallet.getKeyrings()\n const keyring = keyrings[keyrings.length - 1]\n if (contextData.walletName) {\n keyring.alianName = contextData.walletName\n await wallet.setKeyringAlianName(keyring, contextData.walletName)\n }\n await wallet.changeKeyring(keyring)\n const _keyrings = await wallet.getKeyrings()\n // @ts-ignore SAFE\n dispatch(keyringsActions.setKeyrings(_keyrings))\n // @ts-ignore SAFE\n dispatch(keyringsActions.setCurrent(keyring))\n // @ts-ignore SAFE\n dispatch(accountActions.setCurrent(keyring?.accounts[0]))\n\n nav.navToTab()\n } else {\n updateContextData({\n walletName: contextData.walletName,\n mnemonics,\n tabType: TabType.CHOOSE_ADDRESS_TYPE,\n })\n }\n } catch (e) {\n tools.toastError((e as any).message)\n } finally {\n setLoading(false)\n }\n }\n\n const onClickWordsItem = (wordsItem: WordsItem) => {\n updateContextData({ wordsType: wordsItem.key })\n setInputWordsText('')\n setInputWords(new Array(wordsItem.count).fill(''))\n }\n\n const shouldEnteredWordsCount = wordsItems[contextData.wordsType].count\n\n return {\n wordsItems,\n t,\n disabled,\n inputWords,\n inputWordsText,\n onHandleEventPaste,\n onClickNext,\n onClickWordsItem,\n inputWordsError,\n onInputWordsTextChange,\n onInputWordsChange,\n loading,\n enablePhrase,\n walletName: contextData.walletName,\n onInputWalletNameChange,\n enteredWordsCount,\n shouldEnteredWordsCount,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useCallback, useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useCurrentAccount, useCurrentAccountCapabilities, useResetTxState } from 'src/hooks'\n\nconst HIGH_BALANCE = 10000\n\nenum TabKey {\n DETAILS = 'DETAILS',\n PROVENANCE = 'PROVENANCE',\n}\nexport function useOrdinalsInscriptionScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'OrdinalsInscriptionScreen'>()\n const inscriptionId = props.inscriptionId\n\n const [inscription, setInscription] = useState<Inscription>(props.inscription)\n const [isLoadingDetails, setIsLoadingDetails] = useState(false)\n const [isInitialLoading, setIsInitialLoading] = useState(!props.inscription)\n\n const currentAccount = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const resetTxState = useResetTxState()\n\n const { t } = useI18n()\n\n const [isNeedToSplit, setIsNeedToSplit] = useState(false)\n const [isMultiStuck, setIsMultiStuck] = useState(false)\n const wallet = useWallet()\n\n const [tabKey, setTabKey] = useState(TabKey.DETAILS)\n\n const resetState = useCallback(() => {\n setIsNeedToSplit(false)\n setIsMultiStuck(false)\n setIsLoadingDetails(false)\n setIsInitialLoading(!props?.inscription)\n setTabKey(TabKey.DETAILS)\n }, [props?.inscription])\n\n const fetchInscriptionData = async (id: string) => {\n if (!id) return\n\n // If we already have basic inscription data, show it immediately\n // and load details in the background\n const isBackgroundLoading = !!inscription\n\n if (isBackgroundLoading) {\n setIsLoadingDetails(true)\n } else {\n setIsInitialLoading(true)\n }\n\n try {\n const data = await wallet.getInscriptionInfo(id)\n setInscription(data)\n setTabKey(TabKey.DETAILS)\n\n if (data.multipleNFT) {\n setIsMultiStuck(true)\n\n if (data.sameOffset) {\n setIsNeedToSplit(false)\n } else {\n if (data.outputValue > HIGH_BALANCE) {\n setIsNeedToSplit(true)\n }\n }\n } else {\n if (data.outputValue > HIGH_BALANCE) {\n setIsNeedToSplit(true)\n }\n }\n } catch (e) {\n console.error('Failed to fetch inscription data:', e)\n } finally {\n setIsLoadingDetails(false)\n setIsInitialLoading(false)\n }\n }\n\n useEffect(() => {\n if (inscriptionId) {\n resetState()\n\n // Always fetch the latest data, but we'll show what we have immediately\n fetchInscriptionData(inscriptionId)\n }\n }, [inscriptionId])\n\n const onClickSplit = () => {\n resetTxState()\n nav.navigate('SplitOrdinalsInscriptionScreen', { inscription, inscriptionId })\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendOrdinalsInscriptionScreen', { inscription, inscriptionId })\n }\n\n const isUnconfirmed = inscription ? inscription.timestamp == 0 : false\n\n const withSend = inscription ? accountCapabilities.canCreateSigningRequest && currentAccount.address === inscription.address : false\n\n const children = inscription ? inscription.children || [] : []\n const parents = inscription ? inscription.parents || [] : []\n\n const hasProvenance = children.length > 0 || parents.length > 0\n const shouldShowTabs = hasProvenance === true\n\n return {\n inscription,\n isLoadingDetails,\n isInitialLoading,\n isNeedToSplit,\n isMultiStuck,\n tabKey,\n setTabKey,\n TabKey,\n resetState,\n t,\n inscriptionId,\n onClickSend,\n onClickSplit,\n isUnconfirmed,\n withSend,\n shouldShowTabs,\n nav,\n }\n}\n","import { AddressRunesTokenSummary } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useChainType,\n useCurrentAccount,\n useCurrentAccountCapabilities,\n useOrdinalsWebsite,\n useResetTxState,\n useRunesIconInfo,\n useRunesInscribeUrl,\n useRunesMarketUrl,\n useRunesTokenInfoExplorerUrl,\n useTxExplorerUrl,\n} from 'src/hooks'\n\nexport function useRunesTokenScreenLogic() {\n const nav = useNavigation()\n const { runeid } = nav.getRouteState<'RunesTokenScreen'>()\n const [tokenSummary, setTokenSummary] = useState<AddressRunesTokenSummary>({\n runeBalance: {\n runeid: '',\n rune: '',\n spacedRune: '',\n amount: '',\n symbol: '',\n divisibility: 0,\n },\n runeInfo: {\n rune: '',\n runeid: '',\n spacedRune: '',\n symbol: '',\n premine: '',\n mints: '',\n divisibility: 0,\n etching: '',\n terms: {\n amount: '',\n cap: '',\n heightStart: 0,\n heightEnd: 0,\n offsetStart: 0,\n offsetEnd: 0,\n },\n number: 0,\n height: 0,\n txidx: 0,\n timestamp: 0,\n burned: '',\n holders: 0,\n transactions: 0,\n mintable: false,\n remaining: '',\n start: 0,\n end: 0,\n supply: '0',\n parent: '',\n },\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const [loading, setLoading] = useState(true)\n\n const { t } = useI18n()\n\n useEffect(() => {\n wallet.getAddressRunesTokenSummary(account.address, runeid).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const enableMint = tokenSummary.runeInfo.mintable\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (accountCapabilities.canCreateSigningRequest && tokenSummary.runeBalance.amount !== '0') {\n enable = true\n }\n return enable\n }, [accountCapabilities.canCreateSigningRequest, tokenSummary])\n\n const tools = useTools()\n\n const ordinalsWebsite = useOrdinalsWebsite()\n\n const resetTxState = useResetTxState()\n\n const txExplorerUrl = useTxExplorerUrl(tokenSummary.runeInfo.etching)\n\n const chainType = useChainType()\n const enableTrade = useMemo(() => {\n if (\n chainType === ChainType.BITCOIN_MAINNET ||\n chainType === ChainType.FRACTAL_BITCOIN_MAINNET\n ) {\n return true\n } else {\n return false\n }\n }, [chainType])\n\n const iconInfo = useRunesIconInfo(tokenSummary.runeInfo.spacedRune)\n const inscribeUrl = useRunesInscribeUrl(tokenSummary.runeInfo.rune)\n const marketPlaceUrl = useRunesMarketUrl(tokenSummary.runeInfo.spacedRune)\n const runesExplorerUrl = useRunesTokenInfoExplorerUrl(tokenSummary.runeInfo.runeid)\n\n const onClickMint = () => {\n nav.navToUrl(inscribeUrl)\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendRunesScreen', {\n runeBalance: tokenSummary.runeBalance,\n runeInfo: tokenSummary.runeInfo,\n })\n }\n\n const onClickTrade = () => {\n if (marketPlaceUrl) {\n nav.navToUrl(marketPlaceUrl)\n }\n }\n\n const onClickViewOnExplorer = () => {\n nav.navToUrl(runesExplorerUrl)\n }\n\n return {\n runeid,\n tokenSummary,\n iconInfo,\n\n loading,\n t,\n\n enableMint,\n onClickMint,\n\n tools,\n ordinalsWebsite,\n txExplorerUrl,\n\n enableTransfer,\n onClickSend,\n\n enableTrade,\n onClickTrade,\n onClickViewOnExplorer,\n }\n}\n","import { AddressTokenSummary, TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useMemo, useState } from 'react'\nimport { useI18n } from 'src/context'\nimport { useBRC20IconInfo, useChain, useCurrentAccount } from 'src/hooks'\n\nexport interface BRC20BalanceCardProps {\n tokenBalance: TokenBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useBRC20BalanceCardLogic(props: BRC20BalanceCardProps) {\n const {\n price,\n tokenBalance: {\n ticker,\n overallBalance,\n transferableBalance,\n selfMint,\n displayName,\n tag,\n swapBalance,\n progBalance,\n },\n onClick,\n } = props\n\n const account = useCurrentAccount()\n const [tokenSummary, setTokenSummary] = useState<AddressTokenSummary>()\n\n const { t } = useI18n()\n\n const deploy_count = tokenSummary ? (tokenSummary.tokenInfo.holder == account.address ? 1 : 0) : 0\n let _names: string[] = []\n const _amounts: string[] = []\n if (deploy_count > 0) {\n _names.push('Deploy')\n _amounts.push('')\n }\n if (tokenSummary) {\n tokenSummary.transferableList.forEach(v => {\n _names.push('Transfer')\n _amounts.push(v.amount)\n })\n }\n\n for (let i = 0; i < _names.length; i++) {\n if (i == 3) {\n if (_names.length > 4) {\n if (deploy_count > 0) {\n _names[i] = `${_names.length - 3}+`\n } else {\n _names[i] = `${_names.length - 2}+`\n }\n _amounts[i] = ''\n }\n break\n }\n }\n _names = _names.splice(0, 4)\n\n const onSwapBalance = swapBalance\n const onProgBalance = progBalance\n const inWalletBalance = overallBalance\n\n const totalBalance = useMemo(() => {\n return new BigNumber(inWalletBalance)\n .plus(new BigNumber(onSwapBalance || 0))\n .plus(new BigNumber(onProgBalance || 0))\n .toString()\n }, [inWalletBalance, onSwapBalance, onProgBalance])\n\n let hasOutWalletBalance = false\n if (onSwapBalance && onSwapBalance !== '0') {\n hasOutWalletBalance = true\n }\n if (onProgBalance && onProgBalance !== '0') {\n hasOutWalletBalance = true\n }\n\n // icon\n const iconInfo = useBRC20IconInfo(ticker)\n\n // price\n const chain = useChain()\n const showPrice = chain.showPrice\n\n return {\n // info\n ticker,\n displayName,\n selfMint,\n tag,\n\n // icon\n iconInfo,\n\n // balance\n totalBalance,\n hasOutWalletBalance,\n onProgBalance,\n inWalletBalance,\n onSwapBalance,\n\n // price\n price,\n showPrice,\n\n // click\n onClick,\n\n // others\n t,\n }\n}\n","import { ADDRESS_TYPES } from '@unisat/wallet-shared'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\ntype Status = '' | 'error' | 'warning' | undefined\n\nexport function useExportMnemonicsScreenLogic() {\n const nav = useNavigation()\n const { keyring } = nav.getRouteState<'ExportMnemonicsScreen'>()\n\n const { t } = useI18n()\n\n const [password, setPassword] = useState('')\n const [disabled, setDisabled] = useState(true)\n\n const [mnemonic, setMnemonic] = useState('')\n const [status, setStatus] = useState<Status>('')\n const [error, setError] = useState('')\n const wallet = useWallet()\n const tools = useTools()\n\n const [passphrase, setPassphrase] = useState('')\n\n const btnClick = async () => {\n try {\n const { mnemonic, hdPath, passphrase } = await wallet.getMnemonics(password, keyring)\n setMnemonic(mnemonic)\n setPassphrase(passphrase)\n } catch (e) {\n setStatus('error')\n setError((e as any).message)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ('Enter' == e.key) {\n btnClick()\n }\n }\n\n useEffect(() => {\n setDisabled(true)\n if (password) {\n setDisabled(false)\n setStatus('')\n setError('')\n }\n }, [password])\n\n function copy(str: string) {\n tools.copyToClipboard(str)\n }\n const words = mnemonic.split(' ')\n\n const pathName = ADDRESS_TYPES.find(v => v.hdPath === keyring.hdPath)?.name || 'custom'\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n words,\n pathName,\n t,\n setPassword,\n disabled,\n btnClick,\n handleOnKeyUp,\n mnemonic,\n passphrase,\n error,\n copy,\n keyring,\n onClickBack,\n }\n}\n","import { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\n\ntype Status = '' | 'error' | 'warning' | undefined\nexport function useExportPrivateKeyScreenLogic() {\n const { t } = useI18n()\n\n const nav = useNavigation()\n const { account } = nav.getRouteState<'ExportPrivateKeyScreen'>()\n\n const [password, setPassword] = useState('')\n const [disabled, setDisabled] = useState(true)\n\n const [privateKey, setPrivateKey] = useState({ hex: '', wif: '' })\n const [status, setStatus] = useState<Status>('')\n const [error, setError] = useState('')\n const wallet = useWallet()\n const tools = useTools()\n\n const btnClick = async () => {\n try {\n const _res = await wallet.getPrivateKey(password, account)\n setPrivateKey(_res)\n } catch (e) {\n setStatus('error')\n setError((e as any).message)\n }\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if ('Enter' == e.key) {\n btnClick()\n }\n }\n\n useEffect(() => {\n setDisabled(true)\n if (password) {\n setDisabled(false)\n setStatus('')\n setError('')\n }\n }, [password])\n\n function copy(str: string) {\n tools.copyToClipboard(str)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n t,\n setPassword,\n disabled,\n btnClick,\n handleOnKeyUp,\n privateKey,\n error,\n copy,\n onClickBack,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription } from '@unisat/wallet-shared'\nimport BigNumber from 'bignumber.js'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n useFetchAssetUtxosRunesCallback,\n useFetchUtxosCallback,\n usePrepareSendRunesCallback,\n useRunesTx,\n} from 'src/hooks'\nimport { getAddressUtxoDust, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport function useSendRunesScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendRunesScreen'>()\n const { t } = useI18n()\n\n const runeBalance = props.runeBalance\n\n const runeInfo = props.runeInfo\n\n const runesTx = useRunesTx()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: runesTx.toAddress,\n domain: runesTx.toDomain,\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState('0')\n const [error, setError] = useState('')\n\n const defaultOutputValue = 546\n\n const currentAccount = useCurrentAccount()\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const [enableRBF, setEnableRBF] = useState(true)\n const minOutputValue = useMemo(() => {\n if (toInfo.address) {\n const dust1 = getAddressUtxoDust(currentAccount.address)\n const dust2 = getAddressUtxoDust(toInfo.address)\n return Math.max(dust1, dust2)\n } else {\n return 0\n }\n }, [toInfo.address, currentAccount.address])\n\n const fetchUtxos = useFetchUtxosCallback()\n const wallet = useWallet()\n\n const fetchAssetUtxosRunes = useFetchAssetUtxosRunesCallback()\n const tools = useTools()\n useEffect(() => {\n fetchUtxos()\n tools.showLoading(true)\n fetchAssetUtxosRunes(runeInfo.runeid)\n .then(utxos => {\n let balance = new BigNumber(0)\n for (let i = 0; i < utxos.length; i++) {\n const utxo = utxos[i]\n if (utxo.runes) {\n utxo.runes.forEach(rune => {\n if (rune.runeid === runeInfo.runeid) {\n balance = balance.plus(new BigNumber(rune.amount))\n }\n })\n }\n }\n setAvailableBalance(balance.toString())\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const prepareSendRunes = usePrepareSendRunesCallback()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setEnableRBF(enableRBF)\n })\n }, [wallet])\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)\n if (feeRate <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(runeAmount, '0') <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(runeAmount, availableBalance) > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n if (!outputValue) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, outputValue, minOutputValue, availableBalance])\n\n const totalBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(runeBalance.amount, runeBalance.divisibility)\n }, [runeBalance])\n const availableBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(availableBalance, runeBalance?.divisibility)\n }, [availableBalance, runeBalance])\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onEnableRBFChange = (value: boolean) => {\n setEnableRBF(value)\n wallet.setEnableRBF(value)\n }\n\n const onClickNext = () => {\n const runeAmount = bnUtils.fromDecimalAmount(inputAmount, runeInfo.divisibility)\n prepareSendRunes({\n toAddressInfo: toInfo,\n runeid: runeInfo.runeid,\n runeAmount: runeAmount,\n outputValue: outputValue,\n feeRate,\n enableRBF,\n })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n // info\n runeInfo,\n inputAmount,\n totalBalanceStr,\n availableBalanceStr,\n\n setInputAmount,\n disabled,\n toInfo,\n setToInfo,\n error,\n defaultOutputValue,\n minOutputValue,\n setOutputValue,\n enableRBF,\n setEnableRBF: onEnableRBFChange,\n t,\n\n // actions\n onClickBack,\n onClickNext,\n }\n}\n","import { CHAINS_MAP } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport function useEditContactScreenLogic() {\n const nav = useNavigation()\n\n // Required parameters\n const { address, chain, selectedNetworkFilter } = nav.getRouteState<'EditContactScreen'>()\n const wallet = useWallet()\n const [name, setName] = useState('')\n const [contactAddress, setContactAddress] = useState(address || '')\n const [originalAddress, setOriginalAddress] = useState('')\n const [originalChain, setOriginalChain] = useState<ChainType | undefined>()\n const [chainType, setChainType] = useState<ChainType>(ChainType.BITCOIN_MAINNET)\n const [error, setError] = useState('')\n const [loading, setLoading] = useState(false)\n const { t } = useI18n()\n\n useEffect(() => {\n if (address) {\n fetchContact()\n } else {\n const preselectedChainType = selectedNetworkFilter as ChainType\n\n if (preselectedChainType) {\n setChainType(preselectedChainType)\n }\n }\n }, [address, chain, selectedNetworkFilter])\n\n const fetchContact = async () => {\n if (!address || !chain) return\n\n try {\n const chainEnum = chain as ChainType\n const contact = await wallet.getContactByAddressAndChain(address, chainEnum)\n\n if (contact) {\n setName(contact.name)\n setContactAddress(contact.address)\n setOriginalAddress(contact.address)\n setOriginalChain(contact.chain)\n setChainType(contact.chain)\n } else {\n setError(t('contact_not_found'))\n setTimeout(() => {\n nav.navigate('ContactsScreen', {})\n }, 1500)\n }\n } catch (err) {\n console.error('Error fetching contact:', err)\n setError(t('failed_to_load_contact_information'))\n }\n }\n\n const handleSubmit = async () => {\n if (!name.trim()) {\n setError(t('please_enter_name'))\n return\n }\n\n if (!contactAddress.trim()) {\n setError(t('please_enter_address'))\n return\n }\n\n const networkType = CHAINS_MAP[chainType].networkType\n\n if (!isValidAddress(contactAddress, networkType)) {\n setError(t('invalid_address_format_for_selected_network'))\n return\n }\n\n setError('')\n setLoading(true)\n\n try {\n if (\n originalAddress &&\n originalChain &&\n (originalAddress !== contactAddress.trim() || originalChain !== chainType)\n ) {\n await wallet.removeContact(originalAddress, originalChain)\n }\n\n await wallet.updateContact({\n name: name.trim(),\n address: contactAddress.trim(),\n chain: chainType,\n isContact: true,\n isAlias: false,\n })\n\n nav.goBack()\n } catch (err) {\n setError(t('failed_to_save_contact'))\n } finally {\n setLoading(false)\n }\n }\n\n const handleDelete = async () => {\n if (!address || !originalChain) return\n\n setLoading(true)\n try {\n await wallet.removeContact(address, originalChain)\n\n nav.navigate('ContactsScreen', {\n returnWithNetwork: chainType,\n })\n } catch (err) {\n setError(t('failed_to_delete_contact'))\n } finally {\n setLoading(false)\n }\n }\n\n const handleAddressChange = (e: { target: { value: string } } | string) => {\n const value = (typeof e === 'string' ? e : e.target.value).trim()\n setContactAddress(value)\n\n if (error.includes('Invalid address') || !value) {\n setError('')\n }\n\n if (value) {\n const networkType = CHAINS_MAP[chainType].networkType\n\n if (value.length > 15 && !isValidAddress(value, networkType)) {\n setError(t('invalid_address_format_for_selected_network'))\n }\n }\n }\n\n const handleNameChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n setName(value)\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n return {\n name,\n contactAddress,\n chainType,\n error,\n loading,\n handleNameChange,\n handleAddressChange,\n handleSubmit,\n handleDelete,\n onClickBack,\n address,\n t,\n }\n}\n","import { Account, MAX_ALIAS_NAME_LENGTH } from '@unisat/wallet-shared'\nimport { useMemo, useState } from 'react'\nimport { useLocation } from 'react-router-dom'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport { useAppDispatch } from 'src/hooks'\nimport { accountActions, keyringsActions } from 'src/reducers'\n\nexport function useEditAccountNameScreenLogic() {\n const nav = useNavigation()\n const { t } = useI18n()\n\n const { state } = useLocation()\n const { account } = state as {\n account: Account\n }\n\n const wallet = useWallet()\n const [alianName, setAlianName] = useState(account.alianName || '')\n const dispatch = useAppDispatch()\n const handleOnClick = async () => {\n const newAccount = await wallet.setAccountAlianName(account, alianName)\n // @ts-ignore SAFE\n dispatch(keyringsActions.updateAccountName(newAccount))\n // @ts-ignore SAFE\n dispatch(accountActions.updateAccountName(newAccount))\n nav.goBack()\n }\n\n const handleOnKeyUp = (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>) => {\n if ('Enter' == e.key && e.ctrlKey) {\n handleOnClick()\n }\n }\n\n const isValidName = useMemo(() => {\n if (alianName.length == 0) {\n return false\n }\n return true\n }, [alianName])\n\n const truncatedTitle = useMemo(() => {\n const name = account.alianName || ''\n if (name.length > MAX_ALIAS_NAME_LENGTH) {\n return name.slice(0, MAX_ALIAS_NAME_LENGTH) + '...'\n }\n return name\n }, [account.alianName])\n\n const onInputChange = (e: { target: { value: string } } | string) => {\n const value = typeof e === 'string' ? e : e.target.value\n if (value.length <= MAX_ALIAS_NAME_LENGTH) {\n setAlianName(value)\n }\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n return {\n alianName,\n handleOnClick,\n handleOnKeyUp,\n isValidName,\n truncatedTitle,\n t,\n account,\n onInputChange,\n onClickBack,\n }\n}\n","import { AlkanesCollection } from '@unisat/wallet-shared'\n\nimport { useEffect, useRef } from 'react'\nimport {\n AlkanesAssetTabKey,\n getSupportedAssets,\n useAlkanesAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesCollectionListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesCollection>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAlkanesCollectionList(\n currentAccount.address,\n page,\n pageSize\n )\n\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useAlkanesAssetTabKey()\n const isFocus = tabKey === AlkanesAssetTabKey.COLLECTION\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: AlkanesCollection) => {\n nav.navigate('AlkanesCollectionScreen', { collectionId: item.alkaneid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n OrdinalsAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallTabFocusRefresh,\n useWallet,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useBRC20ListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<TokenBalance>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getBRC20List({\n address: currentAccount.address,\n currentPage: page,\n pageSize,\n })\n if (list.length > 0) {\n wallet.getBrc20sPrice(list.map(item => item.ticker)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.BRC20\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: TokenBalance) => {\n nav.navigate('BRC20TokenScreen', { tokenBalance: item, ticker: item.ticker })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { Inscription } from '@unisat/wallet-shared'\n\nimport { useEffect, useRef } from 'react'\nimport {\n OrdinalsAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useInscriptionListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<Inscription>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAllInscriptionList(\n currentAccount.address,\n page,\n pageSize\n )\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.ALL\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: Inscription) => {\n nav.navigate('OrdinalsInscriptionScreen', {\n inscription: item,\n inscriptionId: item.inscriptionId,\n })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { RuneBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n AssetTabKey,\n useAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useRunesListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<RuneBalance>({\n fetcher: async (page, pageSize) => {\n if (currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getRunesList(currentAccount.address, page, pageSize)\n if (list.length > 0) {\n wallet.getRunesPrice(list.map(item => item.spacedRune)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const assetTabKey = useAssetTabKey()\n const isFocus = assetTabKey === AssetTabKey.RUNES\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: RuneBalance) => {\n nav.navigate('RunesTokenScreen', { runeid: item.runeid })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useEffect, useRef, useState } from 'react'\n\nimport { CAT20Balance, CAT_VERSION, TickPriceItem } from '@unisat/wallet-shared'\n\nimport {\n CATAssetTabKey,\n getSupportedAssets,\n useCATAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useCAT20ListLogic(version: CAT_VERSION) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: tokens,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<CAT20Balance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.CAT20 || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getCAT20List(\n version,\n currentAccount.address,\n page,\n pageSize\n )\n if (list.length > 0) {\n wallet.getCAT20sPrice(list.map(item => item.tokenId)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, version, chainType],\n })\n\n const tabKey = useCATAssetTabKey()\n const isFocus = tabKey === CATAssetTabKey.CAT20 || CATAssetTabKey.CAT20_V2\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: CAT20Balance) => {\n nav.navigate('CAT20TokenScreen', { tokenId: item.tokenId, version })\n }\n\n return { tokens, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport {\n AddressCAT20UtxoSummary,\n Inscription,\n SignedData,\n SignPsbtParams,\n ToSignData,\n} from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport BigNumber from 'bignumber.js'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useCurrentAccount, useFeeRateBar, useNetworkType } from 'src/hooks'\nimport { getAddressType, isValidAddress } from 'src/utils/bitcoin-utils'\n\nconst MAX_TOKEN_INPUT = 4\n\nexport enum SendCAT20ScreenStep {\n PREPARE = 0,\n SIGN_COMMIT = 1,\n WAITING = 2,\n SIGN_REVEAL = 3,\n}\n\nexport function useSendCAT20ScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendCAT20Screen'>()\n\n const cat20Balance = props.cat20Balance\n\n const cat20Info = props.cat20Info\n\n const wallet = useWallet()\n\n const { t } = useI18n()\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(false)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [tokenUtxoSummary, setTokenUtxoSummary] = useState<AddressCAT20UtxoSummary>({\n totalUtxoCount: 0,\n availableUtxoCount: 0,\n availableTokenAmounts: [],\n })\n const [error, setError] = useState('')\n\n const account = useCurrentAccount()\n\n const networkType = useNetworkType()\n\n const [showMergeBTCUTXOPopover, setShowMergeBTCUTXOPopover] = useState(false)\n const tools = useTools()\n\n useEffect(() => {\n tools.showLoading(true)\n wallet\n .getAddressCAT20UtxoSummary(props.version, account.address, cat20Balance.tokenId)\n .then(data => {\n setTokenUtxoSummary(data)\n })\n .finally(() => {\n tools.showLoading(false)\n })\n }, [])\n\n const availableTokenAmount = useMemo(() => {\n let amount = new BigNumber(0)\n for (\n let i = 0;\n i < Math.min(tokenUtxoSummary.availableTokenAmounts.length, MAX_TOKEN_INPUT);\n i++\n ) {\n amount = amount.plus(BigNumber(tokenUtxoSummary.availableTokenAmounts[i]))\n }\n return amount.toString()\n }, [tokenUtxoSummary])\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n const addressType = getAddressType(toInfo.address, networkType)\n if (addressType !== AddressType.P2TR && addressType !== AddressType.P2WPKH) {\n setError(t('the_recipient_must_be_p2tr_or_p2wpkh_address_type'))\n return\n }\n\n if (!inputAmount) {\n return\n }\n\n if (!feeRate) {\n return\n }\n\n const amt = bnUtils.fromDecimalAmount(inputAmount, cat20Balance.decimals)\n if (bnUtils.compareAmount(amt, '0') != 1) {\n return\n }\n\n if (bnUtils.compareAmount(amt, availableTokenAmount) > 0) {\n // insufficient balance\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, feeRate, availableTokenAmount])\n\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {\n psbtHex: '',\n toSignInputs: [],\n autoFinalized: false,\n },\n revealToSignData: {\n psbtHex: '',\n toSignInputs: [],\n autoFinalized: false,\n },\n })\n const [step, setStep] = useState<SendCAT20ScreenStep>(SendCAT20ScreenStep.PREPARE)\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const cat20Amount = bnUtils.fromDecimalAmount(inputAmount, cat20Balance.decimals)\n const step1 = await wallet.transferCAT20Step1(\n props.version,\n toInfo.address,\n cat20Balance.tokenId,\n cat20Amount,\n feeRate\n )\n if (step1) {\n transferData.current.id = step1.id\n transferData.current.commitToSignData = step1.toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n if (msg.includes('-307')) {\n setShowMergeBTCUTXOPopover(true)\n return\n }\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickBack = () => {\n if (step === SendCAT20ScreenStep.PREPARE) {\n nav.goBack()\n return\n } else {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n }\n\n // sign commit psbt\n const signCommitPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const onSignCommitPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n try {\n tools.showLoading(true)\n const step2 = await wallet.transferCAT20Step2(\n props.version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(SendCAT20ScreenStep.WAITING)\n setTimeout(() => {\n setStep(SendCAT20ScreenStep.SIGN_REVEAL)\n }, 100)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignCommitPsbtHandleCancel = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n const onSignCommitPsbtHandleBack = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n // sign reveal psbt\n const signRevealPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onSignRevealPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.transferCAT20Step3(\n props.version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n // tools.toastError((e as any).message);\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignRevealPsbtHandleCancel = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n const onSignRevealPsbtHandleBack = () => {\n setStep(SendCAT20ScreenStep.PREPARE)\n }\n\n // merge UTXO\n const shouldShowMerge = availableTokenAmount !== cat20Balance.amount\n\n const onClickMergeUTXO = () => {\n nav.navigate('MergeCAT20Screen', {\n version: props.version,\n cat20Balance: cat20Balance,\n cat20Info: cat20Info,\n })\n }\n\n return {\n // info\n cat20Info,\n cat20Balance,\n availableTokenAmount,\n toInfo,\n setToInfo,\n inputAmount,\n setInputAmount,\n error,\n disabled,\n step,\n showMergeBTCUTXOPopover,\n setShowMergeBTCUTXOPopover,\n shouldShowMerge,\n\n // actions\n onClickNext,\n onClickBack,\n\n // sign commit psbt actions\n onSignCommitPsbtHandleConfirm,\n onSignCommitPsbtHandleCancel,\n onSignCommitPsbtHandleBack,\n signCommitPsbtParams,\n\n // sign reveal psbt actions\n onSignRevealPsbtHandleConfirm,\n onSignRevealPsbtHandleCancel,\n onSignRevealPsbtHandleBack,\n signRevealPsbtParams,\n\n // merge UTXO action\n onClickMergeUTXO,\n\n // tools\n t,\n }\n}\n","import { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { AddressType } from '@unisat/wallet-types'\nimport { useEffect, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useFeeRateBar, useNetworkType } from 'src/hooks'\nimport { getAddressType, isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendCAT721ScreenStep {\n PREPARE = 0,\n SIGN_COMMIT = 1,\n WAITING = 2,\n SIGN_REVEAL = 3,\n}\nexport function useSendCAT721ScreenLogic() {\n const nav = useNavigation()\n const { version, localId, collectionInfo } = nav.getRouteState<'SendCAT721Screen'>()\n\n const wallet = useWallet()\n const { t } = useI18n()\n\n const [disabled, setDisabled] = useState(false)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [error, setError] = useState('')\n\n const networkType = useNetworkType()\n\n const [showMergeBTCUTXOPopover, setShowMergeBTCUTXOPopover] = useState(false)\n const tools = useTools()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n const addressType = getAddressType(toInfo.address, networkType)\n if (addressType !== AddressType.P2TR && addressType !== AddressType.P2WPKH) {\n setError(t('the_recipient_must_be_p2tr_or_p2wpkh_address_type'))\n return\n }\n\n setDisabled(false)\n }, [toInfo])\n\n const transferData = useRef<{\n id: string\n commitToSignData: ToSignData\n revealToSignData: ToSignData\n }>({\n id: '',\n commitToSignData: {} as ToSignData,\n revealToSignData: {} as ToSignData,\n })\n const [step, setStep] = useState<SendCAT721ScreenStep>(SendCAT721ScreenStep.PREPARE)\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const step1 = await wallet.transferCAT721Step1(\n version,\n toInfo.address,\n collectionInfo.collectionId,\n localId,\n feeRate\n )\n if (step1) {\n transferData.current.id = step1.id\n transferData.current.commitToSignData = step1.toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n if (msg.includes('-307')) {\n setShowMergeBTCUTXOPopover(true)\n return\n }\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onClickBack = () => {\n if (step === SendCAT721ScreenStep.PREPARE) {\n nav.goBack()\n return\n } else {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n }\n\n // sign commit psbt\n const signCommitPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.commitToSignData],\n },\n }\n\n const onSignCommitPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n try {\n tools.showLoading(true)\n const step2 = await wallet.transferCAT721Step2(\n version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n\n transferData.current.revealToSignData = step2.toSignData\n\n setStep(SendCAT721ScreenStep.WAITING)\n setTimeout(() => {\n setStep(SendCAT721ScreenStep.SIGN_REVEAL)\n }, 100)\n } catch (e) {\n console.log(e)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignCommitPsbtHandleCancel = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n const onSignCommitPsbtHandleBack = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n // sign reveal psbt\n const signRevealPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.revealToSignData],\n },\n }\n\n const onSignRevealPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const step3 = await wallet.transferCAT721Step3(\n version,\n transferData.current.id,\n signedDatas[0].psbtHex\n )\n nav.navigate('TxSuccessScreen', { txid: step3.txid })\n } catch (e) {\n // tools.toastError((e as any).message);\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignRevealPsbtHandleCancel = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n const onSignRevealPsbtHandleBack = () => {\n setStep(SendCAT721ScreenStep.PREPARE)\n }\n\n return {\n // info\n version,\n localId,\n collectionInfo,\n toInfo,\n setToInfo,\n error,\n disabled,\n step,\n showMergeBTCUTXOPopover,\n setShowMergeBTCUTXOPopover,\n\n // actions\n onClickNext,\n onClickBack,\n\n // sign commit psbt actions\n onSignCommitPsbtHandleConfirm,\n onSignCommitPsbtHandleCancel,\n onSignCommitPsbtHandleBack,\n signCommitPsbtParams,\n\n // sign reveal psbt actions\n onSignRevealPsbtHandleConfirm,\n onSignRevealPsbtHandleCancel,\n onSignRevealPsbtHandleBack,\n signRevealPsbtParams,\n\n // tools\n t,\n }\n}\n","import { AlkanesInfo } from '@unisat/wallet-shared'\n\nimport { getSupportedAssets, useChainType, useCurrentAccount, useNavigation, useWallet } from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useAlkanesNFTListLogic(collectionId: string) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<AlkanesInfo>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.alkanes || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getAlkanesCollectionItems(\n currentAccount.address,\n collectionId,\n page,\n pageSize\n )\n\n return { list, total }\n },\n dependencies: [currentAccount.address, collectionId, chainType],\n })\n\n const onClickItem = (item: AlkanesInfo) => {\n nav.navigate('AlkanesNFTScreen', { alkanesInfo: item })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { TickPriceItem, TokenBalance } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport {\n OrdinalsAssetTabKey,\n getSupportedAssets,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useOrdinalsAssetTabKey,\n useWallTabFocusRefresh,\n useWallet,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useBRC20ProgListLogic() {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const [priceMap, setPriceMap] = useState<{ [key: string]: TickPriceItem }>({})\n\n const priceMapRef = useRef(priceMap)\n const updatePrices = (res: { [tick: string]: TickPriceItem }) => {\n const newPriceMap = { ...priceMapRef.current }\n Object.keys(res).forEach(tick => {\n newPriceMap[tick] = res[tick]\n })\n priceMapRef.current = newPriceMap\n setPriceMap(newPriceMap)\n }\n\n const {\n data: items,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<TokenBalance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.brc20Prog || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n\n const { list, total } = await wallet.getBRC20ProgList({\n address: currentAccount.address,\n currentPage: page,\n pageSize,\n })\n if (list.length > 0) {\n wallet.getBrc20sPrice(list.map(item => item.ticker)).then(updatePrices)\n }\n return { list, total }\n },\n dependencies: [currentAccount.address, chainType],\n })\n\n const tabKey = useOrdinalsAssetTabKey()\n const isFocus = tabKey === OrdinalsAssetTabKey.BRC20_6BYTE\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: TokenBalance) => {\n nav.navigate('BRC20TokenScreen', { tokenBalance: item, ticker: item.ticker })\n }\n\n return { items, total, loading, hasMore, onRefresh, onLoadMore, onClickItem, priceMap }\n}\n","import { useEffect, useRef } from 'react'\n\nimport { CAT721Balance, CAT_VERSION } from '@unisat/wallet-shared'\n\nimport {\n CATAssetTabKey,\n getSupportedAssets,\n useCATAssetTabKey,\n useChainType,\n useCurrentAccount,\n useNavigation,\n useWallet,\n useWallTabFocusRefresh,\n} from '..'\nimport { useInfiniteList } from './useInfiniteList'\n\nexport function useCAT721ListLogic(version: CAT_VERSION) {\n const nav = useNavigation()\n const wallet = useWallet()\n const currentAccount = useCurrentAccount()\n const chainType = useChainType()\n const {\n data: tokens,\n total,\n loading,\n hasMore,\n onRefresh,\n onLoadMore,\n } = useInfiniteList<CAT721Balance>({\n fetcher: async (page, pageSize) => {\n const supportedAssets = getSupportedAssets(chainType, currentAccount.address)\n if (!supportedAssets.assets.CAT20 || currentAccount.address === '') {\n return { list: [], total: 0 }\n }\n const { list, total } = await wallet.getCAT721List(\n version,\n currentAccount.address,\n page,\n pageSize\n )\n return { list, total }\n },\n dependencies: [currentAccount.address, version, chainType],\n })\n\n const tabKey = useCATAssetTabKey()\n const isFocus = tabKey === CATAssetTabKey.CAT721 || CATAssetTabKey.CAT721_V2\n const lastRefreshTimeRef = useRef<number>(0)\n const walletTabFocusRefresh = useWallTabFocusRefresh()\n useEffect(() => {\n if (!isFocus) return\n\n // already refreshed → do nothing\n const alreadyRefreshed = lastRefreshTimeRef.current === walletTabFocusRefresh\n if (alreadyRefreshed) return\n\n onRefresh()\n\n // mark refreshed\n lastRefreshTimeRef.current = walletTabFocusRefresh\n }, [walletTabFocusRefresh, isFocus])\n\n const onClickItem = (item: CAT721Balance) => {\n nav.navigate('CAT721CollectionScreen', { collectionId: item.collectionId, version })\n }\n\n return { tokens, total, loading, hasMore, onRefresh, onLoadMore, onClickItem }\n}\n","import { KeyringType } from '@unisat/keyring-service/types'\nimport { AddressCAT20TokenSummary, CAT_VERSION } from '@unisat/wallet-shared'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCAT20IconInfo,\n useCAT20MarketPlaceWebsite,\n useCAT20TokenInfoExplorerUrl,\n useChainType,\n useCurrentAccount,\n useCurrentAccountCapabilities,\n useCurrentKeyring,\n useResetTxState,\n} from 'src/hooks'\n\nexport function useCAT20TokenScreenLogic() {\n const nav = useNavigation()\n const { tokenId, version } = nav.getRouteState<'CAT20TokenScreen'>()\n const { t } = useI18n()\n const [tokenSummary, setTokenSummary] = useState<AddressCAT20TokenSummary>({\n cat20Balance: {\n tokenId: '',\n amount: '0',\n decimals: 0,\n symbol: '',\n name: '',\n },\n cat20Info: {\n tokenId: '',\n name: '',\n symbol: '',\n max: '0',\n premine: '0',\n limit: 0,\n },\n })\n\n const wallet = useWallet()\n\n const account = useCurrentAccount()\n const keyring = useCurrentKeyring()\n const accountCapabilities = useCurrentAccountCapabilities()\n const [loading, setLoading] = useState(true)\n const tools = useTools()\n useEffect(() => {\n wallet.getAddressCAT20TokenSummary(version, account.address, tokenId).then(tokenSummary => {\n setTokenSummary(tokenSummary)\n setLoading(false)\n })\n }, [])\n\n const tokenUrl = useCAT20TokenInfoExplorerUrl(version, tokenSummary.cat20Info.tokenId)\n\n const enableTransfer = useMemo(() => {\n let enable = false\n if (accountCapabilities.canCreateSigningRequest && tokenSummary.cat20Balance && tokenSummary.cat20Balance.amount !== '0') {\n enable = true\n }\n return enable\n }, [accountCapabilities.canCreateSigningRequest, tokenSummary])\n\n const enableMerge = accountCapabilities.canCreateSigningRequest\n\n const chainType = useChainType()\n const enableTrade = useMemo(() => {\n if (chainType === ChainType.FRACTAL_BITCOIN_MAINNET && version === CAT_VERSION.V1) {\n return true\n } else {\n return false\n }\n }, [chainType])\n const marketPlaceUrl = useCAT20MarketPlaceWebsite(tokenId)\n\n const resetTxState = useResetTxState()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickMerge = e => {\n if (!accountCapabilities.canCreateSigningRequest) {\n tools.toastError(t('not_supported'))\n return\n }\n if (keyring.type === KeyringType.KeystoneKeyring) {\n tools.toastError(t('merge_utxos_is_not_supported_for_keystone_yet'))\n return\n }\n resetTxState()\n nav.navigate('MergeCAT20Screen', {\n version: version,\n cat20Balance: tokenSummary.cat20Balance,\n cat20Info: tokenSummary.cat20Info,\n })\n }\n\n const onClickSend = e => {\n if (keyring.type === KeyringType.KeystoneKeyring) {\n tools.toastError(t('send_cat20_is_not_supported_for_keystone_yet'))\n return\n }\n resetTxState()\n nav.navigate('SendCAT20Screen', {\n version: version,\n cat20Balance: tokenSummary.cat20Balance,\n cat20Info: tokenSummary.cat20Info,\n })\n }\n\n const onClickTrade = e => {\n nav.navToUrl(marketPlaceUrl)\n }\n\n const onClickViewOnExplorer = e => {\n nav.navToUrl(tokenUrl)\n }\n\n const iconInfo = useCAT20IconInfo(tokenSummary.cat20Info.name, tokenSummary.cat20Info.tokenId)\n\n return {\n tokenSummary,\n loading,\n tokenUrl,\n enableTransfer,\n enableMerge,\n enableTrade,\n iconInfo,\n onClickMerge,\n onClickSend,\n onClickTrade,\n onClickBack,\n onClickViewOnExplorer,\n t,\n }\n}\n","import { Inscription } from '@unisat/wallet-shared'\nimport { useEffect, useState } from 'react'\nimport { useI18n, useNavigation, useWallet } from 'src/context'\nimport {\n useCreateSplitTxCallback,\n useCurrentAccount,\n useFeeRateBar,\n useOrdinalsTx,\n} from 'src/hooks'\nimport { getAddressUtxoDust } from 'src/utils/bitcoin-utils'\n\nexport function useSplitOrdinalsInscriptionScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SplitOrdinalsInscriptionScreen'>()\n\n const inscription = props.inscription\n\n const [disabled, setDisabled] = useState(true)\n\n const ordinalsTx = useOrdinalsTx()\n\n const [error, setError] = useState('')\n const createSplitTx = useCreateSplitTxCallback()\n\n const defaultOutputValue = props.inscription ? props.inscription.outputValue : 10000\n const { t } = useI18n()\n const account = useCurrentAccount()\n const minOutputValue = getAddressUtxoDust(account.address)\n const [outputValue, setOutputValue] = useState(defaultOutputValue)\n const [enableRBF, setEnableRBF] = useState(true)\n\n const { feeRate } = useFeeRateBar()\n\n const [inscriptions, setInscriptions] = useState<Inscription[]>([])\n\n const [splitedCount, setSplitedCount] = useState(0)\n const wallet = useWallet()\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setEnableRBF(enableRBF)\n })\n }, [wallet])\n\n useEffect(() => {\n wallet.getInscriptionUtxoDetail(props.inscription.inscriptionId).then(v => {\n setInscriptions(v.inscriptions)\n })\n }, [])\n\n const onEnableRBFChange = (value: boolean) => {\n setEnableRBF(value)\n wallet.setEnableRBF(value)\n }\n\n useEffect(() => {\n setDisabled(true)\n setError('')\n setSplitedCount(0)\n\n if (feeRate <= 0) {\n setError(t('invalid_fee_rate'))\n return\n }\n\n if (!outputValue) {\n return\n }\n\n if (outputValue < minOutputValue) {\n setError(`${t('output_value_must_be_at_least')} ${minOutputValue}`)\n return\n }\n\n setDisabled(false)\n }, [feeRate, outputValue])\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onOutputValueChange = (value: number) => {\n setOutputValue(value)\n }\n\n const onClickNext = () => {\n createSplitTx({ inscriptionId: inscription.inscriptionId, feeRate, outputValue, enableRBF })\n .then(toSignData => {\n nav.navigate('TxConfirmScreen', { toSignData })\n })\n .catch(e => {\n console.log(e)\n setError(e.message)\n })\n }\n\n return {\n t,\n inscriptions,\n minOutputValue,\n splitedCount,\n enableRBF,\n setEnableRBF: onEnableRBFChange,\n error,\n disabled,\n onOutputValueChange,\n onClickBack,\n onClickNext,\n }\n}\n","import { useEffect, useMemo, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { getPasswordStrengthWord, MIN_PASSWORD_LENGTH } from 'src/utils/password-utils'\n\nexport function useCreatePasswordScreenLogic() {\n const nav = useNavigation()\n const { isNewAccount, isKeystone, fromColdWallet } = nav.getRouteState<'CreatePasswordScreen'>()\n const [newPassword, setNewPassword] = useState('')\n const { t } = useI18n()\n\n const [confirmPassword, setConfirmPassword] = useState('')\n\n const [disabled, setDisabled] = useState(true)\n\n const wallet = useWallet()\n\n const tools = useTools()\n const bootWithPassword = (password: string) => {\n wallet\n .boot(password)\n .then(() => {\n if (fromColdWallet) {\n nav.navigate('CreateColdWalletScreen', { fromUnlock: true })\n } else if (isKeystone) {\n nav.navigate('CreateKeystoneWalletScreen', { fromUnlock: true })\n } else if (isNewAccount) {\n nav.navigate('CreateHDWalletScreen', { isImport: false, fromUnlock: true })\n } else {\n nav.navigate('CreateHDWalletScreen', { isImport: true, fromUnlock: true })\n }\n })\n .catch(err => {\n tools.toastError(err)\n })\n }\n\n useEffect(() => {\n setDisabled(true)\n\n if (\n newPassword &&\n newPassword.length >= MIN_PASSWORD_LENGTH &&\n newPassword === confirmPassword\n ) {\n setDisabled(false)\n return\n }\n }, [newPassword, confirmPassword])\n\n const strongTextRenderData = useMemo(() => {\n if (!newPassword) {\n return null\n }\n return getPasswordStrengthWord(newPassword, t)\n }, [newPassword, t])\n\n const matchTextRenderData = useMemo(() => {\n if (!confirmPassword) {\n return null\n }\n\n if (newPassword !== confirmPassword) {\n return {\n text: t('passwords_dont_match'),\n }\n }\n return null\n }, [newPassword, confirmPassword])\n\n const onClickConfirm = () => {\n bootWithPassword(newPassword)\n }\n\n const onPasswordChange = (e: string | { target: { value: string } }) => {\n const val = typeof e === 'string' ? e : e.target.value\n setNewPassword(val)\n }\n\n const onConfirmPasswordChange = (e: string | { target: { value: string } }) => {\n const val = typeof e === 'string' ? e : e.target.value\n setConfirmPassword(val)\n }\n\n return {\n disabled,\n strongTextRenderData,\n matchTextRenderData,\n onClickConfirm,\n onPasswordChange,\n onConfirmPasswordChange,\n }\n}\n","export const MIN_PASSWORD_LENGTH = 8\nexport const UNRECOGNIZED_PASSWORD_STRENGTH = 'Unrecognized password strength.'\n\nconst calculatePasswordStrength = (password: string): number => {\n let score = 0\n\n // Length check\n if (password.length >= 8) score += 1\n if (password.length >= 12) score += 1\n if (password.length >= 16) score += 1\n\n // Character variety checks\n if (/[a-z]/.test(password)) score += 1 // lowercase\n if (/[A-Z]/.test(password)) score += 1 // uppercase\n if (/[0-9]/.test(password)) score += 1 // numbers\n if (/[^A-Za-z0-9]/.test(password)) score += 1 // special characters\n\n // Bonus for good mix\n if (\n password.length >= 10 &&\n /[a-z]/.test(password) &&\n /[A-Z]/.test(password) &&\n /[0-9]/.test(password) &&\n /[^A-Za-z0-9]/.test(password)\n ) {\n score += 1\n }\n\n // Penalty for common patterns\n if (/(.)\\1{2,}/.test(password)) score -= 1 // repeated characters (aaa, 111)\n if (/123|abc|qwe|asd|zxc/i.test(password)) score -= 1 // common sequences\n if (/password|123456|qwerty/i.test(password)) score -= 2 // common passwords\n\n return Math.max(0, Math.min(4, score))\n}\n\nconst colors = {\n red: '#ED334B',\n green: '#41B530',\n orange: '#FF7B21',\n}\n\nexport const getPasswordStrengthWord = (password: string, t) => {\n if (password.length < MIN_PASSWORD_LENGTH) {\n return {\n text: t('not_long_enough'),\n color: colors.red,\n tip: t('password_must_be_at_least_8_characters'),\n }\n }\n\n const strength = calculatePasswordStrength(password)\n\n if (strength <= 1) {\n return {\n text: t('weak'),\n color: colors.red,\n tip: t('strong_password_tip'),\n }\n } else if (strength === 2) {\n return {\n text: t('weak'),\n color: colors.red,\n tip: t('strong_password_tip'),\n }\n } else if (strength === 3) {\n return {\n text: t('average'),\n color: colors.orange,\n tip: t('strong_password_tip'),\n }\n } else {\n return {\n text: t('strong'),\n color: colors.green,\n }\n }\n}\n","import { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n usePrepareSendAlkanesCallback,\n usePushBitcoinTxCallback,\n} from 'src/hooks'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendAlkanesNFTScreenStep {\n CREATE_TX = 0,\n SIGN_TX = 1,\n}\nexport function useSendAlkanesNFTScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendAlkanesNFTScreen'>()\n\n const { t } = useI18n()\n\n const alkanesInfo = props.alkanesInfo\n\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [error, setError] = useState('')\n const [enableRBF, setEnableRBF] = useState(true)\n\n const currentAccount = useCurrentAccount()\n\n const tools = useTools()\n const wallet = useWallet()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setEnableRBF(enableRBF)\n })\n }, [wallet])\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n setDisabled(false)\n }, [toInfo, feeRate])\n\n const transferData = useRef<{\n id: string\n toSignData: ToSignData\n }>({\n id: '',\n toSignData: null,\n })\n\n const [step, setStep] = useState(0)\n\n const prepareSendAlkanes = usePrepareSendAlkanesCallback()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const onCreateTxHandleConfirm = async () => {\n tools.showLoading(true)\n try {\n const toSignData = await prepareSendAlkanes(\n toInfo,\n alkanesInfo.alkaneid,\n '1',\n feeRate,\n 'nft',\n enableRBF\n )\n if (toSignData) {\n transferData.current.toSignData = toSignData\n setStep(1)\n }\n } catch (e) {\n const msg = (e as any).message\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onCreateTxHandleBack = () => {\n nav.goBack()\n }\n\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignPsbtHandleCancel = () => {\n setStep(SendAlkanesNFTScreenStep.CREATE_TX)\n }\n\n const onSignPsbtHandleBack = () => {\n setStep(SendAlkanesNFTScreenStep.CREATE_TX)\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.toSignData],\n },\n }\n\n const onEnableRBFChange = (value: boolean) => {\n setEnableRBF(value)\n wallet.setEnableRBF(value)\n }\n\n return {\n step,\n t,\n alkanesInfo,\n toInfo,\n enableRBF,\n disabled,\n error,\n setToInfo,\n setEnableRBF: onEnableRBFChange,\n\n onCreateTxHandleConfirm,\n onCreateTxHandleBack,\n\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onSignPsbtHandleBack,\n signPsbtParams,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { Inscription, SignedData, SignPsbtParams, ToSignData } from '@unisat/wallet-shared'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport {\n useCurrentAccount,\n useFeeRateBar,\n usePrepareSendAlkanesCallback,\n usePushBitcoinTxCallback,\n} from 'src/hooks'\nimport { isValidAddress } from 'src/utils/bitcoin-utils'\n\nexport enum SendAlkanesScreenStep {\n CREATE_TX = 0,\n SIGN_TX = 1,\n}\n\nexport function useSendAlkanesScreenLogic() {\n const nav = useNavigation()\n const props = nav.getRouteState<'SendAlkanesScreen'>()\n\n const { t } = useI18n()\n\n const tokenBalance = props.tokenBalance\n\n const tokenInfo = props.tokenInfo\n\n const [inputAmount, setInputAmount] = useState('')\n const [disabled, setDisabled] = useState(true)\n const [toInfo, setToInfo] = useState<{\n address: string\n domain: string\n inscription?: Inscription\n }>({\n address: '',\n domain: '',\n inscription: undefined,\n })\n\n const [availableBalance, setAvailableBalance] = useState(tokenBalance.amount)\n const [error, setError] = useState('')\n const [enableRBF, setEnableRBF] = useState(true)\n\n const totalBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(tokenBalance.amount, tokenBalance.divisibility)\n }, [tokenBalance])\n const availableBalanceStr = useMemo(() => {\n return bnUtils.toDecimalAmount(availableBalance, tokenBalance?.divisibility)\n }, [availableBalance, tokenBalance])\n\n const currentAccount = useCurrentAccount()\n\n const tools = useTools()\n\n const { feeRate } = useFeeRateBar()\n\n useEffect(() => {\n const run = async () => {\n const tokenSummary = await wallet.getAddressAlkanesTokenSummary(\n currentAccount.address,\n tokenBalance.alkaneid,\n true\n )\n setAvailableBalance(tokenSummary.tokenBalance.available)\n }\n\n run()\n }, [])\n\n useEffect(() => {\n setError('')\n setDisabled(true)\n\n if (!isValidAddress(toInfo.address)) {\n return\n }\n if (!inputAmount) {\n return\n }\n\n if (feeRate <= 0) {\n return\n }\n\n const sendingAmount = bnUtils.fromDecimalAmount(inputAmount, tokenBalance.divisibility)\n\n if (bnUtils.compareAmount(sendingAmount, '0') <= 0) {\n return\n }\n\n if (bnUtils.compareAmount(sendingAmount, availableBalance)! > 0) {\n setError(t('insufficient_balance'))\n return\n }\n\n setDisabled(false)\n }, [toInfo, inputAmount, availableBalance, feeRate])\n\n const transferData = useRef<{\n id: string\n toSignData: ToSignData\n }>({\n id: '',\n toSignData: null,\n })\n\n const [step, setStep] = useState(SendAlkanesScreenStep.CREATE_TX)\n\n const wallet = useWallet()\n\n useEffect(() => {\n wallet.getEnableRBF().then(enableRBF => {\n setEnableRBF(enableRBF)\n })\n }, [wallet])\n\n const prepareSendAlkanes = usePrepareSendAlkanesCallback()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickNext = async () => {\n tools.showLoading(true)\n try {\n const toSignData = await prepareSendAlkanes(\n toInfo,\n tokenBalance.alkaneid,\n bnUtils.fromDecimalAmount(inputAmount, tokenBalance.divisibility),\n feeRate,\n 'ft',\n enableRBF\n )\n if (toSignData) {\n transferData.current.toSignData = toSignData\n setStep(1)\n }\n } catch (e) {\n setError((e as any).message)\n } finally {\n tools.showLoading(false)\n }\n }\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [transferData.current.toSignData],\n },\n }\n\n const onSignPsbtHandleConfirm = async (signedDatas: SignedData[]) => {\n tools.showLoading(true)\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n } finally {\n tools.showLoading(false)\n }\n }\n\n const onSignPsbtHandleCancel = () => {\n setStep(SendAlkanesScreenStep.CREATE_TX)\n }\n\n const onSignPsbtHandleBack = () => {\n setStep(SendAlkanesScreenStep.CREATE_TX)\n }\n\n const onEnableRBFChange = (value: boolean) => {\n setEnableRBF(value)\n wallet.setEnableRBF(value)\n }\n\n return {\n step,\n t,\n tokenBalance,\n tokenInfo,\n toInfo,\n totalBalanceStr,\n availableBalanceStr,\n\n inputAmount,\n enableRBF,\n disabled,\n error,\n\n // actions\n setToInfo,\n setInputAmount,\n setEnableRBF: onEnableRBFChange,\n onClickBack,\n onClickNext,\n\n // sign psbt actions\n onSignPsbtHandleConfirm,\n onSignPsbtHandleCancel,\n onSignPsbtHandleBack,\n signPsbtParams,\n }\n}\n","import { bnUtils, numUtils } from '@unisat/base-utils'\nimport { RuneBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useChain, useRunesIconInfo } from 'src/hooks'\n\nexport interface RunesBalanceCardProps {\n tokenBalance: RuneBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useRunesBalanceCardLogic(props: RunesBalanceCardProps) {\n const { tokenBalance, price, onClick } = props\n\n // balance\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.divisibility)\n let balanceStr = balance.toString()\n if (balance.lt(0.0001)) {\n balanceStr = '<0.0001'\n } else {\n balanceStr = numUtils.showLongNumber(balance.toString())\n }\n\n // price\n const chain = useChain()\n const showPrice = chain.showPrice\n\n // icon\n const iconInfo = useRunesIconInfo(tokenBalance.spacedRune)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n showPrice,\n price,\n\n // icon\n iconInfo,\n\n onClick,\n }\n}\n","import { bnUtils } from '@unisat/base-utils'\nimport { CAT20Balance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useCAT20IconInfo } from 'src/hooks'\n\nexport interface CAT20BalanceCardProps {\n tokenBalance: CAT20Balance\n onClick?: () => void\n showPrice?: boolean\n price?: TickPriceItem\n}\n\nexport function useCAT20BalanceCardLogic(props: CAT20BalanceCardProps) {\n const { tokenBalance, onClick, showPrice, price } = props\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.decimals)\n const balanceStr = balance.toString()\n\n const iconInfo = useCAT20IconInfo(tokenBalance.name, tokenBalance.tokenId)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n price,\n showPrice,\n\n // icon\n iconInfo,\n\n // click\n onClick,\n }\n}\n","import { bnUtils, numUtils } from '@unisat/base-utils'\nimport { AlkanesBalance, TickPriceItem } from '@unisat/wallet-shared'\nimport { useAlkanesIconInfo, useChain } from 'src/hooks'\n\nexport interface AlkanesBalanceCardProps {\n tokenBalance: AlkanesBalance\n onClick?: () => void\n price?: TickPriceItem\n}\nexport function useAlkanesBalanceCardLogic(props: AlkanesBalanceCardProps) {\n const { tokenBalance, onClick, price } = props\n\n const chain = useChain()\n const showPrice = chain.showPrice && price !== undefined\n\n const balance = bnUtils.toDecimalNumber(tokenBalance.amount, tokenBalance.divisibility)\n let balanceStr = balance.toString()\n if (balance.lt(0.0001)) {\n balanceStr = '<0.0001'\n } else {\n balanceStr = numUtils.showLongNumber(balance.toString())\n }\n\n const iconInfo = useAlkanesIconInfo(tokenBalance.name, tokenBalance.alkaneid)\n\n return {\n // balance\n tokenBalance,\n balance,\n balanceStr,\n\n // price\n showPrice,\n price,\n\n // icon\n iconInfo,\n\n onClick,\n }\n}\n","import { useI18n, useNavigation } from 'src/context'\nimport { useCurrentAccountCapabilities, useResetTxState } from 'src/hooks'\n\nexport function useCAT721NFTScreenLogic() {\n const nav = useNavigation()\n const { collectionInfo, localId, version } = nav.getRouteState<'CAT721NFTScreen'>()\n\n const { t } = useI18n()\n\n const resetTxState = useResetTxState()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickSend = () => {\n resetTxState()\n nav.navigate('SendCAT721Screen', {\n version: version,\n collectionInfo: collectionInfo,\n localId: localId,\n })\n }\n\n return {\n // info\n collectionInfo,\n localId,\n version,\n // i18n\n t,\n\n // actions\n onClickBack,\n onClickSend,\n disabledSend: !accountCapabilities.canCreateSigningRequest,\n }\n}\n","import {\n AccountSignMethod,\n SignedMessage,\n SignState,\n ToSignMessage,\n WebsiteResult,\n} from '@unisat/wallet-shared'\nimport logger from 'loglevel'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useApproval, useI18n, useTools, useWallet } from 'src/context'\nimport { useCurrentAccountCapabilities } from 'src/hooks'\nimport { shortAddress, useAsyncEffect } from 'src/utils/ui-utils'\nexport interface SignMessageProps {\n header?: React.ReactNode\n params: {\n data: {\n toSignMessages: ToSignMessage[]\n }\n session?: {\n origin: string\n icon: string\n name: string\n }\n }\n handleCancel?: () => void\n handleConfirm?: (signedMessages: SignedMessage[]) => void\n}\n\nexport function useSignMessageLogic(props: SignMessageProps) {\n const {\n params: {\n data: { toSignMessages },\n session,\n },\n handleCancel,\n handleConfirm,\n } = props\n\n const { resolveApproval, rejectApproval } = useApproval()\n\n const [loading, setLoading] = useState(false)\n const [isKeystoneSigning, setIsKeystoneSigning] = useState(false)\n const [isColdWalletSigning, setIsColdWalletSigning] = useState(false)\n const [readonlySignature, setReadonlySignature] = useState('')\n\n const wallet = useWallet()\n const tools = useTools()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const { t } = useI18n()\n\n const [disclaimerVisible, setDisclaimerVisible] = useState(false)\n\n const [signingTxIndex, setSigningTxIndex] = useState(toSignMessages.length > 1 ? -1 : 0)\n const [signedStates, setSignedStates] = useState<SignState[]>(\n toSignMessages.map(() => SignState.PENDING)\n )\n\n const [websiteResult, setWebsiteResult] = useState<WebsiteResult>({\n isScammer: false,\n warning: '',\n allowQuickMultiSign: false,\n })\n\n const isMultipleViewMode = toSignMessages.length > 1\n const [allowQuickMultiSign, setAllowQuickMultiSign] = useState(false)\n\n useEffect(() => {\n if (toSignMessages.length <= 1) {\n return\n }\n\n if (accountCapabilities.signMethod !== AccountSignMethod.Local) {\n return\n }\n\n setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignMessages.length > 1)\n }, [websiteResult, accountCapabilities, toSignMessages.length])\n\n useAsyncEffect(async () => {\n const website = session?.origin\n if (website) {\n const result = await wallet.checkWebsite(website)\n setWebsiteResult(result)\n\n // Also check local user-granted trust\n if (!result.allowQuickMultiSign && toSignMessages.length > 1) {\n const sites = await wallet.getConnectedSites()\n const site = sites.find(s => s.origin === website)\n if (site?.allowQuickMultiSign) {\n setAllowQuickMultiSign(true)\n }\n }\n }\n }, [])\n\n const currentToSignMessage = toSignMessages[signingTxIndex]\n\n const signedMessages = useRef<SignedMessage[]>([])\n\n const isScammer = websiteResult ? websiteResult.isScammer : false\n\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n const signedCount = signedStates.filter(state => state === SignState.SUCCESS).length\n\n const defaultHandleCancel = () => rejectApproval()\n const actualHandleCancel = handleCancel || defaultHandleCancel\n\n const multiSignList = useMemo(() => {\n return toSignMessages.map((data, index) => {\n const signState = signedStates[index]\n let buttonText = 'View'\n if (signState == SignState.PENDING) {\n buttonText = t('view')\n } else if (signState == SignState.SUCCESS) {\n buttonText = t('signed')\n } else if (signState == SignState.FAILED) {\n buttonText = t('reject')\n }\n\n let buttonPreset = 'primary'\n if (signState === SignState.SUCCESS) {\n buttonPreset = 'approval'\n } else if (signState === SignState.FAILED) {\n buttonPreset = 'danger'\n }\n\n let title = shortAddress(data.text, 10)\n\n const onClick = () => {\n setSigningTxIndex(index)\n }\n return {\n index,\n title,\n buttonText,\n buttonPreset,\n onClick,\n }\n })\n }, [toSignMessages, signedStates, t])\n\n // action\n const onClickBack = () => {\n if (isMultipleViewMode && signingTxIndex != -1) {\n // back to multi sign view\n setSigningTxIndex(-1)\n return\n }\n actualHandleCancel()\n }\n\n const onClickSign = () => {\n onNextStep()\n }\n\n const onTryMultiSign = async () => {\n setDisclaimerVisible(true)\n }\n\n const onTrustSite = async () => {\n const origin = session?.origin\n if (!origin) return\n await wallet.updateConnectSite(origin, { allowQuickMultiSign: true })\n setAllowQuickMultiSign(true)\n }\n\n const onQuickMultiSign = async () => {\n for (let i = 0; i < toSignMessages.length; i++) {\n try {\n const toSignMessage = toSignMessages[i]\n const signedData = await wallet.signMessage(toSignMessage)\n onSignedData(signedData, i)\n } catch (e) {\n signedStates[i] = SignState.FAILED\n setSignedStates([...signedStates])\n logger.error(`Quick signing message ${i} failed:`, e)\n }\n }\n }\n\n const localSign = async () => {\n try {\n const toSignMessage = toSignMessages[signingTxIndex]\n const signedData = await wallet.signMessage(toSignMessage)\n onSignedData(signedData, signingTxIndex)\n } catch (e) {\n signedStates[signingTxIndex] = SignState.FAILED\n setSignedStates([...signedStates])\n logger.error('Local signing failed:', e)\n }\n }\n\n const onNextStep = () => {\n switch (accountCapabilities.signMethod) {\n case AccountSignMethod.Keystone:\n setIsKeystoneSigning(true)\n return\n case AccountSignMethod.ColdWallet:\n setIsColdWalletSigning(true)\n return\n case AccountSignMethod.External:\n if (!readonlySignature) {\n tools.toastError(t('please_enter_your_signature'))\n return\n }\n\n onSignedData({ signature: readonlySignature }, signingTxIndex)\n setReadonlySignature('')\n return\n case AccountSignMethod.Local:\n localSign()\n return\n case AccountSignMethod.None:\n default:\n tools.toastError(t('not_supported'))\n }\n }\n\n const onSignedData = (data: SignedMessage, signingTxIndex: number) => {\n signedStates[signingTxIndex] = SignState.SUCCESS\n setSignedStates([...signedStates])\n\n signedMessages.current[signingTxIndex] = data\n\n // check if all signed\n\n // single mode\n if (!isMultipleViewMode) {\n if (handleConfirm) {\n handleConfirm(signedMessages.current)\n } else {\n resolveApproval(signedMessages.current)\n }\n return\n }\n\n // multiple mode\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n if (isAllSigned) {\n if (handleConfirm) {\n handleConfirm(signedMessages.current)\n } else {\n resolveApproval(signedMessages.current)\n }\n return\n } else {\n setSigningTxIndex(-1)\n return\n }\n }\n\n // keystone\n const onKeystoneSigningSuccess = (data: SignedMessage) => {\n setIsKeystoneSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onKeystoneSigningBack = () => {\n setIsKeystoneSigning(false)\n }\n\n // coldwallet\n const onColdWalletSigningSuccess = (data: SignedMessage) => {\n setIsColdWalletSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onColdWalletSigningBack = () => {\n setIsColdWalletSigning(false)\n }\n\n // disclaimer modal\n const onDisclaimerModalClose = () => {\n setDisclaimerVisible(false)\n }\n\n const showMultiSignView = isMultipleViewMode && signingTxIndex == -1\n\n return {\n loading,\n t,\n session,\n\n // page state\n isKeystoneSigning,\n isColdWalletSigning,\n showMultiSignView,\n\n disclaimerVisible,\n\n // data\n toSignMessages,\n currentToSignMessage,\n\n // state\n isScammer,\n allowQuickMultiSign,\n\n // multiple sign state\n isAllSigned,\n signedCount,\n multiSignList,\n\n // actions\n onClickBack,\n onClickSign,\n onQuickMultiSign,\n onTryMultiSign,\n onTrustSite,\n\n onKeystoneSigningSuccess,\n onKeystoneSigningBack,\n\n onColdWalletSigningSuccess,\n onColdWalletSigningBack,\n\n readonlySignature,\n setReadonlySignature,\n\n onDisclaimerModalClose,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport { ToSignInput } from '@unisat/keyring-service/types'\nimport {\n AccountSignMethod,\n ApprovalSession,\n ContractResult,\n DecodedPsbt,\n LocalPsbtSummary,\n SignedData,\n SignState,\n TickPriceItem,\n ToSignData,\n WebsiteResult,\n} from '@unisat/wallet-shared'\nimport logger from 'loglevel'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport { useApproval, useI18n, useTools, useWallet } from 'src/context'\nimport { useCurrentAccountCapabilities } from 'src/hooks'\nimport { useAsyncEffect } from 'src/utils/ui-utils'\n\ninterface InscriptionInfo {\n id: string\n isSent: boolean\n}\n\nexport interface TxInfo {\n changedBalance: number\n changedInscriptions: InscriptionInfo[]\n rawtx: string\n psbtHex: string\n toSignInputs: ToSignInput[]\n txError: string\n decodedPsbt: DecodedPsbt\n contractResults: ContractResult[]\n}\n\nexport const initTxInfo: TxInfo = {\n changedBalance: 0,\n changedInscriptions: [],\n rawtx: '',\n psbtHex: '',\n toSignInputs: [],\n txError: '',\n decodedPsbt: {\n inputInfos: [],\n outputInfos: [],\n fee: 0,\n feeRate: 0,\n risks: [],\n features: {\n rbf: false,\n },\n inscriptions: {},\n isScammer: false,\n shouldWarnFeeRate: false,\n recommendedFeeRate: 1,\n isCompleted: false,\n },\n contractResults: [],\n}\n\nexport interface SignPsbtProps {\n header?: React.ReactNode\n params: {\n data: {\n toSignDatas: ToSignData[]\n }\n session?: ApprovalSession\n }\n handleCancel?: () => void\n handleConfirm?: (signedDatas: SignedData[]) => void\n fromApproval?: boolean\n}\n\nexport function useSignPsbtLogic(props: SignPsbtProps) {\n const {\n params: {\n data: { toSignDatas },\n session,\n },\n handleCancel,\n handleConfirm,\n } = props\n const { resolveApproval, rejectApproval } = useApproval()\n\n const [loading, setLoading] = useState(false)\n const [isPsbtSigning, setIsPsbtSigning] = useState(false)\n const [isPsbtRiskPopoverVisible, setIsPsbtRiskPopoverVisible] = useState(false)\n const [isKeystoneSigning, setIsKeystoneSigning] = useState(false)\n const [isColdWalletSigning, setIsColdWalletSigning] = useState(false)\n const [readonlySignedPsbtHex, setReadonlySignedPsbtHex] = useState('')\n\n const [contractPopoverData, setContractPopoverData] = useState(undefined)\n\n const wallet = useWallet()\n const tools = useTools()\n const accountCapabilities = useCurrentAccountCapabilities()\n\n const { t } = useI18n()\n\n const [disclaimerVisible, setDisclaimerVisible] = useState(false)\n const [localPsbtSummary, setLocalPsbtSummary] = useState<LocalPsbtSummary | null>(null)\n\n const [signingTxIndex, setSigningTxIndex] = useState(toSignDatas.length > 1 ? -1 : 0)\n const [signedStates, setSignedStates] = useState<SignState[]>(\n toSignDatas.map(() => SignState.PENDING)\n )\n\n const [websiteResult, setWebsiteResult] = useState<WebsiteResult>({\n isScammer: false,\n warning: '',\n allowQuickMultiSign: false,\n })\n\n const isMultipleViewMode = toSignDatas.length > 1\n\n const [allowQuickMultiSign, setAllowQuickMultiSign] = useState(false)\n\n //\n\n useEffect(() => {\n if (toSignDatas.length <= 1) {\n return\n }\n\n if (accountCapabilities.signMethod !== AccountSignMethod.Local) {\n return\n }\n\n setAllowQuickMultiSign(websiteResult.allowQuickMultiSign && toSignDatas.length > 1)\n }, [websiteResult, accountCapabilities])\n\n useAsyncEffect(async () => {\n const website = session?.origin\n if (website) {\n const result = await wallet.checkWebsite(website)\n setWebsiteResult(result)\n\n // Also check local user-granted trust\n if (!result.allowQuickMultiSign && toSignDatas.length > 1) {\n const sites = await wallet.getConnectedSites()\n const site = sites.find(s => s.origin === website)\n if (site?.allowQuickMultiSign) {\n setAllowQuickMultiSign(true)\n }\n }\n }\n }, [])\n\n const currentToSignData = toSignDatas[signingTxIndex]\n\n const signedDatas = useRef<SignedData[]>([])\n\n const decodedPsbtDatas = useRef<DecodedPsbt[]>([])\n useAsyncEffect(async () => {\n if (decodedPsbtDatas.current[signingTxIndex]) {\n return\n }\n if (!currentToSignData) {\n return\n }\n try {\n setLoading(true)\n\n const decodedPsbt = await wallet.decodePsbt(currentToSignData.psbtHex, session?.origin || '')\n decodedPsbtDatas.current[signingTxIndex] = decodedPsbt\n } catch (e) {\n logger.error('Failed to decode PSBT data:', e)\n } finally {\n setLoading(false)\n }\n }, [signingTxIndex, currentToSignData])\n\n const currentDecodedPsbt = decodedPsbtDatas.current[signingTxIndex]\n\n const [brc20PriceMap, setBrc20PriceMap] = useState<Record<string, TickPriceItem>>()\n const [runesPriceMap, setRunesPriceMap] = useState<Record<string, TickPriceItem>>()\n\n useEffect(() => {\n if (!currentDecodedPsbt?.inputInfos) return\n\n const runesMap = {}\n const brc20Map = {}\n\n // collect asset information\n currentDecodedPsbt.inputInfos.forEach(v => {\n if (v.runes) {\n v.runes.forEach(w => {\n runesMap[w.spacedRune] = true\n })\n }\n\n if (v.inscriptions) {\n v.inscriptions.forEach(w => {\n const inscription = currentDecodedPsbt.inscriptions[w.inscriptionId]\n if (inscription && inscription.brc20) {\n brc20Map[inscription.brc20.tick] = true\n }\n })\n }\n })\n\n // get asset price\n if (Object.keys(runesMap).length > 0) {\n wallet\n .getRunesPrice(Object.keys(runesMap))\n .then(setRunesPriceMap)\n .catch(e => tools.toastError(e.message))\n }\n\n if (Object.keys(brc20Map).length > 0) {\n wallet\n .getBrc20sPrice(Object.keys(brc20Map))\n .then(setBrc20PriceMap)\n .catch(e => tools.toastError(e.message))\n }\n }, [currentDecodedPsbt])\n\n const networkFee = currentDecodedPsbt ? numUtils.satoshisToAmount(currentDecodedPsbt.fee) : '0'\n const isValid = currentDecodedPsbt ? currentDecodedPsbt.inputInfos.length > 0 : false\n const hasRisk = currentDecodedPsbt ? currentDecodedPsbt.risks.length > 0 : false\n\n let showFeeSection = false\n if (currentDecodedPsbt && currentDecodedPsbt.isCompleted) {\n showFeeSection = true\n }\n\n let isScammer = false\n if (currentDecodedPsbt && currentDecodedPsbt.isScammer == true) {\n isScammer = true\n }\n if (websiteResult && websiteResult.isScammer == true) {\n isScammer = true\n }\n\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n const signedCount = signedStates.filter(state => state === SignState.SUCCESS).length\n\n const defaultHandleCancel = () => rejectApproval()\n const actualHandleCancel = handleCancel || defaultHandleCancel\n\n const multiSignList = useMemo(() => {\n return toSignDatas.map((data, index) => {\n const signState = signedStates[index]\n let buttonText = 'View'\n if (signState == SignState.PENDING) {\n buttonText = t('view')\n } else if (signState == SignState.SUCCESS) {\n buttonText = t('signed')\n } else if (signState == SignState.FAILED) {\n buttonText = t('reject')\n }\n\n let buttonPreset = 'primary'\n if (signState === SignState.SUCCESS) {\n buttonPreset = 'approval'\n } else if (signState === SignState.FAILED) {\n buttonPreset = 'danger'\n }\n\n const psbtInfo = localPsbtSummary?.items?.[index]\n\n const onClick = () => {\n setSigningTxIndex(index)\n }\n return {\n index,\n buttonText,\n buttonPreset,\n psbtInfo,\n onClick,\n }\n })\n }, [toSignDatas, signedStates, localPsbtSummary, t])\n\n // action\n const onClickBack = () => {\n if (isMultipleViewMode && signingTxIndex != -1) {\n // back to multi sign view\n setSigningTxIndex(-1)\n setIsPsbtRiskPopoverVisible(false)\n return\n }\n actualHandleCancel()\n }\n\n const onClickSign = () => {\n if (currentDecodedPsbt?.risks?.length > 0) {\n setIsPsbtRiskPopoverVisible(true)\n return\n }\n onNextStep()\n }\n\n useAsyncEffect(async () => {\n if (toSignDatas.length <= 1) return\n try {\n const summary = await wallet.analyzeLocalPsbts(toSignDatas)\n setLocalPsbtSummary(summary)\n } catch (e) {\n logger.error('analyzeLocalPsbts failed:', e)\n }\n }, [])\n\n const onTryMultiSign = async () => {\n setDisclaimerVisible(true)\n }\n\n const onTrustSite = async () => {\n const origin = session?.origin\n if (!origin) return\n await wallet.updateConnectSite(origin, { allowQuickMultiSign: true })\n setAllowQuickMultiSign(true)\n }\n\n const onQuickMultiSign = async () => {\n // Run analysis if not yet done (user clicked before async summary completed)\n\n try {\n setIsPsbtSigning(true)\n // Yield to the JS event loop so the loading UI can render before heavy signing work begins\n await new Promise<void>(resolve => setTimeout(resolve, 50))\n const summary = localPsbtSummary ?? (await wallet.analyzeLocalPsbts(toSignDatas))\n if (!localPsbtSummary) setLocalPsbtSummary(summary)\n\n if (summary.parseErrorCount > 0) {\n tools.toastError(t('failed_to_parse_psbt'))\n return\n }\n if (summary.hasSighashNone) {\n tools.toastError(t('sighash_none_detected'))\n return\n }\n if (summary.hasAssets) {\n tools.toastError(t('quick_sign_assets_detected'))\n return\n }\n\n for (let i = 0; i < toSignDatas.length; i++) {\n try {\n const toSignData = toSignDatas[i]\n const signedData = await wallet.signPsbtV2(toSignData)\n onSignedData(signedData, i)\n } catch (e) {\n signedStates[i] = SignState.FAILED\n setSignedStates([...signedStates])\n tools.toastError(`Signing failed for PSBT ${i}: ${e.message}`)\n }\n }\n } catch (e) {\n } finally {\n setIsPsbtSigning(false)\n setDisclaimerVisible(false)\n }\n }\n\n const localSign = async () => {\n try {\n const toSignData = toSignDatas[signingTxIndex]\n const signedData = await wallet.signPsbtV2(toSignData)\n onSignedData(signedData, signingTxIndex)\n } catch (e) {\n logger.error('Local signing failed:', e)\n if (e.message.includes('Can not sign for input')) {\n tools.toastError(t('sign_psbt_input_error'))\n } else {\n tools.toastError(e.message)\n }\n signedStates[signingTxIndex] = SignState.FAILED\n setSignedStates([...signedStates])\n }\n }\n\n const onNextStep = () => {\n switch (accountCapabilities.signMethod) {\n case AccountSignMethod.Keystone:\n setIsKeystoneSigning(true)\n return\n case AccountSignMethod.ColdWallet:\n setIsColdWalletSigning(true)\n return\n case AccountSignMethod.External:\n if (!readonlySignedPsbtHex) {\n tools.toastError(t('invalid_psbt'))\n return\n }\n\n onSignedData({ psbtHex: readonlySignedPsbtHex }, signingTxIndex)\n setReadonlySignedPsbtHex('')\n return\n case AccountSignMethod.Local:\n localSign()\n return\n case AccountSignMethod.None:\n default:\n tools.toastError(t('not_supported'))\n }\n }\n\n const onSignedData = (data: SignedData, signingTxIndex: number) => {\n signedStates[signingTxIndex] = SignState.SUCCESS\n setSignedStates([...signedStates])\n\n signedDatas.current[signingTxIndex] = data\n\n // single mode\n if (!isMultipleViewMode) {\n if (handleConfirm) {\n handleConfirm(signedDatas.current)\n } else {\n resolveApproval(signedDatas.current)\n }\n return\n }\n\n // multiple mode\n const isAllSigned = signedStates.every(state => state === SignState.SUCCESS)\n if (isAllSigned) {\n if (handleConfirm) {\n handleConfirm(signedDatas.current)\n } else {\n resolveApproval(signedDatas.current)\n }\n return\n } else {\n setSigningTxIndex(-1)\n setIsPsbtRiskPopoverVisible(false)\n return\n }\n }\n\n // keystone\n const onKeystoneSigningSuccess = (data: SignedData) => {\n setIsKeystoneSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onKeystoneSigningBack = () => {\n setIsKeystoneSigning(false)\n }\n\n // coldwallet\n const onColdWalletSigningSuccess = (data: { psbtHex: string; rawtx: string }) => {\n setIsColdWalletSigning(false)\n onSignedData(data, signingTxIndex)\n }\n\n const onColdWalletSigningBack = () => {\n setIsColdWalletSigning(false)\n }\n\n // risk popover\n const onRiskPopoverConfirm = () => {\n setIsPsbtRiskPopoverVisible(false)\n onNextStep()\n }\n\n const onRiskPopoverClose = () => {\n setIsPsbtRiskPopoverVisible(false)\n }\n\n // disclaimer modal\n const onDisclaimerModalClose = () => {\n setDisclaimerVisible(false)\n }\n\n const showMultiSignView = isMultipleViewMode && signingTxIndex == -1\n\n const isWaitingData = showMultiSignView == false && (!currentDecodedPsbt || !currentToSignData)\n\n const showLoading = isWaitingData || loading\n\n const backButtonText = isMultipleViewMode ? t('back') : t('reject')\n\n return {\n isPsbtRiskPopoverVisible,\n contractPopoverData,\n setContractPopoverData,\n t,\n brc20PriceMap,\n runesPriceMap,\n session,\n isPsbtSigning,\n\n // page state\n isKeystoneSigning,\n isColdWalletSigning,\n showMultiSignView,\n showLoading,\n\n disclaimerVisible,\n localPsbtSummary,\n\n // data\n toSignDatas,\n currentToSignData,\n currentDecodedPsbt,\n readonlySignedPsbtHex,\n setReadonlySignedPsbtHex,\n\n // state\n networkFee,\n isValid,\n hasRisk,\n showFeeSection,\n isScammer,\n allowQuickMultiSign,\n\n // multiple sign state\n isAllSigned,\n signedCount,\n multiSignList,\n\n // actions\n backButtonText,\n onClickBack,\n onClickSign,\n onQuickMultiSign,\n onTryMultiSign,\n onTrustSite,\n\n onKeystoneSigningSuccess,\n onKeystoneSigningBack,\n\n onColdWalletSigningSuccess,\n onColdWalletSigningBack,\n\n onRiskPopoverConfirm,\n onRiskPopoverClose,\n\n onDisclaimerModalClose,\n }\n}\n","import { SignPsbtParams, SignPsbtResult } from '@unisat/wallet-shared'\nimport { useI18n, useNavigation } from 'src/context'\nimport { usePushBitcoinTxCallback } from 'src/hooks'\n\nexport function useTxConfirmScreenLogic() {\n const { t } = useI18n()\n const nav = useNavigation()\n const { toSignData } = nav.getRouteState<'TxConfirmScreen'>()\n const pushBitcoinTx = usePushBitcoinTxCallback()\n\n const signPsbtParams: SignPsbtParams = {\n data: {\n toSignDatas: [toSignData],\n },\n }\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickCancel = () => {\n nav.goBack()\n }\n\n const onClickConfirm = async (signedDatas: SignPsbtResult) => {\n try {\n const { success, txid, error } = await pushBitcoinTx(signedDatas[0].psbtHex)\n if (success) {\n nav.navigate('TxSuccessScreen', { txid })\n } else {\n throw new Error(error)\n }\n } catch (e) {\n nav.navigate('TxFailScreen', { error: (e as any).message })\n }\n }\n\n return {\n // data\n signPsbtParams,\n\n // actions\n onClickBack,\n onClickCancel,\n onClickConfirm,\n }\n}\n","import { useI18n, useNavigation } from 'src/context'\n\nexport function useTxFailScreenLogic() {\n const nav = useNavigation()\n const { error } = nav.getRouteState<'TxFailScreen'>()\n const { t } = useI18n()\n\n const onClickBack = () => {\n nav.goBack()\n }\n\n const onClickDone = () => {\n nav.navigate('TabMainScreen')\n }\n return {\n // info\n error,\n\n // actions\n onClickBack,\n onClickDone,\n\n // tools\n t,\n }\n}\n","import { useI18n, useNavigation, useTools } from 'src/context'\n\nexport function useTxSuccessScreenLogic() {\n const nav = useNavigation()\n const { txid } = nav.getRouteState<'TxSuccessScreen'>()\n const { t } = useI18n()\n const tools = useTools()\n\n const onClickExploreTx = () => {\n nav.navToExplorerTx(txid)\n }\n\n const onClickDone = () => {\n nav.navigate('MainScreen')\n }\n\n const onClickCopy = () => {\n tools.copyToClipboard(txid)\n }\n\n return {\n // data\n txid,\n\n // actions\n onClickExploreTx,\n onClickDone,\n onClickCopy,\n\n // tools\n t,\n }\n}\n","import {\n DecodedPsbt,\n Inscription,\n PsbtActionDetailType,\n PsbtActionInfo,\n PsbtActionType,\n} from '@unisat/wallet-shared'\nimport { useMemo } from 'react'\nimport { useI18n } from 'src/context'\nimport { useChain, useCurrentAddress } from 'src/hooks'\n\nexport interface ActionOverviewSectionProps {\n action: PsbtActionInfo\n decodedPsbt: DecodedPsbt\n}\n\nexport function useActionOverviewSectionLogic({ action, decodedPsbt }: ActionOverviewSectionProps) {\n const { t } = useI18n()\n\n const chain = useChain()\n\n const currentAddress = useCurrentAddress()\n\n const spendSatoshis = useMemo(() => {\n const inValue = decodedPsbt.inputInfos\n .filter(v => v.address === currentAddress)\n .reduce((pre, cur) => cur.value + pre, 0)\n const outValue = decodedPsbt.outputInfos\n .filter(v => v.address === currentAddress)\n .reduce((pre, cur) => cur.value + pre, 0)\n const spend = inValue - outValue\n return spend\n }, [decodedPsbt, currentAddress])\n\n const spendingInscriptionCount = useMemo(() => {\n let count = 0\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.inscriptions.forEach(inscription => {\n const inscriptionInfo: Inscription = decodedPsbt.inscriptions[inscription.inscriptionId]\n if (inscriptionInfo.brc20 && inscriptionInfo.brc20.op === 'transfer') {\n // skip brc20\n } else {\n count++\n }\n })\n }\n })\n return count\n }, [decodedPsbt, currentAddress])\n\n const spendingBrc20Count = useMemo(() => {\n let count = 0\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.inscriptions.forEach(inscription => {\n const inscriptionInfo: Inscription = decodedPsbt.inscriptions[inscription.inscriptionId]\n if (inscriptionInfo.brc20 && inscriptionInfo.brc20.op === 'transfer') {\n count++\n }\n })\n }\n })\n return count\n }, [decodedPsbt, currentAddress])\n\n const spendingRunesCount = useMemo(() => {\n const runeMap: { [key: string]: string } = {}\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.runes.forEach(rune => {\n runeMap[rune.runeid] = rune.runeid\n })\n }\n })\n return Object.keys(runeMap).length\n }, [decodedPsbt, currentAddress])\n\n const spendingAlkanesCount = useMemo(() => {\n const alkaneMap: { [key: string]: string } = {}\n decodedPsbt.inputInfos.forEach(inputInfo => {\n if (inputInfo.address === currentAddress) {\n inputInfo.alkanes.forEach(alkane => {\n alkaneMap[alkane.alkaneid] = alkane.alkaneid\n })\n }\n })\n return Object.keys(alkaneMap).length\n }, [decodedPsbt, currentAddress])\n\n if (!action) {\n action = {\n name: '',\n description: '',\n type: PsbtActionType.DEFAULT,\n }\n }\n\n if (action.details?.length === 0) {\n action.details = []\n }\n\n if (action.type === PsbtActionType.DEFAULT) {\n action.name = t('sign_transaction')\n action.description = ''\n action.details = []\n\n if (\n spendingInscriptionCount > 0 ||\n spendingBrc20Count > 0 ||\n spendingAlkanesCount > 0 ||\n spendingRunesCount > 0\n ) {\n action.details.push({\n type: PsbtActionDetailType.MULTIASSETS,\n label: t('spending_assets'),\n value: {\n inscriptionCount: spendingInscriptionCount,\n brc20Count: spendingBrc20Count,\n runesCount: spendingRunesCount,\n alkanesCount: spendingAlkanesCount,\n },\n })\n }\n }\n\n const commonDetails: any[] = []\n if (spendSatoshis > 0) {\n commonDetails.push({\n type: PsbtActionDetailType.SATOSHIS,\n label: t('spending_amount'),\n value: `${spendSatoshis}`,\n })\n }\n\n if (spendSatoshis < 0) {\n commonDetails.push({\n type: PsbtActionDetailType.SATOSHIS,\n label: t('receive'),\n value: `${-spendSatoshis}`,\n })\n }\n\n return {\n decodedPsbt,\n action,\n commonDetails,\n chain,\n }\n}\n","import { KeyringType } from '@unisat/keyring-service/types'\nimport {\n ADDRESS_TYPES,\n AccountSignMethod,\n FEEDBACK_URL,\n PlatformEnv,\n getAccountCapabilities,\n} from '@unisat/wallet-shared'\nimport { useMemo, useState } from 'react'\nimport { useDevice, useI18n, useNavigation, useTools, useWallet } from 'src/context'\nimport { useChain, useCurrentAccount, useCurrentKeyring, useVersionInfo } from 'src/hooks'\n\nexport interface SettingsItemType {\n key: string\n label?: string\n value?: string\n desc?: string\n danger?: boolean\n right: boolean\n icon?: string\n badge?: string\n onClick?: () => void\n}\n\nexport function useSettingsTabScreenLogic() {\n const nav = useNavigation()\n const currentKeyring = useCurrentKeyring()\n const currentAccount = useCurrentAccount()\n const chain = useChain()\n const wallet = useWallet()\n const tools = useTools()\n const [connected, setConnected] = useState(false)\n const versionInfo = useVersionInfo()\n const hasUpdate =\n versionInfo.latestVersion && versionInfo.latestVersion !== versionInfo.currentVesion\n const { t } = useI18n()\n\n const { isExtensionInExpandView } = useDevice()\n\n const isCustomHdPath = useMemo(() => {\n const item = ADDRESS_TYPES[currentKeyring.addressType]\n return currentKeyring.hdPath !== '' && item.hdPath !== currentKeyring.hdPath\n }, [currentKeyring])\n\n const currentKeyringCapabilities = useMemo(\n () => getAccountCapabilities({ type: currentKeyring.type }),\n [currentKeyring.type]\n )\n\n const settings_connectedSites: SettingsItemType = useMemo(() => {\n const value = connected ? t('connected') : t('not_connected')\n return {\n key: 'settings_connectedSites',\n label: t('connected_sites'),\n value,\n desc: '',\n right: true,\n icon: 'connectedSites',\n onClick: () => {\n nav.navigate('ConnectedSitesScreen')\n },\n }\n }, [t, connected])\n\n const settings_addressBook: SettingsItemType = useMemo(() => {\n return {\n key: 'settings_addressBook',\n label: t('address_book'),\n value: t('addressbook_desc'),\n desc: '',\n right: true,\n icon: 'addressBook',\n onClick: () => {\n // todo\n nav.navigate('ContactsScreen', {})\n },\n }\n }, [t])\n const settings_addressType: SettingsItemType = useMemo(() => {\n let value = ''\n const item = ADDRESS_TYPES[currentKeyring.addressType]\n const hdPath = currentKeyring.hdPath || item.hdPath\n if (\n currentKeyring.type === KeyringType.SimpleKeyring ||\n currentKeyringCapabilities.signMethod === AccountSignMethod.External ||\n !currentKeyringCapabilities.canChangeAddressType\n ) {\n value = `${item.name}`\n } else {\n value = `${item.name} (${hdPath}/${currentAccount.index})`\n }\n return {\n key: 'settings_addressType',\n label: t('address_type'),\n value,\n desc: '',\n right: true,\n icon: 'addressType',\n onClick: () => {\n if (isCustomHdPath) {\n tools.showTip(\n t(\n 'the_wallet_currently_uses_a_custom_hd_path_and_does_not_support_switching_address_types'\n )\n )\n return\n }\n nav.navigate('AddressTypeScreen')\n },\n }\n }, [t, isCustomHdPath, currentKeyring, currentAccount.index, currentKeyringCapabilities])\n\n const settings_advanced = useMemo(() => {\n return {\n key: 'settings_advanced',\n label: t('settings'),\n value: t('advanced_settings'),\n desc: '',\n right: true,\n icon: 'advance',\n onClick: () => {\n nav.navigate('AdvancedScreen')\n },\n }\n }, [t])\n\n const settings_feedback = useMemo(() => {\n return {\n key: 'settings_feedback',\n label: t('feedback'),\n value: t('let_us_know_what_you_think'),\n desc: '',\n route: '',\n right: true,\n icon: 'feedback',\n onClick: () => {\n const addressParam = currentAccount.address\n\n let feedbackUrl = FEEDBACK_URL\n feedbackUrl += `?address=${addressParam}&category=wallet`\n\n nav.navToUrl(feedbackUrl)\n },\n }\n }, [t])\n\n const settings_rateus = useMemo(() => {\n return {\n key: 'settings_rateus',\n label: t('rate_us'),\n value: t('like_our_wallet_wed_love_your_rating'),\n desc: '',\n route: '',\n right: true,\n icon: 'rateUs',\n onClick: () => {\n nav.navToUrl(PlatformEnv.REVIEW_URL)\n },\n }\n }, [t])\n\n const settings_aboutus = useMemo(() => {\n return {\n key: 'settings_aboutus',\n label: t('about_us'),\n value: '',\n desc: '',\n right: true,\n icon: 'aboutUsLogo',\n badge: hasUpdate ? t('new_version') : undefined,\n onClick: () => {\n nav.navigate('AboutUsScreen')\n },\n }\n }, [t, hasUpdate])\n\n const settings_lockwallet = useMemo(() => {\n return {\n key: 'settings_lockwallet',\n label: '',\n value: '',\n desc: t('lock_immediately'),\n right: false,\n onClick: () => {\n wallet.lockWallet()\n\n // Add small delay to ensure lock state updates before navigation\n // Prevents race condition where unlock screen might redirect back to main\n setTimeout(() => {\n nav.navToLock({\n autoUnlockByFace: false,\n })\n }, 10)\n return\n },\n }\n }, [t])\n\n const settings_expandview = useMemo(() => {\n if (isExtensionInExpandView) {\n return null\n }\n return {\n key: 'settings_expandview',\n label: '',\n value: '',\n desc: t('expand_view'),\n right: false,\n onClick: () => {\n nav.openExtensionInTab()\n },\n }\n }, [t])\n\n return {\n settings_connectedSites,\n settings_addressBook,\n settings_addressType,\n settings_advanced,\n settings_feedback,\n settings_rateus,\n settings_aboutus,\n settings_lockwallet,\n settings_expandview,\n }\n}\n","import { numUtils } from '@unisat/base-utils'\nimport { ChainType } from '@unisat/wallet-types'\nimport { useCallback, useEffect, useMemo, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { accountActions, AppState, uiActions } from 'src'\nimport { useI18n, useNavigation } from '../context'\nimport {\n useAccountBalance,\n useBalanceCardDetailExpanded,\n useBTCUnit,\n useChain,\n useFetchBalanceCallback,\n useToggleBalanceCardDetailExpanded,\n useWalletConfig,\n} from '../hooks'\n\nconst DEBOUNCE_DELAY = 1000\n\nexport function useBalanceCardLogic() {\n const { t } = useI18n()\n\n const walletConfig = useWalletConfig()\n\n const accountBalance = useAccountBalance()\n const chain = useChain()\n const dispatch = useDispatch()\n\n const fetchBalance = useFetchBalanceCallback()\n\n const btcUnit = useBTCUnit()\n const nav = useNavigation()\n\n const isBtcMainnet = chain.enum === ChainType.BITCOIN_MAINNET\n\n const debounceTimerRef = useRef<NodeJS.Timeout | null>(null)\n\n // Detail expand state\n const isDetailExpanded = useBalanceCardDetailExpanded()\n const toggleBalanceCardDetailExpanded = useToggleBalanceCardDetailExpanded()\n const handleExpandToggle = () => {\n toggleBalanceCardDetailExpanded()\n }\n\n // Balance visibility\n const isBalanceHidden = useSelector((state: AppState) => state.ui.isBalanceHidden)\n const handleHiddenToggle = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation()\n dispatch(uiActions['setBalanceHidden'](!isBalanceHidden))\n }\n\n const isCurrentChainBalance = chain.enum == accountBalance.chainType\n const balanceValue = useMemo(() => {\n if (!isCurrentChainBalance) {\n return '--'\n }\n return numUtils.satoshisToAmount(accountBalance.totalBalance)\n }, [accountBalance.totalBalance, isCurrentChainBalance])\n\n const unavailableTipText = useMemo(() => {\n let tipText = ''\n tipText += t('unavailable_tooltip')\n\n if (walletConfig.disableUtxoTools) {\n tipText += t('future_versions_will_support_spending_these_assets')\n } else {\n tipText += t('you_can_unlock_these_assets_by_using_the_utxos_tools')\n }\n return tipText\n }, [t, walletConfig.disableUtxoTools])\n\n const showUtxoToolButton = walletConfig.disableUtxoTools\n ? false\n : isCurrentChainBalance && accountBalance.unavailableBalance > 0\n\n const totalBalance = accountBalance.totalBalance\n const availableBalance = accountBalance.availableBalance\n const unavailableBalance = accountBalance.unavailableBalance\n\n const totalAmount = numUtils.satoshisToAmount(accountBalance.totalBalance)\n const availableAmount = numUtils.satoshisToAmount(accountBalance.availableBalance)\n const unavailableAmount = numUtils.satoshisToAmount(accountBalance.unavailableBalance)\n\n const totalAmountMainPart = isBtcMainnet ? totalAmount.slice(0, -4) : totalAmount.slice(0, -8)\n const totalAmountSubPart = isBtcMainnet ? totalAmount.slice(-4) : totalAmount.slice(-8)\n\n // Passive refresh every 10 seconds\n useEffect(() => {\n const intervalId = setInterval(() => {\n dispatch(accountActions['expireBalance'](null))\n fetchBalance()\n }, 10000)\n\n return () => clearInterval(intervalId)\n }, [dispatch, fetchBalance])\n\n const refreshBalance = useCallback(\n (e?: React.MouseEvent) => {\n if (e) {\n e.stopPropagation()\n }\n\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n\n debounceTimerRef.current = setTimeout(() => {\n dispatch((accountActions as any).expireBalance(null))\n fetchBalance()\n debounceTimerRef.current = null\n }, DEBOUNCE_DELAY)\n },\n [dispatch, fetchBalance]\n )\n\n useEffect(() => {\n return () => {\n if (debounceTimerRef.current) {\n clearTimeout(debounceTimerRef.current)\n }\n }\n }, [])\n\n const handleUnlock = (e?: React.MouseEvent) => {\n if (e) e.stopPropagation()\n if (walletConfig.disableUtxoTools) return\n\n nav.navToUtxoTools()\n }\n\n return {\n // state\n totalBalance,\n availableBalance,\n unavailableBalance,\n\n totalAmount,\n availableAmount,\n unavailableAmount,\n\n totalAmountMainPart,\n totalAmountSubPart,\n\n balanceValue,\n unavailableTipText,\n isCurrentChainBalance,\n showUtxoToolButton,\n\n // action\n handleUnlock,\n\n isDetailExpanded,\n handleExpandToggle,\n\n isBalanceHidden,\n handleHiddenToggle,\n\n refreshBalance,\n btcUnit,\n isBtcMainnet,\n\n chain,\n t,\n }\n}\n","import { ChainType } from '@unisat/wallet-types'\nimport { useChainType } from 'src/hooks'\n\nexport function useBtcDisplayLogic(balance: string) {\n const chainType = useChainType()\n\n const totalAmountMainPart =\n chainType === ChainType.BITCOIN_MAINNET ? balance.slice(0, -4) : balance.slice(0, -8)\n const totalAmountSubPart =\n chainType === ChainType.BITCOIN_MAINNET ? balance.slice(-4) : balance.slice(-8)\n\n return {\n totalAmountMainPart,\n totalAmountSubPart,\n }\n}\n"]}
|