btc-wallet 0.4.7-beta → 0.4.8-beta
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +34 -15
- package/dist/connector/binance.d.ts +6 -0
- package/dist/connector/index.d.ts +1 -0
- package/dist/connector/injected.d.ts +1 -0
- package/dist/connector/universalLink.d.ts +8 -0
- package/dist/core/btcUtils.d.ts +0 -6
- package/dist/evmSigner/index.d.ts +20 -20
- package/dist/index.js +434 -324
- package/dist/index.js.map +4 -4
- package/dist/utils/index.d.ts +1 -0
- package/esm/index.js +432 -322
- package/esm/index.js.map +4 -4
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
|
-
"sources": ["../src/index.ts", "../src/connector/base.ts", "../src/connector/injected.ts", "../src/connector/bitget.ts", "../src/connector/bybit.ts", "../src/connector/okx.ts", "../src/connector/tokenPocket.ts", "../src/connector/unisat.ts", "../src/connector/wizz.ts", "../src/connector/xverse.ts", "../src/connector/magicEden.ts", "../src/context/index.tsx", "../src/components/connectModal/index.tsx", "../src/hooks/useAccountContract.ts", "../src/hooks/useAccounts.ts", "../src/hooks/useBTCProvider.ts", "../src/hooks/useConnectModal.ts", "../src/hooks/useConnector.ts", "../src/hooks/useETHProvider.ts", "../src/evmSigner/provider.ts", "../src/utils/eventUtils.ts", "../src/utils/txConfirmUtils.ts", "../src/evmSigner/walletClientProvider.ts", "esbuild-scss-modules-plugin:./spinner.module.scss", "../src/components/spinner/index.tsx", "esbuild-scss-modules-plugin:./button.module.scss", "../src/components/button/index.tsx", "../src/components/modal/index.tsx", "esbuild-scss-modules-plugin:./modal.module.scss", "esbuild-scss-modules-plugin:./connect.module.scss", "../src/components/signModal/index.tsx", "../src/utils/
|
4
|
-
"sourcesContent": ["export * from './connector';\nexport { ConnectProvider } from './context';\nexport * from './hooks';\nexport * from './core/btcWalletSelectorContext';\nexport * from './core/setupBTCWallet';\nexport * from './core/btcUtils';\nexport const getVersion = () => {\n return '0.4.7-beta';\n};\n\nif (typeof window !== 'undefined') {\n (window as any).__BTC_WALLET_VERSION = getVersion();\n}\n", "export interface WalletMetadata {\n id: string;\n name: string;\n icon: string;\n downloadUrl: string;\n}\n\nexport abstract class BaseConnector {\n abstract readonly metadata: WalletMetadata;\n abstract isReady(): boolean;\n abstract requestAccounts(): Promise<string[]>;\n abstract getAccounts(): Promise<string[]>;\n abstract getPublicKey(): Promise<string>;\n abstract signMessage(signStr: string, type?: 'ecdsa' | 'bip322-simple'): Promise<string>;\n abstract on(event: string, handler: (data?: any) => void): void;\n abstract removeListener(event: string, handler: (data?: any) => void): void;\n [key: string]: any;\n abstract getProvider(): any;\n abstract getNetwork(): Promise<'livenet' | 'testnet'>;\n abstract switchNetwork(network: 'livenet' | 'testnet'): Promise<void>;\n abstract sendBitcoin(\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ): Promise<string>;\n abstract sendInscription(\n address: string,\n inscriptionId: string,\n options?: { feeRate: number },\n ): Promise<{ txid: string }>;\n abstract disconnect(): void;\n}\n", "import { BaseConnector } from './base';\n\nexport abstract class InjectedConnector extends BaseConnector {\n constructor(private propertity: string) {\n super();\n const props = this.propertity?.split('.');\n if (!this.propertity || props.length > 2) {\n throw new Error('please input valid propertity');\n }\n }\n isReady(): boolean {\n if (typeof window !== 'undefined') {\n const props = this.propertity.split('.');\n if (props.length === 1) {\n return typeof (window as any)[props[0]] !== 'undefined';\n } else {\n return (\n typeof (window as any)[props[0]] !== 'undefined' &&\n typeof (window as any)[props[0]][props[1]] !== 'undefined'\n );\n }\n }\n return false;\n }\n\n async requestAccounts(): Promise<string[]> {\n const accounts = await this.getProviderOrThrow().requestAccounts();\n console.log('network:', await this.getNetwork());\n console.log('\uD83D\uDE80 ~ InjectedConnector ~ requestAccounts ~ accounts:', accounts);\n return accounts;\n }\n\n async getAccounts(): Promise<string[]> {\n const accounts = await this.getProviderOrThrow().getAccounts();\n return accounts;\n }\n async getPublicKey(): Promise<string> {\n return this.getProviderOrThrow().getPublicKey();\n }\n async signMessage(signStr: string, type?: 'ecdsa' | 'bip322-simple'): Promise<string> {\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n return this.getProviderOrThrow().signMessage(signStr, type);\n }\n on(event: string, handler: (data?: unknown) => void) {\n const provider = this.getProvider();\n return provider?.on?.(event, handler);\n }\n removeListener(event: string, handler: (data?: unknown) => void) {\n const provider = this.getProvider();\n return provider?.removeListener?.(event, handler);\n }\n\n getProvider() {\n if (this.isReady()) {\n const props = this.propertity.split('.');\n if (props.length === 1) {\n return (window as any)[props[0]];\n } else {\n return (window as any)[props[0]][props[1]];\n }\n }\n }\n\n getProviderOrThrow() {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install or not create Bitcoin wallet!`);\n }\n return provider;\n }\n\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n return this.getProviderOrThrow().getNetwork();\n }\n async switchNetwork(network: 'livenet' | 'testnet'): Promise<void> {\n return this.getProviderOrThrow().switchNetwork(network);\n }\n\n async sendBitcoin(\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ): Promise<string> {\n return this.getProviderOrThrow().sendBitcoin(toAddress, satoshis, options);\n }\n\n async sendInscription(\n address: string,\n inscriptionId: string,\n options?: { feeRate: number },\n ): Promise<{ txid: string }> {\n const result = await this.getProviderOrThrow().sendInscription(address, inscriptionId, options);\n if (typeof result === 'string') {\n return {\n txid: result,\n };\n }\n\n return result;\n }\n\n disconnect() {}\n}\n", "import icon from '../icons/bitget.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class BitgetConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'bitget',\n name: 'Bitget Wallet',\n icon,\n downloadUrl: 'https://web3.bitget.com/en/wallet-download',\n };\n\n constructor() {\n super('bitkeep.unisat');\n }\n}\n", "import icon from '../icons/bybit.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class BybitConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'bybit',\n name: 'Bybit Wallet',\n icon,\n downloadUrl: 'https://www.bybit.com/download/',\n };\n\n constructor() {\n super('bybitWallet.bitcoin');\n }\n}\n", "import icon from '../icons/okx.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class OKXConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'okx',\n name: 'OKX Wallet',\n icon,\n downloadUrl: 'https://www.okx.com/download',\n };\n constructor() {\n super('okxwallet.bitcoin');\n }\n}\n", "import icon from '../icons/tokenpocket.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class TokenPocketConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'tokenpocket',\n name: 'TokenPocket',\n icon,\n downloadUrl: 'https://www.tokenpocket.pro/en/download/app',\n };\n\n constructor() {\n super('tokenpocket.bitcoin');\n }\n}\n", "import icon from '../icons/unisat.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class UnisatConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'unisat',\n name: 'Unisat Wallet',\n icon,\n downloadUrl: 'https://unisat.io',\n };\n\n constructor() {\n super('unisat');\n }\n}\n", "import icon from '../icons/wizz.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class WizzConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'wizz',\n name: 'Wizz Wallet',\n icon,\n downloadUrl: 'https://wizzwallet.io',\n };\n\n constructor() {\n super('wizz');\n }\n}\n", "import EventEmitter from 'events';\nimport type {\n Address,\n GetAddressOptions,\n SendBtcTransactionOptions,\n SignMessageOptions,\n} from 'sats-connect';\nimport icon from '../icons/xverse.png';\nimport { BaseConnector, type WalletMetadata } from './base';\nexport class XverseConnector extends BaseConnector {\n #network = 'Mainnet';\n #event = new EventEmitter();\n constructor() {\n super();\n this.#event.setMaxListeners(100);\n }\n readonly metadata: WalletMetadata = {\n id: 'xverse',\n name: 'Xverse Wallet',\n icon,\n downloadUrl: 'https://www.xverse.app',\n };\n isReady(): boolean {\n return typeof window !== 'undefined' && typeof window.BitcoinProvider !== 'undefined';\n }\n private loadAccounts = async (network: 'Mainnet' | 'Testnet') => {\n const { getAddress, AddressPurpose } = await import('sats-connect');\n const addresses = await new Promise<Address[]>((resolve, reject) => {\n const getAddressOptions: GetAddressOptions = {\n payload: {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n network: {\n type: network as any,\n },\n },\n onFinish: (response) => {\n resolve(response.addresses);\n },\n onCancel: () =>\n reject({\n code: 4001,\n message: 'User rejected the request.',\n }),\n };\n getAddress(getAddressOptions).catch((error) => reject(error));\n });\n localStorage.setItem('btc-connect-xverse-addresses-' + network, JSON.stringify(addresses));\n return addresses;\n };\n async sendInscription(): Promise<{ txid: string }> {\n throw new Error('Unsupported');\n }\n async requestAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.loadAccounts(this.#network as any);\n return addresses.map((item) => item.address);\n }\n async getAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses.map((item) => item.address);\n } else {\n return [];\n }\n }\n async getPublicKey(): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses[0].publicKey;\n } else {\n return '';\n }\n }\n async signMessage(signStr: string): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const { signMessage } = await import('sats-connect');\n\n const sig = await new Promise<string>((resolve, reject) => {\n const signMessageOptions: SignMessageOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n address: addresses[0],\n message: signStr,\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n signMessage(signMessageOptions).catch((e) => {\n reject(e);\n });\n });\n\n const modifiedSig = Buffer.from(sig, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n return modifiedSig.toString('base64');\n }\n on(event: string, handler: (data?: unknown) => void) {\n return this.#event.on(event, handler);\n }\n removeListener(event: string, handler: (data?: unknown) => void) {\n return this.#event.removeListener(event, handler);\n }\n getProvider() {\n if (this.isReady()) {\n return window.BitcoinProvider;\n }\n }\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return this.#network === 'Mainnet' ? 'livenet' : 'testnet';\n }\n async switchNetwork(): Promise<void> {\n throw new Error('Unsupported');\n }\n async sendBitcoin(toAddress: string, satoshis: number): Promise<string> {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const { result } = await provider.request('sendTransfer', {\n recipients: [{ address: toAddress, amount: satoshis }],\n });\n console.log('\uD83D\uDE80 ~ XverseConnector ~ sendBitcoin ~ res:', result);\n return result.txid;\n }\n disconnect(): void {\n localStorage.removeItem('btc-connect-xverse-addresses-Mainnet');\n localStorage.removeItem('btc-connect-xverse-addresses-Testnet');\n }\n}\n", "import EventEmitter from 'events';\nimport type {\n Address,\n GetAddressOptions,\n SendBtcTransactionOptions,\n SignMessageOptions,\n} from 'sats-connect';\nimport icon from '../icons/magicEden.png';\nimport { BaseConnector, type WalletMetadata } from './base';\n\nexport class MagicEdenConnector extends BaseConnector {\n #network = 'Mainnet';\n #event = new EventEmitter();\n\n constructor() {\n super();\n this.#event.setMaxListeners(100);\n }\n\n readonly metadata: WalletMetadata = {\n id: 'magicEden',\n name: 'Magic Eden Wallet',\n icon,\n downloadUrl: 'https://www.magiceden.io',\n };\n\n isReady(): boolean {\n return typeof window !== 'undefined' && 'magicEden' in window && !!window.magicEden;\n }\n\n private loadAccounts = async (network: 'Mainnet' | 'Testnet') => {\n const { getAddress, AddressPurpose } = await import('sats-connect');\n const addresses = await new Promise<Address[]>((resolve, reject) => {\n const getAddressOptions: GetAddressOptions = {\n payload: {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n network: {\n type: network as any,\n },\n },\n onFinish: (response) => {\n resolve(response.addresses);\n },\n onCancel: () =>\n reject({\n code: 4001,\n message: 'User rejected the request.',\n }),\n };\n getAddress(getAddressOptions).catch((error) => reject(error));\n });\n localStorage.setItem('btc-connect-magicEden-addresses-' + network, JSON.stringify(addresses));\n return addresses;\n };\n\n async sendInscription(): Promise<{ txid: string }> {\n throw new Error('Unsupported');\n }\n\n async requestAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.loadAccounts(this.#network as any);\n return addresses.map((item) => item.address);\n }\n\n async getAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-magicEden-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses.map((item) => item.address);\n } else {\n return [];\n }\n }\n\n async getPublicKey(): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-magicEden-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses[0].publicKey;\n } else {\n return '';\n }\n }\n\n async signMessage(signStr: string): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const { signMessage } = await import('sats-connect');\n\n const sig = await new Promise<string>((resolve, reject) => {\n const signMessageOptions: SignMessageOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n address: addresses[0],\n message: signStr,\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n signMessage(signMessageOptions).catch((e) => {\n reject(e);\n });\n });\n\n const modifiedSig = Buffer.from(sig, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n return modifiedSig.toString('base64');\n }\n\n on(event: string, handler: (data?: unknown) => void) {\n return this.#event.on(event, handler);\n }\n\n removeListener(event: string, handler: (data?: unknown) => void) {\n return this.#event.removeListener(event, handler);\n }\n\n getProvider() {\n if (this.isReady()) {\n if ('magicEden' in window) {\n const anyWindow: any = window;\n if (anyWindow.magicEden.bitcoin && anyWindow.magicEden.bitcoin.isMagicEden)\n return anyWindow.magicEden.bitcoin;\n }\n }\n }\n\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return this.#network === 'Mainnet' ? 'livenet' : 'testnet';\n }\n\n async switchNetwork(): Promise<void> {\n throw new Error('Unsupported');\n }\n\n async sendBitcoin(toAddress: string, satoshis: number): Promise<string> {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const { sendBtcTransaction } = await import('sats-connect');\n\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const result = await new Promise<string>((resolve, reject) => {\n const sendBtcOptions: SendBtcTransactionOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n recipients: [\n {\n address: toAddress,\n amountSats: BigInt(satoshis),\n },\n ],\n senderAddress: addresses[0],\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n sendBtcTransaction(sendBtcOptions).catch((e) => reject(e));\n });\n return result;\n }\n\n disconnect(): void {\n localStorage.removeItem('btc-connect-magicEden-addresses-Mainnet');\n localStorage.removeItem('btc-connect-magicEden-addresses-Testnet');\n }\n}\n", "import { SmartAccount, type AAOptions, type AccountContract } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { walletEntryPlugin, type WalletOption } from '@particle-network/wallet';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport ConnectModal from '../components/connectModal';\nimport SignModal from '../components/signModal';\nimport { type BaseConnector } from '../connector/base';\nimport { AASignerProvider } from '../evmSigner';\nimport useModalStateValue from '../hooks/useModalStateValue';\nimport type { AccountInfo } from '../types/accountInfo';\nimport { EventName } from '../types/eventName';\nimport { checkBTCVersion } from '../utils';\n\nimport events from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\ninterface GlobalState {\n connectorId?: string;\n setConnectorId: (connectorId?: string) => void;\n connector?: BaseConnector;\n connectors: BaseConnector[];\n openConnectModal: () => void;\n closeConnectModal: () => void;\n accounts: string[];\n provider: any;\n disconnect: () => void;\n requestDirectAccount: (connector: BaseConnector) => any;\n getPublicKey: () => Promise<string>;\n signMessage: (message: string) => Promise<string>;\n evmAccount?: string;\n smartAccount?: SmartAccount;\n switchNetwork: (network: 'livenet' | 'testnet') => Promise<void>;\n getNetwork: () => Promise<'livenet' | 'testnet'>;\n sendBitcoin: (\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ) => Promise<string>;\n accountContract: AccountContract;\n setAccountContract: (accountContract: AccountContract) => void;\n}\n\nconst ConnectContext = createContext<GlobalState>({} as any);\n\ninterface ConnectOptions {\n projectId: string;\n clientKey: string;\n appId: string;\n aaOptions: AAOptions;\n rpcUrls?: Record<number, string>;\n walletOptions?: Omit<WalletOption, 'erc4337' | 'customStyle'> & {\n customStyle?: Omit<WalletOption['customStyle'], 'supportChains'>;\n };\n}\n\nconst SAContractKey = 'particle-sa-config';\n\nexport const ConnectProvider = ({\n children,\n options,\n connectors,\n autoConnect = true,\n}: {\n children: React.ReactNode;\n options: ConnectOptions;\n connectors: BaseConnector[];\n autoConnect?: boolean;\n}) => {\n const {\n closeModal: closeConnectModal,\n isModalOpen: connectModalOpen,\n openModal: openConnectModal,\n } = useModalStateValue();\n\n const {\n closeModal: closeSignModal,\n isModalOpen: signModalOpen,\n openModal: openSignModal,\n } = useModalStateValue();\n\n const [connectorId, setConnectorId] = useState<string>();\n const [accounts, setAccounts] = useState<string[]>([]);\n const [evmAccount, setEVMAccount] = useState<string>();\n const [accountContract, _setAccountContract] = useState<AccountContract>({\n name: Object.keys(options.aaOptions.accountContracts)?.[0] || 'BTC',\n version:\n options.aaOptions.accountContracts[\n Object.keys(options.aaOptions.accountContracts)?.[0] || 'BTC'\n ]?.[0].version || '1.0.0',\n });\n\n const setAccountContract = useCallback(\n (config: AccountContract) => {\n if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {\n throw new Error('Invalid Account Contract');\n }\n localStorage.setItem(SAContractKey, JSON.stringify(config));\n _setAccountContract(config);\n },\n [options.aaOptions.accountContracts, _setAccountContract],\n );\n\n useEffect(() => {\n const id = localStorage.getItem('current-connector-id');\n if (id) {\n setConnectorId(id);\n }\n }, [autoConnect]);\n\n const evmSupportChainIds = useMemo(() => {\n let chainIds = options.aaOptions.accountContracts[accountContract.name]\n ?.filter((item) => item.version === accountContract.version)\n .map((item) => item.chainIds)\n .reduce((a, b) => {\n a.push(...b);\n return a;\n }, []);\n chainIds = Array.from(new Set(chainIds || []));\n return chainIds;\n }, [options.aaOptions.accountContracts, accountContract]);\n\n const connector = useMemo(() => {\n return connectors.find((item) => item.metadata.id === connectorId);\n }, [connectorId, connectors]);\n\n const getPublicKey = useCallback(async () => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const pubKey = await connector.getPublicKey();\n return pubKey;\n }, [connector]);\n\n const signMessage = useCallback(\n async (message: string) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const signature = await connector.signMessage(message);\n return signature;\n },\n [connector],\n );\n\n const sendBitcoin = useCallback(\n async (toAddress: string, satoshis: number, options?: { feeRate: number }) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n\n const signature = await connector.sendBitcoin(toAddress, satoshis, options);\n return signature;\n },\n [connector],\n );\n\n const getNetwork = useCallback(async () => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const network = await connector.getNetwork();\n return network;\n }, [connector]);\n\n const switchNetwork = useCallback(\n async (network: 'livenet' | 'testnet') => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n await connector.switchNetwork(network);\n },\n [connector],\n );\n\n const smartAccount = useMemo(() => {\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n if (\n !(window as any).__bitcoinSmartAccount ||\n ((window as any)?.__bitcoinSmartAccount &&\n ((window as any)?.__bitcoinSmartAccount.smartAccountContract.version !==\n accountContract.version ||\n (window as any)?.__bitcoinSmartAccount.smartAccountContract.name !==\n accountContract.name))\n ) {\n const smartAccount = new SmartAccount(\n new AASignerProvider(\n evmSupportChainIds,\n options.projectId,\n options.clientKey,\n options.rpcUrls,\n ) as any,\n options,\n );\n smartAccount.setSmartAccountContract(accountContract);\n (window as any).__bitcoinSmartAccount = smartAccount;\n }\n (window as any).__bitcoinSmartAccount.provider.getPublicKey = getPublicKey;\n (window as any).__bitcoinSmartAccount.provider.personalSign = signMessage;\n return (window as any).__bitcoinSmartAccount as SmartAccount;\n }, [options, evmSupportChainIds, getPublicKey, signMessage, accountContract]);\n\n const requestAccount = useCallback(\n async (connector: BaseConnector) => {\n let accounts = await connector.getAccounts();\n if (accounts.length === 0 && autoConnect) {\n accounts = await connector.requestAccounts();\n }\n setAccounts(accounts);\n },\n [autoConnect],\n );\n\n const requestDirectAccount = useCallback(async (connector: BaseConnector) => {\n let accounts = await connector.getAccounts();\n if (accounts.length === 0) {\n accounts = await connector.requestAccounts();\n }\n setAccounts(accounts);\n\n return accounts;\n }, []);\n\n useEffect(() => {\n if (connector) {\n requestAccount(connector).catch((e: any) => {\n console.error('get account error', e);\n\n setAccounts([]);\n });\n } else {\n setAccounts([]);\n }\n }, [connector, requestAccount]);\n\n useEffect(() => {\n const onAccountChange = (accounts: string[]) => {\n setAccounts(accounts);\n };\n connector?.on('accountsChanged', onAccountChange);\n return () => {\n connector?.removeListener('accountsChanged', onAccountChange);\n };\n }, [connector]);\n\n const provider = useMemo(() => {\n if (connectorId) {\n return connectors.find((item) => item.metadata.id === connectorId)?.getProvider();\n }\n }, [connectorId, connectors]);\n\n const disconnect = useCallback(() => {\n localStorage.removeItem('current-connector-id');\n txConfirm.reset();\n if (connector) {\n connector.disconnect();\n }\n setConnectorId(undefined);\n }, [connector]);\n\n useEffect(() => {\n const config = JSON.parse(localStorage.getItem(SAContractKey) || '{}');\n if (\n config.name &&\n config.version &&\n checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)\n ) {\n _setAccountContract(config);\n }\n }, [options.aaOptions.accountContracts, _setAccountContract]);\n\n useEffect(() => {\n if (options.walletOptions?.visible !== false) {\n const supportChains = evmSupportChainIds.map((id) => chains.getEVMChainInfoById(id));\n if (supportChains.some((chain) => !chain)) {\n throw new Error(`Please config valid chain ids, ${JSON.stringify(evmSupportChainIds)}`);\n }\n walletEntryPlugin.init(\n {\n projectId: options.projectId,\n clientKey: options.clientKey,\n appId: options.appId,\n },\n {\n ...options.walletOptions,\n erc4337: accountContract,\n customStyle: {\n ...options.walletOptions?.customStyle,\n supportChains: supportChains as any,\n },\n },\n );\n }\n }, [options, evmSupportChainIds, accountContract]);\n\n useEffect(() => {\n if (smartAccount && options.walletOptions?.visible !== false) {\n walletEntryPlugin.setWalletCore({\n ethereum: smartAccount.provider,\n });\n }\n }, [smartAccount, options]);\n\n useEffect(() => {\n if (options.walletOptions?.visible !== false) {\n if (evmAccount) {\n walletEntryPlugin.walletEntryCreate();\n } else {\n walletEntryPlugin.walletEntryDestroy();\n }\n }\n }, [evmAccount, smartAccount, options]);\n\n useEffect(() => {\n if (accounts.length === 0) {\n closeConnectModal();\n closeSignModal();\n if (events.listenerCount(EventName.sendUserOpResult) > 0) {\n events.emit(EventName.sendUserOpResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n } else if (events.listenerCount(EventName.personalSignResult) > 0) {\n events.emit(EventName.personalSignResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n } else if (events.listenerCount(EventName.signTypedDataResult) > 0) {\n events.emit(EventName.signTypedDataResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n }\n }\n }, [accounts, closeConnectModal, closeSignModal]);\n\n return (\n <ConnectContext.Provider\n value={{\n connectorId,\n setConnectorId,\n connector,\n connectors,\n openConnectModal,\n closeConnectModal,\n accounts,\n provider,\n disconnect,\n requestDirectAccount,\n getPublicKey,\n signMessage,\n evmAccount,\n smartAccount,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n accountContract: accountContract,\n setAccountContract: setAccountContract,\n }}\n >\n {children}\n <ConnectModal open={connectModalOpen} onClose={closeConnectModal} />\n <SignModal open={signModalOpen} onClose={closeSignModal} onOpen={openSignModal} />\n </ConnectContext.Provider>\n );\n};\n\nexport const useConnectProvider = () => {\n const context = useContext(ConnectContext);\n return context;\n};\n", "import { useEffect, useState } from 'react';\nimport { type BaseConnector } from '../../connector/base';\nimport { useConnectProvider } from '../../context';\nimport { useConnector } from '../../hooks';\nimport back from '../../icons/back.svg';\nimport close from '../../icons/close.svg';\nimport retryIcon from '../../icons/retry.svg';\nimport Button from '../button';\nimport Modal from '../modal';\nimport styles from './connect.module.scss';\n\nconst ConnectModal = ({ open, onClose }: { open: boolean; onClose: () => void }) => {\n const [backVisible, setBackVisible] = useState(false);\n const [retryVisible, setRetryVisible] = useState(false);\n const [walletReady, setWalletReady] = useState(true);\n const [selectConnector, setSelectConnector] = useState<BaseConnector>();\n const { closeConnectModal } = useConnectProvider();\n const { connect, connectors } = useConnector();\n\n useEffect(() => {\n if (!open) {\n setBackVisible(false);\n setRetryVisible(false);\n setWalletReady(true);\n setSelectConnector(undefined);\n }\n }, [open]);\n\n const onConnect = async (connector: BaseConnector) => {\n setBackVisible(true);\n setSelectConnector(connector);\n if (connector.isReady()) {\n try {\n await connect(connector.metadata.id);\n closeConnectModal();\n } catch (error: any) {\n console.error('onConnect error', error);\n if (error.code === 4001) {\n setRetryVisible(true);\n }\n }\n } else {\n setWalletReady(false);\n }\n };\n\n const onBack = () => {\n setBackVisible(false);\n setRetryVisible(false);\n setWalletReady(true);\n setSelectConnector(undefined);\n };\n\n const onRetry = () => {\n setRetryVisible(false);\n if (selectConnector) {\n onConnect(selectConnector);\n }\n };\n\n return (\n <Modal open={open} onClose={onClose} isDismissable={false} contentClassName={styles.connectModal}>\n <div className={styles.title}>{selectConnector?.metadata.name || 'Choose Wallet'}</div>\n <img className={styles.closeBtn} src={close} onClick={onClose}></img>\n {backVisible && <img className={styles.backBtn} src={back} onClick={onBack}></img>}\n\n {!backVisible &&\n connectors.map((connector) => {\n return (\n <div className={styles.walletItem} key={connector.metadata.id} onClick={() => onConnect(connector)}>\n <img className={styles.walletIcon} src={connector.metadata.icon}></img>\n <div className={styles.walletName}>{connector.metadata.name}</div>\n </div>\n );\n })}\n\n {backVisible && selectConnector && (\n <div className={styles.connecting}>\n <div className={styles.connectingIconContainer}>\n <img className={styles.connectingIcon} src={selectConnector.metadata.icon}></img>\n {retryVisible && (\n <div className={styles.retryContainer} onClick={onRetry}>\n <img className={styles.retryIcon} src={retryIcon}></img>\n </div>\n )}\n </div>\n\n {walletReady ? (\n <>\n <div className={styles.connection}>{retryVisible ? 'Request Cancelled' : 'Requesting Connection'}</div>\n <div className={styles.acceptRequest}>\n {retryVisible\n ? 'You cancelled the request.\\nClick above to try again.'\n : 'Accept the request through your wallet to connect to this app.'}\n </div>\n </>\n ) : (\n <>\n <div className={styles.connection}>Wallet Not Installed.</div>\n <Button\n className={styles.btnDownload}\n onClick={() => {\n window.open(selectConnector?.metadata.downloadUrl, '_blank');\n }}\n >\n Get\n </Button>\n </>\n )}\n </div>\n )}\n </Modal>\n );\n};\n\nexport default ConnectModal;\n", "import { useConnectProvider } from '../context';\n\nexport const useAccountContract = () => {\n const { accountContract, setAccountContract } = useConnectProvider();\n return {\n accountContract,\n setAccountContract,\n };\n};\n", "import { useConnectProvider } from '../context';\n\nexport const useAccounts = () => {\n const { accounts } = useConnectProvider();\n return { accounts };\n};\n", "import { useCallback } from 'react';\nimport { useConnectProvider } from '../context';\n\nexport const useBTCProvider = () => {\n const {\n connector,\n provider,\n accounts,\n getPublicKey,\n signMessage,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n } = useConnectProvider();\n\n const sendInscription = useCallback(\n async (address: string, inscriptionId: string, options?: { feeRate: number }) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const result = await connector.sendInscription(address, inscriptionId, options);\n return result;\n },\n [connector],\n );\n\n return {\n provider,\n accounts,\n getPublicKey,\n signMessage,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n sendInscription,\n connector,\n };\n};\n", "import { useConnectProvider } from '../context';\n\nexport const useConnectModal = () => {\n const { openConnectModal, disconnect, requestDirectAccount } = useConnectProvider();\n return { openConnectModal, disconnect, requestDirectAccount };\n};\n", "import { useCallback } from 'react';\nimport { useConnectProvider } from '../context';\n\nexport const useConnector = () => {\n const { connectors, setConnectorId } = useConnectProvider();\n\n const connect = useCallback(\n async (connectorId: string) => {\n const connector = connectors.find((item) => item.metadata.id === connectorId);\n if (!connector) {\n throw new Error(`connector id ${connectorId} not found`);\n }\n const accounts = await connector.requestAccounts();\n if (accounts.length > 0) {\n localStorage.setItem('current-connector-id', connector.metadata.id);\n setConnectorId(connector.metadata.id);\n }\n },\n [connectors, setConnectorId],\n );\n\n return { connectors, connect };\n};\n", "import { intToHex } from '@ethereumjs/util';\nimport type {\n SendTransactionParams,\n Transaction,\n UserOpBundle,\n UserOpParams,\n} from '@particle-network/aa';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { createWalletClient, custom, type PublicClient } from 'viem';\nimport { useConnectProvider } from '../context';\nimport { EthereumProvider } from '../evmSigner/provider';\nimport { WalletClientProvider } from '../evmSigner/walletClientProvider';\nimport { EventName } from '../types/eventName';\nimport events, { getPendingSignEventAccount } from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\nexport const useETHProvider: any = () => {\n const { evmAccount, smartAccount } = useConnectProvider();\n const [chainId, setChainId] = useState<number>();\n\n useEffect(() => {\n if (smartAccount) {\n const chainId = (smartAccount.provider as any).chainId as number;\n setChainId(chainId);\n\n const onChangeChange = (id: string) => {\n setChainId(Number(id));\n };\n smartAccount.provider.on('chainChanged', onChangeChange);\n return () => {\n smartAccount.provider.removeListener('chainChanged', onChangeChange);\n };\n }\n }, [smartAccount]);\n\n const switchChain = useCallback(\n async (chainId: number) => {\n if (smartAccount?.provider) {\n await smartAccount.provider.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: intToHex(chainId),\n },\n ],\n });\n }\n },\n [smartAccount?.provider],\n );\n\n const getFeeQuotes = useCallback(\n async (tx: Transaction | Transaction[]) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n return smartAccount.getFeeQuotes(tx);\n },\n [smartAccount],\n );\n\n const buildUserOp = useCallback(\n async ({ tx, feeQuote, tokenPaymasterAddress }: UserOpParams) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n const result = await smartAccount.buildUserOperation({ tx, feeQuote, tokenPaymasterAddress });\n return result;\n },\n [smartAccount],\n );\n\n const sendUserOp = useCallback(\n async (params: SendTransactionParams, forceHideConfirmModal?: boolean) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n\n const showConfirmModal = !forceHideConfirmModal && !txConfirm.isNotRemind();\n\n if (showConfirmModal) {\n if (getPendingSignEventAccount() > 0) {\n throw new Error('Operation failed, there is a transaction being processed');\n }\n }\n\n let userOpBundle: UserOpBundle | undefined;\n if (\n Object.prototype.hasOwnProperty.call(params, 'userOpHash') &&\n Object.prototype.hasOwnProperty.call(params, 'userOp')\n ) {\n const { userOpHash, userOp } = params as UserOpBundle;\n if (userOpHash && userOp) {\n userOpBundle = { userOpHash, userOp };\n }\n }\n\n if (!userOpBundle) {\n const { tx, feeQuote, tokenPaymasterAddress } = params as UserOpParams;\n userOpBundle = await buildUserOp({ tx, feeQuote, tokenPaymasterAddress });\n }\n\n if (!showConfirmModal) {\n return smartAccount.sendUserOperation(userOpBundle);\n }\n\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.sendUserOp, userOpBundle);\n events.once(EventName.sendUserOpResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n },\n [smartAccount, buildUserOp],\n );\n\n const publicClient = useMemo(() => {\n if (!smartAccount || !chainId) {\n return undefined;\n }\n return (smartAccount?.provider as any).publicClient as PublicClient;\n }, [smartAccount, chainId]);\n\n const provider = useMemo(() => {\n const ethereumProvider = new EthereumProvider(\n sendUserOp,\n smartAccount?.provider as any,\n evmAccount,\n );\n return ethereumProvider;\n }, [evmAccount, sendUserOp, smartAccount?.provider]);\n\n const walletClient = useMemo(() => {\n return createWalletClient({\n transport: custom(new WalletClientProvider(provider)),\n });\n }, [provider]);\n\n return {\n provider,\n /** @deprecated please use account */\n evmAccount,\n account: evmAccount,\n switchChain,\n chainId,\n getFeeQuotes,\n buildUserOp,\n sendUserOp,\n publicClient,\n walletClient,\n };\n};\n", "import type { IEthereumProvider, JsonRpcRequest, SendTransactionParams } from '@particle-network/aa';\nimport { type AASignerProvider } from '.';\n\nexport class EthereumProvider implements IEthereumProvider {\n constructor(\n public sendUserOp: (params: SendTransactionParams, forceHideConfirmModal?: boolean) => Promise<string>,\n public signer?: AASignerProvider,\n public account?: string\n ) {}\n\n on(event: string, listener: any): this {\n this.signer?.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any): this {\n this.signer?.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any): this {\n this.signer?.off(event, listener);\n return this;\n }\n\n removeListener(event: string, listener: any): this {\n this.signer?.removeListener(event, listener);\n return this;\n }\n\n async request(arg: Partial<JsonRpcRequest>): Promise<any> {\n const method = arg.method;\n if (!method) {\n throw new Error('Method not found.');\n }\n\n if (method === 'eth_accounts' || method === 'eth_requestAccounts') {\n return this.account ? [this.account] : [];\n } else if (method === 'eth_sendTransaction') {\n const txData = arg.params?.[0];\n const result = await this.sendUserOp({ tx: txData });\n return result;\n }\n\n return this.signer?.request(arg as any);\n }\n}\n", "import { EventEmitter } from 'events';\nimport { EventName } from '../types/eventName';\n\nconst events = new EventEmitter();\nevents.setMaxListeners(100);\n\nexport const getPendingSignEventAccount = () => {\n return (\n events.listenerCount(EventName.sendUserOpResult) +\n events.listenerCount(EventName.personalSignResult) +\n events.listenerCount(EventName.signTypedDataResult)\n );\n};\n\nexport default events;\n", "const txConfirm = {\n isNotRemind: () => {\n if (typeof window === 'undefined') return false;\n const value = localStorage.getItem('tx-confirm-modal-remind');\n return value === '0';\n },\n setNotRemind: (notRemind: boolean) => {\n if (typeof window === 'undefined') return;\n if (notRemind) {\n localStorage.setItem('tx-confirm-modal-remind', '0');\n } else {\n localStorage.removeItem('tx-confirm-modal-remind');\n }\n },\n reset: () => {\n if (typeof window === 'undefined') return;\n localStorage.removeItem('tx-confirm-modal-remind');\n },\n};\n\nexport default txConfirm;\n", "import type { IEthereumProvider, JsonRpcRequest } from '@particle-network/aa';\nimport { EventName } from '../types/eventName';\nimport { EVMMethod } from '../types/evmMethod';\nimport events, { getPendingSignEventAccount } from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\nexport class WalletClientProvider implements IEthereumProvider {\n constructor(private provider: IEthereumProvider) {}\n\n on(event: string, listener: any): this {\n this.provider.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any): this {\n this.provider.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any): this {\n this.provider.off(event, listener);\n return this;\n }\n\n removeListener(event: string, listener: any): this {\n this.provider.removeListener(event, listener);\n return this;\n }\n\n async request(arg: Partial<JsonRpcRequest>): Promise<any> {\n const method = arg.method;\n if (!method) {\n throw new Error('Method not found.');\n }\n\n if (method === EVMMethod.personalSign || method.startsWith(EVMMethod.signTypedData)) {\n const showConfirmModal = !txConfirm.isNotRemind();\n if (showConfirmModal) {\n if (getPendingSignEventAccount() > 0) {\n throw new Error('Operation failed, there is a transaction being processed');\n }\n }\n if (!showConfirmModal) {\n return this.provider.request(arg as any);\n }\n }\n\n if (method === EVMMethod.personalSign) {\n console.log('personal_sign ---- ', arg);\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.personalSign, arg);\n events.once(EventName.personalSignResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n } else if (method.startsWith(EVMMethod.signTypedData)) {\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.signTypedData, arg);\n events.once(EventName.signTypedDataResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n }\n\n return this.provider.request(arg as any);\n }\n}\n", "\nconst digest = '906d42389ecad5c2ab92642c8e0775ea667c413b069684ce9d01199562f2d0be';\nconst classes = {\"loader\":\"_loader_g0am3_1\",\"rotate\":\"_rotate_g0am3_1\",\"prixClipFix\":\"_prixClipFix_g0am3_1\"};\nconst css = `._loader_g0am3_1{animation:_rotate_g0am3_1 1s linear infinite;border-radius:50%;height:20px;position:relative;width:20px}._loader_g0am3_1:before{animation:_prixClipFix_g0am3_1 2s linear infinite;border:2px solid #000;border-radius:50%;box-sizing:border-box;content:\"\";inset:0;position:absolute}@keyframes _rotate_g0am3_1{to{transform:rotate(1turn)}}@keyframes _prixClipFix_g0am3_1{0%{clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}25%{clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}50%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}75%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type CSSProperties } from 'react';\nimport styles from './spinner.module.scss';\n\nconst Spinner = ({ className, style }: { className?: string; style?: CSSProperties | undefined }) => {\n return <span className={styles.loader + (className ? ` ${className}` : '')} style={style}></span>;\n};\n\nexport default Spinner;\n", "\nconst digest = '424d614dbc2763d7cad7ca35c00bd255c6ed55da308a1f3018594201a47127bf';\nconst classes = {\"btn\":\"_btn_ofd87_1\"};\nconst css = `._btn_ofd87_1{align-items:center;background:#fff;border-radius:8px;color:#000;display:flex;flex-direction:row;font-size:16px;gap:16px;justify-content:center;padding:6px 24px;position:relative}._btn_ofd87_1:hover{opacity:.85}._btn_ofd87_1:disabled{background:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.639);cursor:not-allowed;opacity:1}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type CSSProperties, type ReactNode } from 'react';\nimport Spinner from '../spinner';\nimport styles from './button.module.scss';\n\nconst Button = ({\n children,\n isLoading,\n isDisabled,\n onClick,\n className,\n style,\n}: {\n children: ReactNode;\n isLoading?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n style?: CSSProperties | undefined;\n}) => {\n return (\n <button\n className={styles.btn + (className ? ` ${className}` : '')}\n onClick={isLoading || isDisabled ? undefined : onClick}\n disabled={isDisabled}\n style={style}\n >\n {isLoading && !isDisabled && <Spinner />}\n {children}\n </button>\n );\n};\n\nexport default Button;\n", "import { useEffect, useMemo, useState, type CSSProperties, type MouseEventHandler, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport styles from './modal.module.scss';\n\ninterface ModalProp {\n open: boolean;\n onClose: () => void;\n children: ReactNode;\n isDismissable?: boolean;\n contentStyle?: CSSProperties | undefined;\n contentClassName?: string;\n}\n\nconst stopPropagation: MouseEventHandler<unknown> = (event) => event.stopPropagation();\n\nconst Modal = ({ open, onClose, children, isDismissable = true, contentStyle, contentClassName }: ModalProp) => {\n const handleBackdropClick = useMemo(() => (isDismissable ? onClose : undefined), [onClose, isDismissable]);\n\n useEffect(() => {\n if (isDismissable) {\n const handleEscape = (event: KeyboardEvent) => open && event.key === 'Escape' && onClose();\n\n document.addEventListener('keydown', handleEscape);\n\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [open, onClose, isDismissable]);\n\n const [bodyScrollable, setBodyScrollable] = useState(true);\n useEffect(() => {\n setBodyScrollable(getComputedStyle(window.document.body).overflow !== 'hidden');\n }, []);\n\n return (\n <>\n {open\n ? createPortal(\n <RemoveScroll enabled={bodyScrollable}>\n <div className={styles.container} onClick={handleBackdropClick}>\n <div\n className={styles.modal + (contentClassName ? ` ${contentClassName}` : '')}\n style={contentStyle}\n onClick={stopPropagation}\n >\n {children}\n </div>\n </div>\n </RemoveScroll>,\n document.body\n )\n : null}\n </>\n );\n};\n\nexport default Modal;\n", "\nconst digest = '65eada90924218eba4e72a5f00291c3cb69387ecce1351e454cdefd066d4bcff';\nconst classes = {\"container\":\"_container_smzpm_1\",\"modal\":\"_modal_smzpm_18\"};\nconst css = `._container_smzpm_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_smzpm_1 ._modal_smzpm_18{align-items:center;background-color:#171a1f;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "\nconst digest = 'c7bbc091f1227154742a5bd0d55a3df29eb913eb0ad4cafc7ab236b574002f65';\nconst classes = {\"connectModal\":\"_connectModal_1kqtj_1\",\"title\":\"_title_1kqtj_4\",\"closeBtn\":\"_closeBtn_1kqtj_9\",\"backBtn\":\"_backBtn_1kqtj_15\",\"walletItem\":\"_walletItem_1kqtj_21\",\"walletIcon\":\"_walletIcon_1kqtj_33\",\"walletName\":\"_walletName_1kqtj_38\",\"connecting\":\"_connecting_1kqtj_43\",\"connectingIconContainer\":\"_connectingIconContainer_1kqtj_51\",\"retryContainer\":\"_retryContainer_1kqtj_54\",\"retryIcon\":\"_retryIcon_1kqtj_63\",\"connectingIcon\":\"_connectingIcon_1kqtj_51\",\"connection\":\"_connection_1kqtj_72\",\"acceptRequest\":\"_acceptRequest_1kqtj_76\",\"btnDownload\":\"_btnDownload_1kqtj_83\"};\nconst css = `._connectModal_1kqtj_1{gap:12px}._connectModal_1kqtj_1 ._title_1kqtj_4{font-size:18px;font-weight:700;margin-bottom:4px}._connectModal_1kqtj_1 ._closeBtn_1kqtj_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1kqtj_1 ._backBtn_1kqtj_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21{border:1px solid #3a3a3a;border-radius:8px;box-sizing:border-box;cursor:pointer;display:flex;padding:8px;width:100%}._connectModal_1kqtj_1 ._walletItem_1kqtj_21:hover{background:hsla(0,0%,100%,.05)}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletIcon_1kqtj_33{border-radius:4px;height:42px;width:42px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletName_1kqtj_38{flex-grow:1;line-height:42px;text-align:center}._connectModal_1kqtj_1 ._connecting_1kqtj_43{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51{position:relative}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54 ._retryIcon_1kqtj_63{height:24px;width:24px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIcon_1kqtj_51{border-radius:4px;height:60px;width:60px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connection_1kqtj_72{font-size:18px;margin-top:20px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._acceptRequest_1kqtj_76{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._btnDownload_1kqtj_83{margin-top:20px}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import type { RequestArguments, UserOpBundle } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { formatEther, hexToString, type Hex } from 'viem';\nimport { useConnectProvider } from '../../context';\nimport { useETHProvider } from '../../hooks';\nimport { useAccountContract } from '../../hooks/useAccountContract';\nimport checkBox from '../../icons/check_box.svg';\nimport checkBoxBlank from '../../icons/check_box_blank.svg';\nimport close from '../../icons/close.svg';\nimport copy from '../../icons/copy.svg';\nimport { type EVMDeserializeTransactionResult } from '../../types/deserializeTx';\nimport { EventName } from '../../types/eventName';\nimport { EVMMethod } from '../../types/evmMethod';\nimport { shortString } from '../../utils';\nimport { caculateNativeFee } from '../../utils/ethereumUtils';\nimport events from '../../utils/eventUtils';\nimport txConfirm from '../../utils/txConfirmUtils';\nimport Button from '../button';\nimport CopyText from '../copyText';\nimport Modal from '../modal';\nimport TransactionDetails from '../transactionDetails';\nimport styles from './sign.module.scss';\n\nconst SignModal = ({\n open,\n onClose,\n onOpen,\n}: {\n open: boolean;\n onClose: () => void;\n onOpen: () => void;\n}) => {\n const [userOpBundle, setUserOpBundle] = useState<UserOpBundle>();\n const [notRemindChecked, setNotRemindChecked] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [deserializeLoading, setDeserializeLoading] = useState<boolean>(false);\n const [deserializeResult, setDeserializeResult] = useState<\n EVMDeserializeTransactionResult[] | undefined\n >();\n const [disabled, setDisabled] = useState<boolean>(false);\n const [showNotRemind, setShowNotRemind] = useState<boolean>(true);\n const [nativeBalance, setNativeBalance] = useState<bigint>();\n const { accountContract } = useAccountContract();\n\n // personal_sign or eth_signTypedData\n const [requestArguments, setRequestArguments] = useState<RequestArguments>();\n\n const { chainId, publicClient, evmAccount, provider } = useETHProvider();\n const { smartAccount } = useConnectProvider();\n\n useEffect(() => {\n if (!open) {\n setDeserializeResult(undefined);\n setUserOpBundle(undefined);\n setRequestArguments(undefined);\n setLoading(false);\n setDisabled(false);\n setDeserializeLoading(false);\n setNativeBalance(undefined);\n }\n }, [open]);\n\n useEffect(() => {\n if (open) {\n const notRemind = txConfirm.isNotRemind();\n setShowNotRemind(!notRemind);\n if (!notRemind) {\n setNotRemindChecked(false);\n }\n }\n }, [open]);\n\n const chainInfo = useMemo(() => {\n if (chainId) {\n return chains.getEVMChainInfoById(chainId);\n }\n }, [chainId]);\n\n useEffect(() => {\n const onSendUserOp = (opBundle: UserOpBundle) => {\n setUserOpBundle(opBundle);\n onOpen();\n };\n const onPersonalSign = (arg: RequestArguments) => {\n setRequestArguments(arg);\n onOpen();\n };\n const onSignTypedData = (arg: RequestArguments) => {\n setRequestArguments(arg);\n onOpen();\n };\n events.on(EventName.sendUserOp, onSendUserOp);\n events.on(EventName.personalSign, onPersonalSign);\n events.on(EventName.signTypedData, onSignTypedData);\n return () => {\n events.off(EventName.sendUserOp, onSendUserOp);\n events.off(EventName.personalSign, onPersonalSign);\n events.off(EventName.signTypedData, onSignTypedData);\n };\n }, [onOpen, setUserOpBundle]);\n\n const deserializeUserOp = useCallback(async () => {\n if (userOpBundle && smartAccount) {\n const addresses = await smartAccount.provider.request({ method: 'eth_accounts' });\n const owner = addresses[0];\n const result = await smartAccount.sendRpc({\n method: 'particle_aa_deserializeUserOp',\n params: [\n {\n name: accountContract.name,\n version: accountContract.version,\n ownerAddress: owner,\n },\n userOpBundle.userOp,\n ],\n });\n return result;\n }\n }, [userOpBundle, smartAccount, accountContract]);\n\n useEffect(() => {\n if (userOpBundle && open) {\n console.log('deserializeUserOp start');\n setDeserializeLoading(true);\n deserializeUserOp()\n .then((result) => {\n console.log('\uD83D\uDE80 ~ deserializeUserOp ~ result:', result);\n setDeserializeResult(result as any);\n })\n .catch((error) => {\n console.log('\uD83D\uDE80 ~ deserializeUserOp ~ error:', error);\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n onClose();\n });\n }\n }, [deserializeUserOp, userOpBundle, open, onClose]);\n\n useEffect(() => {\n if (open && publicClient && evmAccount && userOpBundle) {\n publicClient\n .getBalance({ address: evmAccount as Hex })\n .then((result: any) => setNativeBalance(result))\n .catch((error: any) => {\n console.log('\uD83D\uDE80 ~ getBalance ~ error:', error);\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n onClose();\n });\n }\n }, [open, publicClient, evmAccount, userOpBundle, onClose]);\n\n useEffect(() => {\n if (nativeBalance != null && deserializeResult != null) {\n setDeserializeLoading(false);\n }\n }, [nativeBalance, deserializeResult]);\n\n const toggleNotRemind = () => {\n setNotRemindChecked(!notRemindChecked);\n txConfirm.setNotRemind(!notRemindChecked);\n };\n\n const gasFee = useMemo(() => {\n if (userOpBundle?.userOp) {\n return caculateNativeFee(userOpBundle?.userOp);\n }\n return BigInt(0);\n }, [userOpBundle]);\n\n const closeModal = () => {\n let event;\n if (userOpBundle) {\n event = EventName.sendUserOpResult;\n } else if (requestArguments?.method === EVMMethod.personalSign) {\n event = EventName.personalSignResult;\n } else if (requestArguments?.method?.startsWith(EVMMethod.signTypedData)) {\n event = EventName.signTypedDataResult;\n }\n\n if (event) {\n events.emit(event, {\n error: {\n code: 4001,\n message: 'The user rejected the request.',\n },\n });\n }\n\n onClose();\n };\n\n const confirmTx = useCallback(async () => {\n if (smartAccount && provider) {\n setLoading(true);\n if (userOpBundle) {\n try {\n const hash = await smartAccount.sendUserOperation(userOpBundle);\n events.emit(EventName.sendUserOpResult, { result: hash });\n } catch (error) {\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n } finally {\n setLoading(false);\n }\n } else if (requestArguments) {\n try {\n const hash = await provider.request(requestArguments);\n events.emit(\n requestArguments.method == EVMMethod.personalSign\n ? EventName.personalSignResult\n : EventName.signTypedDataResult,\n { result: hash },\n );\n } catch (error) {\n events.emit(\n requestArguments.method == EVMMethod.personalSign\n ? EventName.personalSignResult\n : EventName.signTypedDataResult,\n {\n error,\n },\n );\n } finally {\n setLoading(false);\n }\n }\n\n onClose();\n }\n }, [smartAccount, provider, requestArguments, userOpBundle, onClose]);\n\n useEffect(() => {\n if (userOpBundle && nativeBalance != null && deserializeResult) {\n const nativeChange = deserializeResult\n .filter(\n (item) =>\n item.estimatedChanges.natives?.[0]?.nativeChange &&\n item.estimatedChanges.natives[0].nativeChange.startsWith('-'),\n )\n .map((item) =>\n BigInt(item.estimatedChanges?.natives?.[0]?.nativeChange?.replace('-', '') || 0),\n )\n .reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));\n if (userOpBundle.userOp.paymasterAndData.length > 2) {\n setDisabled(nativeBalance < nativeChange);\n } else {\n setDisabled(nativeBalance < gasFee + nativeChange);\n }\n }\n }, [userOpBundle, gasFee, nativeBalance, deserializeResult]);\n\n const unsignedMessage = useMemo(() => {\n if (!requestArguments) {\n return undefined;\n }\n\n if (requestArguments.method === EVMMethod.personalSign) {\n const message = requestArguments.params?.[0] || '0x';\n return hexToString(message);\n } else {\n const typedData = requestArguments.params?.[1];\n const obj = typeof typedData === 'string' ? JSON.parse(typedData) : typedData;\n return JSON.stringify(obj, null, 2);\n }\n }, [requestArguments]);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n isDismissable={false}\n contentClassName={styles.modalContent}\n >\n <>\n <img className={styles.closeBtn} src={close} onClick={closeModal}></img>\n\n {requestArguments && (\n <div className={styles.signTitle}>\n {requestArguments.method == EVMMethod.personalSign ? 'Sign Message' : 'Sign Typed Data'}\n </div>\n )}\n\n <div className={styles.chainInfo}>\n <img src={chainInfo?.icon}></img>\n {chainInfo?.fullname.replace('Mainnet', '')}\n </div>\n\n <div className={styles.addressContainer}>\n <CopyText value={evmAccount} style={{ textDecorationLine: 'none' }}>\n <div className={styles.addressInfo}>\n {shortString(evmAccount)}\n <img src={copy}></img>\n </div>\n </CopyText>\n </div>\n\n <div\n className={\n styles.detailsContent + (deserializeResult || requestArguments ? ` ${styles.fill}` : '')\n }\n >\n {deserializeResult &&\n deserializeResult.map((details, index) => (\n <TransactionDetails key={`${details.type}-${index}`} details={details} />\n ))}\n\n {unsignedMessage && <div className={styles.unsignedMessage}>{unsignedMessage}</div>}\n </div>\n\n {gasFee && (\n <div className={styles.estimatedGas}>{`Estimated gas fee: ${formatEther(gasFee)} ${\n chainInfo?.nativeCurrency.symbol\n }`}</div>\n )}\n\n <Button\n onClick={confirmTx}\n className={styles.signBtn}\n isLoading={loading || deserializeLoading}\n isDisabled={disabled}\n >\n {deserializeLoading ? 'LOADING' : disabled ? 'INSUFFICIENT FEE' : 'CONFIRM'}\n </Button>\n\n {showNotRemind && (\n <div className={styles.notRemind} onClick={toggleNotRemind}>\n <img src={notRemindChecked ? checkBox : checkBoxBlank}></img>\n Do not remind me again\n </div>\n )}\n </>\n </Modal>\n );\n};\n\nexport default SignModal;\n", "import type { AAOptions } from '@particle-network/aa';\n\nexport function shortString(str: any): string {\n if (Array.isArray(str)) {\n str = '[' + str.toString() + ']';\n }\n if (str) {\n if (typeof str.toString === 'function') {\n str = str.toString();\n }\n if (str.length <= 10) {\n return str;\n }\n return `${str.slice(0, 5)}...${str.slice(str.length - 5, str.length)}`;\n }\n return '';\n}\n\nexport async function copyToClipboard(text: string) {\n const clipboardCopy = async () => {\n if (navigator.clipboard) {\n return navigator.clipboard.writeText(text);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'absolute';\n textarea.style.left = '-9999px';\n document.body.appendChild(textarea);\n\n textarea.select();\n const result = document.execCommand('copy');\n\n document.body.removeChild(textarea);\n\n if (!result) {\n throw new Error('Copy to clipboard failed');\n }\n }\n };\n\n return new Promise((resolve, reject) => {\n clipboardCopy().then(resolve).catch(reject);\n });\n}\n\nexport const defaultTokenIcon =\n 'https://static.particle.network/token-list/defaultToken/default.png';\n\nexport const ipfsToSrc = (ipfs: string) => {\n if (!ipfs || !ipfs.startsWith('ipfs://')) {\n return ipfs || '';\n }\n\n return `https://ipfs.particle.network/${encodeURI(ipfs.slice(7))}`;\n};\n\nexport const checkBTCVersion = (\n accountContracts: AAOptions['accountContracts'],\n accountContractKey: string,\n version: string,\n) => {\n if (!accountContracts[accountContractKey]) {\n return false;\n }\n return accountContracts[accountContractKey].some((item) => item.version === version);\n};\n\nexport const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport async function retryOperation<T>(\n operation: () => Promise<T> | T,\n shouldStop: (result: T) => boolean,\n {\n maxRetries = 3,\n delayMs = 1000,\n }: {\n maxRetries?: number;\n delayMs?: number;\n } = {},\n): Promise<T> {\n let retries = 0;\n\n while (retries <= maxRetries) {\n const result = await operation();\n if (shouldStop(result)) {\n return result;\n }\n if (retries === maxRetries) {\n console.warn('Max retries reached');\n return result;\n }\n retries++;\n await delay(delayMs);\n }\n throw new Error('Unexpected execution path');\n}\n\nexport function toHex(originalString: string) {\n const charArray = originalString.split('');\n const asciiArray = charArray.map((char) => char.charCodeAt(0));\n const hexArray = asciiArray.map((code) => code.toString(16));\n let hexString = hexArray.join('');\n hexString = hexString.replace(/(^0+)/g, '');\n return hexString;\n}\n", "import {\n bytesToHex,\n publicToAddress,\n toBytes,\n toChecksumAddress,\n toRpcSig,\n} from '@ethereumjs/util';\nimport type { UserOp } from '@particle-network/aa';\nimport bitcore from 'bitcore-lib';\n\nexport const pubKeyToEVMAddress = (pubKey: string) => {\n const address = toChecksumAddress(bytesToHex(publicToAddress(toBytes(`0x${pubKey}`), true)));\n return address;\n};\n\nexport const convertSignature = (signature: string) => {\n const sig = (bitcore.crypto.Signature as any).fromCompact(Buffer.from(signature, 'base64'));\n const v = BigInt(sig.i + 27);\n const evmSig = toRpcSig(v, sig.r.toBuffer(), sig.s.toBuffer());\n return evmSig;\n};\n\nexport function caculateNativeFee(userOp: UserOp): bigint {\n return (\n (BigInt(userOp.callGasLimit) +\n BigInt(userOp.verificationGasLimit) +\n BigInt(userOp.preVerificationGas)) *\n BigInt(userOp.maxFeePerGas)\n );\n}\n", "import { useState, type CSSProperties } from 'react';\nimport { copyToClipboard } from '../../utils';\nimport styles from './copyText.module.scss';\n\nexport interface CopyTextProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n value?: string;\n className?: string;\n style?: CSSProperties | undefined;\n}\n\nexport default function CopyText({ children, value, className, style }: CopyTextProps) {\n const [copied, setCopied] = useState<boolean>();\n\n const handleClick = async () => {\n if (copied) {\n return;\n }\n\n try {\n if (value) {\n await copyToClipboard(value);\n } else if (typeof children === 'string' || typeof children === 'number' || typeof children === 'boolean') {\n await copyToClipboard(children.toString());\n } else {\n throw new Error('please set copy value');\n }\n setCopied(true);\n setTimeout(() => setCopied(false), 1000);\n } catch (error) {\n //ignore\n }\n };\n\n return (\n <div\n className={styles.copyText + (className ? ` ${className}` : '') + (copied ? ` ${styles.copied}` : '')}\n onClick={handleClick}\n style={style}\n >\n {copied ? 'Copied' : children}\n </div>\n );\n}\n", "\nconst digest = 'd6fbb5df7ed6ec51d41f665ca768306181bb1e7d7c1cef8eed9bd4230368d7bb';\nconst classes = {\"copyText\":\"_copyText_smolu_1\",\"copied\":\"_copied_smolu_9\"};\nconst css = `._copyText_smolu_1{cursor:pointer;text-decoration-line:underline}._copyText_smolu_1:hover{opacity:.75}._copied_smolu_9{color:#a855f7;cursor:none;text-decoration-line:none}._copied_smolu_9:hover{opacity:1}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { chains } from '@particle-network/chains';\nimport { useCallback, useMemo } from 'react';\nimport { formatUnits } from 'viem';\nimport { useETHProvider } from '../../hooks';\nimport unverified from '../../icons/unverified.svg';\nimport verified from '../../icons/verified.svg';\nimport {\n TransactionSmartType,\n type EVMDeserializeTransactionResult,\n type EVMTokenChange,\n} from '../../types/deserializeTx';\nimport { defaultTokenIcon, ipfsToSrc, shortString } from '../../utils';\nimport CopyText from '../copyText';\nimport Tooltip from '../tooltip';\nimport styles from './transactionDetails.module.scss';\n\nconst TransactionDetails = ({ details }: { details: EVMDeserializeTransactionResult }) => {\n const { chainId } = useETHProvider();\n\n const chainInfo = useMemo(() => {\n if (chainId) {\n return chains.getEVMChainInfoById(chainId);\n }\n }, [chainId]);\n\n const titleContent = useMemo(() => {\n switch (details.type) {\n case TransactionSmartType.NATIVE_TRANSFER:\n return `Send ${chainInfo?.nativeCurrency.symbol}`;\n case TransactionSmartType.ERC20_TRANSFER:\n return `Send ${details.estimatedChanges.tokens[0]?.symbol}`;\n case TransactionSmartType.ERC20_APPROVE:\n return 'Approve Spending';\n case TransactionSmartType.ERC721_TRANFER:\n return 'Send NFT';\n case TransactionSmartType.ERC1155_TRANFER:\n return 'Send NFT';\n default:\n return 'Transaction Details';\n }\n }, [details, chainInfo]);\n\n const nftContractType = useMemo(() => {\n if (details.type === TransactionSmartType.ERC721_TRANFER) {\n return 'ERC721';\n } else if (details.type === TransactionSmartType.ERC1155_TRANFER) {\n return 'ERC1155';\n }\n }, [details]);\n\n const nativeIcon = useMemo(() => {\n if (chainInfo) {\n if (chainInfo.nativeCurrency.symbol === 'ETH') {\n return 'https://static.particle.network/token-list/ethereum/native.png';\n } else {\n return chainInfo.nativeIcon || chainInfo.icon;\n }\n }\n return defaultTokenIcon;\n }, [chainInfo]);\n\n // to address\n const to = useMemo(() => {\n const params = details.data?.function?.params;\n if (details.type == TransactionSmartType.ERC20_TRANSFER) {\n return params ? (params[params.length === 3 ? 1 : 0].value as string) : '';\n } else if (details.type == TransactionSmartType.ERC20_APPROVE) {\n return params ? (params[0].value as string) : '';\n } else if (details.type == TransactionSmartType.NATIVE_TRANSFER) {\n return details.data.to;\n } else if (\n details.type == TransactionSmartType.ERC721_TRANFER ||\n details.type == TransactionSmartType.ERC1155_TRANFER\n ) {\n return params ? (params[1].value as string) : '';\n } else {\n return details.data.to;\n }\n }, [details]);\n\n const balanceChangeTextColor = useCallback((value: string | number) => {\n if (BigInt(value) > 0) {\n return '#4ade80';\n } else if (BigInt(value) < 0) {\n return '#ef4444';\n } else {\n return 'white';\n }\n }, []);\n\n const functionContent = useMemo(() => {\n if (details.type !== TransactionSmartType.NATIVE_TRANSFER && details.data.function) {\n const params = details.data.function.params.map((item) => item.name);\n return `${details.data.function.name}(${params.join(', ')})`;\n }\n }, [details]);\n\n const approveTokenAmount = useMemo(() => {\n if (details.type === TransactionSmartType.ERC20_APPROVE) {\n const amount = details.data?.function?.params?.[1]?.value as string;\n return BigInt(amount || 0);\n }\n return BigInt(0);\n }, [details]);\n\n const tokenAmountChange = useCallback(\n (tokenItem: EVMTokenChange) => {\n const result = formatUnits(\n details.type === TransactionSmartType.ERC20_APPROVE ? approveTokenAmount : BigInt(tokenItem.amountChange),\n tokenItem.decimals\n );\n\n if (details.type !== TransactionSmartType.ERC20_APPROVE && BigInt(tokenItem.amountChange) > BigInt(0)) {\n return `+${result}`;\n }\n\n return result;\n },\n [approveTokenAmount, details]\n );\n\n const showContactAddress = useMemo(() => {\n return (\n details.type === TransactionSmartType.ERC20_TRANSFER ||\n details.type === TransactionSmartType.ERC20_APPROVE ||\n details.type === TransactionSmartType.ERC721_TRANFER ||\n details.type === TransactionSmartType.ERC1155_TRANFER\n );\n }, [details]);\n\n return (\n <div className={styles.detailsCard}>\n <div className={styles.title}>{titleContent}</div>\n {nftContractType && <div className={styles.nftContract}>{nftContractType}</div>}\n\n {details.estimatedChanges.natives.map((nativeItem) => {\n return (\n <div key={nativeItem.address} className={styles.row}>\n <img className={styles.tokenIcon} src={nativeIcon}></img>\n <div className={styles.balanceChange} style={{ color: balanceChangeTextColor(nativeItem.nativeChange) }}>\n {BigInt(nativeItem.nativeChange) > 0 ? '+' : undefined}\n {formatUnits(BigInt(nativeItem.nativeChange), chainInfo?.nativeCurrency.decimals || 18)}\n </div>\n <div className={styles.tokenSymbol}>{chainInfo?.nativeCurrency.symbol}</div>\n </div>\n );\n })}\n\n {details.estimatedChanges.tokens.map((tokenItem) => {\n return (\n <div key={tokenItem.address} className={styles.row}>\n <img className={styles.tokenIcon} src={tokenItem.image || defaultTokenIcon}></img>\n <div className={styles.balanceChange}>\n <span style={{ color: balanceChangeTextColor(tokenItem.amountChange) }}>\n {tokenAmountChange(tokenItem)}\n </span>\n {` ${tokenItem.symbol}`}\n </div>\n </div>\n );\n })}\n\n {details.estimatedChanges.nfts.map((nftItem) => {\n return (\n <div key={nftItem.address} className={styles.row}>\n <div style={{ fontSize: 16 }}>\n <img className={styles.nftIcon} src={ipfsToSrc(nftItem.image || defaultTokenIcon)}></img>\n {nftItem.name || `NFT#${nftItem.tokenId}`}\n </div>\n <div className={styles.balanceChange} style={{ color: balanceChangeTextColor(nftItem.amountChange) }}>\n {nftItem.amountChange}\n </div>\n </div>\n );\n })}\n\n {to && (\n <div className={styles.row}>\n <div>To</div>\n <div className={styles.toContract}>\n {details.toVerified != null && !showContactAddress && (\n <Tooltip content={details.toVerified ? 'Verified Contract' : 'Unverified Contract'}>\n <img src={details.toVerified ? verified : unverified}></img>\n </Tooltip>\n )}\n <CopyText value={to}>{shortString(to)}</CopyText>\n </div>\n </div>\n )}\n\n {showContactAddress && (\n <div className={styles.row}>\n <div>Contract</div>\n <div className={styles.toContract}>\n {details.toVerified != null && (\n <Tooltip content={details.toVerified ? 'Verified Contract' : 'Unverified Contract'}>\n <img src={details.toVerified ? verified : unverified}></img>\n </Tooltip>\n )}\n <CopyText value={details.data.to}>{shortString(details.data.to)}</CopyText>\n </div>\n </div>\n )}\n\n <div className={styles.row}>\n <div>Hex Data</div>\n <CopyText value={details.data.data}>{shortString(details.data.data)}</CopyText>\n </div>\n\n {functionContent && (\n <div className={styles.row}>\n <div>Function</div>\n <div className={styles.right}>{functionContent}</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionDetails;\n", "\nconst digest = 'ee15dc27fcfd209601159e7f0e0063ff4e7a886b7b892c1600a911372b82a0b1';\nconst classes = {\"tipContainer\":\"_tipContainer_ufud7_1\",\"tipContent\":\"_tipContent_ufud7_5\"};\nconst css = `._tipContainer_ufud7_1{overflow:visible;position:relative}._tipContainer_ufud7_1 ._tipContent_ufud7_5{background:#3f3f46;border-radius:8px;bottom:100%;color:#fff;font-size:11px;left:-100%;opacity:0;padding:3px 6px;position:absolute;transition:opacity .5s;visibility:hidden;white-space:nowrap;z-index:1}._tipContainer_ufud7_1:hover ._tipContent_ufud7_5{opacity:1;visibility:visible}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type ReactNode } from 'react';\nimport styles from './tooltip.module.scss';\n\nconst Tooltip = ({ children, content, className }: { children: ReactNode; content: string; className?: string }) => {\n return (\n <div className={styles.tipContainer}>\n {children}\n <div className={styles.tipContent + (className ? ` ${className}` : '')}>{content}</div>\n </div>\n );\n};\n\nexport default Tooltip;\n", "\nconst digest = 'a81c744751497ed4b401c08b9e5aeef1991aeb86f2cbba3ee57c1926c0502f1a';\nconst classes = {\"detailsCard\":\"_detailsCard_ml2p9_1\",\"title\":\"_title_ml2p9_13\",\"nftContract\":\"_nftContract_ml2p9_19\",\"row\":\"_row_ml2p9_26\",\"tokenIcon\":\"_tokenIcon_ml2p9_35\",\"nftIcon\":\"_nftIcon_ml2p9_41\",\"balanceChange\":\"_balanceChange_ml2p9_49\",\"tokenSymbol\":\"_tokenSymbol_ml2p9_56\",\"toContract\":\"_toContract_ml2p9_61\",\"right\":\"_right_ml2p9_71\"};\nconst css = `._detailsCard_ml2p9_1{background:#232529;border:1px solid #252525;border-radius:8px;color:#fff;margin-top:16px;overflow-x:hidden;padding:10px;position:relative;width:100%}._detailsCard_ml2p9_1 ._title_ml2p9_13{font-size:16px;font-weight:600;margin-bottom:12px;text-align:left}._detailsCard_ml2p9_1 ._nftContract_ml2p9_19{color:#a855f7;font-size:16px;position:absolute;right:8px;top:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26{align-items:center;display:flex;flex-direction:row;font-size:14px;gap:8px;justify-content:space-between;margin-top:6px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenIcon_ml2p9_35{border-radius:50%;height:32px;margin:10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._nftIcon_ml2p9_41{border-radius:2px;display:inline;height:32px;margin:10px 8px 10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._balanceChange_ml2p9_49{flex-grow:2;font-size:16px;font-weight:500;text-align:end;word-break:break-word}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenSymbol_ml2p9_56{font-size:16px;font-weight:500;text-align:end}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61{align-items:center;display:flex;gap:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61 img{display:inline;height:18px;width:18px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._right_ml2p9_71{text-align:end}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "\nconst digest = '3ab1a455562ae7e24c2ac49572897e615b9e9275066fd0d64f0cf24844521bab';\nconst classes = {\"modalContent\":\"_modalContent_aoysu_1\",\"closeBtn\":\"_closeBtn_aoysu_5\",\"signTitle\":\"_signTitle_aoysu_11\",\"chainInfo\":\"_chainInfo_aoysu_16\",\"addressContainer\":\"_addressContainer_aoysu_29\",\"addressInfo\":\"_addressInfo_aoysu_34\",\"detailsContent\":\"_detailsContent_aoysu_49\",\"fill\":\"_fill_aoysu_58\",\"unsignedMessage\":\"_unsignedMessage_aoysu_61\",\"estimatedGas\":\"_estimatedGas_aoysu_76\",\"signBtn\":\"_signBtn_aoysu_81\",\"notRemind\":\"_notRemind_aoysu_85\"};\nconst css = `._modalContent_aoysu_1{color:#fff;text-align:center}._modalContent_aoysu_1 ._closeBtn_aoysu_5{cursor:pointer;position:absolute;right:16px;top:16px}._modalContent_aoysu_1 ._signTitle_aoysu_11{font-size:20px;font-weight:600;margin-bottom:10px}._modalContent_aoysu_1 ._chainInfo_aoysu_16{align-items:center;display:flex;flex-direction:row;font-size:12px;gap:8px;justify-content:center;margin-bottom:8px}._modalContent_aoysu_1 ._chainInfo_aoysu_16 img{height:18px;width:18px}._modalContent_aoysu_1 ._addressContainer_aoysu_29{height:28px;margin-bottom:16px;margin-top:8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34{align-items:center;background:rgba(58,58,58,.635);border-radius:20px;display:flex;flex-direction:row;font-size:12px;gap:4px;justify-content:center;padding:4px 8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34 img{height:18px;width:18px}._modalContent_aoysu_1 ._detailsContent_aoysu_49{max-height:0;overflow-y:auto;transition:max-height .3s linear;width:100%}._modalContent_aoysu_1 ._detailsContent_aoysu_49::-webkit-scrollbar{display:none}._modalContent_aoysu_1 ._detailsContent_aoysu_49._fill_aoysu_58{max-height:500px}._modalContent_aoysu_1 ._detailsContent_aoysu_49 ._unsignedMessage_aoysu_61{background:#232529;border:1px solid #252525;border-radius:8px;box-sizing:border-box;color:#fff;font-size:14px;padding:8px;width:100%;word-wrap:break-word;color:hsla(0,0%,100%,.631);text-align:left;white-space:pre-wrap}._modalContent_aoysu_1 ._estimatedGas_aoysu_76{color:hsla(0,0%,100%,.631);font-size:12px;margin-top:24px}._modalContent_aoysu_1 ._signBtn_aoysu_81{margin-top:24px;min-width:200px}._modalContent_aoysu_1 ._notRemind_aoysu_85{align-items:center;color:hsla(0,0%,100%,.631);cursor:pointer;display:inline-flex;font-size:12px;gap:4px;margin-top:16px}._modalContent_aoysu_1 ._notRemind_aoysu_85:hover{opacity:.85}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { intToHex } from '@ethereumjs/util';\nimport type { RequestArguments } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { EventEmitter } from 'events';\nimport {\n InvalidParamsRpcError,\n SwitchChainError,\n UnsupportedProviderMethodError,\n createPublicClient,\n hashMessage,\n hashTypedData,\n http,\n type PublicClient,\n} from 'viem';\nimport { EVMMethod } from '../types/evmMethod';\nimport { convertSignature, pubKeyToEVMAddress } from '../utils/ethereumUtils';\n\nexport class AASignerProvider {\n private events: EventEmitter;\n chainId = 1;\n publicClient: PublicClient;\n constructor(\n public supportChainIds: number[],\n public projectId: string,\n public clientKey: string,\n public rpcUrls: Record<number, string> | undefined\n ) {\n this.events = new EventEmitter();\n this.events.setMaxListeners(100);\n\n if (typeof window !== 'undefined') {\n const localChainId = localStorage.getItem('connect-evm-chain-id');\n if (localChainId && supportChainIds.includes(Number(localChainId))) {\n this.chainId = Number(localChainId);\n } else {\n const chainId = supportChainIds[0];\n if (chainId) {\n localStorage.setItem('connect-evm-chain-id', chainId.toString());\n this.chainId = chainId;\n }\n }\n }\n\n this.publicClient = this.getPublicClient();\n }\n\n async request(arg: RequestArguments) {\n if (\n arg.method === 'eth_sendTransaction' ||\n arg.method === 'wallet_addEthereumChain' ||\n arg.method === 'wallet_watchAsset' ||\n arg.method === 'eth_sign'\n ) {\n throw new UnsupportedProviderMethodError(new Error('The Provider does not support the requested method.'));\n }\n\n if (arg.method === 'eth_accounts' || arg.method === 'eth_requestAccounts') {\n const pubKey = await this.getPublicKey();\n const address = pubKeyToEVMAddress(pubKey);\n return [address];\n } else if (arg.method === 'eth_chainId') {\n return `0x${this.chainId.toString(16)}`;\n } else if (arg.method === EVMMethod.personalSign) {\n let message = arg.params?.[0];\n console.log('personal_sign message:', message);\n if (message.length !== 66) {\n const hash = hashMessage({ raw: message });\n console.log('personal_sign hash:', hash);\n message = hash;\n }\n const result = await this.personalSign(message || '');\n const convertResult = convertSignature(result);\n if (!convertResult) {\n throw new Error('sign error');\n }\n console.log(`personal_sign result(${convertResult.length}): `, convertResult);\n return convertResult;\n } else if (arg.method === 'eth_signTypedData' || arg.method === 'eth_signTypedData_v4') {\n const typedData = arg.params?.[1];\n console.log('signTypedData typedData', typedData);\n const hash = hashTypedData(typeof typedData === 'string' ? JSON.parse(typedData) : typedData);\n console.log('signTypedData hash', hash);\n const result = await this.personalSign(hash || '');\n const convertResult = convertSignature(result);\n if (!convertResult) {\n throw new Error('sign error');\n }\n console.log(`eth_signTypedData result(${convertResult.length}): `, convertResult);\n return convertResult;\n } else if (arg.method === 'wallet_switchEthereumChain') {\n if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {\n const chainId = Number(arg.params[0].chainId);\n if (this.supportChainIds.includes(this.chainId)) {\n this.chainId = chainId;\n localStorage.setItem('connect-evm-chain-id', this.chainId.toString());\n this.publicClient = this.getPublicClient();\n setTimeout(() => this.events.emit('chainChanged', intToHex(this.chainId)), 0);\n return Promise.resolve(null);\n }\n throw new SwitchChainError(new Error(`The chain: ${chainId} is not supported`));\n } else {\n throw new InvalidParamsRpcError(new Error('Invalid Params'));\n }\n } else {\n const result = await this.publicClient.request(arg as any);\n return result;\n }\n }\n\n personalSign = async (message: string): Promise<string> => {\n throw new Error('Wallet not connected!');\n };\n\n getPublicKey = async (): Promise<string> => {\n throw new Error('Wallet not connected!');\n };\n\n removeListener(event: string, listener: (...args: any[]) => void) {\n this.events.removeListener(event, listener);\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void) {\n this.events.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any) {\n this.events.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any) {\n this.events.off(event, listener);\n return this;\n }\n\n emit(event: string, ...args: any[]) {\n this.events.emit(event, args);\n }\n\n getPublicClient = () => {\n const rpcUrl = this?.rpcUrls?.[this.chainId] || chains.getEVMChainInfoById(this.chainId || 1)?.rpcUrl;\n console.log('rpcUrl', rpcUrl);\n\n return createPublicClient({\n transport: http(rpcUrl),\n });\n };\n}\n", "import { useCallback, useState } from 'react';\n\nconst useModalStateValue = () => {\n const [isModalOpen, setModalOpen] = useState(false);\n\n return {\n closeModal: useCallback(() => setModalOpen(false), []),\n isModalOpen,\n openModal: useCallback(() => setModalOpen(true), []),\n };\n};\n\nexport default useModalStateValue;\n", "import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ConnectProvider as BTCConnectProvider } from '../context';\nimport {\n UnisatConnector,\n XverseConnector,\n OKXConnector,\n BitgetConnector,\n MagicEdenConnector,\n} from '../connector';\nimport { useBTCProvider, useConnectModal } from '../hooks';\n\nimport ComfirmBox from '../components/confirmBox';\nimport { retryOperation } from '../utils';\n\nconst WalletSelectorContext = React.createContext<any>(null);\n\nexport function BtcWalletSelectorContextProvider({\n children,\n}: {\n children: React.ReactNode;\n autoConnect?: boolean;\n}) {\n const [isProcessing, setIsProcessing] = useState(false);\n\n const connectors = [\n new UnisatConnector(),\n new XverseConnector(),\n new OKXConnector(),\n new BitgetConnector(),\n // new MagicEdenConnector(),\n ];\n\n const walletSelectorContextValue = useMemo(() => {\n const simpleFn: Record<string, ((e: any) => void)[]> = {};\n\n return {\n setIsProcessing,\n emit: (eventName: string, e: any) => {\n if (simpleFn[eventName] && simpleFn[eventName].length) {\n simpleFn[eventName].forEach((fn: (e: any) => void) => {\n fn(e);\n });\n }\n },\n on: (eventName: string, fn: (e: any) => void) => {\n simpleFn[eventName] = simpleFn[eventName] || [];\n simpleFn[eventName].push(fn);\n },\n };\n }, []);\n\n return (\n <WalletSelectorContext.Provider value={walletSelectorContextValue}>\n <BTCConnectProvider\n options={{\n projectId: 'btc',\n clientKey: 'btc',\n appId: 'btc',\n aaOptions: {\n accountContracts: {\n BTC: [\n {\n chainIds: [686868],\n version: '1.0.0',\n },\n ],\n },\n },\n walletOptions: {\n visible: true,\n },\n }}\n autoConnect={false}\n connectors={connectors}\n >\n {children}\n {isProcessing && (\n <ComfirmBox\n hash={''}\n status={0}\n onClose={() => {\n setIsProcessing(false);\n }}\n />\n )}\n <InitBtcWalletSelectorContext />\n </BTCConnectProvider>\n </WalletSelectorContext.Provider>\n );\n}\n\nfunction InitBtcWalletSelectorContext() {\n const context = useBtcWalletSelector();\n useEffect(() => {\n window.btcContext = context;\n }, [context]);\n return null;\n}\n\nexport function useBtcWalletSelector() {\n // @ts-ignore\n const { openConnectModal, disconnect, requestDirectAccount } = useConnectModal();\n const {\n accounts,\n sendBitcoin,\n getPublicKey,\n provider,\n signMessage,\n connector,\n getNetwork,\n switchNetwork,\n } = useBTCProvider();\n const publicKey = useRef<any>(null);\n const signMessageFn = useRef<any>(null);\n const connectorRef = useRef<any>(null);\n const context = useContext(WalletSelectorContext);\n const isLoggingIn = useRef(false);\n\n useEffect(() => {\n if (provider) {\n getPublicKey().then((res) => {\n publicKey.current = res;\n });\n }\n }, [getPublicKey, provider]);\n\n useEffect(() => {\n signMessageFn.current = signMessage;\n }, [signMessage]);\n\n useEffect(() => {\n const fn = (account: any) => {\n if (account) {\n getPublicKey().then((res) => {\n publicKey.current = res;\n context.emit('updatePublicKey', res);\n });\n }\n };\n\n if (connector) {\n connector.on('accountsChanged', fn);\n }\n connectorRef.current = connector;\n\n return () => {\n if (connector) {\n connector.removeListener('accountsChanged', fn);\n }\n };\n }, [connector, context, getPublicKey]);\n\n const hook = useMemo(() => {\n return {\n login: async () => {\n const account = accounts?.[0];\n if (!account) {\n if (isLoggingIn.current) {\n return null;\n }\n\n try {\n isLoggingIn.current = true;\n openConnectModal?.();\n\n const account1 = await retryOperation(\n () => window.btcContext.account,\n (res) => !!res,\n {\n maxRetries: 100,\n delayMs: 1000,\n },\n );\n\n if (!account1) {\n throw new Error('Failed to get account');\n }\n return account1;\n } finally {\n isLoggingIn.current = false;\n }\n }\n return account;\n },\n autoConnect: async () => {\n requestDirectAccount(connectorRef.current).catch((e: any) => {\n context.emit('btcLoginError');\n });\n },\n logout: () => {\n const accountId = accounts?.[0];\n if (!accountId) return;\n disconnect?.();\n context.emit('btcLogOut');\n },\n account: accounts?.[0],\n getPublicKey: () => {\n return publicKey.current;\n },\n signMessage: (msg: string) => {\n return signMessageFn.current(msg);\n },\n getContext: () => {\n return context;\n },\n getNetwork,\n switchNetwork,\n sendBitcoin,\n };\n }, [\n accounts,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n openConnectModal,\n requestDirectAccount,\n context,\n disconnect,\n ]);\n\n return hook;\n}\n", "import React from 'react';\n// import './modal.css'\n\ninterface Props {\n children?: any;\n onClose?: () => void;\n style?: any\n}\n\nconst styles: any = {}\n\nexport default function Modal({ children, onClose, style = {} }: Props) {\n return <div>\n <div className=\"layer\"></div>\n <div className=\"modal\" style={style}>\n <div className=\"close\" onClick={() => { onClose && onClose() }}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.73284 5.99997L11.7359 1.99698C12.0368 1.69598 12.0882 1.25928 11.8507 1.02188L10.9779 0.149088C10.7404 -0.0884114 10.3043 -0.0363117 10.0028 0.264487L6.00013 4.26737L1.99719 0.264587C1.69619 -0.0367116 1.25948 -0.0884115 1.02198 0.149388L0.149174 1.02228C-0.0882276 1.25938 -0.0368271 1.69608 0.264576 1.99708L4.26761 5.99997L0.264576 10.0032C-0.0363271 10.304 -0.0884276 10.7404 0.149174 10.9779L1.02198 11.8507C1.25948 12.0882 1.69619 12.0367 1.99719 11.7358L6.00033 7.73266L10.0029 11.7352C10.3044 12.0368 10.7405 12.0882 10.978 11.8507L11.8508 10.9779C12.0882 10.7404 12.0368 10.304 11.736 10.0028L7.73284 5.99997Z\" fill=\"#808095\" />\n </svg>\n </div>\n {children}\n </div>\n </div>\n}", "import React from \"react\";\nimport Modal from \"./Modal\";\n\n// import './confirmBox.css'\n\ninterface Props {\n onClose: () => void;\n fromChain?: any;\n toChain?: any;\n status: number;\n hash: string;\n}\n\n\n\nexport default function ComfirmBox({ onClose, status = 1, fromChain = {\n name: 'NEAR',\n}, toChain = {\n name: 'BTC',\n}, hash }: Props) {\n return <Modal onClose={onClose}>\n <div className=\"title\">Transaction Detail</div>\n <div className=\"chians\">\n {/* <img style={{ width: 26, height: 26 }} src={fromChain?.icon} /> */}\n {/* <svg width=\"31\" height=\"2\" viewBox=\"0 0 31 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <line opacity=\"0.5\" x1=\"8.74228e-08\" y1=\"1\" x2=\"31\" y2=\"1\" stroke=\"#727272\" stroke-width=\"2\" stroke-dasharray=\"2 5\" />\n </svg> */}\n\n {\n status === 0 ? <svg className=\"loading\" width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M52.0766 10.7867C53.0482 11.0471 53.6273 12.0399 53.3741 13.0134C53.1219 13.977 52.1361 14.5546 51.1725 14.3024L47.6172 13.3498L46.3268 18.1657C44.8261 23.7665 40.0219 27.6146 34.2721 28.6546C38.7381 32.4056 40.9681 38.1648 39.4673 43.7656L38.1769 48.5815L41.6972 49.5248C42.6655 49.7843 43.2401 50.7794 42.9806 51.7477C42.7212 52.7159 41.726 53.2905 40.7578 53.031L2.02593 42.6529L1.71657 42.5396C0.800668 42.1375 0.383843 41.0689 0.785965 40.153C1.15472 39.3126 2.09436 38.8809 2.97262 39.1481L6.52126 40.0989L7.81144 35.2839C9.31216 29.6832 14.1131 25.8341 19.8661 24.795C15.3968 21.0432 13.1702 15.2848 14.6709 9.68407L15.9615 4.86764L12.4128 3.91679C11.4445 3.65734 10.87 2.66223 11.1295 1.69395C11.3889 0.725662 12.384 0.151138 13.3523 0.410589L52.0766 10.7867ZM44.0959 12.4063L19.471 5.80801L18.1871 10.5994C17.0693 14.7711 18.671 19.3131 22.2022 22.3268C23.2549 23.2994 23.6544 24.61 23.3544 25.7297C23.0485 27.0126 21.9665 27.9627 20.6551 28.1007C16.1146 28.9516 12.432 32.0776 11.3175 36.2502L10.0214 41.0874L11.982 41.6127L12.5291 39.571C13.5385 35.8039 16.032 32.0464 21.0065 30.689L21.8135 30.4937C23.6047 30.2306 25.3145 29.1151 26.9388 27.1507C27.1931 29.441 28.1726 31.2771 29.8857 32.6567C34.4351 36.8 34.1706 41.1245 33.1094 45.0849L32.5623 47.1267L34.6428 47.6841L35.9323 42.8715C37.0501 38.6998 35.4522 34.1588 31.9215 31.1412C30.8693 30.1687 30.4684 28.8613 30.7693 27.7383C31.1136 26.4535 32.114 25.5215 33.4676 25.3711C38.0072 24.5235 41.6865 21.3966 42.8052 17.2216L44.0959 12.4063ZM40.7578 15.6185C40.1797 19.9295 35.6431 22.9023 32.7256 23.2863C30.9809 23.5169 29.1741 24.3456 27.3087 25.7742C26.4809 23.6244 25.3731 22.0143 23.9948 20.9474C21.5041 19.0198 20.6551 17.2216 20.3797 15.1185L40.7578 15.6185Z\" fill=\"white\" fill-opacity=\"0.21\" />\n </svg> : <svg width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"27\" cy=\"27\" r=\"21\" fill=\"#33FFDA\" />\n <circle cx=\"27\" cy=\"27\" r=\"24\" stroke=\"#33FFDA\" stroke-opacity=\"0.3\" stroke-width=\"6\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M37.342 19.6604C38.2111 20.5494 38.2205 22.0006 37.363 22.9016L24.8987 36L17.651 28.5196C16.7858 27.6266 16.7826 26.1754 17.6439 25.2783C18.5052 24.3813 19.9048 24.378 20.77 25.271L24.8705 29.5031L34.2159 19.6822C35.0733 18.7812 36.4729 18.7714 37.342 19.6604Z\" fill=\"black\" />\n </svg>\n }\n\n {/* <svg width=\"31\" height=\"2\" viewBox=\"0 0 31 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <line opacity=\"0.5\" x1=\"8.74228e-08\" y1=\"1\" x2=\"31\" y2=\"1\" stroke=\"#727272\" stroke-width=\"2\" stroke-dasharray=\"2 5\" />\n </svg> */}\n {/* <img style={{ width: 26, height: 26 }} src={toChain?.icon} /> */}\n </div>\n\n {\n status === 0 && <>\n <div className=\"time\">\n Est Time: 5 mins\n </div>\n <div className=\"processing\">\n Transaction is processing. \n </div>\n </>\n }\n\n {\n status === 1 && <>\n <div className=\"time\">\n Bridge Completed\n </div>\n <div className=\"processing\">\n You can view your transaction on the <a href=\"/history\">bridge transaction history.</a>\n </div>\n </>\n }\n\n {\n !!hash && <><div className=\"srcBtn\" onClick={() => {\n if (fromChain.name === 'BTC') {\n window.open(`https://mempool.space/testnet/tx/${hash}`)\n } else if (fromChain.name === 'NEAR') {\n window.open(`https://testnet.nearblocks.io/txns/${hash}`)\n }\n\n }}>\n SRC TX <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.97871 8H2.02129C0.907217 8 0 7.09294 0 5.97905V2.02095C0 0.907063 0.907217 0 2.02129 0H3.73973C3.98175 0 4.17779 0.196012 4.17779 0.437986C4.17779 0.679959 3.98175 0.875972 3.73973 0.875972H2.02129C1.71573 0.875972 1.42775 0.994931 1.21142 1.21122C0.995099 1.42751 0.87612 1.71544 0.87612 2.02095V5.97769C0.87612 6.2832 0.995099 6.57114 1.21142 6.78743C1.42775 7.00372 1.71573 7.12268 2.02129 7.12268H5.97871C6.61011 7.12268 7.12388 6.60899 7.12388 5.97769V4.12977C7.12388 3.97432 7.20771 3.82832 7.34291 3.74992C7.40916 3.71206 7.48487 3.69179 7.56194 3.69179C7.63901 3.69179 7.71472 3.71206 7.78097 3.74992C7.91617 3.82832 8 3.97296 8 4.12977V5.97769C8 7.09294 7.09414 8 5.97871 8ZM7.35223 2.78066C7.41578 2.81715 7.48879 2.83608 7.56179 2.83608C7.6348 2.83608 7.70781 2.8158 7.77271 2.7793C7.90251 2.70496 7.98228 2.56572 7.98228 2.41702V0.438001C7.98228 0.206844 7.79434 0.0189453 7.56315 0.0189453H5.58378C5.35258 0.0189453 5.16465 0.206844 5.16465 0.438001C5.16465 0.669157 5.35258 0.857056 5.58378 0.857056H6.55077L3.70328 3.70405L3.70058 3.70676C3.62658 3.7861 3.58634 3.89111 3.58835 3.99958C3.59037 4.10806 3.6345 4.21149 3.7114 4.28803C3.79117 4.36779 3.89527 4.41105 4.00749 4.41105C4.1143 4.41105 4.2157 4.37049 4.29277 4.29885L4.29412 4.2975L7.14267 1.44944V2.41838C7.14267 2.56707 7.22379 2.70631 7.35223 2.78066Z\" fill=\"#FF7A00\" />\n </svg>\n </div>\n </>\n }\n\n {/* {\n status === 1 &&\n <button onClick={() => {\n onClose && onClose()\n }} className={styles.btn}>+ New Transfer</button>\n } */}\n\n </Modal>\n}", "import type {\n Transaction,\n InjectedWallet,\n WalletModuleFactory,\n WalletBehaviourFactory,\n} from '@near-wallet-selector/core';\nimport { transactions } from 'near-api-js';\nimport type { AccessKeyViewRaw } from 'near-api-js/lib/providers/provider';\nimport { actionCreators } from '@near-js/transactions';\n\nimport { PublicKey } from 'near-api-js/lib/utils/key_pair';\nimport { encodeTransaction } from 'near-api-js/lib/transaction';\nimport { baseDecode } from '@near-js/utils';\nimport bs58 from 'bs58';\nimport { sha256 } from 'js-sha256';\nimport { setupWalletButton, removeWalletButton } from '../utils/initWalletButton';\nimport type { useBtcWalletSelector } from './btcWalletSelectorContext';\nimport { retryOperation, toHex } from '../utils';\nimport type { ENV } from '../config';\nimport { walletConfig } from '../config';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport Big from 'big.js';\n\nimport {\n checkGasTokenDebt,\n checkGasTokenBalance,\n checkSatoshiWhitelist,\n getAccountInfo,\n getCsnaAccountId,\n} from './btcUtils';\n\nimport {\n checkBtcTransactionStatus,\n getNearNonce,\n getNonce,\n receiveTransaction,\n} from '../utils/satoshi';\nimport { getVersion } from '../index';\n\nconst { transfer, functionCall } = actionCreators;\n\ndeclare global {\n interface Window {\n btcContext: ReturnType<typeof useBtcWalletSelector>;\n }\n}\n\ninterface BTCWalletParams {\n iconUrl?: string;\n deprecated?: boolean;\n autoConnect?: boolean;\n syncLogOut?: boolean;\n env?: ENV;\n}\n\nconst STORAGE_KEYS = {\n ACCOUNT: 'btc-wallet-account',\n PUBLIC_KEY: 'btc-wallet-publickey',\n BTC_PUBLIC_KEY: 'btc-wallet-btc-publickey',\n} as const;\n\nconst state: any = {\n saveAccount(account: string) {\n if (!account) {\n this.removeAccount();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.ACCOUNT, account);\n },\n removeAccount() {\n window.localStorage.removeItem(STORAGE_KEYS.ACCOUNT);\n },\n savePublicKey(publicKey: string) {\n if (!publicKey) {\n this.removePublicKey();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.PUBLIC_KEY, publicKey);\n },\n removePublicKey() {\n window.localStorage.removeItem(STORAGE_KEYS.PUBLIC_KEY);\n },\n saveBtcPublicKey(publicKey: string) {\n if (!publicKey) {\n this.removeBtcPublicKey();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);\n },\n removeBtcPublicKey() {\n window.localStorage.removeItem(STORAGE_KEYS.BTC_PUBLIC_KEY);\n },\n clear() {\n this.removeAccount();\n this.removePublicKey();\n this.removeBtcPublicKey();\n },\n save(account: string, publicKey: string) {\n if (!account || !publicKey) {\n this.clear();\n return;\n }\n this.saveAccount(account);\n this.savePublicKey(publicKey);\n },\n getAccount() {\n return window.localStorage.getItem(STORAGE_KEYS.ACCOUNT);\n },\n getPublicKey() {\n return window.localStorage.getItem(STORAGE_KEYS.PUBLIC_KEY);\n },\n getBtcPublicKey() {\n return window.localStorage.getItem(STORAGE_KEYS.BTC_PUBLIC_KEY);\n },\n isValid() {\n const account = this.getAccount();\n const publicKey = this.getPublicKey();\n const btcPublicKey = this.getBtcPublicKey();\n\n const allEmpty = !account && !publicKey && !btcPublicKey;\n const allExist = account && publicKey && btcPublicKey;\n\n return allEmpty || allExist;\n },\n syncSave(account: string, publicKey: string, btcPublicKey: string) {\n if (!account || !publicKey || !btcPublicKey) {\n this.clear();\n return;\n }\n\n this.clear();\n\n this.savePublicKey(publicKey);\n this.saveBtcPublicKey(btcPublicKey);\n this.saveAccount(account);\n },\n};\n\nconst BTCWallet: WalletBehaviourFactory<InjectedWallet> = async ({\n metadata,\n options,\n store,\n emitter,\n logger,\n id,\n provider,\n}) => {\n const wallet = {\n signIn,\n signOut,\n getAccounts,\n verifyOwner,\n signMessage,\n isSignedIn,\n signAndSendTransaction,\n signAndSendTransactions,\n calculateGasLimit,\n };\n const env = (metadata as any).env || options.network.networkId || 'mainnet';\n const currentConfig = walletConfig[env as ENV];\n const walletNetwork = ['mainnet', 'private_mainnet'].includes(env) ? 'mainnet' : 'testnet';\n\n await initBtcContext();\n\n function validateWalletState() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const btcPublicKey = state.getBtcPublicKey();\n\n if ((!accountId && publicKey) || (accountId && !publicKey) || (!publicKey && btcPublicKey)) {\n state.clear();\n return false;\n }\n return true;\n }\n\n async function setupBtcContextListeners() {\n const handleConnectionUpdate = async () => {\n await checkBtcNetwork(walletNetwork);\n\n if (!state.isValid()) {\n state.clear();\n }\n\n validateWalletState();\n const btcContext = window.btcContext;\n if (btcContext.account) {\n const btcPublicKey = await btcContext.getPublicKey();\n if (btcPublicKey) {\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n await checkSatoshiWhitelist(btcContext.account, env);\n removeWalletButton();\n setupWalletButton(env, wallet as any, btcContext);\n }\n } else {\n removeWalletButton();\n setTimeout(() => {\n handleConnectionUpdate();\n }, 5000);\n }\n };\n\n const context = window.btcContext.getContext();\n\n context.on('updatePublicKey', async (btcPublicKey: string) => {\n console.log('updatePublicKey');\n state.clear();\n try {\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n\n if (!nearAddress || !nearPublicKey) {\n throw new Error('Failed to get near account info');\n }\n\n emitter.emit('accountsChanged', {\n accounts: [{ accountId: nearAddress }],\n });\n await handleConnectionUpdate();\n } catch (error) {\n console.error('Error updating public key:', error);\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n }\n });\n\n context.on('btcLoginError', async () => {\n console.log('btcLoginError');\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n await handleConnectionUpdate();\n });\n\n context.on('btcLogOut', async () => {\n console.log('btcLogOut');\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n await handleConnectionUpdate();\n });\n\n await handleConnectionUpdate();\n\n if (\n 'autoConnect' in metadata &&\n metadata.autoConnect &&\n localStorage.getItem('near-wallet-selector:selectedWalletId') === '\"btc-wallet\"'\n ) {\n await window.btcContext.autoConnect();\n }\n }\n\n async function initBtcContext() {\n console.log('initBtcContext');\n const btcContext = await retryOperation(\n async () => {\n const ctx = window.btcContext;\n if (!ctx) {\n throw new Error('btcContext not found');\n }\n return ctx;\n },\n (res) => !!res,\n {\n maxRetries: 10,\n delayMs: 500,\n },\n );\n\n await setupBtcContextListeners();\n return btcContext;\n }\n\n async function nearCall<T>(contractId: string, methodName: string, args: any) {\n return nearCallFunction<T>(contractId, methodName, args, { provider });\n }\n\n async function getNearAccountByBtcPublicKey(btcPublicKey: string) {\n const csna = await getCsnaAccountId(env);\n\n const nearPublicKey = await nearCall<string>(\n currentConfig.accountContractId,\n 'get_chain_signature_near_account_public_key',\n { btc_public_key: btcPublicKey },\n );\n\n state.syncSave(csna, nearPublicKey, btcPublicKey);\n\n return {\n nearAddress: csna,\n nearPublicKey,\n };\n }\n\n async function signIn({ contractId, methodNames }: any) {\n const btcContext = window.btcContext;\n\n state.clear();\n\n if (!state.getAccount() || !state.getPublicKey()) {\n await btcContext.login();\n }\n\n const btcPublicKey = await btcContext.getPublicKey();\n console.log('btcPublicKey:', btcPublicKey);\n if (!btcPublicKey) {\n throw new Error('No connected BTC wallet, please connect your BTC wallet first.');\n }\n\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n\n return [\n {\n accountId: nearAddress,\n publicKey: nearPublicKey,\n },\n ];\n }\n\n async function signOut() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n if (!(accountId && publicKey)) {\n return;\n }\n const btcContext = window.btcContext;\n // @ts-ignore\n if (metadata.syncLogOut) {\n btcContext.logout();\n }\n\n state.clear();\n window.localStorage.removeItem('near-wallet-selector:selectedWalletId');\n removeWalletButton();\n }\n\n function isSignedIn() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n return accountId && publicKey;\n }\n\n async function getAccounts() {\n return [{ accountId: state.getAccount() }];\n }\n\n async function verifyOwner() {\n throw new Error(`Method not supported by ${metadata.name}`);\n }\n\n async function signMessage() {\n throw new Error(`Method not supported by ${metadata.name}`);\n }\n\n async function signAndSendTransaction(params: Transaction) {\n const transactions = [params];\n const result = await signAndSendTransactions({ transactions });\n if (Array.isArray(result)) {\n return result[0];\n } else {\n throw new Error(`Transaction failed: ${result}`);\n }\n }\n\n async function signAndSendTransactions(params: { transactions: Transaction[] }) {\n if (!validateWalletState()) {\n throw new Error('Wallet state is invalid, please reconnect your wallet.');\n }\n\n const btcContext = window.btcContext;\n const accountId = state.getAccount();\n\n const accountInfo = await getAccountInfo(accountId, currentConfig.accountContractId);\n\n // check gas token arrears\n await checkGasTokenDebt(accountInfo, env, true);\n\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.token] || '0';\n\n const { transferGasTransaction, useNearPayGas, gasLimit } = await calculateGasStrategy(\n gasTokenBalance,\n trans,\n );\n\n console.log('transferGasTransaction:', transferGasTransaction);\n console.log('useNearPayGas:', useNearPayGas);\n console.log('gasLimit:', gasLimit);\n\n // check gas token balance\n await checkGasTokenBalance(accountId, currentConfig.token, gasLimit, env);\n\n if (transferGasTransaction) {\n trans.unshift(transferGasTransaction);\n }\n\n console.log('calculateGasStrategy trans:', trans);\n\n const newTrans = await Promise.all(\n trans.map((transaction, index) => convertTransactionToTxHex(transaction, index)),\n );\n\n const nonceFromApi = await getNonce(currentConfig.base_url, accountId as string);\n\n const nonceFromContract = accountInfo?.nonce || 0;\n\n const nonce =\n Number(nonceFromApi) > Number(nonceFromContract)\n ? String(nonceFromApi)\n : String(nonceFromContract);\n\n const intention = {\n chain_id: '397',\n csna: accountId,\n near_transactions: newTrans.map((t) => t.txHex),\n gas_token: currentConfig.token,\n gas_limit: gasLimit,\n use_near_pay_gas: useNearPayGas,\n nonce,\n };\n\n const strIntention = JSON.stringify(intention);\n\n const signature = await btcContext.signMessage(strIntention);\n\n await receiveTransaction(currentConfig.base_url, {\n sig: signature,\n btcPubKey: state.getBtcPublicKey(),\n data: toHex(strIntention),\n });\n await checkBtcTransactionStatus(currentConfig.base_url, signature);\n\n const hash = newTrans.map((t) => t.hash);\n console.log('txHash:', hash);\n const result = await pollTransactionStatuses(options.network.networkId, hash);\n return result;\n }\n\n async function calculateGasLimit(params: { transactions: Transaction[] }) {\n const accountId = state.getAccount();\n\n const accountInfo = await getAccountInfo(accountId, currentConfig.accountContractId);\n\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.token] || '0';\n\n const { gasLimit } = await calculateGasStrategy(gasTokenBalance, trans);\n\n return gasLimit;\n }\n\n async function createGasTokenTransfer(accountId: string, amount: string) {\n return {\n signerId: accountId,\n receiverId: currentConfig.token,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: currentConfig.accountContractId,\n amount,\n msg: JSON.stringify('Repay'),\n },\n gas: new Big(50).mul(10 ** 12).toFixed(0),\n deposit: '1',\n },\n },\n ],\n } as Transaction;\n }\n\n async function recalculateGasWithTransfer(\n transferTx: Transaction,\n transactions: { txHex: string }[],\n useNearPayGas: boolean,\n perTxFee?: string,\n ) {\n const { txHex: transferTxHex } = await convertTransactionToTxHex(transferTx);\n\n let newGasLimit;\n if (useNearPayGas && perTxFee) {\n newGasLimit = new Big(perTxFee).mul(transactions.length + 1).toFixed(0);\n } else {\n newGasLimit = await getPredictedGasAmount(\n currentConfig.accountContractId,\n currentConfig.token,\n [transferTxHex, ...transactions.map((t) => t.txHex)],\n );\n }\n\n (transferTx.actions[0] as any).params.args.amount = newGasLimit;\n\n return { transferGasTransaction: transferTx, useNearPayGas, gasLimit: newGasLimit };\n }\n\n async function getPredictedGasAmount(\n accountContractId: string,\n tokenId: string,\n transactions: string[],\n ): Promise<string> {\n const predictedGas = await nearCall<string>(accountContractId, 'predict_txs_gas_token_amount', {\n gas_token_id: tokenId,\n near_transactions: transactions,\n });\n\n const predictedGasAmount = new Big(predictedGas).mul(1.2).toFixed(0);\n const miniGasAmount = 200 * transactions.length;\n const gasAmount = Math.max(Number(predictedGasAmount), miniGasAmount);\n console.log('predictedGas:', predictedGasAmount);\n return gasAmount.toString();\n }\n\n async function calculateGasStrategy(\n gasTokenBalance: string,\n transactions: Transaction[],\n ): Promise<{\n transferGasTransaction?: Transaction;\n useNearPayGas: boolean;\n gasLimit: string;\n }> {\n const accountId = state.getAccount();\n\n // check near balance\n // const nearAccount = await provider.query<any>({\n // request_type: 'view_account',\n // account_id: accountId,\n // finality: 'final',\n // });\n // const availableBalance = parseFloat(nearAccount.amount) / 10 ** 24;\n\n // console.log('available near balance:', availableBalance);\n\n // console.log('available gas token balance:', gasTokenBalance);\n\n const convertTx = await Promise.all(\n transactions.map((transaction, index) => convertTransactionToTxHex(transaction, index)),\n );\n\n // if (availableBalance > 0.2) {\n // console.log('near balance is enough, get the protocol fee of each transaction');\n // const gasTokens = await nearCall<Record<string, { per_tx_protocol_fee: string }>>(\n // currentConfig.accountContractId,\n // 'list_gas_token',\n // { token_ids: [currentConfig.token] },\n // );\n\n // console.log('list_gas_token gas tokens:', gasTokens);\n\n // const perTxFee = Math.max(\n // Number(gasTokens[currentConfig.token]?.per_tx_protocol_fee || 0),\n // 100,\n // );\n // console.log('perTxFee:', perTxFee);\n // const protocolFee = new Big(perTxFee || '0').mul(convertTx.length).toFixed(0);\n // console.log('protocolFee:', protocolFee);\n\n // // if (new Big(gasTokenBalance).gte(protocolFee)) {\n // // console.log('use near pay gas and enough gas token balance');\n // // return { useNearPayGas: true, gasLimit: protocolFee };\n // // } else {\n // console.log('use near pay gas and not enough gas token balance');\n // // gas token balance is not enough, need to transfer\n // const transferTx = await createGasTokenTransfer(accountId, protocolFee);\n // return recalculateGasWithTransfer(transferTx, convertTx, true, perTxFee.toString());\n // // }\n // } else {\n // console.log('near balance is not enough, predict the gas token amount required');\n const adjustedGas = await getPredictedGasAmount(\n currentConfig.accountContractId,\n currentConfig.token,\n convertTx.map((t) => t.txHex),\n );\n\n // if (new Big(gasTokenBalance).gte(adjustedGas)) {\n // console.log('use gas token and gas token balance is enough');\n // return { useNearPayGas: false, gasLimit: adjustedGas };\n // } else {\n // console.log('use gas token and gas token balance is not enough, need to transfer');\n const transferTx = await createGasTokenTransfer(accountId, adjustedGas);\n return recalculateGasWithTransfer(transferTx, convertTx, false);\n // }\n // }\n }\n\n // add utility function for converting Transaction to txHex\n async function convertTransactionToTxHex(transaction: Transaction, index = 0) {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const publicKeyFormat = PublicKey.from(publicKey);\n\n const { header } = await provider.block({\n finality: 'final',\n });\n\n const rawAccessKey = await provider\n .query<AccessKeyViewRaw>({\n request_type: 'view_access_key',\n account_id: accountId,\n public_key: publicKey,\n finality: 'final',\n })\n .catch((e) => {\n console.log('view_access_key error:', e);\n return undefined;\n });\n\n const accessKey = {\n ...rawAccessKey,\n nonce: BigInt(rawAccessKey?.nonce || 0),\n };\n\n const nearNonceFromApi = await getNearNonce(currentConfig.base_url, accountId);\n\n let nearNonceNumber = accessKey.nonce + BigInt(1);\n if (nearNonceFromApi) {\n nearNonceNumber =\n BigInt(nearNonceFromApi) > nearNonceNumber ? BigInt(nearNonceFromApi) : nearNonceNumber;\n }\n\n const newActions = transaction.actions\n .map((action) => {\n switch (action.type) {\n case 'FunctionCall':\n return functionCall(\n action.params.methodName,\n action.params.args,\n BigInt(action.params.gas),\n BigInt(action.params.deposit),\n );\n case 'Transfer':\n return transfer(BigInt(action.params.deposit));\n }\n })\n .filter(Boolean) as transactions.Action[];\n\n const _transaction = transactions.createTransaction(\n accountId,\n publicKeyFormat,\n transaction.receiverId,\n BigInt(nearNonceNumber) + BigInt(index),\n newActions,\n baseDecode(header.hash),\n );\n\n const txBytes = encodeTransaction(_transaction);\n const txHex = Array.from(txBytes, (byte) => ('0' + (byte & 0xff).toString(16)).slice(-2)).join(\n '',\n );\n\n const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));\n\n return { txBytes, txHex, hash };\n }\n\n async function checkBtcNetwork(network: string) {\n const btcContext = window.btcContext;\n if (!btcContext.account) return;\n const btcNetwork = await btcContext.getNetwork();\n const networkMap = {\n livenet: ['mainnet', 'private_mainnet'],\n testnet: ['testnet', 'dev'],\n };\n if (!networkMap[btcNetwork].includes(network)) {\n await btcContext.switchNetwork(btcNetwork === 'livenet' ? 'testnet' : 'livenet');\n }\n }\n\n return wallet as any;\n};\n\nexport function setupBTCWallet({\n iconUrl = 'https://assets.deltatrade.ai/assets/chain/btc.svg',\n deprecated = false,\n autoConnect = true,\n syncLogOut = true,\n env = 'mainnet',\n}: BTCWalletParams | undefined = {}): WalletModuleFactory<InjectedWallet> {\n console.log('\u26A1\uFE0F BTC Wallet Version:', getVersion(), 'env:', env);\n\n const btcWallet = async () => {\n return {\n id: 'btc-wallet',\n type: 'injected',\n metadata: {\n name: 'BTC Wallet',\n description: 'BTC Wallet',\n iconUrl,\n downloadUrl: iconUrl,\n deprecated,\n available: true,\n autoConnect,\n syncLogOut,\n env,\n },\n init: BTCWallet,\n } as any;\n };\n\n return btcWallet;\n}\n\nexport default {\n setupBTCWallet,\n};\n", "export type ENV = 'mainnet' | 'testnet' | 'private_mainnet' | 'dev';\n\nexport const walletConfig: Record<\n ENV,\n {\n base_url: string;\n token: string;\n accountContractId: string;\n bridgeContractId: string;\n walletUrl: string;\n bridgeUrl: string;\n }\n> = {\n dev: {\n base_url: 'https://api.dev.satoshibridge.top',\n token: 'nbtc-dev.testnet',\n accountContractId: 'acc-dev.testnet',\n bridgeContractId: 'brg-dev.testnet',\n walletUrl: 'https://wallet-dev.satoshibridge.top',\n bridgeUrl: 'https://dev.satoshibridge.top/',\n },\n testnet: {\n base_url: 'https://api.testnet.satoshibridge.top',\n token: 'nbtc2-nsp.testnet',\n accountContractId: 'acc2-nsp.testnet',\n bridgeContractId: 'brg2-nsp.testnet',\n walletUrl: 'https://wallet-test.satoshibridge.top',\n bridgeUrl: 'https://testnet.satoshibridge.top/',\n },\n private_mainnet: {\n base_url: 'https://api.stg.satoshibridge.top',\n token: 'nbtc.toalice.near',\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet-stg.satoshibridge.top',\n bridgeUrl: 'https://ramp.satos.network/',\n },\n mainnet: {\n base_url: 'https://api.mainnet.satoshibridge.top',\n token: 'nbtc.toalice.near',\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet.satoshibridge.top',\n bridgeUrl: 'https://www.satoshibridge.top/',\n },\n};\n\nexport const nearRpcUrls = {\n mainnet: [\n 'https://near.lava.build',\n 'https://rpc.mainnet.near.org',\n 'https://free.rpc.fastnear.com',\n 'https://near.drpc.org',\n ],\n testnet: ['https://rpc.testnet.near.org'],\n};\n\nexport const btcRpcUrls = {\n mainnet: 'https://mempool.space/api',\n testnet: 'https://mempool.space/testnet/api',\n};\n", "import type { Wallet } from '@near-wallet-selector/core';\nimport { walletConfig, type ENV } from '../config';\n\ninterface OriginalWallet {\n account: string | null;\n getPublicKey: () => Promise<string>;\n}\n\nexport function setupWalletButton(env: ENV, wallet: Wallet, originalWallet: OriginalWallet) {\n console.log('setupWalletButton');\n if (document.getElementById('satoshi-wallet-button')) {\n return;\n }\n\n const iframe = createIframe({\n iframeUrl: walletConfig[env].walletUrl,\n iframeStyle: { width: '400px', height: '650px' },\n });\n\n iframe.addEventListener('mouseenter', () => {\n if (document.activeElement !== iframe) {\n document.activeElement?.setAttribute('tabindex', 'null');\n setTimeout(() => {\n iframe.focus();\n }, 0);\n }\n });\n\n const button = createFloatingButtonWithIframe({\n openImageUrl: 'https://assets.deltatrade.ai/wallet-assets/wallet-btn.png',\n closeImageUrl: 'https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png',\n iframe,\n });\n\n setupButtonClickHandler(button, iframe, wallet, originalWallet);\n}\n\nfunction createFloatingButtonWithIframe({\n openImageUrl,\n closeImageUrl,\n iframe,\n}: {\n openImageUrl: string;\n closeImageUrl: string;\n iframe: HTMLIFrameElement;\n}): HTMLImageElement {\n const button = document.createElement('img');\n button.id = 'satoshi-wallet-button';\n\n const isIframeVisible = localStorage.getItem('btc-wallet-iframe-visible') === 'true';\n\n button.src = isIframeVisible ? closeImageUrl : openImageUrl;\n iframe.style.display = isIframeVisible ? 'block' : 'none';\n\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const savedPosition = JSON.parse(\n localStorage.getItem('btc-wallet-button-position') || '{\"right\": \"20px\", \"bottom\": \"20px\"}',\n );\n\n const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);\n const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);\n\n Object.assign(button.style, {\n position: 'fixed',\n bottom: `${bottom}px`,\n right: `${right}px`,\n zIndex: '100000',\n width: '60px',\n height: '60px',\n borderRadius: '50%',\n cursor: 'grab',\n transition: 'transform 0.15s ease',\n userSelect: 'none',\n });\n\n document.body.appendChild(button);\n\n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let initialRight = 0;\n let initialBottom = 0;\n let dragStartTime = 0;\n\n button.addEventListener('mousedown', (e) => {\n isDragging = true;\n startX = e.clientX;\n startY = e.clientY;\n initialRight = parseInt(button.style.right);\n initialBottom = parseInt(button.style.bottom);\n dragStartTime = Date.now();\n\n button.style.cursor = 'grabbing';\n button.style.transition = 'none';\n e.preventDefault();\n });\n\n document.addEventListener('mousemove', (e) => {\n if (!isDragging) return;\n\n const deltaX = startX - e.clientX;\n const deltaY = startY - e.clientY;\n\n let newRight = initialRight + deltaX;\n let newBottom = initialBottom + deltaY;\n\n newRight = Math.min(Math.max(20, newRight), windowWidth - 80);\n newBottom = Math.min(Math.max(20, newBottom), windowHeight - 80);\n\n const snapThreshold = 20;\n const buttonLeft = windowWidth - newRight - 60;\n\n if (buttonLeft < snapThreshold) {\n newRight = windowWidth - 80;\n } else if (buttonLeft > windowWidth - snapThreshold - 60) {\n newRight = 20;\n }\n\n if (newBottom < snapThreshold) {\n newBottom = 20;\n } else if (newBottom > windowHeight - snapThreshold - 60) {\n newBottom = windowHeight - 80;\n }\n\n button.style.right = `${newRight}px`;\n button.style.bottom = `${newBottom}px`;\n\n updateIframePosition(iframe, newRight, newBottom, windowWidth, windowHeight);\n });\n\n document.addEventListener('mouseup', () => {\n if (!isDragging) return;\n\n const dragEndTime = Date.now();\n const isDragEvent = dragEndTime - dragStartTime > 200;\n\n isDragging = false;\n button.style.cursor = 'grab';\n button.style.transition = 'transform 0.15s ease';\n\n localStorage.setItem(\n 'btc-wallet-button-position',\n JSON.stringify({\n right: button.style.right,\n bottom: button.style.bottom,\n }),\n );\n\n if (!isDragEvent) {\n handleButtonClick();\n }\n });\n\n const handleButtonClick = () => {\n const isCurrentlyVisible = iframe.style.display === 'block';\n button.style.transform = 'scale(0.8)';\n setTimeout(() => {\n button.style.transform = 'scale(1)';\n }, 150);\n\n const newVisibleState = !isCurrentlyVisible;\n iframe.style.display = newVisibleState ? 'block' : 'none';\n button.src = newVisibleState ? closeImageUrl : openImageUrl;\n\n localStorage.setItem('btc-wallet-iframe-visible', String(newVisibleState));\n\n setTimeout(() => {\n if (newVisibleState) {\n iframe.focus();\n }\n }, 0);\n };\n\n button.onclick = null;\n\n return button;\n}\n\nfunction createIframe({\n iframeUrl,\n iframeStyle = {},\n}: {\n iframeUrl: string;\n iframeStyle?: { [key: string]: string };\n}): HTMLIFrameElement {\n const iframe = document.createElement('iframe');\n iframe.id = 'satoshi-wallet-iframe';\n iframe.allow = 'clipboard-read; clipboard-write';\n iframe.src = iframeUrl;\n\n const isVisible = localStorage.getItem('btc-wallet-iframe-visible') === 'true';\n\n Object.assign(iframe.style, {\n position: 'fixed',\n bottom: '90px',\n right: '20px',\n zIndex: '100000',\n boxShadow: '0 0 10px rgba(0, 0, 0, 0.1)',\n borderRadius: '10px',\n display: isVisible ? 'block' : 'none',\n border: 'none',\n ...iframeStyle,\n });\n\n document.body.appendChild(iframe);\n\n return iframe;\n}\n\nasync function setupButtonClickHandler(\n button: HTMLImageElement,\n iframe: HTMLIFrameElement,\n wallet: Wallet,\n originalWallet: OriginalWallet,\n) {\n const accountId = (await wallet?.getAccounts())?.[0].accountId;\n const originalAccountId = originalWallet.account;\n const originalPublicKey = await originalWallet.getPublicKey();\n console.log({ accountId, originalAccountId, originalPublicKey });\n const iframeSrc = new URL(iframe.src);\n iframeSrc.searchParams.set('origin', window.location.origin);\n accountId && iframeSrc.searchParams.set('accountId', accountId);\n originalAccountId && iframeSrc.searchParams.set('originalAccountId', originalAccountId);\n originalPublicKey && iframeSrc.searchParams.set('originalPublicKey', originalPublicKey);\n\n iframe.src = iframeSrc.toString();\n\n window.addEventListener('message', async (event) => {\n if (event.origin !== iframeSrc.origin) return;\n const { action, requestId, data } = event.data;\n\n if (action === 'signAndSendTransaction') {\n console.log('signAndSendTransaction message', event.data);\n try {\n const result = await wallet.signAndSendTransaction(data);\n console.log('signAndSendTransaction result', result);\n event.source?.postMessage(\n {\n requestId,\n data,\n success: true,\n },\n { targetOrigin: event.origin },\n );\n } catch (error: any) {\n console.error('signAndSendTransaction error', error);\n event.source?.postMessage(\n {\n requestId,\n error: error.message,\n success: false,\n },\n { targetOrigin: event.origin },\n );\n }\n }\n });\n}\n\nexport function removeWalletButton() {\n const button = document.getElementById('satoshi-wallet-button');\n button?.remove();\n const iframe = document.getElementById('satoshi-wallet-iframe');\n iframe?.remove();\n}\n\nfunction updateIframePosition(\n iframe: HTMLIFrameElement,\n buttonRight: number,\n buttonBottom: number,\n windowWidth: number,\n windowHeight: number,\n) {\n const iframeWidth = parseInt(iframe.style.width);\n const iframeHeight = parseInt(iframe.style.height);\n\n let iframeRight = buttonRight;\n let iframeBottom = buttonBottom + 70;\n\n if (iframeRight + iframeWidth > windowWidth - 20) {\n iframeRight = Math.max(20, windowWidth - iframeWidth - 20);\n }\n\n if (iframeBottom + iframeHeight > windowHeight - 20) {\n iframeBottom = Math.max(20, buttonBottom - iframeHeight - 10);\n }\n\n iframe.style.right = `${iframeRight}px`;\n iframe.style.bottom = `${iframeBottom}px`;\n}\n", "import type { ProviderService } from '@near-wallet-selector/core/src/lib/services';\nimport { providers } from 'near-api-js';\nimport { nearRpcUrls } from '../config';\nimport { delay } from '.';\nimport type { FinalExecutionOutcome } from '@near-wallet-selector/core';\n\nexport async function nearCallFunction<T>(\n contractId: string,\n methodName: string,\n args: any,\n options: {\n network?: string;\n provider?: ProviderService;\n },\n): Promise<T> {\n const nearProvider =\n options?.provider ||\n new providers.FailoverRpcProvider(\n nearRpcUrls[options?.network as keyof typeof nearRpcUrls].map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n );\n const res: any = await nearProvider.query({\n request_type: 'call_function',\n account_id: contractId,\n method_name: methodName,\n args_base64: Buffer.from(JSON.stringify(args)).toString('base64'),\n finality: 'final',\n });\n return JSON.parse(Buffer.from(res.result).toString()) as T;\n}\n\nexport async function pollTransactionStatuses(network: string, hashes: string[]) {\n const provider = new providers.FailoverRpcProvider(\n Object.values(nearRpcUrls[network as keyof typeof nearRpcUrls]).map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n );\n\n const maxAttempts = 30;\n let currentAttempt = 0;\n const pendingHashes = new Set(hashes);\n const results = new Map<string, FinalExecutionOutcome>();\n\n while (pendingHashes.size > 0 && currentAttempt < maxAttempts) {\n currentAttempt++;\n\n const promises = Array.from(pendingHashes).map(async (hash) => {\n try {\n const result = await provider.txStatus(hash, 'unused', 'FINAL');\n if (result && result.status) {\n console.log(`Transaction ${hash} result:`, result);\n results.set(hash, result);\n pendingHashes.delete(hash);\n }\n } catch (error: any) {\n console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);\n }\n });\n\n await Promise.all(promises);\n\n if (pendingHashes.size > 0) {\n if (currentAttempt === maxAttempts) {\n throw new Error(\n `Transactions not found after max attempts: ${Array.from(pendingHashes).join(', ')}`,\n );\n }\n console.log(\n `Waiting for ${pendingHashes.size} transactions, retrying ${maxAttempts - currentAttempt} more times`,\n );\n await delay(10000);\n }\n }\n\n const result = hashes.map((hash) => results.get(hash)).filter(Boolean) as FinalExecutionOutcome[];\n return result;\n}\n", "import Big from 'big.js';\nimport type { ENV } from '../config';\nimport { walletConfig, btcRpcUrls } from '../config';\nimport { delay, retryOperation } from '../utils';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport {\n checkBridgeTransactionStatus,\n getWhitelist,\n preReceiveDepositMsg,\n receiveDepositMsg,\n} from '../utils/satoshi';\nimport { Dialog } from '../utils/Dialog';\nimport type { FinalExecutionOutcome, Transaction } from '@near-wallet-selector/core';\nimport bitcoin from 'bitcoinjs-lib';\n// @ts-ignore\nimport coinselect from 'coinselect';\n\n/** NEAR Storage Deposit Amount */\nconst NEAR_STORAGE_DEPOSIT_AMOUNT = '1250000000000000000000';\n/** NBTC Storage Deposit Amount */\nconst NBTC_STORAGE_DEPOSIT_AMOUNT = '3000';\n/** NEAR Gas Limit */\nconst GAS_LIMIT = '50000000000000';\n/** New account min deposit amount */\nconst NEW_ACCOUNT_MIN_DEPOSIT_AMOUNT = '1000';\n\nfunction getBtcProvider() {\n if (typeof window === 'undefined' || !window.btcContext) {\n throw new Error('BTC Provider is not initialized.');\n }\n return window.btcContext;\n}\n\nasync function getNetwork() {\n const network = await getBtcProvider().getNetwork();\n console.log('btc network:', network);\n return network === 'livenet' ? 'mainnet' : 'testnet';\n}\n\nasync function getBtcRpcUrl() {\n const network = await getNetwork();\n return btcRpcUrls[network as keyof typeof btcRpcUrls];\n}\n\nasync function getConfig(env: ENV) {\n return walletConfig[env];\n}\n\nasync function nearCall<T>(contractId: string, methodName: string, args: any) {\n const network = await getNetwork();\n return nearCallFunction<T>(contractId, methodName, args, { network });\n}\n\nexport interface AccountInfo {\n nonce: string;\n gas_token: Record<string, string>;\n debt_info?: {\n gas_token_id: string;\n near_gas_debt_amount: string;\n protocol_fee_debt_amount: string;\n };\n relayer_fee?: { amount?: string };\n}\n\nexport async function getAccountInfo(csna: string, accountContractId: string) {\n const accountInfo = await nearCall<AccountInfo>(accountContractId, 'get_account', {\n account_id: csna,\n }).catch((error) => {\n return undefined;\n });\n console.log('get_account accountInfo:', accountInfo);\n return accountInfo;\n}\n\nexport async function checkGasTokenBalance(\n csna: string,\n gasToken: string,\n minAmount: string,\n env: ENV,\n) {\n const amount = await nearCall<string>(gasToken, 'ft_balance_of', { account_id: csna });\n console.log('gas token balance:', amount);\n if (new Big(amount).lt(minAmount)) {\n await Dialog.confirm({\n title: 'Gas token balance is insufficient',\n message: 'Please deposit gas token to continue, will open bridge website.',\n });\n const config = await getConfig(env);\n window.open(config.bridgeUrl, '_blank');\n throw new Error('Gas token balance is insufficient');\n }\n}\n\ntype CheckGasTokenDebtReturnType<T extends boolean> = T extends true\n ? void\n : { receiver_id: string; amount: string; msg: string } | undefined;\n\nexport async function checkGasTokenDebt<T extends boolean>(\n accountInfo: AccountInfo | undefined,\n env: ENV,\n autoDeposit?: T,\n): Promise<CheckGasTokenDebtReturnType<T>> {\n const debtAmount = new Big(accountInfo?.debt_info?.near_gas_debt_amount || 0)\n .plus(accountInfo?.debt_info?.protocol_fee_debt_amount || 0)\n .toString();\n const relayerFeeAmount = !accountInfo?.nonce\n ? NBTC_STORAGE_DEPOSIT_AMOUNT\n : accountInfo?.relayer_fee?.amount || 0;\n const hasDebtArrears = new Big(debtAmount).gt(0);\n const hasRelayerFeeArrears = new Big(relayerFeeAmount).gt(0);\n if (!hasDebtArrears && !hasRelayerFeeArrears) return;\n const config = await getConfig(env);\n const transferAmount = hasDebtArrears ? debtAmount : relayerFeeAmount;\n console.log('get_account:', accountInfo);\n\n const action = {\n receiver_id: config.accountContractId,\n amount: transferAmount.toString(),\n msg: JSON.stringify(hasDebtArrears ? 'Repay' : 'RelayerFee'),\n };\n\n if (!autoDeposit) return action as CheckGasTokenDebtReturnType<T>;\n\n const confirmed = await Dialog.confirm({\n title: hasDebtArrears ? 'Has gas token arrears' : 'Has relayer fee arrears',\n message: hasDebtArrears\n ? 'You have gas token arrears, please deposit gas token to continue.'\n : 'You have relayer fee arrears, please deposit relayer fee to continue.',\n });\n\n if (confirmed) {\n await executeBTCDepositAndAction({ action, env });\n\n await Dialog.alert({\n title: 'Deposit success',\n message: 'Deposit success, will continue to execute transaction.',\n });\n } else {\n throw new Error('Deposit failed, please deposit gas token first.');\n }\n}\n\ninterface DepositMsg {\n recipient_id: string;\n post_actions?: Array<{\n receiver_id: string;\n amount: string;\n memo?: string;\n msg: string;\n gas?: string;\n }>;\n extra_msg?: string;\n}\n\nexport async function getBtcGasPrice(): Promise<number> {\n const network = await getNetwork();\n const defaultFeeRate = network === 'mainnet' ? 5 : 2500;\n try {\n const btcRpcUrl = await getBtcRpcUrl();\n const res = await fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res) => res.json());\n const feeRate = res.fastestFee;\n return feeRate || defaultFeeRate;\n } catch (error) {\n return defaultFeeRate;\n }\n}\n\nexport async function getBtcBalance() {\n const { account } = await retryOperation(getBtcProvider, (res) => !!res.account);\n\n if (!account) {\n console.error('BTC Account is not available.');\n return { rawBalance: 0, balance: 0, maxSpendableBalance: 0 };\n }\n\n const btcRpcUrl = await getBtcRpcUrl();\n const utxos = await fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res) => res.json());\n\n const btcDecimals = 8;\n\n const rawBalance =\n utxos?.reduce((acc: number, cur: { value: number }) => acc + cur.value, 0) || 0;\n const balance = rawBalance / 10 ** btcDecimals;\n\n // get the recommended fee rate\n const feeRate = await getBtcGasPrice();\n\n // calculate the estimated transaction size (bytes)\n // input size = input count * 64 bytes (each input is about 64 bytes)\n // output size = 34 bytes (one output)\n // other fixed overhead = 10 bytes\n const inputSize = (utxos?.length || 0) * 66;\n const outputSize = 34;\n const overheadSize = 10;\n const estimatedTxSize = inputSize + outputSize + overheadSize;\n\n // calculate the estimated transaction fee\n const estimatedFee = estimatedTxSize * feeRate;\n const availableRawBalance = (rawBalance - estimatedFee).toFixed(0);\n const availableBalance = new Big(availableRawBalance)\n .div(10 ** btcDecimals)\n .round(btcDecimals, Big.roundDown)\n .toNumber();\n\n return {\n rawBalance,\n balance,\n availableBalance: Math.max(availableBalance, 0),\n };\n}\n\nexport async function getNBTCBalance(address: string, env?: ENV) {\n const config = await getConfig(env || 'mainnet');\n const rawBalance = await nearCall<string>(config.token, 'ft_balance_of', {\n account_id: address,\n });\n const balance = new Big(rawBalance)\n .div(10 ** 8)\n .round(8, Big.roundDown)\n .toNumber();\n const rawAvailableBalance = new Big(rawBalance).minus(1000).toNumber();\n const availableBalance = new Big(rawAvailableBalance)\n .div(10 ** 8)\n .round(8, Big.roundDown)\n .toNumber();\n return { balance, availableBalance, rawBalance, rawAvailableBalance };\n}\n\nexport async function sendBitcoin(\n address: string,\n amount: number,\n feeRate: number,\n): Promise<string> {\n const { sendBitcoin } = getBtcProvider();\n const txHash = await sendBitcoin(address, amount, { feeRate });\n return txHash;\n}\n\n/** estimate deposit receive amount, deduct protocol fee and repay amount */\nexport async function estimateDepositAmount(\n amount: string,\n option?: {\n env?: ENV;\n },\n) {\n return amount;\n}\n\nexport async function getDepositAmount(\n amount: string,\n option?: {\n env?: ENV;\n },\n) {\n const env = option?.env || 'mainnet';\n const config = await getConfig(env);\n const csna = await getCsnaAccountId(env);\n const accountInfo = await getAccountInfo(csna, config.accountContractId);\n const debtAction = await checkGasTokenDebt(accountInfo, env, false);\n const repayAmount = debtAction?.amount || 0;\n const {\n deposit_bridge_fee: { fee_min, fee_rate },\n min_deposit_amount,\n } = await nearCall<{\n deposit_bridge_fee: { fee_min: string; fee_rate: number };\n min_deposit_amount: string;\n }>(config.bridgeContractId, 'get_config', {});\n const depositAmount = Math.max(Number(min_deposit_amount), Number(amount));\n const protocolFee = Math.max(Number(fee_min), Number(depositAmount) * fee_rate);\n const newAccountMinDepositAmount = !accountInfo?.nonce ? NEW_ACCOUNT_MIN_DEPOSIT_AMOUNT : 0;\n const totalDepositAmount = new Big(depositAmount)\n .plus(protocolFee)\n .plus(repayAmount)\n .plus(newAccountMinDepositAmount)\n .round(0, Big.roundDown)\n .toNumber();\n\n return {\n depositAmount,\n totalDepositAmount,\n protocolFee,\n repayAmount,\n newAccountMinDepositAmount,\n };\n}\n\nexport async function getCsnaAccountId(env: ENV) {\n const config = await getConfig(env);\n const { getPublicKey } = getBtcProvider();\n const btcPublicKey = await getPublicKey();\n const csna = await nearCall<string>(\n config.accountContractId,\n 'get_chain_signature_near_account_id',\n {\n btc_public_key: btcPublicKey,\n },\n );\n return csna;\n}\n\ninterface ExecuteBTCDepositAndActionParams<T extends boolean = true> {\n action?: {\n receiver_id: string;\n amount: string;\n msg: string;\n };\n amount?: string;\n /** if registerDeposit is true, It will consume the deposit, otherwise it will be 0.000125 NEAR */\n registerDeposit?: string;\n feeRate?: number;\n env?: ENV;\n pollResult?: T;\n}\n\n/**\n * @param T - if true, return the poll result, otherwise return the btcTxHash\n */\ntype ExecuteBTCDepositAndActionReturn<T extends boolean> = T extends true\n ? FinalExecutionOutcome[]\n : string;\n\nexport async function executeBTCDepositAndAction<T extends boolean = true>({\n action,\n amount,\n feeRate,\n pollResult = true as T,\n registerDeposit,\n env = 'mainnet',\n}: ExecuteBTCDepositAndActionParams<T>): Promise<ExecuteBTCDepositAndActionReturn<T>> {\n try {\n const { getPublicKey } = getBtcProvider();\n\n const config = await getConfig(env);\n\n const btcPublicKey = await getPublicKey();\n\n if (!btcPublicKey) {\n throw new Error('BTC Public Key is not available.');\n }\n if (!amount && !action) {\n throw new Error('amount or action is required');\n }\n\n const csna = await getCsnaAccountId(env);\n\n const depositAmount = (action ? action.amount : amount) ?? '0';\n\n if (new Big(depositAmount).lt(0)) {\n throw new Error('amount must be greater than 0');\n }\n\n const { totalDepositAmount, protocolFee, repayAmount } = await getDepositAmount(depositAmount, {\n env,\n });\n\n const accountInfo = await getAccountInfo(csna, config.accountContractId);\n\n const newActions = [];\n\n const debtAction = await checkGasTokenDebt(accountInfo, env, false);\n\n if (debtAction) {\n newActions.push({\n ...debtAction,\n gas: GAS_LIMIT,\n });\n }\n\n // if action is not provided, and the gas token balance is less than the minimum deposit amount, then add the deposit action\n if (action) {\n newActions.push({\n ...action,\n gas: GAS_LIMIT,\n });\n }\n\n const storageDepositMsg: {\n storage_deposit_msg?: {\n contract_id: string;\n deposit: string;\n registration_only: boolean;\n };\n btc_public_key?: string;\n } = {};\n\n // check receiver_id is registered\n const registerRes = await nearCall<{\n available: string;\n total: string;\n }>(action?.receiver_id || config.token, 'storage_balance_of', {\n account_id: csna,\n });\n\n if (!registerRes?.available) {\n storageDepositMsg.storage_deposit_msg = {\n contract_id: action?.receiver_id || config.token,\n deposit: registerDeposit || NEAR_STORAGE_DEPOSIT_AMOUNT,\n registration_only: true,\n };\n }\n // check account is registerer\n if (!accountInfo?.nonce) {\n storageDepositMsg.btc_public_key = btcPublicKey;\n }\n\n const depositMsg: DepositMsg = {\n recipient_id: csna,\n post_actions: newActions.length > 0 ? newActions : undefined,\n extra_msg:\n Object.keys(storageDepositMsg).length > 0 ? JSON.stringify(storageDepositMsg) : undefined,\n };\n\n console.log('get_user_deposit_address params:', { deposit_msg: depositMsg });\n const userDepositAddress = await nearCall<string>(\n config.bridgeContractId,\n 'get_user_deposit_address',\n { deposit_msg: depositMsg },\n );\n const _feeRate = feeRate || (await getBtcGasPrice());\n\n // deposit amount detail\n console.table({\n 'User Deposit Address': userDepositAddress,\n 'Deposit Amount': depositAmount,\n 'Protocol Fee': protocolFee,\n 'Repay Amount': repayAmount,\n 'Total Deposit Amount': totalDepositAmount,\n 'Fee Rate': _feeRate,\n });\n\n const postActionsStr = newActions.length > 0 ? JSON.stringify(newActions) : undefined;\n\n await preReceiveDepositMsg(config.base_url, {\n btcPublicKey,\n depositType: postActionsStr || depositMsg.extra_msg ? 1 : 0,\n postActions: postActionsStr,\n extraMsg: depositMsg.extra_msg,\n });\n\n const txHash = await sendBitcoin(userDepositAddress, totalDepositAmount, _feeRate);\n\n await receiveDepositMsg(config.base_url, {\n btcPublicKey,\n txHash,\n depositType: postActionsStr || depositMsg.extra_msg ? 1 : 0,\n postActions: postActionsStr,\n extraMsg: depositMsg.extra_msg,\n });\n\n if (!pollResult) {\n return txHash as ExecuteBTCDepositAndActionReturn<T>;\n }\n\n const checkTransactionStatusRes = await checkBridgeTransactionStatus(config.base_url, txHash);\n console.log('checkBridgeTransactionStatus resp:', checkTransactionStatusRes);\n const network = await getNetwork();\n const result = await pollTransactionStatuses(network, [checkTransactionStatusRes.ToTxHash]);\n return result as ExecuteBTCDepositAndActionReturn<T>;\n } catch (error: any) {\n console.error('executeBTCDepositAndAction error:', error);\n throw error;\n }\n}\n\nexport async function checkSatoshiWhitelist(btcAccountId: string, env: ENV = 'mainnet') {\n if (env !== 'private_mainnet') return;\n const hasShownNotice = localStorage.getItem('btc-wallet-private-mainnet-notice');\n if (!hasShownNotice) {\n Dialog.alert({\n title: 'Notice',\n message:\n 'You are currently using Satoshi Private Mainnet. This is a private version for testing. Please try a small amount of assets in Ramp',\n });\n localStorage.setItem('btc-wallet-private-mainnet-notice', 'true');\n }\n if (!btcAccountId) return;\n const config = await getConfig(env);\n const whitelist = await getWhitelist(config.base_url);\n if (!whitelist?.length) return;\n const isWhitelisted = whitelist.includes(btcAccountId);\n if (!isWhitelisted) {\n Dialog.alert({\n title: 'Account is not whitelisted',\n message: `We're live on beta mainnet! Join the whitelist to on-ramp your BTC in just 24 hours.\nSign up now: <a style=\"color: #ff7a00; text-decoration: underline;\" href=\"https://forms.gle/rrTP1ZbGU5mRZpHdA\" target=\"_blank\">https://forms.gle/rrTP1ZbGU5mRZpHdA</a>`,\n dangerouslyUseHTML: true,\n closable: false,\n });\n throw new Error('Account is not whitelisted');\n }\n}\n\ninterface WithdrawParams {\n amount: string | number;\n feeRate?: number;\n env?: ENV;\n}\n\nexport async function getWithdrawTransaction({\n amount,\n feeRate,\n env = 'mainnet',\n}: WithdrawParams): Promise<Transaction> {\n const provider = getBtcProvider();\n const btcAddress = await provider.account;\n const config = await getConfig(env);\n\n // Get configuration\n const brgConfig = await nearCall<{\n min_withdraw_amount: string;\n withdraw_bridge_fee: {\n fee_rate: number;\n fee_min: string;\n };\n max_btc_gas_fee: string;\n change_address: string;\n }>(config.bridgeContractId, 'get_config', {});\n\n // Check minimum withdrawal amount\n if (brgConfig.min_withdraw_amount) {\n if (Number(amount) < Number(brgConfig.min_withdraw_amount)) {\n throw new Error('Mini withdraw amount is ' + brgConfig.min_withdraw_amount);\n }\n }\n\n // Calculate withdrawal fee\n const feePercent = Number(brgConfig.withdraw_bridge_fee.fee_rate) * Number(amount);\n const withdrawFee =\n feePercent > Number(brgConfig.withdraw_bridge_fee.fee_min)\n ? feePercent\n : Number(brgConfig.withdraw_bridge_fee.fee_min);\n\n // Get UTXOs\n const allUTXO = await nearCall<\n Record<\n string,\n {\n vout: number;\n balance: string;\n script: string;\n }\n >\n >(config.bridgeContractId, 'get_utxos_paged', {});\n\n if (!allUTXO || Object.keys(allUTXO).length === 0) {\n throw new Error('The network is busy, please try again later.');\n }\n\n // Format UTXOs\n const utxos = Object.keys(allUTXO).map((key) => {\n const txid = key.split('@');\n return {\n txid: txid[0],\n vout: allUTXO[key].vout,\n value: Number(allUTXO[key].balance),\n script: allUTXO[key].script,\n };\n });\n\n const _feeRate = feeRate || (await getBtcGasPrice());\n // Use coinselect to calculate inputs and outputs\n const { inputs, outputs, fee } = coinselect(\n utxos,\n [{ address: btcAddress, value: Number(amount) }],\n Math.ceil(_feeRate),\n );\n\n if (!outputs || !inputs) {\n throw new Error('The network is busy, please try again later.');\n }\n\n // Process outputs\n const maxBtcFee = Number(brgConfig.max_btc_gas_fee);\n const newFee = fee;\n const withdrawChangeAddress = brgConfig.change_address;\n\n if (newFee > maxBtcFee) {\n throw new Error('Gas exceeds maximum value');\n }\n\n // Process output amounts\n let userOutput, noUserOutput;\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n if (output.value.toString() === amount.toString()) {\n userOutput = output;\n } else {\n noUserOutput = output;\n }\n if (!output.address) {\n output.address = withdrawChangeAddress;\n }\n }\n\n userOutput.value = new Big(userOutput.value).minus(newFee).minus(withdrawFee).toNumber();\n\n if (noUserOutput) {\n noUserOutput.value = new Big(noUserOutput.value).plus(newFee).plus(withdrawFee).toNumber();\n } else {\n noUserOutput = {\n address: withdrawChangeAddress,\n value: new Big(newFee).plus(withdrawFee).toNumber(),\n };\n outputs.push(noUserOutput);\n }\n\n // Validate outputs\n const insufficientOutput = outputs.some((item: any) => item.value < 0);\n if (insufficientOutput) {\n throw new Error('Not enough gas');\n }\n\n // Verify input/output balance\n const inputSum = inputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n const outputSum = outputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n\n if (newFee + outputSum !== inputSum) {\n throw new Error('compute error');\n }\n\n // Build PSBT transaction\n const network = await getNetwork();\n const btcNetwork = network === 'mainnet' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet;\n const psbt = new bitcoin.Psbt({ network: btcNetwork });\n\n // Add inputs\n const btcRpcUrl = await getBtcRpcUrl();\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n const txData = await fetch(`${btcRpcUrl}/tx/${input.txid}`).then((res) => res.json());\n\n const inputOptions = {\n hash: input.txid,\n index: input.vout,\n sequence: 0xfffffffd,\n witnessUtxo: {\n script: Buffer.from(txData.vout[input.vout].scriptpubkey, 'hex'),\n value: input.value,\n },\n };\n\n psbt.addInput(inputOptions);\n }\n\n // Add outputs\n outputs.forEach((output: { address: string; value: any }) => {\n psbt.addOutput({\n address: output.address,\n value: output.value,\n });\n });\n\n // Build contract call message\n const _inputs = inputs.map((item: any) => {\n return `${item.txid}:${item.vout}`;\n });\n\n const txOutputs = psbt.txOutputs.map((item: any) => {\n return {\n script_pubkey: uint8ArrayToHex(item.script),\n value: item.value,\n };\n });\n\n const msg = {\n Withdraw: {\n target_btc_address: btcAddress,\n input: _inputs,\n output: txOutputs,\n },\n };\n const csna = await getCsnaAccountId(env);\n // Finally return the transaction object\n const transaction: Transaction = {\n receiverId: config.token,\n signerId: csna,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.bridgeContractId,\n amount: amount.toString(),\n msg: JSON.stringify(msg),\n },\n gas: '300000000000000', // 300 TGas\n deposit: '1', // 1 yoctoNEAR\n },\n },\n ],\n };\n return transaction;\n}\n\n// Helper function\nfunction uint8ArrayToHex(uint8Array: Uint8Array): string {\n return Array.from(uint8Array)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n}\n", "interface RequestOptions<T> extends RequestInit {\n body?: RequestInit['body'] | any;\n retryCount?: number;\n timeout?: number;\n cacheTimeout?: number;\n pollingInterval?: number;\n maxPollingAttempts?: number;\n shouldStopPolling?: (response: T) => boolean;\n}\n\nconst cache = new Map<string, { timestamp: number; data: any }>();\n\nconst defaultCacheTimeout = 3000;\n\nexport default async function request<T>(url: string, options?: RequestOptions<T>): Promise<T> {\n const defaultHeaders = {\n 'Content-Type': 'application/json',\n };\n\n const cacheTimeout = options?.cacheTimeout || defaultCacheTimeout;\n\n const headers = {\n ...defaultHeaders,\n ...options?.headers,\n };\n\n let body = options?.body;\n if (headers['Content-Type'] === 'application/json' && body && typeof body !== 'string') {\n body = JSON.stringify(body);\n }\n\n const method = options?.method || 'GET';\n const cacheKey = method.toUpperCase() === 'GET' ? url : null;\n\n if (cacheKey) {\n const cached = cache.get(cacheKey);\n const isCacheValid = cached && Date.now() - cached.timestamp < cacheTimeout;\n if (isCacheValid) {\n return Promise.resolve(cached.data as T);\n }\n }\n\n const newOptions: RequestInit = {\n ...options,\n headers,\n body,\n method,\n };\n\n const retryCount = options?.retryCount ?? 1;\n\n const controller = new AbortController();\n const timeout = options?.timeout || 20000;\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { ...newOptions, signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n\n if (!res.ok) throw new Error(res.statusText);\n const data = await res.json();\n\n if (options?.shouldStopPolling) {\n if (options.shouldStopPolling(data)) {\n return data as T;\n }\n if (options.maxPollingAttempts && options.maxPollingAttempts > 0) {\n await new Promise((resolve) => setTimeout(resolve, options.pollingInterval));\n return request(url, {\n ...options,\n maxPollingAttempts: options.maxPollingAttempts - 1,\n });\n }\n throw new Error('Polling failed: maximum attempts reached without meeting the condition');\n }\n\n if (cacheKey) {\n cache.set(cacheKey, { timestamp: Date.now(), data });\n setTimeout(() => {\n cache.delete(cacheKey);\n }, cacheTimeout);\n }\n\n return data as T;\n } catch (err) {\n if (retryCount > 0) {\n console.log(`Retrying... attempts left: ${retryCount}`);\n return request(url, { ...options, retryCount: retryCount - 1 });\n } else if (options?.pollingInterval && options?.maxPollingAttempts) {\n if (options.maxPollingAttempts > 0) {\n console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);\n await new Promise((resolve) => setTimeout(resolve, options.pollingInterval));\n return request(url, {\n ...options,\n maxPollingAttempts: options.maxPollingAttempts - 1,\n retryCount: retryCount,\n });\n }\n }\n throw err;\n }\n}\n", "import { toHex } from '.';\nimport request from './request';\n\ninterface RequestResult<T> {\n result_code: number;\n result_message: string;\n result_data: T;\n}\n\nexport async function getNonce(url: string, accountId: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<string>>(\n `${url}/v1/nonce?csna=${accountId}`,\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function getNearNonce(url: string, accountId: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<string>>(\n `${url}/v1/nonceNear?csna=${accountId}`,\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function receiveTransaction(url: string, data: any) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveTransaction`,\n {\n method: 'POST',\n body: data,\n },\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\ninterface ReceiveDepositMsgParams {\n btcPublicKey: string;\n txHash: string;\n depositType?: number;\n postActions?: string;\n extraMsg?: string;\n}\n\nexport async function preReceiveDepositMsg(\n url: string,\n { btcPublicKey, depositType = 1, postActions, extraMsg }: Omit<ReceiveDepositMsgParams, 'txHash'>,\n) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/preReceiveDepositMsg`,\n {\n method: 'POST',\n body: { btcPublicKey, depositType, postActions, extraMsg },\n },\n );\n console.log('preReceiveDepositMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function receiveDepositMsg(\n url: string,\n { btcPublicKey, txHash, depositType = 1, postActions, extraMsg }: ReceiveDepositMsgParams,\n) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveDepositMsg`,\n {\n method: 'POST',\n body: { btcPublicKey, txHash, depositType, postActions, extraMsg },\n },\n );\n console.log('receiveDepositMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function checkBridgeTransactionStatus(url: string, txHash: string) {\n const { result_code, result_message, result_data } = await request<\n RequestResult<{ Status: number; ToTxHash: string }>\n >(`${url}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`, {\n timeout: 300000,\n pollingInterval: 5000,\n maxPollingAttempts: 60,\n shouldStopPolling: (res) =>\n res.result_code === 0 && [4, 102].includes(res.result_data?.Status || 0),\n });\n console.log('checkTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 4) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function checkBtcTransactionStatus(url: string, sig: string) {\n const { result_code, result_message, result_data } = await request<\n RequestResult<{ Status: number; NearHashList: string[] }>\n >(`${url}/v1/btcTx?sig=${toHex(sig)}`, {\n timeout: 300000,\n pollingInterval: 5000,\n maxPollingAttempts: 60,\n shouldStopPolling: (res) =>\n res.result_code === 0 && [3, 101, 102].includes(res.result_data?.Status || 0),\n });\n console.log('checkBtcTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 3) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function getWhitelist(url: string) {\n const data = await request<string[]>(`${url}/v1/whitelist/users`).catch((error) => {\n console.error('getWhitelist error:', error);\n return [] as string[];\n });\n return data;\n}\n\nexport async function receiveWithdrawMsg(url: string, txHash: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveWithdrawMsg`,\n {\n method: 'POST',\n body: { txHash },\n },\n );\n console.log('receiveWithdrawMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n", "interface DialogOptions {\n title: string;\n message: string;\n dangerouslyUseHTML?: boolean;\n closable?: boolean;\n}\n\nexport class Dialog {\n private static template = `\n <div class=\"dialog-overlay\">\n <div class=\"dialog-container\">\n <div class=\"dialog-content\">\n <div class=\"dialog-title\"></div>\n <div class=\"dialog-message\"></div>\n <div class=\"dialog-buttons\">\n <button class=\"dialog-cancel-btn\">Cancel</button>\n <button class=\"dialog-confirm-btn\">OK</button>\n </div>\n </div>\n </div>\n </div>\n `;\n\n private static style = `\n .dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.75);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 999999;\n backdrop-filter: blur(4px);\n }\n .dialog-container {\n background: #21232f;\n border-radius: 12px;\n padding: 24px;\n width: 350px;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);\n }\n .dialog-title {\n font-size: 18px;\n font-weight: 600;\n margin-bottom: 16px;\n color: #ffffff;\n }\n .dialog-message {\n margin-bottom: 24px;\n line-height: 1.6;\n color: rgba(255, 255, 255, 0.8);\n font-size: 14px;\n }\n .dialog-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n }\n .dialog-alert .dialog-buttons {\n justify-content: center;\n }\n .dialog-confirm-btn {\n padding: 8px 24px;\n background-color: #ff7a00;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s ease;\n }\n .dialog-confirm-btn:hover {\n background-color: #ff8f1f;\n transform: translateY(-1px);\n }\n .dialog-confirm-btn:active {\n transform: translateY(0);\n }\n .dialog-cancel-btn {\n padding: 8px 24px;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s ease;\n }\n .dialog-cancel-btn:hover {\n background-color: rgba(255, 255, 255, 0.15);\n transform: translateY(-1px);\n }\n .dialog-cancel-btn:active {\n transform: translateY(0);\n }\n \n .dialog-overlay {\n animation: fadeIn 0.2s ease;\n }\n .dialog-container {\n animation: slideIn 0.2s ease;\n }\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n `;\n\n private static injectStyles() {\n if (!document.querySelector('#dialog-styles')) {\n const styleSheet = document.createElement('style');\n styleSheet.id = 'dialog-styles';\n styleSheet.textContent = this.style;\n document.head.appendChild(styleSheet);\n }\n }\n\n static confirm(options: { title?: string; message: string }): Promise<boolean> {\n return new Promise((resolve) => {\n this.injectStyles();\n\n const container = document.createElement('div');\n container.innerHTML = this.template;\n document.body.appendChild(container);\n\n const titleEl = container.querySelector('.dialog-title') as HTMLElement;\n const messageEl = container.querySelector('.dialog-message') as HTMLElement;\n const confirmBtn = container.querySelector('.dialog-confirm-btn') as HTMLElement;\n const cancelBtn = container.querySelector('.dialog-cancel-btn') as HTMLElement;\n\n if (options.title) {\n titleEl.textContent = options.title;\n } else {\n titleEl.style.display = 'none';\n }\n messageEl.textContent = options.message;\n\n const cleanup = () => {\n document.body.removeChild(container);\n };\n\n confirmBtn.addEventListener('click', () => {\n cleanup();\n resolve(true);\n });\n\n cancelBtn.addEventListener('click', () => {\n cleanup();\n resolve(false);\n });\n });\n }\n\n static alert(options: DialogOptions) {\n const messageEl = options.dangerouslyUseHTML\n ? { dangerouslySetInnerHTML: { __html: options.message } }\n : { children: options.message };\n\n return new Promise<void>((resolve) => {\n this.injectStyles();\n\n const container = document.createElement('div');\n container.innerHTML = this.template;\n container.querySelector('.dialog-overlay')?.classList.add('dialog-alert');\n\n if (options.closable === false) {\n const overlay = container.querySelector('.dialog-overlay') as HTMLElement;\n overlay.style.pointerEvents = 'none';\n const dialogContainer = container.querySelector('.dialog-container') as HTMLElement;\n dialogContainer.style.pointerEvents = 'auto';\n }\n\n document.body.appendChild(container);\n\n const titleEl = container.querySelector('.dialog-title') as HTMLElement;\n const messageEl = container.querySelector('.dialog-message') as HTMLElement;\n const confirmBtn = container.querySelector('.dialog-confirm-btn') as HTMLElement;\n const cancelBtn = container.querySelector('.dialog-cancel-btn') as HTMLElement;\n\n if (options.title) {\n titleEl.textContent = options.title;\n } else {\n titleEl.style.display = 'none';\n }\n messageEl.innerHTML = options.message;\n cancelBtn.style.display = 'none';\n\n if (options.closable === false) {\n confirmBtn.style.display = 'none';\n }\n\n const cleanup = () => {\n if (options.closable === false) {\n return;\n }\n document.body.removeChild(container);\n };\n\n confirmBtn.addEventListener('click', () => {\n cleanup();\n resolve();\n });\n });\n }\n}\n"],
|
5
|
-
"mappings": "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",
|
6
|
-
"names": ["EventEmitter", "import_events", "_network", "_event", "EventEmitter", "import_chains", "import_react", "import_react", "getNetwork", "sendBitcoin", "import_react", "import_react", "import_events", "chainId", "digest", "classes", "css", "import_jsx_runtime", "import_react", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "import_chains", "import_react", "import_viem", "import_util", "bitcore", "import_react", "digest", "classes", "css", "import_jsx_runtime", "import_react", "import_viem", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "import_util", "import_chains", "import_events", "import_viem", "import_react", "import_jsx_runtime", "_a", "sendBitcoin", "options", "getNetwork", "smartAccount", "connector", "accounts", "_b", "import_react", "import_jsx_runtime", "Modal", "import_jsx_runtime", "Modal", "import_jsx_runtime", "React", "sendBitcoin", "getNetwork", "import_near_api_js", "import_utils", "_a", "result", "import_big", "
|
3
|
+
"sources": ["../src/index.ts", "../src/connector/base.ts", "../src/utils/index.ts", "../src/utils/Dialog.ts", "../src/connector/universalLink.ts", "../src/connector/injected.ts", "../src/connector/bitget.ts", "../src/connector/bybit.ts", "../src/connector/okx.ts", "../src/connector/tokenPocket.ts", "../src/connector/unisat.ts", "../src/connector/wizz.ts", "../src/connector/xverse.ts", "../src/connector/magicEden.ts", "../src/connector/binance.ts", "../src/context/index.tsx", "../src/components/connectModal/index.tsx", "../src/hooks/useAccountContract.ts", "../src/hooks/useAccounts.ts", "../src/hooks/useBTCProvider.ts", "../src/hooks/useConnectModal.ts", "../src/hooks/useConnector.ts", "../src/hooks/useETHProvider.ts", "../src/evmSigner/provider.ts", "../src/utils/eventUtils.ts", "../src/utils/txConfirmUtils.ts", "../src/evmSigner/walletClientProvider.ts", "esbuild-scss-modules-plugin:./spinner.module.scss", "../src/components/spinner/index.tsx", "esbuild-scss-modules-plugin:./button.module.scss", "../src/components/button/index.tsx", "../src/components/modal/index.tsx", "esbuild-scss-modules-plugin:./modal.module.scss", "esbuild-scss-modules-plugin:./connect.module.scss", "../src/components/signModal/index.tsx", "../src/utils/ethereumUtils.ts", "../src/components/copyText/index.tsx", "esbuild-scss-modules-plugin:./copyText.module.scss", "../src/components/transactionDetails/index.tsx", "esbuild-scss-modules-plugin:./tooltip.module.scss", "../src/components/tooltip/index.tsx", "esbuild-scss-modules-plugin:./transactionDetails.module.scss", "esbuild-scss-modules-plugin:./sign.module.scss", "../src/evmSigner/index.ts", "../src/hooks/useModalStateValue.ts", "../src/core/btcWalletSelectorContext.tsx", "../src/components/confirmBox/Modal.tsx", "../src/components/confirmBox/index.tsx", "../src/core/setupBTCWallet.ts", "../src/config.ts", "../src/utils/initWalletButton.ts", "../src/utils/nearUtils.ts", "../src/core/btcUtils.ts", "../src/utils/request.ts", "../src/utils/satoshi.ts"],
|
4
|
+
"sourcesContent": ["export * from './connector';\nexport { ConnectProvider } from './context';\nexport * from './hooks';\nexport * from './core/btcWalletSelectorContext';\nexport * from './core/setupBTCWallet';\nexport * from './core/btcUtils';\nexport const getVersion = () => {\n return '0.4.8-beta';\n};\n\nif (typeof window !== 'undefined') {\n (window as any).__BTC_WALLET_VERSION = getVersion();\n}\n", "export interface WalletMetadata {\n id: string;\n name: string;\n icon: string;\n downloadUrl: string;\n}\n\nexport abstract class BaseConnector {\n abstract readonly metadata: WalletMetadata;\n abstract isReady(): boolean;\n abstract requestAccounts(): Promise<string[]>;\n abstract getAccounts(): Promise<string[]>;\n abstract getPublicKey(): Promise<string>;\n abstract signMessage(signStr: string, type?: 'ecdsa' | 'bip322-simple'): Promise<string>;\n abstract on(event: string, handler: (data?: any) => void): void;\n abstract removeListener(event: string, handler: (data?: any) => void): void;\n [key: string]: any;\n abstract getProvider(): any;\n abstract getNetwork(): Promise<'livenet' | 'testnet'>;\n abstract switchNetwork(network: 'livenet' | 'testnet'): Promise<void>;\n abstract sendBitcoin(\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ): Promise<string>;\n abstract sendInscription(\n address: string,\n inscriptionId: string,\n options?: { feeRate: number },\n ): Promise<{ txid: string }>;\n abstract disconnect(): void;\n}\n", "import type { AAOptions } from '@particle-network/aa';\n\nexport function shortString(str: any): string {\n if (Array.isArray(str)) {\n str = '[' + str.toString() + ']';\n }\n if (str) {\n if (typeof str.toString === 'function') {\n str = str.toString();\n }\n if (str.length <= 10) {\n return str;\n }\n return `${str.slice(0, 5)}...${str.slice(str.length - 5, str.length)}`;\n }\n return '';\n}\n\nexport async function copyToClipboard(text: string) {\n const clipboardCopy = async () => {\n if (navigator.clipboard) {\n return navigator.clipboard.writeText(text);\n } else {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.setAttribute('readonly', '');\n textarea.style.position = 'absolute';\n textarea.style.left = '-9999px';\n document.body.appendChild(textarea);\n\n textarea.select();\n const result = document.execCommand('copy');\n\n document.body.removeChild(textarea);\n\n if (!result) {\n throw new Error('Copy to clipboard failed');\n }\n }\n };\n\n return new Promise((resolve, reject) => {\n clipboardCopy().then(resolve).catch(reject);\n });\n}\n\nexport const defaultTokenIcon =\n 'https://static.particle.network/token-list/defaultToken/default.png';\n\nexport const ipfsToSrc = (ipfs: string) => {\n if (!ipfs || !ipfs.startsWith('ipfs://')) {\n return ipfs || '';\n }\n\n return `https://ipfs.particle.network/${encodeURI(ipfs.slice(7))}`;\n};\n\nexport const checkBTCVersion = (\n accountContracts: AAOptions['accountContracts'],\n accountContractKey: string,\n version: string,\n) => {\n if (!accountContracts[accountContractKey]) {\n return false;\n }\n return accountContracts[accountContractKey].some((item) => item.version === version);\n};\n\nexport const delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nexport async function retryOperation<T>(\n operation: () => Promise<T> | T,\n shouldStop: (result: T) => boolean,\n {\n maxRetries = 3,\n delayMs = 1000,\n }: {\n maxRetries?: number;\n delayMs?: number;\n } = {},\n): Promise<T> {\n let retries = 0;\n\n while (retries <= maxRetries) {\n const result = await operation();\n if (shouldStop(result)) {\n return result;\n }\n if (retries === maxRetries) {\n console.warn('Max retries reached');\n return result;\n }\n retries++;\n await delay(delayMs);\n }\n throw new Error('Unexpected execution path');\n}\n\nexport function toHex(originalString: string) {\n const charArray = originalString.split('');\n const asciiArray = charArray.map((char) => char.charCodeAt(0));\n const hexArray = asciiArray.map((code) => code.toString(16));\n let hexString = hexArray.join('');\n hexString = hexString.replace(/(^0+)/g, '');\n return hexString;\n}\n\nexport function isMobile(): boolean {\n if (typeof window !== 'undefined') {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator?.userAgent,\n );\n }\n return false;\n}\n", "interface DialogOptions {\n title: string;\n message: string;\n dangerouslyUseHTML?: boolean;\n closable?: boolean;\n}\n\nexport class Dialog {\n private static template = `\n <div class=\"dialog-overlay\">\n <div class=\"dialog-container\">\n <div class=\"dialog-content\">\n <div class=\"dialog-title\"></div>\n <div class=\"dialog-message\"></div>\n <div class=\"dialog-buttons\">\n <button class=\"dialog-cancel-btn\">Cancel</button>\n <button class=\"dialog-confirm-btn\">OK</button>\n </div>\n </div>\n </div>\n </div>\n `;\n\n private static style = `\n .dialog-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.75);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 999999;\n backdrop-filter: blur(4px);\n }\n .dialog-container {\n background: #21232f;\n border-radius: 12px;\n padding: 24px;\n width: 350px;\n box-shadow: 0 4px 24px rgba(0, 0, 0, 0.3);\n }\n .dialog-title {\n font-size: 18px;\n font-weight: 600;\n margin-bottom: 16px;\n color: #ffffff;\n }\n .dialog-message {\n margin-bottom: 24px;\n line-height: 1.6;\n color: rgba(255, 255, 255, 0.8);\n font-size: 14px;\n }\n .dialog-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 12px;\n }\n .dialog-alert .dialog-buttons {\n justify-content: center;\n }\n .dialog-confirm-btn {\n padding: 8px 24px;\n background-color: #ff7a00;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s ease;\n }\n .dialog-confirm-btn:hover {\n background-color: #ff8f1f;\n transform: translateY(-1px);\n }\n .dialog-confirm-btn:active {\n transform: translateY(0);\n }\n .dialog-cancel-btn {\n padding: 8px 24px;\n background-color: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n border: none;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n font-weight: 500;\n transition: all 0.2s ease;\n }\n .dialog-cancel-btn:hover {\n background-color: rgba(255, 255, 255, 0.15);\n transform: translateY(-1px);\n }\n .dialog-cancel-btn:active {\n transform: translateY(0);\n }\n \n .dialog-overlay {\n animation: fadeIn 0.2s ease;\n }\n .dialog-container {\n animation: slideIn 0.2s ease;\n }\n @keyframes fadeIn {\n from {\n opacity: 0;\n }\n to {\n opacity: 1;\n }\n }\n @keyframes slideIn {\n from {\n transform: translateY(-20px);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n `;\n\n private static injectStyles() {\n if (!document.querySelector('#dialog-styles')) {\n const styleSheet = document.createElement('style');\n styleSheet.id = 'dialog-styles';\n styleSheet.textContent = this.style;\n document.head.appendChild(styleSheet);\n }\n }\n\n static confirm(options: { title?: string; message: string }): Promise<boolean> {\n return new Promise((resolve) => {\n this.injectStyles();\n\n const container = document.createElement('div');\n container.innerHTML = this.template;\n document.body.appendChild(container);\n\n const titleEl = container.querySelector('.dialog-title') as HTMLElement;\n const messageEl = container.querySelector('.dialog-message') as HTMLElement;\n const confirmBtn = container.querySelector('.dialog-confirm-btn') as HTMLElement;\n const cancelBtn = container.querySelector('.dialog-cancel-btn') as HTMLElement;\n\n if (options.title) {\n titleEl.textContent = options.title;\n } else {\n titleEl.style.display = 'none';\n }\n messageEl.textContent = options.message;\n\n const cleanup = () => {\n document.body.removeChild(container);\n };\n\n confirmBtn.addEventListener('click', () => {\n cleanup();\n resolve(true);\n });\n\n cancelBtn.addEventListener('click', () => {\n cleanup();\n resolve(false);\n });\n });\n }\n\n static alert(options: DialogOptions) {\n const messageEl = options.dangerouslyUseHTML\n ? { dangerouslySetInnerHTML: { __html: options.message } }\n : { children: options.message };\n\n return new Promise<void>((resolve) => {\n this.injectStyles();\n\n const container = document.createElement('div');\n container.innerHTML = this.template;\n container.querySelector('.dialog-overlay')?.classList.add('dialog-alert');\n\n if (options.closable === false) {\n const overlay = container.querySelector('.dialog-overlay') as HTMLElement;\n overlay.style.pointerEvents = 'none';\n const dialogContainer = container.querySelector('.dialog-container') as HTMLElement;\n dialogContainer.style.pointerEvents = 'auto';\n }\n\n document.body.appendChild(container);\n\n const titleEl = container.querySelector('.dialog-title') as HTMLElement;\n const messageEl = container.querySelector('.dialog-message') as HTMLElement;\n const confirmBtn = container.querySelector('.dialog-confirm-btn') as HTMLElement;\n const cancelBtn = container.querySelector('.dialog-cancel-btn') as HTMLElement;\n\n if (options.title) {\n titleEl.textContent = options.title;\n } else {\n titleEl.style.display = 'none';\n }\n messageEl.innerHTML = options.message;\n cancelBtn.style.display = 'none';\n\n if (options.closable === false) {\n confirmBtn.style.display = 'none';\n }\n\n const cleanup = () => {\n if (options.closable === false) {\n return;\n }\n document.body.removeChild(container);\n };\n\n confirmBtn.addEventListener('click', () => {\n cleanup();\n resolve();\n });\n });\n }\n}\n", "import { isMobile } from '../utils';\nimport { Dialog } from '../utils/Dialog';\n\nexport interface WalletConnectHelper {\n getUniversalLink(url: string): string;\n isWalletInstalled(): boolean;\n}\n\nexport class MobileWalletConnect {\n static getUniversalLink(walletId: string, url: string): string {\n switch (walletId) {\n case 'okx':\n return `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(url)}`;\n case 'bitget':\n return `https://bkcode.vip?action=dapp&url=${encodeURIComponent(url)}`;\n case 'xverse':\n return `xverse://browser?url=${encodeURIComponent(url)}`;\n default:\n return '';\n }\n }\n\n static async redirectToWallet(walletId: string) {\n if (isMobile()) {\n const currentUrl = window.location.href;\n const universalLink = this.getUniversalLink(walletId, currentUrl);\n if (!universalLink) {\n try {\n await navigator.clipboard?.writeText(currentUrl);\n } catch (error) {\n console.error(error);\n }\n\n await Dialog.alert({\n title: 'Open in Wallet Browser',\n message: `\n <div style=\"display: flex; flex-direction: column; gap: 12px;\">\n <p>Please follow these steps:</p>\n <p>1. Open ${walletId} wallet app</p>\n <p>2. Find the browser feature in the wallet</p>\n <p>3. Paste the URL (already copied to clipboard)</p>\n </div>\n `,\n dangerouslyUseHTML: true,\n });\n return false;\n }\n window.location.href = universalLink;\n return true;\n }\n return false;\n }\n}\n", "import { isMobile } from '../utils';\nimport { BaseConnector } from './base';\nimport { MobileWalletConnect } from './universalLink';\n\nexport abstract class InjectedConnector extends BaseConnector {\n constructor(private propertity: string) {\n super();\n const props = this.propertity?.split('.');\n if (!this.propertity || props.length > 2) {\n throw new Error('please input valid propertity');\n }\n }\n isReady(): boolean {\n if (typeof window !== 'undefined') {\n const props = this.propertity.split('.');\n if (props.length === 1) {\n if (typeof (window as any)[props[0]] !== 'undefined') {\n return true;\n }\n } else {\n if (\n typeof (window as any)[props[0]] !== 'undefined' &&\n typeof (window as any)[props[0]][props[1]] !== 'undefined'\n ) {\n return true;\n }\n }\n if (isMobile()) {\n return true;\n }\n }\n return false;\n }\n\n async requestAccounts(): Promise<string[]> {\n if (isMobile() && !this.getProvider()) {\n MobileWalletConnect.redirectToWallet(this.metadata.id);\n return [];\n }\n\n const accounts = await this.getProviderOrThrow().requestAccounts();\n console.log('network:', await this.getNetwork());\n console.log('\uD83D\uDE80 ~ InjectedConnector ~ requestAccounts ~ accounts:', accounts);\n return accounts;\n }\n\n private getUniversalLink(url: string): string {\n url = 'https://www.deltatrade.ai/';\n console.log(this.metadata.id);\n switch (this.metadata.id) {\n case 'unisat':\n return `unisat://dapp?url=${encodeURIComponent(url)}`;\n case 'okx':\n return `okx://wallet/dapp/url?dappUrl=${encodeURIComponent(url)}`;\n case 'bitget':\n return `https://bkcode.vip?action=dapp&url=${encodeURIComponent(url)}`;\n case 'binance':\n return `binance://dapp?url=${encodeURIComponent(url)}`;\n case 'xverse':\n return `https://connect.xverse.app/browser?url=${encodeURIComponent(url)}`;\n default:\n return url;\n }\n }\n\n async getAccounts(): Promise<string[]> {\n const accounts = await this.getProviderOrThrow().getAccounts();\n return accounts;\n }\n async getPublicKey(): Promise<string> {\n return this.getProviderOrThrow().getPublicKey();\n }\n async signMessage(signStr: string, type?: 'ecdsa' | 'bip322-simple'): Promise<string> {\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n return this.getProviderOrThrow().signMessage(signStr, type);\n }\n on(event: string, handler: (data?: unknown) => void) {\n const provider = this.getProvider();\n return provider?.on?.(event, handler);\n }\n removeListener(event: string, handler: (data?: unknown) => void) {\n const provider = this.getProvider();\n return provider?.removeListener?.(event, handler);\n }\n\n getProvider() {\n if (this.isReady()) {\n const props = this.propertity.split('.');\n if (props.length === 1) {\n return (window as any)[props[0]];\n } else {\n return (window as any)[props[0]][props[1]];\n }\n }\n }\n\n getProviderOrThrow() {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install or not create Bitcoin wallet!`);\n }\n return provider;\n }\n\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n return this.getProviderOrThrow().getNetwork();\n }\n async switchNetwork(network: 'livenet' | 'testnet'): Promise<void> {\n return this.getProviderOrThrow().switchNetwork(network);\n }\n\n async sendBitcoin(\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ): Promise<string> {\n return this.getProviderOrThrow().sendBitcoin(toAddress, satoshis, options);\n }\n\n async sendInscription(\n address: string,\n inscriptionId: string,\n options?: { feeRate: number },\n ): Promise<{ txid: string }> {\n const result = await this.getProviderOrThrow().sendInscription(address, inscriptionId, options);\n if (typeof result === 'string') {\n return {\n txid: result,\n };\n }\n\n return result;\n }\n\n disconnect() {}\n}\n", "import icon from '../icons/bitget.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class BitgetConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'bitget',\n name: 'Bitget Wallet',\n icon,\n downloadUrl: 'https://web3.bitget.com/en/wallet-download',\n };\n\n constructor() {\n super('bitkeep.unisat');\n }\n}\n", "import icon from '../icons/bybit.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class BybitConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'bybit',\n name: 'Bybit Wallet',\n icon,\n downloadUrl: 'https://www.bybit.com/download/',\n };\n\n constructor() {\n super('bybitWallet.bitcoin');\n }\n}\n", "import icon from '../icons/okx.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class OKXConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'okx',\n name: 'OKX Wallet',\n icon,\n downloadUrl: 'https://www.okx.com/download',\n };\n constructor() {\n super('okxwallet.bitcoin');\n }\n}\n", "import icon from '../icons/tokenpocket.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class TokenPocketConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'tokenpocket',\n name: 'TokenPocket',\n icon,\n downloadUrl: 'https://www.tokenpocket.pro/en/download/app',\n };\n\n constructor() {\n super('tokenpocket.bitcoin');\n }\n}\n", "import icon from '../icons/unisat.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class UnisatConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'unisat',\n name: 'Unisat Wallet',\n icon,\n downloadUrl: 'https://unisat.io',\n };\n\n constructor() {\n super('unisat');\n }\n}\n", "import icon from '../icons/wizz.svg';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class WizzConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'wizz',\n name: 'Wizz Wallet',\n icon,\n downloadUrl: 'https://wizzwallet.io',\n };\n\n constructor() {\n super('wizz');\n }\n}\n", "import EventEmitter from 'events';\nimport type {\n Address,\n GetAddressOptions,\n SendBtcTransactionOptions,\n SignMessageOptions,\n} from 'sats-connect';\nimport icon from '../icons/xverse.png';\nimport { BaseConnector, type WalletMetadata } from './base';\nimport { MobileWalletConnect } from './universalLink';\nimport { isMobile } from '../utils';\n\nexport class XverseConnector extends BaseConnector {\n #network = 'Mainnet';\n #event = new EventEmitter();\n constructor() {\n super();\n this.#event.setMaxListeners(100);\n }\n readonly metadata: WalletMetadata = {\n id: 'xverse',\n name: 'Xverse Wallet',\n icon,\n downloadUrl: 'https://www.xverse.app',\n };\n isReady(): boolean {\n if (typeof window !== 'undefined') {\n if (typeof window.BitcoinProvider !== 'undefined') return true;\n if (isMobile()) return true;\n }\n return false;\n }\n private loadAccounts = async (network: 'Mainnet' | 'Testnet') => {\n const { getAddress, AddressPurpose } = await import('sats-connect');\n const addresses = await new Promise<Address[]>((resolve, reject) => {\n const getAddressOptions: GetAddressOptions = {\n payload: {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n network: {\n type: network as any,\n },\n },\n onFinish: (response) => {\n resolve(response.addresses);\n },\n onCancel: () =>\n reject({\n code: 4001,\n message: 'User rejected the request.',\n }),\n };\n getAddress(getAddressOptions).catch((error) => reject(error));\n });\n localStorage.setItem('btc-connect-xverse-addresses-' + network, JSON.stringify(addresses));\n return addresses;\n };\n async sendInscription(): Promise<{ txid: string }> {\n throw new Error('Unsupported');\n }\n async requestAccounts(): Promise<string[]> {\n if (isMobile() && !this.getProvider()) {\n MobileWalletConnect.redirectToWallet(this.metadata.id);\n return [];\n }\n\n const addresses = await this.loadAccounts(this.#network as any);\n return addresses.map((item) => item.address);\n }\n async getAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses.map((item) => item.address);\n } else {\n return [];\n }\n }\n async getPublicKey(): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses[0].publicKey;\n } else {\n return '';\n }\n }\n async signMessage(signStr: string): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const { signMessage } = await import('sats-connect');\n\n const sig = await new Promise<string>((resolve, reject) => {\n const signMessageOptions: SignMessageOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n address: addresses[0],\n message: signStr,\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n signMessage(signMessageOptions).catch((e) => {\n reject(e);\n });\n });\n\n const modifiedSig = Buffer.from(sig, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n return modifiedSig.toString('base64');\n }\n on(event: string, handler: (data?: unknown) => void) {\n return this.#event.on(event, handler);\n }\n removeListener(event: string, handler: (data?: unknown) => void) {\n return this.#event.removeListener(event, handler);\n }\n getProvider() {\n if (this.isReady()) {\n return window.BitcoinProvider;\n }\n }\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return this.#network === 'Mainnet' ? 'livenet' : 'testnet';\n }\n async switchNetwork(): Promise<void> {\n throw new Error('Unsupported');\n }\n async sendBitcoin(toAddress: string, satoshis: number): Promise<string> {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const { result } = await provider.request('sendTransfer', {\n recipients: [{ address: toAddress, amount: satoshis }],\n });\n console.log('\uD83D\uDE80 ~ XverseConnector ~ sendBitcoin ~ res:', result);\n return result.txid;\n }\n disconnect(): void {\n localStorage.removeItem('btc-connect-xverse-addresses-Mainnet');\n localStorage.removeItem('btc-connect-xverse-addresses-Testnet');\n }\n}\n", "import EventEmitter from 'events';\nimport type {\n Address,\n GetAddressOptions,\n SendBtcTransactionOptions,\n SignMessageOptions,\n} from 'sats-connect';\nimport icon from '../icons/magicEden.png';\nimport { BaseConnector, type WalletMetadata } from './base';\n\nexport class MagicEdenConnector extends BaseConnector {\n #network = 'Mainnet';\n #event = new EventEmitter();\n\n constructor() {\n super();\n this.#event.setMaxListeners(100);\n }\n\n readonly metadata: WalletMetadata = {\n id: 'magicEden',\n name: 'Magic Eden Wallet',\n icon,\n downloadUrl: 'https://www.magiceden.io',\n };\n\n isReady(): boolean {\n return typeof window !== 'undefined' && 'magicEden' in window && !!window.magicEden;\n }\n\n private loadAccounts = async (network: 'Mainnet' | 'Testnet') => {\n const { getAddress, AddressPurpose } = await import('sats-connect');\n const addresses = await new Promise<Address[]>((resolve, reject) => {\n const getAddressOptions: GetAddressOptions = {\n payload: {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n network: {\n type: network as any,\n },\n },\n onFinish: (response) => {\n resolve(response.addresses);\n },\n onCancel: () =>\n reject({\n code: 4001,\n message: 'User rejected the request.',\n }),\n };\n getAddress(getAddressOptions).catch((error) => reject(error));\n });\n localStorage.setItem('btc-connect-magicEden-addresses-' + network, JSON.stringify(addresses));\n return addresses;\n };\n\n async sendInscription(): Promise<{ txid: string }> {\n throw new Error('Unsupported');\n }\n\n async requestAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.loadAccounts(this.#network as any);\n return addresses.map((item) => item.address);\n }\n\n async getAccounts(): Promise<string[]> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-magicEden-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses.map((item) => item.address);\n } else {\n return [];\n }\n }\n\n async getPublicKey(): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const data = localStorage.getItem('btc-connect-magicEden-addresses-' + this.#network);\n if (data) {\n const addresses: Address[] = JSON.parse(data);\n return addresses[0].publicKey;\n } else {\n return '';\n }\n }\n\n async signMessage(signStr: string): Promise<string> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const { signMessage } = await import('sats-connect');\n\n const sig = await new Promise<string>((resolve, reject) => {\n const signMessageOptions: SignMessageOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n address: addresses[0],\n message: signStr,\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n signMessage(signMessageOptions).catch((e) => {\n reject(e);\n });\n });\n\n const modifiedSig = Buffer.from(sig, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n return modifiedSig.toString('base64');\n }\n\n on(event: string, handler: (data?: unknown) => void) {\n return this.#event.on(event, handler);\n }\n\n removeListener(event: string, handler: (data?: unknown) => void) {\n return this.#event.removeListener(event, handler);\n }\n\n getProvider() {\n if (this.isReady()) {\n if ('magicEden' in window) {\n const anyWindow: any = window;\n if (anyWindow.magicEden.bitcoin && anyWindow.magicEden.bitcoin.isMagicEden)\n return anyWindow.magicEden.bitcoin;\n }\n }\n }\n\n async getNetwork(): Promise<'livenet' | 'testnet'> {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return this.#network === 'Mainnet' ? 'livenet' : 'testnet';\n }\n\n async switchNetwork(): Promise<void> {\n throw new Error('Unsupported');\n }\n\n async sendBitcoin(toAddress: string, satoshis: number): Promise<string> {\n const provider = this.getProvider();\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const { sendBtcTransaction } = await import('sats-connect');\n\n const addresses = await this.getAccounts();\n if (addresses.length === 0) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n const result = await new Promise<string>((resolve, reject) => {\n const sendBtcOptions: SendBtcTransactionOptions = {\n payload: {\n network: {\n type: this.#network as any,\n },\n recipients: [\n {\n address: toAddress,\n amountSats: BigInt(satoshis),\n },\n ],\n senderAddress: addresses[0],\n },\n onFinish: (response) => {\n resolve(response);\n },\n onCancel: () => {\n reject({\n code: 4001,\n message: 'User rejected the request.',\n });\n },\n };\n sendBtcTransaction(sendBtcOptions).catch((e) => reject(e));\n });\n return result;\n }\n\n disconnect(): void {\n localStorage.removeItem('btc-connect-magicEden-addresses-Mainnet');\n localStorage.removeItem('btc-connect-magicEden-addresses-Testnet');\n }\n}\n", "import icon from '../icons/binance.png';\nimport { type WalletMetadata } from './base';\nimport { InjectedConnector } from './injected';\n\nexport class BinanceConnector extends InjectedConnector {\n readonly metadata: WalletMetadata = {\n id: 'binance',\n name: 'Binance Wallet',\n icon,\n downloadUrl: 'https://www.binance.com/en/web3wallet',\n };\n constructor() {\n super('binancew3w.bitcoin');\n }\n}\n", "import { SmartAccount, type AAOptions, type AccountContract } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { walletEntryPlugin, type WalletOption } from '@particle-network/wallet';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState } from 'react';\nimport ConnectModal from '../components/connectModal';\nimport SignModal from '../components/signModal';\nimport { type BaseConnector } from '../connector/base';\nimport { AASignerProvider } from '../evmSigner';\nimport useModalStateValue from '../hooks/useModalStateValue';\nimport type { AccountInfo } from '../types/accountInfo';\nimport { EventName } from '../types/eventName';\nimport { checkBTCVersion } from '../utils';\n\nimport events from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\ninterface GlobalState {\n connectorId?: string;\n setConnectorId: (connectorId?: string) => void;\n connector?: BaseConnector;\n connectors: BaseConnector[];\n openConnectModal: () => void;\n closeConnectModal: () => void;\n accounts: string[];\n provider: any;\n disconnect: () => void;\n requestDirectAccount: (connector: BaseConnector) => any;\n getPublicKey: () => Promise<string>;\n signMessage: (message: string) => Promise<string>;\n evmAccount?: string;\n smartAccount?: SmartAccount;\n switchNetwork: (network: 'livenet' | 'testnet') => Promise<void>;\n getNetwork: () => Promise<'livenet' | 'testnet'>;\n sendBitcoin: (\n toAddress: string,\n satoshis: number,\n options?: { feeRate: number },\n ) => Promise<string>;\n accountContract: AccountContract;\n setAccountContract: (accountContract: AccountContract) => void;\n}\n\nconst ConnectContext = createContext<GlobalState>({} as any);\n\ninterface ConnectOptions {\n projectId: string;\n clientKey: string;\n appId: string;\n aaOptions: AAOptions;\n rpcUrls?: Record<number, string>;\n walletOptions?: Omit<WalletOption, 'erc4337' | 'customStyle'> & {\n customStyle?: Omit<WalletOption['customStyle'], 'supportChains'>;\n };\n}\n\nconst SAContractKey = 'particle-sa-config';\n\nexport const ConnectProvider = ({\n children,\n options,\n connectors,\n autoConnect = true,\n}: {\n children: React.ReactNode;\n options: ConnectOptions;\n connectors: BaseConnector[];\n autoConnect?: boolean;\n}) => {\n const {\n closeModal: closeConnectModal,\n isModalOpen: connectModalOpen,\n openModal: openConnectModal,\n } = useModalStateValue();\n\n const {\n closeModal: closeSignModal,\n isModalOpen: signModalOpen,\n openModal: openSignModal,\n } = useModalStateValue();\n\n const [connectorId, setConnectorId] = useState<string>();\n const [accounts, setAccounts] = useState<string[]>([]);\n const [evmAccount, setEVMAccount] = useState<string>();\n const [accountContract, _setAccountContract] = useState<AccountContract>({\n name: Object.keys(options.aaOptions.accountContracts)?.[0] || 'BTC',\n version:\n options.aaOptions.accountContracts[\n Object.keys(options.aaOptions.accountContracts)?.[0] || 'BTC'\n ]?.[0].version || '1.0.0',\n });\n\n const setAccountContract = useCallback(\n (config: AccountContract) => {\n if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {\n throw new Error('Invalid Account Contract');\n }\n localStorage.setItem(SAContractKey, JSON.stringify(config));\n _setAccountContract(config);\n },\n [options.aaOptions.accountContracts, _setAccountContract],\n );\n\n useEffect(() => {\n const id = localStorage.getItem('current-connector-id');\n if (id) {\n setConnectorId(id);\n }\n }, [autoConnect]);\n\n const evmSupportChainIds = useMemo(() => {\n let chainIds = options.aaOptions.accountContracts[accountContract.name]\n ?.filter((item) => item.version === accountContract.version)\n .map((item) => item.chainIds)\n .reduce((a, b) => {\n a.push(...b);\n return a;\n }, []);\n chainIds = Array.from(new Set(chainIds || []));\n return chainIds;\n }, [options.aaOptions.accountContracts, accountContract]);\n\n const connector = useMemo(() => {\n return connectors.find((item) => item.metadata.id === connectorId);\n }, [connectorId, connectors]);\n\n const getPublicKey = useCallback(async () => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const pubKey = await connector.getPublicKey();\n return pubKey;\n }, [connector]);\n\n const signMessage = useCallback(\n async (message: string) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const signature = await connector.signMessage(message);\n return signature;\n },\n [connector],\n );\n\n const sendBitcoin = useCallback(\n async (toAddress: string, satoshis: number, options?: { feeRate: number }) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n\n const signature = await connector.sendBitcoin(toAddress, satoshis, options);\n return signature;\n },\n [connector],\n );\n\n const getNetwork = useCallback(async () => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const network = await connector.getNetwork();\n return network;\n }, [connector]);\n\n const switchNetwork = useCallback(\n async (network: 'livenet' | 'testnet') => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n await connector.switchNetwork(network);\n },\n [connector],\n );\n\n const smartAccount = useMemo(() => {\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n if (\n !(window as any).__bitcoinSmartAccount ||\n ((window as any)?.__bitcoinSmartAccount &&\n ((window as any)?.__bitcoinSmartAccount.smartAccountContract.version !==\n accountContract.version ||\n (window as any)?.__bitcoinSmartAccount.smartAccountContract.name !==\n accountContract.name))\n ) {\n const smartAccount = new SmartAccount(\n new AASignerProvider(\n evmSupportChainIds,\n options.projectId,\n options.clientKey,\n options.rpcUrls,\n ) as any,\n options,\n );\n smartAccount.setSmartAccountContract(accountContract);\n (window as any).__bitcoinSmartAccount = smartAccount;\n }\n (window as any).__bitcoinSmartAccount.provider.getPublicKey = getPublicKey;\n (window as any).__bitcoinSmartAccount.provider.personalSign = signMessage;\n return (window as any).__bitcoinSmartAccount as SmartAccount;\n }, [options, evmSupportChainIds, getPublicKey, signMessage, accountContract]);\n\n const requestAccount = useCallback(\n async (connector: BaseConnector) => {\n let accounts = await connector.getAccounts();\n if (accounts.length === 0 && autoConnect) {\n accounts = await connector.requestAccounts();\n }\n setAccounts(accounts);\n },\n [autoConnect],\n );\n\n const requestDirectAccount = useCallback(async (connector: BaseConnector) => {\n let accounts = await connector.getAccounts();\n if (accounts.length === 0) {\n accounts = await connector.requestAccounts();\n }\n setAccounts(accounts);\n\n return accounts;\n }, []);\n\n useEffect(() => {\n if (connector) {\n requestAccount(connector).catch((e: any) => {\n console.error('get account error', e);\n\n setAccounts([]);\n });\n } else {\n setAccounts([]);\n }\n }, [connector, requestAccount]);\n\n useEffect(() => {\n const onAccountChange = (accounts: string[]) => {\n setAccounts(accounts);\n };\n connector?.on('accountsChanged', onAccountChange);\n return () => {\n connector?.removeListener('accountsChanged', onAccountChange);\n };\n }, [connector]);\n\n const provider = useMemo(() => {\n if (connectorId) {\n return connectors.find((item) => item.metadata.id === connectorId)?.getProvider();\n }\n }, [connectorId, connectors]);\n\n const disconnect = useCallback(() => {\n localStorage.removeItem('current-connector-id');\n txConfirm.reset();\n if (connector) {\n connector.disconnect();\n }\n setConnectorId(undefined);\n }, [connector]);\n\n useEffect(() => {\n const config = JSON.parse(localStorage.getItem(SAContractKey) || '{}');\n if (\n config.name &&\n config.version &&\n checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)\n ) {\n _setAccountContract(config);\n }\n }, [options.aaOptions.accountContracts, _setAccountContract]);\n\n useEffect(() => {\n if (options.walletOptions?.visible !== false) {\n const supportChains = evmSupportChainIds.map((id) => chains.getEVMChainInfoById(id));\n if (supportChains.some((chain) => !chain)) {\n throw new Error(`Please config valid chain ids, ${JSON.stringify(evmSupportChainIds)}`);\n }\n walletEntryPlugin.init(\n {\n projectId: options.projectId,\n clientKey: options.clientKey,\n appId: options.appId,\n },\n {\n ...options.walletOptions,\n erc4337: accountContract,\n customStyle: {\n ...options.walletOptions?.customStyle,\n supportChains: supportChains as any,\n },\n },\n );\n }\n }, [options, evmSupportChainIds, accountContract]);\n\n useEffect(() => {\n if (smartAccount && options.walletOptions?.visible !== false) {\n walletEntryPlugin.setWalletCore({\n ethereum: smartAccount.provider,\n });\n }\n }, [smartAccount, options]);\n\n useEffect(() => {\n if (options.walletOptions?.visible !== false) {\n if (evmAccount) {\n walletEntryPlugin.walletEntryCreate();\n } else {\n walletEntryPlugin.walletEntryDestroy();\n }\n }\n }, [evmAccount, smartAccount, options]);\n\n useEffect(() => {\n if (accounts.length === 0) {\n closeConnectModal();\n closeSignModal();\n if (events.listenerCount(EventName.sendUserOpResult) > 0) {\n events.emit(EventName.sendUserOpResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n } else if (events.listenerCount(EventName.personalSignResult) > 0) {\n events.emit(EventName.personalSignResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n } else if (events.listenerCount(EventName.signTypedDataResult) > 0) {\n events.emit(EventName.signTypedDataResult, {\n error: {\n code: -32600,\n message: 'Wallet disconnected',\n },\n });\n }\n }\n }, [accounts, closeConnectModal, closeSignModal]);\n\n return (\n <ConnectContext.Provider\n value={{\n connectorId,\n setConnectorId,\n connector,\n connectors,\n openConnectModal,\n closeConnectModal,\n accounts,\n provider,\n disconnect,\n requestDirectAccount,\n getPublicKey,\n signMessage,\n evmAccount,\n smartAccount,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n accountContract: accountContract,\n setAccountContract: setAccountContract,\n }}\n >\n {children}\n <ConnectModal open={connectModalOpen} onClose={closeConnectModal} />\n <SignModal open={signModalOpen} onClose={closeSignModal} onOpen={openSignModal} />\n </ConnectContext.Provider>\n );\n};\n\nexport const useConnectProvider = () => {\n const context = useContext(ConnectContext);\n return context;\n};\n", "import { useEffect, useState } from 'react';\nimport { type BaseConnector } from '../../connector/base';\nimport { useConnectProvider } from '../../context';\nimport { useConnector } from '../../hooks';\nimport back from '../../icons/back.svg';\nimport close from '../../icons/close.svg';\nimport retryIcon from '../../icons/retry.svg';\nimport Button from '../button';\nimport Modal from '../modal';\nimport styles from './connect.module.scss';\n\nconst ConnectModal = ({ open, onClose }: { open: boolean; onClose: () => void }) => {\n const [backVisible, setBackVisible] = useState(false);\n const [retryVisible, setRetryVisible] = useState(false);\n const [walletReady, setWalletReady] = useState(true);\n const [selectConnector, setSelectConnector] = useState<BaseConnector>();\n const { closeConnectModal } = useConnectProvider();\n const { connect, connectors } = useConnector();\n\n useEffect(() => {\n if (!open) {\n setBackVisible(false);\n setRetryVisible(false);\n setWalletReady(true);\n setSelectConnector(undefined);\n }\n }, [open]);\n\n const onConnect = async (connector: BaseConnector) => {\n setBackVisible(true);\n setSelectConnector(connector);\n if (connector.isReady()) {\n try {\n await connect(connector.metadata.id);\n closeConnectModal();\n } catch (error: any) {\n console.error('onConnect error', error);\n if (error.code === 4001) {\n setRetryVisible(true);\n }\n }\n } else {\n setWalletReady(false);\n }\n };\n\n const onBack = () => {\n setBackVisible(false);\n setRetryVisible(false);\n setWalletReady(true);\n setSelectConnector(undefined);\n };\n\n const onRetry = () => {\n setRetryVisible(false);\n if (selectConnector) {\n onConnect(selectConnector);\n }\n };\n\n return (\n <Modal open={open} onClose={onClose} isDismissable={false} contentClassName={styles.connectModal}>\n <div className={styles.title}>{selectConnector?.metadata.name || 'Choose Wallet'}</div>\n <img className={styles.closeBtn} src={close} onClick={onClose}></img>\n {backVisible && <img className={styles.backBtn} src={back} onClick={onBack}></img>}\n\n {!backVisible &&\n connectors.map((connector) => {\n return (\n <div className={styles.walletItem} key={connector.metadata.id} onClick={() => onConnect(connector)}>\n <img className={styles.walletIcon} src={connector.metadata.icon}></img>\n <div className={styles.walletName}>{connector.metadata.name}</div>\n </div>\n );\n })}\n\n {backVisible && selectConnector && (\n <div className={styles.connecting}>\n <div className={styles.connectingIconContainer}>\n <img className={styles.connectingIcon} src={selectConnector.metadata.icon}></img>\n {retryVisible && (\n <div className={styles.retryContainer} onClick={onRetry}>\n <img className={styles.retryIcon} src={retryIcon}></img>\n </div>\n )}\n </div>\n\n {walletReady ? (\n <>\n <div className={styles.connection}>{retryVisible ? 'Request Cancelled' : 'Requesting Connection'}</div>\n <div className={styles.acceptRequest}>\n {retryVisible\n ? 'You cancelled the request.\\nClick above to try again.'\n : 'Accept the request through your wallet to connect to this app.'}\n </div>\n </>\n ) : (\n <>\n <div className={styles.connection}>Wallet Not Installed.</div>\n <Button\n className={styles.btnDownload}\n onClick={() => {\n window.open(selectConnector?.metadata.downloadUrl, '_blank');\n }}\n >\n Get\n </Button>\n </>\n )}\n </div>\n )}\n </Modal>\n );\n};\n\nexport default ConnectModal;\n", "import { useConnectProvider } from '../context';\n\nexport const useAccountContract = () => {\n const { accountContract, setAccountContract } = useConnectProvider();\n return {\n accountContract,\n setAccountContract,\n };\n};\n", "import { useConnectProvider } from '../context';\n\nexport const useAccounts = () => {\n const { accounts } = useConnectProvider();\n return { accounts };\n};\n", "import { useCallback } from 'react';\nimport { useConnectProvider } from '../context';\n\nexport const useBTCProvider = () => {\n const {\n connector,\n provider,\n accounts,\n getPublicKey,\n signMessage,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n } = useConnectProvider();\n\n const sendInscription = useCallback(\n async (address: string, inscriptionId: string, options?: { feeRate: number }) => {\n if (!connector) {\n throw new Error('Wallet not connected!');\n }\n const result = await connector.sendInscription(address, inscriptionId, options);\n return result;\n },\n [connector],\n );\n\n return {\n provider,\n accounts,\n getPublicKey,\n signMessage,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n sendInscription,\n connector,\n };\n};\n", "import { useConnectProvider } from '../context';\n\nexport const useConnectModal = () => {\n const { openConnectModal, disconnect, requestDirectAccount } = useConnectProvider();\n return { openConnectModal, disconnect, requestDirectAccount };\n};\n", "import { useCallback } from 'react';\nimport { useConnectProvider } from '../context';\n\nexport const useConnector = () => {\n const { connectors, setConnectorId } = useConnectProvider();\n\n const connect = useCallback(\n async (connectorId: string) => {\n const connector = connectors.find((item) => item.metadata.id === connectorId);\n if (!connector) {\n throw new Error(`connector id ${connectorId} not found`);\n }\n const accounts = await connector.requestAccounts();\n if (accounts.length > 0) {\n localStorage.setItem('current-connector-id', connector.metadata.id);\n setConnectorId(connector.metadata.id);\n }\n },\n [connectors, setConnectorId],\n );\n\n return { connectors, connect };\n};\n", "import { intToHex } from '@ethereumjs/util';\nimport type {\n SendTransactionParams,\n Transaction,\n UserOpBundle,\n UserOpParams,\n} from '@particle-network/aa';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { createWalletClient, custom, type PublicClient } from 'viem';\nimport { useConnectProvider } from '../context';\nimport { EthereumProvider } from '../evmSigner/provider';\nimport { WalletClientProvider } from '../evmSigner/walletClientProvider';\nimport { EventName } from '../types/eventName';\nimport events, { getPendingSignEventAccount } from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\nexport const useETHProvider: any = () => {\n const { evmAccount, smartAccount } = useConnectProvider();\n const [chainId, setChainId] = useState<number>();\n\n useEffect(() => {\n if (smartAccount) {\n const chainId = (smartAccount.provider as any).chainId as number;\n setChainId(chainId);\n\n const onChangeChange = (id: string) => {\n setChainId(Number(id));\n };\n smartAccount.provider.on('chainChanged', onChangeChange);\n return () => {\n smartAccount.provider.removeListener('chainChanged', onChangeChange);\n };\n }\n }, [smartAccount]);\n\n const switchChain = useCallback(\n async (chainId: number) => {\n if (smartAccount?.provider) {\n await smartAccount.provider.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: intToHex(chainId),\n },\n ],\n });\n }\n },\n [smartAccount?.provider],\n );\n\n const getFeeQuotes = useCallback(\n async (tx: Transaction | Transaction[]) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n return smartAccount.getFeeQuotes(tx);\n },\n [smartAccount],\n );\n\n const buildUserOp = useCallback(\n async ({ tx, feeQuote, tokenPaymasterAddress }: UserOpParams) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n const result = await smartAccount.buildUserOperation({ tx, feeQuote, tokenPaymasterAddress });\n return result;\n },\n [smartAccount],\n );\n\n const sendUserOp = useCallback(\n async (params: SendTransactionParams, forceHideConfirmModal?: boolean) => {\n if (!smartAccount) {\n throw new Error('The smart account is not initialized.');\n }\n\n const showConfirmModal = !forceHideConfirmModal && !txConfirm.isNotRemind();\n\n if (showConfirmModal) {\n if (getPendingSignEventAccount() > 0) {\n throw new Error('Operation failed, there is a transaction being processed');\n }\n }\n\n let userOpBundle: UserOpBundle | undefined;\n if (\n Object.prototype.hasOwnProperty.call(params, 'userOpHash') &&\n Object.prototype.hasOwnProperty.call(params, 'userOp')\n ) {\n const { userOpHash, userOp } = params as UserOpBundle;\n if (userOpHash && userOp) {\n userOpBundle = { userOpHash, userOp };\n }\n }\n\n if (!userOpBundle) {\n const { tx, feeQuote, tokenPaymasterAddress } = params as UserOpParams;\n userOpBundle = await buildUserOp({ tx, feeQuote, tokenPaymasterAddress });\n }\n\n if (!showConfirmModal) {\n return smartAccount.sendUserOperation(userOpBundle);\n }\n\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.sendUserOp, userOpBundle);\n events.once(EventName.sendUserOpResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n },\n [smartAccount, buildUserOp],\n );\n\n const publicClient = useMemo(() => {\n if (!smartAccount || !chainId) {\n return undefined;\n }\n return (smartAccount?.provider as any).publicClient as PublicClient;\n }, [smartAccount, chainId]);\n\n const provider = useMemo(() => {\n const ethereumProvider = new EthereumProvider(\n sendUserOp,\n smartAccount?.provider as any,\n evmAccount,\n );\n return ethereumProvider;\n }, [evmAccount, sendUserOp, smartAccount?.provider]);\n\n const walletClient = useMemo(() => {\n return createWalletClient({\n transport: custom(new WalletClientProvider(provider)),\n });\n }, [provider]);\n\n return {\n provider,\n /** @deprecated please use account */\n evmAccount,\n account: evmAccount,\n switchChain,\n chainId,\n getFeeQuotes,\n buildUserOp,\n sendUserOp,\n publicClient,\n walletClient,\n };\n};\n", "import type { IEthereumProvider, JsonRpcRequest, SendTransactionParams } from '@particle-network/aa';\nimport { type AASignerProvider } from '.';\n\nexport class EthereumProvider implements IEthereumProvider {\n constructor(\n public sendUserOp: (params: SendTransactionParams, forceHideConfirmModal?: boolean) => Promise<string>,\n public signer?: AASignerProvider,\n public account?: string\n ) {}\n\n on(event: string, listener: any): this {\n this.signer?.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any): this {\n this.signer?.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any): this {\n this.signer?.off(event, listener);\n return this;\n }\n\n removeListener(event: string, listener: any): this {\n this.signer?.removeListener(event, listener);\n return this;\n }\n\n async request(arg: Partial<JsonRpcRequest>): Promise<any> {\n const method = arg.method;\n if (!method) {\n throw new Error('Method not found.');\n }\n\n if (method === 'eth_accounts' || method === 'eth_requestAccounts') {\n return this.account ? [this.account] : [];\n } else if (method === 'eth_sendTransaction') {\n const txData = arg.params?.[0];\n const result = await this.sendUserOp({ tx: txData });\n return result;\n }\n\n return this.signer?.request(arg as any);\n }\n}\n", "import { EventEmitter } from 'events';\nimport { EventName } from '../types/eventName';\n\nconst events = new EventEmitter();\nevents.setMaxListeners(100);\n\nexport const getPendingSignEventAccount = () => {\n return (\n events.listenerCount(EventName.sendUserOpResult) +\n events.listenerCount(EventName.personalSignResult) +\n events.listenerCount(EventName.signTypedDataResult)\n );\n};\n\nexport default events;\n", "const txConfirm = {\n isNotRemind: () => {\n if (typeof window === 'undefined') return false;\n const value = localStorage.getItem('tx-confirm-modal-remind');\n return value === '0';\n },\n setNotRemind: (notRemind: boolean) => {\n if (typeof window === 'undefined') return;\n if (notRemind) {\n localStorage.setItem('tx-confirm-modal-remind', '0');\n } else {\n localStorage.removeItem('tx-confirm-modal-remind');\n }\n },\n reset: () => {\n if (typeof window === 'undefined') return;\n localStorage.removeItem('tx-confirm-modal-remind');\n },\n};\n\nexport default txConfirm;\n", "import type { IEthereumProvider, JsonRpcRequest } from '@particle-network/aa';\nimport { EventName } from '../types/eventName';\nimport { EVMMethod } from '../types/evmMethod';\nimport events, { getPendingSignEventAccount } from '../utils/eventUtils';\nimport txConfirm from '../utils/txConfirmUtils';\n\nexport class WalletClientProvider implements IEthereumProvider {\n constructor(private provider: IEthereumProvider) {}\n\n on(event: string, listener: any): this {\n this.provider.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any): this {\n this.provider.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any): this {\n this.provider.off(event, listener);\n return this;\n }\n\n removeListener(event: string, listener: any): this {\n this.provider.removeListener(event, listener);\n return this;\n }\n\n async request(arg: Partial<JsonRpcRequest>): Promise<any> {\n const method = arg.method;\n if (!method) {\n throw new Error('Method not found.');\n }\n\n if (method === EVMMethod.personalSign || method.startsWith(EVMMethod.signTypedData)) {\n const showConfirmModal = !txConfirm.isNotRemind();\n if (showConfirmModal) {\n if (getPendingSignEventAccount() > 0) {\n throw new Error('Operation failed, there is a transaction being processed');\n }\n }\n if (!showConfirmModal) {\n return this.provider.request(arg as any);\n }\n }\n\n if (method === EVMMethod.personalSign) {\n console.log('personal_sign ---- ', arg);\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.personalSign, arg);\n events.once(EventName.personalSignResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n } else if (method.startsWith(EVMMethod.signTypedData)) {\n return new Promise<string>((resolve, reject) => {\n events.emit(EventName.signTypedData, arg);\n events.once(EventName.signTypedDataResult, ({ result, error }) => {\n if (result) {\n resolve(result);\n } else {\n reject(error);\n }\n });\n });\n }\n\n return this.provider.request(arg as any);\n }\n}\n", "\nconst digest = '906d42389ecad5c2ab92642c8e0775ea667c413b069684ce9d01199562f2d0be';\nconst classes = {\"loader\":\"_loader_g0am3_1\",\"rotate\":\"_rotate_g0am3_1\",\"prixClipFix\":\"_prixClipFix_g0am3_1\"};\nconst css = `._loader_g0am3_1{animation:_rotate_g0am3_1 1s linear infinite;border-radius:50%;height:20px;position:relative;width:20px}._loader_g0am3_1:before{animation:_prixClipFix_g0am3_1 2s linear infinite;border:2px solid #000;border-radius:50%;box-sizing:border-box;content:\"\";inset:0;position:absolute}@keyframes _rotate_g0am3_1{to{transform:rotate(1turn)}}@keyframes _prixClipFix_g0am3_1{0%{clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}25%{clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}50%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}75%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type CSSProperties } from 'react';\nimport styles from './spinner.module.scss';\n\nconst Spinner = ({ className, style }: { className?: string; style?: CSSProperties | undefined }) => {\n return <span className={styles.loader + (className ? ` ${className}` : '')} style={style}></span>;\n};\n\nexport default Spinner;\n", "\nconst digest = '424d614dbc2763d7cad7ca35c00bd255c6ed55da308a1f3018594201a47127bf';\nconst classes = {\"btn\":\"_btn_ofd87_1\"};\nconst css = `._btn_ofd87_1{align-items:center;background:#fff;border-radius:8px;color:#000;display:flex;flex-direction:row;font-size:16px;gap:16px;justify-content:center;padding:6px 24px;position:relative}._btn_ofd87_1:hover{opacity:.85}._btn_ofd87_1:disabled{background:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.639);cursor:not-allowed;opacity:1}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type CSSProperties, type ReactNode } from 'react';\nimport Spinner from '../spinner';\nimport styles from './button.module.scss';\n\nconst Button = ({\n children,\n isLoading,\n isDisabled,\n onClick,\n className,\n style,\n}: {\n children: ReactNode;\n isLoading?: boolean;\n isDisabled?: boolean;\n onClick?: () => void;\n className?: string;\n style?: CSSProperties | undefined;\n}) => {\n return (\n <button\n className={styles.btn + (className ? ` ${className}` : '')}\n onClick={isLoading || isDisabled ? undefined : onClick}\n disabled={isDisabled}\n style={style}\n >\n {isLoading && !isDisabled && <Spinner />}\n {children}\n </button>\n );\n};\n\nexport default Button;\n", "import { useEffect, useMemo, useState, type CSSProperties, type MouseEventHandler, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { RemoveScroll } from 'react-remove-scroll';\nimport styles from './modal.module.scss';\n\ninterface ModalProp {\n open: boolean;\n onClose: () => void;\n children: ReactNode;\n isDismissable?: boolean;\n contentStyle?: CSSProperties | undefined;\n contentClassName?: string;\n}\n\nconst stopPropagation: MouseEventHandler<unknown> = (event) => event.stopPropagation();\n\nconst Modal = ({ open, onClose, children, isDismissable = true, contentStyle, contentClassName }: ModalProp) => {\n const handleBackdropClick = useMemo(() => (isDismissable ? onClose : undefined), [onClose, isDismissable]);\n\n useEffect(() => {\n if (isDismissable) {\n const handleEscape = (event: KeyboardEvent) => open && event.key === 'Escape' && onClose();\n\n document.addEventListener('keydown', handleEscape);\n\n return () => document.removeEventListener('keydown', handleEscape);\n }\n }, [open, onClose, isDismissable]);\n\n const [bodyScrollable, setBodyScrollable] = useState(true);\n useEffect(() => {\n setBodyScrollable(getComputedStyle(window.document.body).overflow !== 'hidden');\n }, []);\n\n return (\n <>\n {open\n ? createPortal(\n <RemoveScroll enabled={bodyScrollable}>\n <div className={styles.container} onClick={handleBackdropClick}>\n <div\n className={styles.modal + (contentClassName ? ` ${contentClassName}` : '')}\n style={contentStyle}\n onClick={stopPropagation}\n >\n {children}\n </div>\n </div>\n </RemoveScroll>,\n document.body\n )\n : null}\n </>\n );\n};\n\nexport default Modal;\n", "\nconst digest = '65eada90924218eba4e72a5f00291c3cb69387ecce1351e454cdefd066d4bcff';\nconst classes = {\"container\":\"_container_smzpm_1\",\"modal\":\"_modal_smzpm_18\"};\nconst css = `._container_smzpm_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_smzpm_1 ._modal_smzpm_18{align-items:center;background-color:#171a1f;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "\nconst digest = 'c7bbc091f1227154742a5bd0d55a3df29eb913eb0ad4cafc7ab236b574002f65';\nconst classes = {\"connectModal\":\"_connectModal_1kqtj_1\",\"title\":\"_title_1kqtj_4\",\"closeBtn\":\"_closeBtn_1kqtj_9\",\"backBtn\":\"_backBtn_1kqtj_15\",\"walletItem\":\"_walletItem_1kqtj_21\",\"walletIcon\":\"_walletIcon_1kqtj_33\",\"walletName\":\"_walletName_1kqtj_38\",\"connecting\":\"_connecting_1kqtj_43\",\"connectingIconContainer\":\"_connectingIconContainer_1kqtj_51\",\"retryContainer\":\"_retryContainer_1kqtj_54\",\"retryIcon\":\"_retryIcon_1kqtj_63\",\"connectingIcon\":\"_connectingIcon_1kqtj_51\",\"connection\":\"_connection_1kqtj_72\",\"acceptRequest\":\"_acceptRequest_1kqtj_76\",\"btnDownload\":\"_btnDownload_1kqtj_83\"};\nconst css = `._connectModal_1kqtj_1{gap:12px}._connectModal_1kqtj_1 ._title_1kqtj_4{font-size:18px;font-weight:700;margin-bottom:4px}._connectModal_1kqtj_1 ._closeBtn_1kqtj_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1kqtj_1 ._backBtn_1kqtj_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21{border:1px solid #3a3a3a;border-radius:8px;box-sizing:border-box;cursor:pointer;display:flex;padding:8px;width:100%}._connectModal_1kqtj_1 ._walletItem_1kqtj_21:hover{background:hsla(0,0%,100%,.05)}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletIcon_1kqtj_33{border-radius:4px;height:42px;width:42px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletName_1kqtj_38{flex-grow:1;line-height:42px;text-align:center}._connectModal_1kqtj_1 ._connecting_1kqtj_43{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51{position:relative}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54 ._retryIcon_1kqtj_63{height:24px;width:24px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIcon_1kqtj_51{border-radius:4px;height:60px;width:60px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connection_1kqtj_72{font-size:18px;margin-top:20px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._acceptRequest_1kqtj_76{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._btnDownload_1kqtj_83{margin-top:20px}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import type { RequestArguments, UserOpBundle } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport { formatEther, hexToString, type Hex } from 'viem';\nimport { useConnectProvider } from '../../context';\nimport { useETHProvider } from '../../hooks';\nimport { useAccountContract } from '../../hooks/useAccountContract';\nimport checkBox from '../../icons/check_box.svg';\nimport checkBoxBlank from '../../icons/check_box_blank.svg';\nimport close from '../../icons/close.svg';\nimport copy from '../../icons/copy.svg';\nimport { type EVMDeserializeTransactionResult } from '../../types/deserializeTx';\nimport { EventName } from '../../types/eventName';\nimport { EVMMethod } from '../../types/evmMethod';\nimport { shortString } from '../../utils';\nimport { caculateNativeFee } from '../../utils/ethereumUtils';\nimport events from '../../utils/eventUtils';\nimport txConfirm from '../../utils/txConfirmUtils';\nimport Button from '../button';\nimport CopyText from '../copyText';\nimport Modal from '../modal';\nimport TransactionDetails from '../transactionDetails';\nimport styles from './sign.module.scss';\n\nconst SignModal = ({\n open,\n onClose,\n onOpen,\n}: {\n open: boolean;\n onClose: () => void;\n onOpen: () => void;\n}) => {\n const [userOpBundle, setUserOpBundle] = useState<UserOpBundle>();\n const [notRemindChecked, setNotRemindChecked] = useState<boolean>(false);\n const [loading, setLoading] = useState<boolean>(false);\n const [deserializeLoading, setDeserializeLoading] = useState<boolean>(false);\n const [deserializeResult, setDeserializeResult] = useState<\n EVMDeserializeTransactionResult[] | undefined\n >();\n const [disabled, setDisabled] = useState<boolean>(false);\n const [showNotRemind, setShowNotRemind] = useState<boolean>(true);\n const [nativeBalance, setNativeBalance] = useState<bigint>();\n const { accountContract } = useAccountContract();\n\n // personal_sign or eth_signTypedData\n const [requestArguments, setRequestArguments] = useState<RequestArguments>();\n\n const { chainId, publicClient, evmAccount, provider } = useETHProvider();\n const { smartAccount } = useConnectProvider();\n\n useEffect(() => {\n if (!open) {\n setDeserializeResult(undefined);\n setUserOpBundle(undefined);\n setRequestArguments(undefined);\n setLoading(false);\n setDisabled(false);\n setDeserializeLoading(false);\n setNativeBalance(undefined);\n }\n }, [open]);\n\n useEffect(() => {\n if (open) {\n const notRemind = txConfirm.isNotRemind();\n setShowNotRemind(!notRemind);\n if (!notRemind) {\n setNotRemindChecked(false);\n }\n }\n }, [open]);\n\n const chainInfo = useMemo(() => {\n if (chainId) {\n return chains.getEVMChainInfoById(chainId);\n }\n }, [chainId]);\n\n useEffect(() => {\n const onSendUserOp = (opBundle: UserOpBundle) => {\n setUserOpBundle(opBundle);\n onOpen();\n };\n const onPersonalSign = (arg: RequestArguments) => {\n setRequestArguments(arg);\n onOpen();\n };\n const onSignTypedData = (arg: RequestArguments) => {\n setRequestArguments(arg);\n onOpen();\n };\n events.on(EventName.sendUserOp, onSendUserOp);\n events.on(EventName.personalSign, onPersonalSign);\n events.on(EventName.signTypedData, onSignTypedData);\n return () => {\n events.off(EventName.sendUserOp, onSendUserOp);\n events.off(EventName.personalSign, onPersonalSign);\n events.off(EventName.signTypedData, onSignTypedData);\n };\n }, [onOpen, setUserOpBundle]);\n\n const deserializeUserOp = useCallback(async () => {\n if (userOpBundle && smartAccount) {\n const addresses = await smartAccount.provider.request({ method: 'eth_accounts' });\n const owner = addresses[0];\n const result = await smartAccount.sendRpc({\n method: 'particle_aa_deserializeUserOp',\n params: [\n {\n name: accountContract.name,\n version: accountContract.version,\n ownerAddress: owner,\n },\n userOpBundle.userOp,\n ],\n });\n return result;\n }\n }, [userOpBundle, smartAccount, accountContract]);\n\n useEffect(() => {\n if (userOpBundle && open) {\n console.log('deserializeUserOp start');\n setDeserializeLoading(true);\n deserializeUserOp()\n .then((result) => {\n console.log('\uD83D\uDE80 ~ deserializeUserOp ~ result:', result);\n setDeserializeResult(result as any);\n })\n .catch((error) => {\n console.log('\uD83D\uDE80 ~ deserializeUserOp ~ error:', error);\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n onClose();\n });\n }\n }, [deserializeUserOp, userOpBundle, open, onClose]);\n\n useEffect(() => {\n if (open && publicClient && evmAccount && userOpBundle) {\n publicClient\n .getBalance({ address: evmAccount as Hex })\n .then((result: any) => setNativeBalance(result))\n .catch((error: any) => {\n console.log('\uD83D\uDE80 ~ getBalance ~ error:', error);\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n onClose();\n });\n }\n }, [open, publicClient, evmAccount, userOpBundle, onClose]);\n\n useEffect(() => {\n if (nativeBalance != null && deserializeResult != null) {\n setDeserializeLoading(false);\n }\n }, [nativeBalance, deserializeResult]);\n\n const toggleNotRemind = () => {\n setNotRemindChecked(!notRemindChecked);\n txConfirm.setNotRemind(!notRemindChecked);\n };\n\n const gasFee = useMemo(() => {\n if (userOpBundle?.userOp) {\n return caculateNativeFee(userOpBundle?.userOp);\n }\n return BigInt(0);\n }, [userOpBundle]);\n\n const closeModal = () => {\n let event;\n if (userOpBundle) {\n event = EventName.sendUserOpResult;\n } else if (requestArguments?.method === EVMMethod.personalSign) {\n event = EventName.personalSignResult;\n } else if (requestArguments?.method?.startsWith(EVMMethod.signTypedData)) {\n event = EventName.signTypedDataResult;\n }\n\n if (event) {\n events.emit(event, {\n error: {\n code: 4001,\n message: 'The user rejected the request.',\n },\n });\n }\n\n onClose();\n };\n\n const confirmTx = useCallback(async () => {\n if (smartAccount && provider) {\n setLoading(true);\n if (userOpBundle) {\n try {\n const hash = await smartAccount.sendUserOperation(userOpBundle);\n events.emit(EventName.sendUserOpResult, { result: hash });\n } catch (error) {\n events.emit(EventName.sendUserOpResult, {\n error,\n });\n } finally {\n setLoading(false);\n }\n } else if (requestArguments) {\n try {\n const hash = await provider.request(requestArguments);\n events.emit(\n requestArguments.method == EVMMethod.personalSign\n ? EventName.personalSignResult\n : EventName.signTypedDataResult,\n { result: hash },\n );\n } catch (error) {\n events.emit(\n requestArguments.method == EVMMethod.personalSign\n ? EventName.personalSignResult\n : EventName.signTypedDataResult,\n {\n error,\n },\n );\n } finally {\n setLoading(false);\n }\n }\n\n onClose();\n }\n }, [smartAccount, provider, requestArguments, userOpBundle, onClose]);\n\n useEffect(() => {\n if (userOpBundle && nativeBalance != null && deserializeResult) {\n const nativeChange = deserializeResult\n .filter(\n (item) =>\n item.estimatedChanges.natives?.[0]?.nativeChange &&\n item.estimatedChanges.natives[0].nativeChange.startsWith('-'),\n )\n .map((item) =>\n BigInt(item.estimatedChanges?.natives?.[0]?.nativeChange?.replace('-', '') || 0),\n )\n .reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));\n if (userOpBundle.userOp.paymasterAndData.length > 2) {\n setDisabled(nativeBalance < nativeChange);\n } else {\n setDisabled(nativeBalance < gasFee + nativeChange);\n }\n }\n }, [userOpBundle, gasFee, nativeBalance, deserializeResult]);\n\n const unsignedMessage = useMemo(() => {\n if (!requestArguments) {\n return undefined;\n }\n\n if (requestArguments.method === EVMMethod.personalSign) {\n const message = requestArguments.params?.[0] || '0x';\n return hexToString(message);\n } else {\n const typedData = requestArguments.params?.[1];\n const obj = typeof typedData === 'string' ? JSON.parse(typedData) : typedData;\n return JSON.stringify(obj, null, 2);\n }\n }, [requestArguments]);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n isDismissable={false}\n contentClassName={styles.modalContent}\n >\n <>\n <img className={styles.closeBtn} src={close} onClick={closeModal}></img>\n\n {requestArguments && (\n <div className={styles.signTitle}>\n {requestArguments.method == EVMMethod.personalSign ? 'Sign Message' : 'Sign Typed Data'}\n </div>\n )}\n\n <div className={styles.chainInfo}>\n <img src={chainInfo?.icon}></img>\n {chainInfo?.fullname.replace('Mainnet', '')}\n </div>\n\n <div className={styles.addressContainer}>\n <CopyText value={evmAccount} style={{ textDecorationLine: 'none' }}>\n <div className={styles.addressInfo}>\n {shortString(evmAccount)}\n <img src={copy}></img>\n </div>\n </CopyText>\n </div>\n\n <div\n className={\n styles.detailsContent + (deserializeResult || requestArguments ? ` ${styles.fill}` : '')\n }\n >\n {deserializeResult &&\n deserializeResult.map((details, index) => (\n <TransactionDetails key={`${details.type}-${index}`} details={details} />\n ))}\n\n {unsignedMessage && <div className={styles.unsignedMessage}>{unsignedMessage}</div>}\n </div>\n\n {gasFee && (\n <div className={styles.estimatedGas}>{`Estimated gas fee: ${formatEther(gasFee)} ${\n chainInfo?.nativeCurrency.symbol\n }`}</div>\n )}\n\n <Button\n onClick={confirmTx}\n className={styles.signBtn}\n isLoading={loading || deserializeLoading}\n isDisabled={disabled}\n >\n {deserializeLoading ? 'LOADING' : disabled ? 'INSUFFICIENT FEE' : 'CONFIRM'}\n </Button>\n\n {showNotRemind && (\n <div className={styles.notRemind} onClick={toggleNotRemind}>\n <img src={notRemindChecked ? checkBox : checkBoxBlank}></img>\n Do not remind me again\n </div>\n )}\n </>\n </Modal>\n );\n};\n\nexport default SignModal;\n", "import {\n bytesToHex,\n publicToAddress,\n toBytes,\n toChecksumAddress,\n toRpcSig,\n} from '@ethereumjs/util';\nimport type { UserOp } from '@particle-network/aa';\nimport bitcore from 'bitcore-lib';\n\nexport const pubKeyToEVMAddress = (pubKey: string) => {\n const address = toChecksumAddress(bytesToHex(publicToAddress(toBytes(`0x${pubKey}`), true)));\n return address;\n};\n\nexport const convertSignature = (signature: string) => {\n const sig = (bitcore.crypto.Signature as any).fromCompact(Buffer.from(signature, 'base64'));\n const v = BigInt(sig.i + 27);\n const evmSig = toRpcSig(v, sig.r.toBuffer(), sig.s.toBuffer());\n return evmSig;\n};\n\nexport function caculateNativeFee(userOp: UserOp): bigint {\n return (\n (BigInt(userOp.callGasLimit) +\n BigInt(userOp.verificationGasLimit) +\n BigInt(userOp.preVerificationGas)) *\n BigInt(userOp.maxFeePerGas)\n );\n}\n", "import { useState, type CSSProperties } from 'react';\nimport { copyToClipboard } from '../../utils';\nimport styles from './copyText.module.scss';\n\nexport interface CopyTextProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode;\n value?: string;\n className?: string;\n style?: CSSProperties | undefined;\n}\n\nexport default function CopyText({ children, value, className, style }: CopyTextProps) {\n const [copied, setCopied] = useState<boolean>();\n\n const handleClick = async () => {\n if (copied) {\n return;\n }\n\n try {\n if (value) {\n await copyToClipboard(value);\n } else if (typeof children === 'string' || typeof children === 'number' || typeof children === 'boolean') {\n await copyToClipboard(children.toString());\n } else {\n throw new Error('please set copy value');\n }\n setCopied(true);\n setTimeout(() => setCopied(false), 1000);\n } catch (error) {\n //ignore\n }\n };\n\n return (\n <div\n className={styles.copyText + (className ? ` ${className}` : '') + (copied ? ` ${styles.copied}` : '')}\n onClick={handleClick}\n style={style}\n >\n {copied ? 'Copied' : children}\n </div>\n );\n}\n", "\nconst digest = 'd6fbb5df7ed6ec51d41f665ca768306181bb1e7d7c1cef8eed9bd4230368d7bb';\nconst classes = {\"copyText\":\"_copyText_smolu_1\",\"copied\":\"_copied_smolu_9\"};\nconst css = `._copyText_smolu_1{cursor:pointer;text-decoration-line:underline}._copyText_smolu_1:hover{opacity:.75}._copied_smolu_9{color:#a855f7;cursor:none;text-decoration-line:none}._copied_smolu_9:hover{opacity:1}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { chains } from '@particle-network/chains';\nimport { useCallback, useMemo } from 'react';\nimport { formatUnits } from 'viem';\nimport { useETHProvider } from '../../hooks';\nimport unverified from '../../icons/unverified.svg';\nimport verified from '../../icons/verified.svg';\nimport {\n TransactionSmartType,\n type EVMDeserializeTransactionResult,\n type EVMTokenChange,\n} from '../../types/deserializeTx';\nimport { defaultTokenIcon, ipfsToSrc, shortString } from '../../utils';\nimport CopyText from '../copyText';\nimport Tooltip from '../tooltip';\nimport styles from './transactionDetails.module.scss';\n\nconst TransactionDetails = ({ details }: { details: EVMDeserializeTransactionResult }) => {\n const { chainId } = useETHProvider();\n\n const chainInfo = useMemo(() => {\n if (chainId) {\n return chains.getEVMChainInfoById(chainId);\n }\n }, [chainId]);\n\n const titleContent = useMemo(() => {\n switch (details.type) {\n case TransactionSmartType.NATIVE_TRANSFER:\n return `Send ${chainInfo?.nativeCurrency.symbol}`;\n case TransactionSmartType.ERC20_TRANSFER:\n return `Send ${details.estimatedChanges.tokens[0]?.symbol}`;\n case TransactionSmartType.ERC20_APPROVE:\n return 'Approve Spending';\n case TransactionSmartType.ERC721_TRANFER:\n return 'Send NFT';\n case TransactionSmartType.ERC1155_TRANFER:\n return 'Send NFT';\n default:\n return 'Transaction Details';\n }\n }, [details, chainInfo]);\n\n const nftContractType = useMemo(() => {\n if (details.type === TransactionSmartType.ERC721_TRANFER) {\n return 'ERC721';\n } else if (details.type === TransactionSmartType.ERC1155_TRANFER) {\n return 'ERC1155';\n }\n }, [details]);\n\n const nativeIcon = useMemo(() => {\n if (chainInfo) {\n if (chainInfo.nativeCurrency.symbol === 'ETH') {\n return 'https://static.particle.network/token-list/ethereum/native.png';\n } else {\n return chainInfo.nativeIcon || chainInfo.icon;\n }\n }\n return defaultTokenIcon;\n }, [chainInfo]);\n\n // to address\n const to = useMemo(() => {\n const params = details.data?.function?.params;\n if (details.type == TransactionSmartType.ERC20_TRANSFER) {\n return params ? (params[params.length === 3 ? 1 : 0].value as string) : '';\n } else if (details.type == TransactionSmartType.ERC20_APPROVE) {\n return params ? (params[0].value as string) : '';\n } else if (details.type == TransactionSmartType.NATIVE_TRANSFER) {\n return details.data.to;\n } else if (\n details.type == TransactionSmartType.ERC721_TRANFER ||\n details.type == TransactionSmartType.ERC1155_TRANFER\n ) {\n return params ? (params[1].value as string) : '';\n } else {\n return details.data.to;\n }\n }, [details]);\n\n const balanceChangeTextColor = useCallback((value: string | number) => {\n if (BigInt(value) > 0) {\n return '#4ade80';\n } else if (BigInt(value) < 0) {\n return '#ef4444';\n } else {\n return 'white';\n }\n }, []);\n\n const functionContent = useMemo(() => {\n if (details.type !== TransactionSmartType.NATIVE_TRANSFER && details.data.function) {\n const params = details.data.function.params.map((item) => item.name);\n return `${details.data.function.name}(${params.join(', ')})`;\n }\n }, [details]);\n\n const approveTokenAmount = useMemo(() => {\n if (details.type === TransactionSmartType.ERC20_APPROVE) {\n const amount = details.data?.function?.params?.[1]?.value as string;\n return BigInt(amount || 0);\n }\n return BigInt(0);\n }, [details]);\n\n const tokenAmountChange = useCallback(\n (tokenItem: EVMTokenChange) => {\n const result = formatUnits(\n details.type === TransactionSmartType.ERC20_APPROVE ? approveTokenAmount : BigInt(tokenItem.amountChange),\n tokenItem.decimals\n );\n\n if (details.type !== TransactionSmartType.ERC20_APPROVE && BigInt(tokenItem.amountChange) > BigInt(0)) {\n return `+${result}`;\n }\n\n return result;\n },\n [approveTokenAmount, details]\n );\n\n const showContactAddress = useMemo(() => {\n return (\n details.type === TransactionSmartType.ERC20_TRANSFER ||\n details.type === TransactionSmartType.ERC20_APPROVE ||\n details.type === TransactionSmartType.ERC721_TRANFER ||\n details.type === TransactionSmartType.ERC1155_TRANFER\n );\n }, [details]);\n\n return (\n <div className={styles.detailsCard}>\n <div className={styles.title}>{titleContent}</div>\n {nftContractType && <div className={styles.nftContract}>{nftContractType}</div>}\n\n {details.estimatedChanges.natives.map((nativeItem) => {\n return (\n <div key={nativeItem.address} className={styles.row}>\n <img className={styles.tokenIcon} src={nativeIcon}></img>\n <div className={styles.balanceChange} style={{ color: balanceChangeTextColor(nativeItem.nativeChange) }}>\n {BigInt(nativeItem.nativeChange) > 0 ? '+' : undefined}\n {formatUnits(BigInt(nativeItem.nativeChange), chainInfo?.nativeCurrency.decimals || 18)}\n </div>\n <div className={styles.tokenSymbol}>{chainInfo?.nativeCurrency.symbol}</div>\n </div>\n );\n })}\n\n {details.estimatedChanges.tokens.map((tokenItem) => {\n return (\n <div key={tokenItem.address} className={styles.row}>\n <img className={styles.tokenIcon} src={tokenItem.image || defaultTokenIcon}></img>\n <div className={styles.balanceChange}>\n <span style={{ color: balanceChangeTextColor(tokenItem.amountChange) }}>\n {tokenAmountChange(tokenItem)}\n </span>\n {` ${tokenItem.symbol}`}\n </div>\n </div>\n );\n })}\n\n {details.estimatedChanges.nfts.map((nftItem) => {\n return (\n <div key={nftItem.address} className={styles.row}>\n <div style={{ fontSize: 16 }}>\n <img className={styles.nftIcon} src={ipfsToSrc(nftItem.image || defaultTokenIcon)}></img>\n {nftItem.name || `NFT#${nftItem.tokenId}`}\n </div>\n <div className={styles.balanceChange} style={{ color: balanceChangeTextColor(nftItem.amountChange) }}>\n {nftItem.amountChange}\n </div>\n </div>\n );\n })}\n\n {to && (\n <div className={styles.row}>\n <div>To</div>\n <div className={styles.toContract}>\n {details.toVerified != null && !showContactAddress && (\n <Tooltip content={details.toVerified ? 'Verified Contract' : 'Unverified Contract'}>\n <img src={details.toVerified ? verified : unverified}></img>\n </Tooltip>\n )}\n <CopyText value={to}>{shortString(to)}</CopyText>\n </div>\n </div>\n )}\n\n {showContactAddress && (\n <div className={styles.row}>\n <div>Contract</div>\n <div className={styles.toContract}>\n {details.toVerified != null && (\n <Tooltip content={details.toVerified ? 'Verified Contract' : 'Unverified Contract'}>\n <img src={details.toVerified ? verified : unverified}></img>\n </Tooltip>\n )}\n <CopyText value={details.data.to}>{shortString(details.data.to)}</CopyText>\n </div>\n </div>\n )}\n\n <div className={styles.row}>\n <div>Hex Data</div>\n <CopyText value={details.data.data}>{shortString(details.data.data)}</CopyText>\n </div>\n\n {functionContent && (\n <div className={styles.row}>\n <div>Function</div>\n <div className={styles.right}>{functionContent}</div>\n </div>\n )}\n </div>\n );\n};\n\nexport default TransactionDetails;\n", "\nconst digest = 'ee15dc27fcfd209601159e7f0e0063ff4e7a886b7b892c1600a911372b82a0b1';\nconst classes = {\"tipContainer\":\"_tipContainer_ufud7_1\",\"tipContent\":\"_tipContent_ufud7_5\"};\nconst css = `._tipContainer_ufud7_1{overflow:visible;position:relative}._tipContainer_ufud7_1 ._tipContent_ufud7_5{background:#3f3f46;border-radius:8px;bottom:100%;color:#fff;font-size:11px;left:-100%;opacity:0;padding:3px 6px;position:absolute;transition:opacity .5s;visibility:hidden;white-space:nowrap;z-index:1}._tipContainer_ufud7_1:hover ._tipContent_ufud7_5{opacity:1;visibility:visible}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { type ReactNode } from 'react';\nimport styles from './tooltip.module.scss';\n\nconst Tooltip = ({ children, content, className }: { children: ReactNode; content: string; className?: string }) => {\n return (\n <div className={styles.tipContainer}>\n {children}\n <div className={styles.tipContent + (className ? ` ${className}` : '')}>{content}</div>\n </div>\n );\n};\n\nexport default Tooltip;\n", "\nconst digest = 'a81c744751497ed4b401c08b9e5aeef1991aeb86f2cbba3ee57c1926c0502f1a';\nconst classes = {\"detailsCard\":\"_detailsCard_ml2p9_1\",\"title\":\"_title_ml2p9_13\",\"nftContract\":\"_nftContract_ml2p9_19\",\"row\":\"_row_ml2p9_26\",\"tokenIcon\":\"_tokenIcon_ml2p9_35\",\"nftIcon\":\"_nftIcon_ml2p9_41\",\"balanceChange\":\"_balanceChange_ml2p9_49\",\"tokenSymbol\":\"_tokenSymbol_ml2p9_56\",\"toContract\":\"_toContract_ml2p9_61\",\"right\":\"_right_ml2p9_71\"};\nconst css = `._detailsCard_ml2p9_1{background:#232529;border:1px solid #252525;border-radius:8px;color:#fff;margin-top:16px;overflow-x:hidden;padding:10px;position:relative;width:100%}._detailsCard_ml2p9_1 ._title_ml2p9_13{font-size:16px;font-weight:600;margin-bottom:12px;text-align:left}._detailsCard_ml2p9_1 ._nftContract_ml2p9_19{color:#a855f7;font-size:16px;position:absolute;right:8px;top:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26{align-items:center;display:flex;flex-direction:row;font-size:14px;gap:8px;justify-content:space-between;margin-top:6px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenIcon_ml2p9_35{border-radius:50%;height:32px;margin:10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._nftIcon_ml2p9_41{border-radius:2px;display:inline;height:32px;margin:10px 8px 10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._balanceChange_ml2p9_49{flex-grow:2;font-size:16px;font-weight:500;text-align:end;word-break:break-word}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenSymbol_ml2p9_56{font-size:16px;font-weight:500;text-align:end}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61{align-items:center;display:flex;gap:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61 img{display:inline;height:18px;width:18px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._right_ml2p9_71{text-align:end}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "\nconst digest = '3ab1a455562ae7e24c2ac49572897e615b9e9275066fd0d64f0cf24844521bab';\nconst classes = {\"modalContent\":\"_modalContent_aoysu_1\",\"closeBtn\":\"_closeBtn_aoysu_5\",\"signTitle\":\"_signTitle_aoysu_11\",\"chainInfo\":\"_chainInfo_aoysu_16\",\"addressContainer\":\"_addressContainer_aoysu_29\",\"addressInfo\":\"_addressInfo_aoysu_34\",\"detailsContent\":\"_detailsContent_aoysu_49\",\"fill\":\"_fill_aoysu_58\",\"unsignedMessage\":\"_unsignedMessage_aoysu_61\",\"estimatedGas\":\"_estimatedGas_aoysu_76\",\"signBtn\":\"_signBtn_aoysu_81\",\"notRemind\":\"_notRemind_aoysu_85\"};\nconst css = `._modalContent_aoysu_1{color:#fff;text-align:center}._modalContent_aoysu_1 ._closeBtn_aoysu_5{cursor:pointer;position:absolute;right:16px;top:16px}._modalContent_aoysu_1 ._signTitle_aoysu_11{font-size:20px;font-weight:600;margin-bottom:10px}._modalContent_aoysu_1 ._chainInfo_aoysu_16{align-items:center;display:flex;flex-direction:row;font-size:12px;gap:8px;justify-content:center;margin-bottom:8px}._modalContent_aoysu_1 ._chainInfo_aoysu_16 img{height:18px;width:18px}._modalContent_aoysu_1 ._addressContainer_aoysu_29{height:28px;margin-bottom:16px;margin-top:8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34{align-items:center;background:rgba(58,58,58,.635);border-radius:20px;display:flex;flex-direction:row;font-size:12px;gap:4px;justify-content:center;padding:4px 8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34 img{height:18px;width:18px}._modalContent_aoysu_1 ._detailsContent_aoysu_49{max-height:0;overflow-y:auto;transition:max-height .3s linear;width:100%}._modalContent_aoysu_1 ._detailsContent_aoysu_49::-webkit-scrollbar{display:none}._modalContent_aoysu_1 ._detailsContent_aoysu_49._fill_aoysu_58{max-height:500px}._modalContent_aoysu_1 ._detailsContent_aoysu_49 ._unsignedMessage_aoysu_61{background:#232529;border:1px solid #252525;border-radius:8px;box-sizing:border-box;color:#fff;font-size:14px;padding:8px;width:100%;word-wrap:break-word;color:hsla(0,0%,100%,.631);text-align:left;white-space:pre-wrap}._modalContent_aoysu_1 ._estimatedGas_aoysu_76{color:hsla(0,0%,100%,.631);font-size:12px;margin-top:24px}._modalContent_aoysu_1 ._signBtn_aoysu_81{margin-top:24px;min-width:200px}._modalContent_aoysu_1 ._notRemind_aoysu_85{align-items:center;color:hsla(0,0%,100%,.631);cursor:pointer;display:inline-flex;font-size:12px;gap:4px;margin-top:16px}._modalContent_aoysu_1 ._notRemind_aoysu_85:hover{opacity:.85}`;\n\n(function() {\n if (typeof document !== \"undefined\" && !document.getElementById(digest)) {\n var ele = document.createElement('style');\n ele.id = digest;\n ele.textContent = css;\n document.head.appendChild(ele);\n }\n})();\n\nexport default classes;\nexport { css, digest, classes };\n ", "import { intToHex } from '@ethereumjs/util';\nimport type { RequestArguments } from '@particle-network/aa';\nimport { chains } from '@particle-network/chains';\nimport { EventEmitter } from 'events';\nimport {\n InvalidParamsRpcError,\n SwitchChainError,\n UnsupportedProviderMethodError,\n createPublicClient,\n hashMessage,\n hashTypedData,\n http,\n type PublicClient,\n} from 'viem';\nimport { EVMMethod } from '../types/evmMethod';\nimport { convertSignature, pubKeyToEVMAddress } from '../utils/ethereumUtils';\n\nexport class AASignerProvider {\n private events: EventEmitter;\n chainId = 1;\n publicClient: PublicClient;\n constructor(\n public supportChainIds: number[],\n public projectId: string,\n public clientKey: string,\n public rpcUrls: Record<number, string> | undefined\n ) {\n this.events = new EventEmitter();\n this.events.setMaxListeners(100);\n\n if (typeof window !== 'undefined') {\n const localChainId = localStorage.getItem('connect-evm-chain-id');\n if (localChainId && supportChainIds.includes(Number(localChainId))) {\n this.chainId = Number(localChainId);\n } else {\n const chainId = supportChainIds[0];\n if (chainId) {\n localStorage.setItem('connect-evm-chain-id', chainId.toString());\n this.chainId = chainId;\n }\n }\n }\n\n this.publicClient = this.getPublicClient();\n }\n\n async request(arg: RequestArguments) {\n if (\n arg.method === 'eth_sendTransaction' ||\n arg.method === 'wallet_addEthereumChain' ||\n arg.method === 'wallet_watchAsset' ||\n arg.method === 'eth_sign'\n ) {\n throw new UnsupportedProviderMethodError(new Error('The Provider does not support the requested method.'));\n }\n\n if (arg.method === 'eth_accounts' || arg.method === 'eth_requestAccounts') {\n const pubKey = await this.getPublicKey();\n const address = pubKeyToEVMAddress(pubKey);\n return [address];\n } else if (arg.method === 'eth_chainId') {\n return `0x${this.chainId.toString(16)}`;\n } else if (arg.method === EVMMethod.personalSign) {\n let message = arg.params?.[0];\n console.log('personal_sign message:', message);\n if (message.length !== 66) {\n const hash = hashMessage({ raw: message });\n console.log('personal_sign hash:', hash);\n message = hash;\n }\n const result = await this.personalSign(message || '');\n const convertResult = convertSignature(result);\n if (!convertResult) {\n throw new Error('sign error');\n }\n console.log(`personal_sign result(${convertResult.length}): `, convertResult);\n return convertResult;\n } else if (arg.method === 'eth_signTypedData' || arg.method === 'eth_signTypedData_v4') {\n const typedData = arg.params?.[1];\n console.log('signTypedData typedData', typedData);\n const hash = hashTypedData(typeof typedData === 'string' ? JSON.parse(typedData) : typedData);\n console.log('signTypedData hash', hash);\n const result = await this.personalSign(hash || '');\n const convertResult = convertSignature(result);\n if (!convertResult) {\n throw new Error('sign error');\n }\n console.log(`eth_signTypedData result(${convertResult.length}): `, convertResult);\n return convertResult;\n } else if (arg.method === 'wallet_switchEthereumChain') {\n if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {\n const chainId = Number(arg.params[0].chainId);\n if (this.supportChainIds.includes(this.chainId)) {\n this.chainId = chainId;\n localStorage.setItem('connect-evm-chain-id', this.chainId.toString());\n this.publicClient = this.getPublicClient();\n setTimeout(() => this.events.emit('chainChanged', intToHex(this.chainId)), 0);\n return Promise.resolve(null);\n }\n throw new SwitchChainError(new Error(`The chain: ${chainId} is not supported`));\n } else {\n throw new InvalidParamsRpcError(new Error('Invalid Params'));\n }\n } else {\n const result = await this.publicClient.request(arg as any);\n return result;\n }\n }\n\n personalSign = async (message: string): Promise<string> => {\n throw new Error('Wallet not connected!');\n };\n\n getPublicKey = async (): Promise<string> => {\n throw new Error('Wallet not connected!');\n };\n\n removeListener(event: string, listener: (...args: any[]) => void) {\n this.events.removeListener(event, listener);\n return this;\n }\n\n on(event: string, listener: (...args: any[]) => void) {\n this.events.on(event, listener);\n return this;\n }\n\n once(event: string, listener: any) {\n this.events.once(event, listener);\n return this;\n }\n\n off(event: string, listener: any) {\n this.events.off(event, listener);\n return this;\n }\n\n emit(event: string, ...args: any[]) {\n this.events.emit(event, args);\n }\n\n getPublicClient = () => {\n const rpcUrl = this?.rpcUrls?.[this.chainId] || chains.getEVMChainInfoById(this.chainId || 1)?.rpcUrl;\n console.log('rpcUrl', rpcUrl);\n\n return createPublicClient({\n transport: http(rpcUrl),\n });\n };\n}\n", "import { useCallback, useState } from 'react';\n\nconst useModalStateValue = () => {\n const [isModalOpen, setModalOpen] = useState(false);\n\n return {\n closeModal: useCallback(() => setModalOpen(false), []),\n isModalOpen,\n openModal: useCallback(() => setModalOpen(true), []),\n };\n};\n\nexport default useModalStateValue;\n", "import React, { useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { ConnectProvider as BTCConnectProvider } from '../context';\nimport {\n UnisatConnector,\n XverseConnector,\n OKXConnector,\n BitgetConnector,\n // MagicEdenConnector,\n // BinanceConnector,\n} from '../connector';\nimport { useBTCProvider, useConnectModal } from '../hooks';\n\nimport ComfirmBox from '../components/confirmBox';\nimport { retryOperation } from '../utils';\n\nconst WalletSelectorContext = React.createContext<any>(null);\n\nexport function BtcWalletSelectorContextProvider({\n children,\n}: {\n children: React.ReactNode;\n autoConnect?: boolean;\n}) {\n const [isProcessing, setIsProcessing] = useState(false);\n\n const connectors = [\n new UnisatConnector(),\n new XverseConnector(),\n new OKXConnector(),\n new BitgetConnector(),\n // new BinanceConnector(),\n // new MagicEdenConnector(),\n ];\n\n const walletSelectorContextValue = useMemo(() => {\n const simpleFn: Record<string, ((e: any) => void)[]> = {};\n\n return {\n setIsProcessing,\n emit: (eventName: string, e: any) => {\n if (simpleFn[eventName] && simpleFn[eventName].length) {\n simpleFn[eventName].forEach((fn: (e: any) => void) => {\n fn(e);\n });\n }\n },\n on: (eventName: string, fn: (e: any) => void) => {\n simpleFn[eventName] = simpleFn[eventName] || [];\n simpleFn[eventName].push(fn);\n },\n };\n }, []);\n\n return (\n <WalletSelectorContext.Provider value={walletSelectorContextValue}>\n <BTCConnectProvider\n options={{\n projectId: 'btc',\n clientKey: 'btc',\n appId: 'btc',\n aaOptions: {\n accountContracts: {\n BTC: [\n {\n chainIds: [686868],\n version: '1.0.0',\n },\n ],\n },\n },\n walletOptions: {\n visible: true,\n },\n }}\n autoConnect={false}\n connectors={connectors}\n >\n {children}\n {isProcessing && (\n <ComfirmBox\n hash={''}\n status={0}\n onClose={() => {\n setIsProcessing(false);\n }}\n />\n )}\n <InitBtcWalletSelectorContext />\n </BTCConnectProvider>\n </WalletSelectorContext.Provider>\n );\n}\n\nfunction InitBtcWalletSelectorContext() {\n const context = useBtcWalletSelector();\n useEffect(() => {\n window.btcContext = context;\n }, [context]);\n return null;\n}\n\nexport function useBtcWalletSelector() {\n // @ts-ignore\n const { openConnectModal, disconnect, requestDirectAccount } = useConnectModal();\n const {\n accounts,\n sendBitcoin,\n getPublicKey,\n provider,\n signMessage,\n connector,\n getNetwork,\n switchNetwork,\n } = useBTCProvider();\n const publicKey = useRef<any>(null);\n const signMessageFn = useRef<any>(null);\n const connectorRef = useRef<any>(null);\n const context = useContext(WalletSelectorContext);\n const isLoggingIn = useRef(false);\n\n useEffect(() => {\n if (provider) {\n getPublicKey().then((res) => {\n publicKey.current = res;\n });\n }\n }, [getPublicKey, provider]);\n\n useEffect(() => {\n signMessageFn.current = signMessage;\n }, [signMessage]);\n\n useEffect(() => {\n const fn = (account: any) => {\n if (account) {\n getPublicKey().then((res) => {\n publicKey.current = res;\n context.emit('updatePublicKey', res);\n });\n }\n };\n\n if (connector) {\n connector.on('accountsChanged', fn);\n }\n connectorRef.current = connector;\n\n return () => {\n if (connector) {\n connector.removeListener('accountsChanged', fn);\n }\n };\n }, [connector, context, getPublicKey]);\n\n const hook = useMemo(() => {\n return {\n login: async () => {\n const account = accounts?.[0];\n if (!account) {\n if (isLoggingIn.current) {\n return null;\n }\n\n try {\n isLoggingIn.current = true;\n openConnectModal?.();\n\n const account1 = await retryOperation(\n () => window.btcContext.account,\n (res) => !!res,\n {\n maxRetries: 100,\n delayMs: 1000,\n },\n );\n\n if (!account1) {\n throw new Error('Failed to get account');\n }\n return account1;\n } finally {\n isLoggingIn.current = false;\n }\n }\n return account;\n },\n autoConnect: async () => {\n requestDirectAccount(connectorRef.current).catch((e: any) => {\n context.emit('btcLoginError');\n });\n },\n logout: () => {\n const accountId = accounts?.[0];\n if (!accountId) return;\n disconnect?.();\n context.emit('btcLogOut');\n },\n account: accounts?.[0],\n getPublicKey: () => {\n return publicKey.current;\n },\n signMessage: (msg: string) => {\n return signMessageFn.current(msg);\n },\n getContext: () => {\n return context;\n },\n getNetwork,\n switchNetwork,\n sendBitcoin,\n };\n }, [\n accounts,\n getNetwork,\n switchNetwork,\n sendBitcoin,\n openConnectModal,\n requestDirectAccount,\n context,\n disconnect,\n ]);\n\n return hook;\n}\n", "import React from 'react';\n// import './modal.css'\n\ninterface Props {\n children?: any;\n onClose?: () => void;\n style?: any\n}\n\nconst styles: any = {}\n\nexport default function Modal({ children, onClose, style = {} }: Props) {\n return <div>\n <div className=\"layer\"></div>\n <div className=\"modal\" style={style}>\n <div className=\"close\" onClick={() => { onClose && onClose() }}>\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M7.73284 5.99997L11.7359 1.99698C12.0368 1.69598 12.0882 1.25928 11.8507 1.02188L10.9779 0.149088C10.7404 -0.0884114 10.3043 -0.0363117 10.0028 0.264487L6.00013 4.26737L1.99719 0.264587C1.69619 -0.0367116 1.25948 -0.0884115 1.02198 0.149388L0.149174 1.02228C-0.0882276 1.25938 -0.0368271 1.69608 0.264576 1.99708L4.26761 5.99997L0.264576 10.0032C-0.0363271 10.304 -0.0884276 10.7404 0.149174 10.9779L1.02198 11.8507C1.25948 12.0882 1.69619 12.0367 1.99719 11.7358L6.00033 7.73266L10.0029 11.7352C10.3044 12.0368 10.7405 12.0882 10.978 11.8507L11.8508 10.9779C12.0882 10.7404 12.0368 10.304 11.736 10.0028L7.73284 5.99997Z\" fill=\"#808095\" />\n </svg>\n </div>\n {children}\n </div>\n </div>\n}", "import React from \"react\";\nimport Modal from \"./Modal\";\n\n// import './confirmBox.css'\n\ninterface Props {\n onClose: () => void;\n fromChain?: any;\n toChain?: any;\n status: number;\n hash: string;\n}\n\n\n\nexport default function ComfirmBox({ onClose, status = 1, fromChain = {\n name: 'NEAR',\n}, toChain = {\n name: 'BTC',\n}, hash }: Props) {\n return <Modal onClose={onClose}>\n <div className=\"title\">Transaction Detail</div>\n <div className=\"chians\">\n {/* <img style={{ width: 26, height: 26 }} src={fromChain?.icon} /> */}\n {/* <svg width=\"31\" height=\"2\" viewBox=\"0 0 31 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <line opacity=\"0.5\" x1=\"8.74228e-08\" y1=\"1\" x2=\"31\" y2=\"1\" stroke=\"#727272\" stroke-width=\"2\" stroke-dasharray=\"2 5\" />\n </svg> */}\n\n {\n status === 0 ? <svg className=\"loading\" width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M52.0766 10.7867C53.0482 11.0471 53.6273 12.0399 53.3741 13.0134C53.1219 13.977 52.1361 14.5546 51.1725 14.3024L47.6172 13.3498L46.3268 18.1657C44.8261 23.7665 40.0219 27.6146 34.2721 28.6546C38.7381 32.4056 40.9681 38.1648 39.4673 43.7656L38.1769 48.5815L41.6972 49.5248C42.6655 49.7843 43.2401 50.7794 42.9806 51.7477C42.7212 52.7159 41.726 53.2905 40.7578 53.031L2.02593 42.6529L1.71657 42.5396C0.800668 42.1375 0.383843 41.0689 0.785965 40.153C1.15472 39.3126 2.09436 38.8809 2.97262 39.1481L6.52126 40.0989L7.81144 35.2839C9.31216 29.6832 14.1131 25.8341 19.8661 24.795C15.3968 21.0432 13.1702 15.2848 14.6709 9.68407L15.9615 4.86764L12.4128 3.91679C11.4445 3.65734 10.87 2.66223 11.1295 1.69395C11.3889 0.725662 12.384 0.151138 13.3523 0.410589L52.0766 10.7867ZM44.0959 12.4063L19.471 5.80801L18.1871 10.5994C17.0693 14.7711 18.671 19.3131 22.2022 22.3268C23.2549 23.2994 23.6544 24.61 23.3544 25.7297C23.0485 27.0126 21.9665 27.9627 20.6551 28.1007C16.1146 28.9516 12.432 32.0776 11.3175 36.2502L10.0214 41.0874L11.982 41.6127L12.5291 39.571C13.5385 35.8039 16.032 32.0464 21.0065 30.689L21.8135 30.4937C23.6047 30.2306 25.3145 29.1151 26.9388 27.1507C27.1931 29.441 28.1726 31.2771 29.8857 32.6567C34.4351 36.8 34.1706 41.1245 33.1094 45.0849L32.5623 47.1267L34.6428 47.6841L35.9323 42.8715C37.0501 38.6998 35.4522 34.1588 31.9215 31.1412C30.8693 30.1687 30.4684 28.8613 30.7693 27.7383C31.1136 26.4535 32.114 25.5215 33.4676 25.3711C38.0072 24.5235 41.6865 21.3966 42.8052 17.2216L44.0959 12.4063ZM40.7578 15.6185C40.1797 19.9295 35.6431 22.9023 32.7256 23.2863C30.9809 23.5169 29.1741 24.3456 27.3087 25.7742C26.4809 23.6244 25.3731 22.0143 23.9948 20.9474C21.5041 19.0198 20.6551 17.2216 20.3797 15.1185L40.7578 15.6185Z\" fill=\"white\" fill-opacity=\"0.21\" />\n </svg> : <svg width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <circle cx=\"27\" cy=\"27\" r=\"21\" fill=\"#33FFDA\" />\n <circle cx=\"27\" cy=\"27\" r=\"24\" stroke=\"#33FFDA\" stroke-opacity=\"0.3\" stroke-width=\"6\" />\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M37.342 19.6604C38.2111 20.5494 38.2205 22.0006 37.363 22.9016L24.8987 36L17.651 28.5196C16.7858 27.6266 16.7826 26.1754 17.6439 25.2783C18.5052 24.3813 19.9048 24.378 20.77 25.271L24.8705 29.5031L34.2159 19.6822C35.0733 18.7812 36.4729 18.7714 37.342 19.6604Z\" fill=\"black\" />\n </svg>\n }\n\n {/* <svg width=\"31\" height=\"2\" viewBox=\"0 0 31 2\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <line opacity=\"0.5\" x1=\"8.74228e-08\" y1=\"1\" x2=\"31\" y2=\"1\" stroke=\"#727272\" stroke-width=\"2\" stroke-dasharray=\"2 5\" />\n </svg> */}\n {/* <img style={{ width: 26, height: 26 }} src={toChain?.icon} /> */}\n </div>\n\n {\n status === 0 && <>\n <div className=\"time\">\n Est Time: 5 mins\n </div>\n <div className=\"processing\">\n Transaction is processing. \n </div>\n </>\n }\n\n {\n status === 1 && <>\n <div className=\"time\">\n Bridge Completed\n </div>\n <div className=\"processing\">\n You can view your transaction on the <a href=\"/history\">bridge transaction history.</a>\n </div>\n </>\n }\n\n {\n !!hash && <><div className=\"srcBtn\" onClick={() => {\n if (fromChain.name === 'BTC') {\n window.open(`https://mempool.space/testnet/tx/${hash}`)\n } else if (fromChain.name === 'NEAR') {\n window.open(`https://testnet.nearblocks.io/txns/${hash}`)\n }\n\n }}>\n SRC TX <svg width=\"8\" height=\"8\" viewBox=\"0 0 8 8\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.97871 8H2.02129C0.907217 8 0 7.09294 0 5.97905V2.02095C0 0.907063 0.907217 0 2.02129 0H3.73973C3.98175 0 4.17779 0.196012 4.17779 0.437986C4.17779 0.679959 3.98175 0.875972 3.73973 0.875972H2.02129C1.71573 0.875972 1.42775 0.994931 1.21142 1.21122C0.995099 1.42751 0.87612 1.71544 0.87612 2.02095V5.97769C0.87612 6.2832 0.995099 6.57114 1.21142 6.78743C1.42775 7.00372 1.71573 7.12268 2.02129 7.12268H5.97871C6.61011 7.12268 7.12388 6.60899 7.12388 5.97769V4.12977C7.12388 3.97432 7.20771 3.82832 7.34291 3.74992C7.40916 3.71206 7.48487 3.69179 7.56194 3.69179C7.63901 3.69179 7.71472 3.71206 7.78097 3.74992C7.91617 3.82832 8 3.97296 8 4.12977V5.97769C8 7.09294 7.09414 8 5.97871 8ZM7.35223 2.78066C7.41578 2.81715 7.48879 2.83608 7.56179 2.83608C7.6348 2.83608 7.70781 2.8158 7.77271 2.7793C7.90251 2.70496 7.98228 2.56572 7.98228 2.41702V0.438001C7.98228 0.206844 7.79434 0.0189453 7.56315 0.0189453H5.58378C5.35258 0.0189453 5.16465 0.206844 5.16465 0.438001C5.16465 0.669157 5.35258 0.857056 5.58378 0.857056H6.55077L3.70328 3.70405L3.70058 3.70676C3.62658 3.7861 3.58634 3.89111 3.58835 3.99958C3.59037 4.10806 3.6345 4.21149 3.7114 4.28803C3.79117 4.36779 3.89527 4.41105 4.00749 4.41105C4.1143 4.41105 4.2157 4.37049 4.29277 4.29885L4.29412 4.2975L7.14267 1.44944V2.41838C7.14267 2.56707 7.22379 2.70631 7.35223 2.78066Z\" fill=\"#FF7A00\" />\n </svg>\n </div>\n </>\n }\n\n {/* {\n status === 1 &&\n <button onClick={() => {\n onClose && onClose()\n }} className={styles.btn}>+ New Transfer</button>\n } */}\n\n </Modal>\n}", "import type {\n Transaction,\n InjectedWallet,\n WalletModuleFactory,\n WalletBehaviourFactory,\n} from '@near-wallet-selector/core';\nimport { transactions } from 'near-api-js';\nimport type { AccessKeyViewRaw } from 'near-api-js/lib/providers/provider';\nimport { actionCreators } from '@near-js/transactions';\n\nimport { PublicKey } from 'near-api-js/lib/utils/key_pair';\nimport { encodeTransaction } from 'near-api-js/lib/transaction';\nimport { baseDecode } from '@near-js/utils';\nimport bs58 from 'bs58';\nimport { sha256 } from 'js-sha256';\nimport { setupWalletButton, removeWalletButton } from '../utils/initWalletButton';\nimport type { useBtcWalletSelector } from './btcWalletSelectorContext';\nimport { retryOperation, toHex } from '../utils';\nimport type { ENV } from '../config';\nimport { walletConfig } from '../config';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport Big from 'big.js';\n\nimport {\n checkGasTokenDebt,\n checkGasTokenBalance,\n checkSatoshiWhitelist,\n getAccountInfo,\n getCsnaAccountId,\n} from './btcUtils';\n\nimport {\n checkBtcTransactionStatus,\n getNearNonce,\n getNonce,\n receiveTransaction,\n} from '../utils/satoshi';\nimport { getVersion } from '../index';\n\nconst { transfer, functionCall } = actionCreators;\n\ndeclare global {\n interface Window {\n btcContext: ReturnType<typeof useBtcWalletSelector>;\n }\n}\n\ninterface BTCWalletParams {\n iconUrl?: string;\n deprecated?: boolean;\n autoConnect?: boolean;\n syncLogOut?: boolean;\n env?: ENV;\n}\n\nconst STORAGE_KEYS = {\n ACCOUNT: 'btc-wallet-account',\n PUBLIC_KEY: 'btc-wallet-publickey',\n BTC_PUBLIC_KEY: 'btc-wallet-btc-publickey',\n} as const;\n\nconst state: any = {\n saveAccount(account: string) {\n if (!account) {\n this.removeAccount();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.ACCOUNT, account);\n },\n removeAccount() {\n window.localStorage.removeItem(STORAGE_KEYS.ACCOUNT);\n },\n savePublicKey(publicKey: string) {\n if (!publicKey) {\n this.removePublicKey();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.PUBLIC_KEY, publicKey);\n },\n removePublicKey() {\n window.localStorage.removeItem(STORAGE_KEYS.PUBLIC_KEY);\n },\n saveBtcPublicKey(publicKey: string) {\n if (!publicKey) {\n this.removeBtcPublicKey();\n return;\n }\n window.localStorage.setItem(STORAGE_KEYS.BTC_PUBLIC_KEY, publicKey);\n },\n removeBtcPublicKey() {\n window.localStorage.removeItem(STORAGE_KEYS.BTC_PUBLIC_KEY);\n },\n clear() {\n this.removeAccount();\n this.removePublicKey();\n this.removeBtcPublicKey();\n },\n save(account: string, publicKey: string) {\n if (!account || !publicKey) {\n this.clear();\n return;\n }\n this.saveAccount(account);\n this.savePublicKey(publicKey);\n },\n getAccount() {\n return window.localStorage.getItem(STORAGE_KEYS.ACCOUNT);\n },\n getPublicKey() {\n return window.localStorage.getItem(STORAGE_KEYS.PUBLIC_KEY);\n },\n getBtcPublicKey() {\n return window.localStorage.getItem(STORAGE_KEYS.BTC_PUBLIC_KEY);\n },\n isValid() {\n const account = this.getAccount();\n const publicKey = this.getPublicKey();\n const btcPublicKey = this.getBtcPublicKey();\n\n const allEmpty = !account && !publicKey && !btcPublicKey;\n const allExist = account && publicKey && btcPublicKey;\n\n return allEmpty || allExist;\n },\n syncSave(account: string, publicKey: string, btcPublicKey: string) {\n if (!account || !publicKey || !btcPublicKey) {\n this.clear();\n return;\n }\n\n this.clear();\n\n this.savePublicKey(publicKey);\n this.saveBtcPublicKey(btcPublicKey);\n this.saveAccount(account);\n },\n};\n\nconst BTCWallet: WalletBehaviourFactory<InjectedWallet> = async ({\n metadata,\n options,\n store,\n emitter,\n logger,\n id,\n provider,\n}) => {\n const wallet = {\n signIn,\n signOut,\n getAccounts,\n verifyOwner,\n signMessage,\n isSignedIn,\n signAndSendTransaction,\n signAndSendTransactions,\n calculateGasLimit,\n };\n const env = (metadata as any).env || options.network.networkId || 'mainnet';\n const currentConfig = walletConfig[env as ENV];\n const walletNetwork = ['mainnet', 'private_mainnet'].includes(env) ? 'mainnet' : 'testnet';\n\n await initBtcContext();\n\n function validateWalletState() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const btcPublicKey = state.getBtcPublicKey();\n\n if ((!accountId && publicKey) || (accountId && !publicKey) || (!publicKey && btcPublicKey)) {\n state.clear();\n return false;\n }\n return true;\n }\n\n async function setupBtcContextListeners() {\n const handleConnectionUpdate = async () => {\n await checkBtcNetwork(walletNetwork);\n\n if (!state.isValid()) {\n state.clear();\n }\n\n validateWalletState();\n const btcContext = window.btcContext;\n if (btcContext.account) {\n const btcPublicKey = await btcContext.getPublicKey();\n if (btcPublicKey) {\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n await checkSatoshiWhitelist(btcContext.account, env);\n removeWalletButton();\n setupWalletButton(env, wallet as any, btcContext);\n }\n } else {\n removeWalletButton();\n setTimeout(() => {\n handleConnectionUpdate();\n }, 5000);\n }\n };\n\n const context = window.btcContext.getContext();\n\n context.on('updatePublicKey', async (btcPublicKey: string) => {\n console.log('updatePublicKey');\n state.clear();\n try {\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n\n if (!nearAddress || !nearPublicKey) {\n throw new Error('Failed to get near account info');\n }\n\n emitter.emit('accountsChanged', {\n accounts: [{ accountId: nearAddress }],\n });\n await handleConnectionUpdate();\n } catch (error) {\n console.error('Error updating public key:', error);\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n }\n });\n\n context.on('btcLoginError', async () => {\n console.log('btcLoginError');\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n await handleConnectionUpdate();\n });\n\n context.on('btcLogOut', async () => {\n console.log('btcLogOut');\n state.clear();\n emitter.emit('accountsChanged', { accounts: [] });\n await handleConnectionUpdate();\n });\n\n await handleConnectionUpdate();\n\n if (\n 'autoConnect' in metadata &&\n metadata.autoConnect &&\n localStorage.getItem('near-wallet-selector:selectedWalletId') === '\"btc-wallet\"'\n ) {\n await window.btcContext.autoConnect();\n }\n }\n\n async function initBtcContext() {\n console.log('initBtcContext');\n const btcContext = await retryOperation(\n async () => {\n const ctx = window.btcContext;\n if (!ctx) {\n throw new Error('btcContext not found');\n }\n return ctx;\n },\n (res) => !!res,\n {\n maxRetries: 10,\n delayMs: 500,\n },\n );\n\n await setupBtcContextListeners();\n return btcContext;\n }\n\n async function nearCall<T>(contractId: string, methodName: string, args: any) {\n return nearCallFunction<T>(contractId, methodName, args, { provider });\n }\n\n async function getNearAccountByBtcPublicKey(btcPublicKey: string) {\n const csna = await getCsnaAccountId(env);\n\n const nearPublicKey = await nearCall<string>(\n currentConfig.accountContractId,\n 'get_chain_signature_near_account_public_key',\n { btc_public_key: btcPublicKey },\n );\n\n state.syncSave(csna, nearPublicKey, btcPublicKey);\n\n return {\n nearAddress: csna,\n nearPublicKey,\n };\n }\n\n async function signIn({ contractId, methodNames }: any) {\n const btcContext = window.btcContext;\n\n state.clear();\n\n if (!state.getAccount() || !state.getPublicKey()) {\n await btcContext.login();\n }\n\n const btcPublicKey = await btcContext.getPublicKey();\n console.log('btcPublicKey:', btcPublicKey);\n if (!btcPublicKey) {\n throw new Error('No connected BTC wallet, please connect your BTC wallet first.');\n }\n\n const { nearAddress, nearPublicKey } = await getNearAccountByBtcPublicKey(btcPublicKey);\n\n return [\n {\n accountId: nearAddress,\n publicKey: nearPublicKey,\n },\n ];\n }\n\n async function signOut() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n if (!(accountId && publicKey)) {\n return;\n }\n const btcContext = window.btcContext;\n // @ts-ignore\n if (metadata.syncLogOut) {\n btcContext.logout();\n }\n\n state.clear();\n window.localStorage.removeItem('near-wallet-selector:selectedWalletId');\n removeWalletButton();\n }\n\n function isSignedIn() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n return accountId && publicKey;\n }\n\n async function getAccounts() {\n return [{ accountId: state.getAccount() }];\n }\n\n async function verifyOwner() {\n throw new Error(`Method not supported by ${metadata.name}`);\n }\n\n async function signMessage() {\n throw new Error(`Method not supported by ${metadata.name}`);\n }\n\n async function signAndSendTransaction(params: Transaction) {\n const transactions = [params];\n const result = await signAndSendTransactions({ transactions });\n if (Array.isArray(result)) {\n return result[0];\n } else {\n throw new Error(`Transaction failed: ${result}`);\n }\n }\n\n async function signAndSendTransactions(params: { transactions: Transaction[] }) {\n if (!validateWalletState()) {\n throw new Error('Wallet state is invalid, please reconnect your wallet.');\n }\n\n const btcContext = window.btcContext;\n const accountId = state.getAccount();\n\n const accountInfo = await getAccountInfo(accountId, currentConfig.accountContractId);\n\n // check gas token arrears\n await checkGasTokenDebt(accountInfo, env, true);\n\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.token] || '0';\n\n const { transferGasTransaction, useNearPayGas, gasLimit } = await calculateGasStrategy(\n gasTokenBalance,\n trans,\n );\n\n console.log('transferGasTransaction:', transferGasTransaction);\n console.log('useNearPayGas:', useNearPayGas);\n console.log('gasLimit:', gasLimit);\n\n // check gas token balance\n await checkGasTokenBalance(accountId, currentConfig.token, gasLimit, env);\n\n if (transferGasTransaction) {\n trans.unshift(transferGasTransaction);\n }\n\n console.log('calculateGasStrategy trans:', trans);\n\n const newTrans = await Promise.all(\n trans.map((transaction, index) => convertTransactionToTxHex(transaction, index)),\n );\n\n const nonceFromApi = await getNonce(currentConfig.base_url, accountId as string);\n\n const nonceFromContract = accountInfo?.nonce || 0;\n\n const nonce =\n Number(nonceFromApi) > Number(nonceFromContract)\n ? String(nonceFromApi)\n : String(nonceFromContract);\n\n const intention = {\n chain_id: '397',\n csna: accountId,\n near_transactions: newTrans.map((t) => t.txHex),\n gas_token: currentConfig.token,\n gas_limit: gasLimit,\n use_near_pay_gas: useNearPayGas,\n nonce,\n };\n\n const strIntention = JSON.stringify(intention);\n\n const signature = await btcContext.signMessage(strIntention);\n\n await receiveTransaction(currentConfig.base_url, {\n sig: signature,\n btcPubKey: state.getBtcPublicKey(),\n data: toHex(strIntention),\n });\n await checkBtcTransactionStatus(currentConfig.base_url, signature);\n\n const hash = newTrans.map((t) => t.hash);\n console.log('txHash:', hash);\n const result = await pollTransactionStatuses(options.network.networkId, hash);\n return result;\n }\n\n async function calculateGasLimit(params: { transactions: Transaction[] }) {\n const accountId = state.getAccount();\n\n const accountInfo = await getAccountInfo(accountId, currentConfig.accountContractId);\n\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.token] || '0';\n\n const { gasLimit } = await calculateGasStrategy(gasTokenBalance, trans);\n\n return gasLimit;\n }\n\n async function createGasTokenTransfer(accountId: string, amount: string) {\n return {\n signerId: accountId,\n receiverId: currentConfig.token,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: currentConfig.accountContractId,\n amount,\n msg: JSON.stringify('Repay'),\n },\n gas: new Big(50).mul(10 ** 12).toFixed(0),\n deposit: '1',\n },\n },\n ],\n } as Transaction;\n }\n\n async function recalculateGasWithTransfer(\n transferTx: Transaction,\n transactions: { txHex: string }[],\n useNearPayGas: boolean,\n perTxFee?: string,\n ) {\n const { txHex: transferTxHex } = await convertTransactionToTxHex(transferTx);\n\n let newGasLimit;\n if (useNearPayGas && perTxFee) {\n newGasLimit = new Big(perTxFee).mul(transactions.length + 1).toFixed(0);\n } else {\n newGasLimit = await getPredictedGasAmount(\n currentConfig.accountContractId,\n currentConfig.token,\n [transferTxHex, ...transactions.map((t) => t.txHex)],\n );\n }\n\n (transferTx.actions[0] as any).params.args.amount = newGasLimit;\n\n return { transferGasTransaction: transferTx, useNearPayGas, gasLimit: newGasLimit };\n }\n\n async function getPredictedGasAmount(\n accountContractId: string,\n tokenId: string,\n transactions: string[],\n ): Promise<string> {\n const predictedGas = await nearCall<string>(accountContractId, 'predict_txs_gas_token_amount', {\n gas_token_id: tokenId,\n near_transactions: transactions,\n });\n\n const predictedGasAmount = new Big(predictedGas).mul(1.2).toFixed(0);\n const miniGasAmount = 200 * transactions.length;\n const gasAmount = Math.max(Number(predictedGasAmount), miniGasAmount);\n console.log('predictedGas:', predictedGasAmount);\n return gasAmount.toString();\n }\n\n async function calculateGasStrategy(\n gasTokenBalance: string,\n transactions: Transaction[],\n ): Promise<{\n transferGasTransaction?: Transaction;\n useNearPayGas: boolean;\n gasLimit: string;\n }> {\n const accountId = state.getAccount();\n\n // check near balance\n // const nearAccount = await provider.query<any>({\n // request_type: 'view_account',\n // account_id: accountId,\n // finality: 'final',\n // });\n // const availableBalance = parseFloat(nearAccount.amount) / 10 ** 24;\n\n // console.log('available near balance:', availableBalance);\n\n // console.log('available gas token balance:', gasTokenBalance);\n\n const convertTx = await Promise.all(\n transactions.map((transaction, index) => convertTransactionToTxHex(transaction, index)),\n );\n\n // if (availableBalance > 0.2) {\n // console.log('near balance is enough, get the protocol fee of each transaction');\n // const gasTokens = await nearCall<Record<string, { per_tx_protocol_fee: string }>>(\n // currentConfig.accountContractId,\n // 'list_gas_token',\n // { token_ids: [currentConfig.token] },\n // );\n\n // console.log('list_gas_token gas tokens:', gasTokens);\n\n // const perTxFee = Math.max(\n // Number(gasTokens[currentConfig.token]?.per_tx_protocol_fee || 0),\n // 100,\n // );\n // console.log('perTxFee:', perTxFee);\n // const protocolFee = new Big(perTxFee || '0').mul(convertTx.length).toFixed(0);\n // console.log('protocolFee:', protocolFee);\n\n // // if (new Big(gasTokenBalance).gte(protocolFee)) {\n // // console.log('use near pay gas and enough gas token balance');\n // // return { useNearPayGas: true, gasLimit: protocolFee };\n // // } else {\n // console.log('use near pay gas and not enough gas token balance');\n // // gas token balance is not enough, need to transfer\n // const transferTx = await createGasTokenTransfer(accountId, protocolFee);\n // return recalculateGasWithTransfer(transferTx, convertTx, true, perTxFee.toString());\n // // }\n // } else {\n // console.log('near balance is not enough, predict the gas token amount required');\n const adjustedGas = await getPredictedGasAmount(\n currentConfig.accountContractId,\n currentConfig.token,\n convertTx.map((t) => t.txHex),\n );\n\n // if (new Big(gasTokenBalance).gte(adjustedGas)) {\n // console.log('use gas token and gas token balance is enough');\n // return { useNearPayGas: false, gasLimit: adjustedGas };\n // } else {\n // console.log('use gas token and gas token balance is not enough, need to transfer');\n const transferTx = await createGasTokenTransfer(accountId, adjustedGas);\n return recalculateGasWithTransfer(transferTx, convertTx, false);\n // }\n // }\n }\n\n // add utility function for converting Transaction to txHex\n async function convertTransactionToTxHex(transaction: Transaction, index = 0) {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const publicKeyFormat = PublicKey.from(publicKey);\n\n const { header } = await provider.block({\n finality: 'final',\n });\n\n const rawAccessKey = await provider\n .query<AccessKeyViewRaw>({\n request_type: 'view_access_key',\n account_id: accountId,\n public_key: publicKey,\n finality: 'final',\n })\n .catch((e) => {\n console.log('view_access_key error:', e);\n return undefined;\n });\n\n const accessKey = {\n ...rawAccessKey,\n nonce: BigInt(rawAccessKey?.nonce || 0),\n };\n\n const nearNonceFromApi = await getNearNonce(currentConfig.base_url, accountId);\n\n let nearNonceNumber = accessKey.nonce + BigInt(1);\n if (nearNonceFromApi) {\n nearNonceNumber =\n BigInt(nearNonceFromApi) > nearNonceNumber ? BigInt(nearNonceFromApi) : nearNonceNumber;\n }\n\n const newActions = transaction.actions\n .map((action) => {\n switch (action.type) {\n case 'FunctionCall':\n return functionCall(\n action.params.methodName,\n action.params.args,\n BigInt(action.params.gas),\n BigInt(action.params.deposit),\n );\n case 'Transfer':\n return transfer(BigInt(action.params.deposit));\n }\n })\n .filter(Boolean) as transactions.Action[];\n\n const _transaction = transactions.createTransaction(\n accountId,\n publicKeyFormat,\n transaction.receiverId,\n BigInt(nearNonceNumber) + BigInt(index),\n newActions,\n baseDecode(header.hash),\n );\n\n const txBytes = encodeTransaction(_transaction);\n const txHex = Array.from(txBytes, (byte) => ('0' + (byte & 0xff).toString(16)).slice(-2)).join(\n '',\n );\n\n const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));\n\n return { txBytes, txHex, hash };\n }\n\n async function checkBtcNetwork(network: string) {\n const btcContext = window.btcContext;\n if (!btcContext.account) return;\n const btcNetwork = await btcContext.getNetwork();\n const networkMap = {\n livenet: ['mainnet', 'private_mainnet'],\n testnet: ['testnet', 'dev'],\n };\n if (!networkMap[btcNetwork].includes(network)) {\n await btcContext.switchNetwork(btcNetwork === 'livenet' ? 'testnet' : 'livenet');\n }\n }\n\n return wallet as any;\n};\n\nexport function setupBTCWallet({\n iconUrl = 'https://assets.deltatrade.ai/assets/chain/btc.svg',\n deprecated = false,\n autoConnect = true,\n syncLogOut = true,\n env = 'mainnet',\n}: BTCWalletParams | undefined = {}): WalletModuleFactory<InjectedWallet> {\n console.log('\u26A1\uFE0F BTC Wallet Version:', getVersion(), 'env:', env);\n\n const btcWallet = async () => {\n return {\n id: 'btc-wallet',\n type: 'injected',\n metadata: {\n name: 'BTC Wallet',\n description: 'BTC Wallet',\n iconUrl,\n downloadUrl: iconUrl,\n deprecated,\n available: true,\n autoConnect,\n syncLogOut,\n env,\n },\n init: BTCWallet,\n } as any;\n };\n\n return btcWallet;\n}\n\nexport default {\n setupBTCWallet,\n};\n", "export type ENV = 'mainnet' | 'testnet' | 'private_mainnet' | 'dev';\n\nexport const walletConfig: Record<\n ENV,\n {\n base_url: string;\n token: string;\n accountContractId: string;\n bridgeContractId: string;\n walletUrl: string;\n bridgeUrl: string;\n }\n> = {\n dev: {\n base_url: 'https://api.dev.satoshibridge.top',\n token: 'nbtc-dev.testnet',\n accountContractId: 'acc-dev.testnet',\n bridgeContractId: 'brg-dev.testnet',\n walletUrl: 'https://wallet-dev.satoshibridge.top',\n bridgeUrl: 'https://dev.satoshibridge.top/',\n },\n testnet: {\n base_url: 'https://api.testnet.satoshibridge.top',\n token: 'nbtc2-nsp.testnet',\n accountContractId: 'acc2-nsp.testnet',\n bridgeContractId: 'brg2-nsp.testnet',\n walletUrl: 'https://wallet-test.satoshibridge.top',\n bridgeUrl: 'https://testnet.satoshibridge.top/',\n },\n private_mainnet: {\n base_url: 'https://api.stg.satoshibridge.top',\n token: 'nbtc.toalice.near',\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet-stg.satoshibridge.top',\n bridgeUrl: 'https://ramp.satos.network/',\n },\n mainnet: {\n base_url: 'https://api.mainnet.satoshibridge.top',\n token: 'nbtc.toalice.near',\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet.satoshibridge.top',\n bridgeUrl: 'https://www.satoshibridge.top/',\n },\n};\n\nexport const nearRpcUrls = {\n mainnet: [\n 'https://near.lava.build',\n 'https://rpc.mainnet.near.org',\n 'https://free.rpc.fastnear.com',\n 'https://near.drpc.org',\n ],\n testnet: ['https://rpc.testnet.near.org'],\n};\n\nexport const btcRpcUrls = {\n mainnet: 'https://mempool.space/api',\n testnet: 'https://mempool.space/testnet/api',\n};\n", "import type { Wallet } from '@near-wallet-selector/core';\nimport { walletConfig, type ENV } from '../config';\n\ninterface OriginalWallet {\n account: string | null;\n getPublicKey: () => Promise<string>;\n}\n\nexport function setupWalletButton(env: ENV, wallet: Wallet, originalWallet: OriginalWallet) {\n console.log('setupWalletButton');\n if (document.getElementById('satoshi-wallet-button')) {\n return;\n }\n\n const iframe = createIframe({\n iframeUrl: walletConfig[env].walletUrl,\n iframeStyle: { width: '400px', height: '650px' },\n });\n\n iframe.addEventListener('mouseenter', () => {\n if (document.activeElement !== iframe) {\n document.activeElement?.setAttribute('tabindex', 'null');\n setTimeout(() => {\n iframe.focus();\n }, 0);\n }\n });\n\n const button = createFloatingButtonWithIframe({\n openImageUrl: 'https://assets.deltatrade.ai/wallet-assets/wallet-btn.png',\n closeImageUrl: 'https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png',\n iframe,\n });\n\n setupButtonClickHandler(button, iframe, wallet, originalWallet);\n}\n\nfunction createFloatingButtonWithIframe({\n openImageUrl,\n closeImageUrl,\n iframe,\n}: {\n openImageUrl: string;\n closeImageUrl: string;\n iframe: HTMLIFrameElement;\n}): HTMLImageElement {\n const button = document.createElement('img');\n button.id = 'satoshi-wallet-button';\n\n const isIframeVisible = localStorage.getItem('btc-wallet-iframe-visible') === 'true';\n\n button.src = isIframeVisible ? closeImageUrl : openImageUrl;\n iframe.style.display = isIframeVisible ? 'block' : 'none';\n\n const windowWidth = window.innerWidth;\n const windowHeight = window.innerHeight;\n\n const savedPosition = JSON.parse(\n localStorage.getItem('btc-wallet-button-position') || '{\"right\": \"20px\", \"bottom\": \"20px\"}',\n );\n\n const right = Math.min(Math.max(20, parseInt(savedPosition.right)), windowWidth - 80);\n const bottom = Math.min(Math.max(20, parseInt(savedPosition.bottom)), windowHeight - 80);\n\n Object.assign(button.style, {\n position: 'fixed',\n bottom: `${bottom}px`,\n right: `${right}px`,\n zIndex: '100000',\n width: '60px',\n height: '60px',\n borderRadius: '50%',\n cursor: 'grab',\n transition: 'transform 0.15s ease',\n userSelect: 'none',\n });\n\n document.body.appendChild(button);\n\n let isDragging = false;\n let startX = 0;\n let startY = 0;\n let initialRight = 0;\n let initialBottom = 0;\n let dragStartTime = 0;\n\n button.addEventListener('mousedown', (e) => {\n isDragging = true;\n startX = e.clientX;\n startY = e.clientY;\n initialRight = parseInt(button.style.right);\n initialBottom = parseInt(button.style.bottom);\n dragStartTime = Date.now();\n\n button.style.cursor = 'grabbing';\n button.style.transition = 'none';\n e.preventDefault();\n });\n\n document.addEventListener('mousemove', (e) => {\n if (!isDragging) return;\n\n const deltaX = startX - e.clientX;\n const deltaY = startY - e.clientY;\n\n let newRight = initialRight + deltaX;\n let newBottom = initialBottom + deltaY;\n\n newRight = Math.min(Math.max(20, newRight), windowWidth - 80);\n newBottom = Math.min(Math.max(20, newBottom), windowHeight - 80);\n\n const snapThreshold = 20;\n const buttonLeft = windowWidth - newRight - 60;\n\n if (buttonLeft < snapThreshold) {\n newRight = windowWidth - 80;\n } else if (buttonLeft > windowWidth - snapThreshold - 60) {\n newRight = 20;\n }\n\n if (newBottom < snapThreshold) {\n newBottom = 20;\n } else if (newBottom > windowHeight - snapThreshold - 60) {\n newBottom = windowHeight - 80;\n }\n\n button.style.right = `${newRight}px`;\n button.style.bottom = `${newBottom}px`;\n\n updateIframePosition(iframe, newRight, newBottom, windowWidth, windowHeight);\n });\n\n document.addEventListener('mouseup', () => {\n if (!isDragging) return;\n\n const dragEndTime = Date.now();\n const isDragEvent = dragEndTime - dragStartTime > 200;\n\n isDragging = false;\n button.style.cursor = 'grab';\n button.style.transition = 'transform 0.15s ease';\n\n localStorage.setItem(\n 'btc-wallet-button-position',\n JSON.stringify({\n right: button.style.right,\n bottom: button.style.bottom,\n }),\n );\n\n if (!isDragEvent) {\n handleButtonClick();\n }\n });\n\n const handleButtonClick = () => {\n const isCurrentlyVisible = iframe.style.display === 'block';\n button.style.transform = 'scale(0.8)';\n setTimeout(() => {\n button.style.transform = 'scale(1)';\n }, 150);\n\n const newVisibleState = !isCurrentlyVisible;\n iframe.style.display = newVisibleState ? 'block' : 'none';\n button.src = newVisibleState ? closeImageUrl : openImageUrl;\n\n localStorage.setItem('btc-wallet-iframe-visible', String(newVisibleState));\n\n setTimeout(() => {\n if (newVisibleState) {\n iframe.focus();\n }\n }, 0);\n };\n\n button.onclick = null;\n\n return button;\n}\n\nfunction createIframe({\n iframeUrl,\n iframeStyle = {},\n}: {\n iframeUrl: string;\n iframeStyle?: { [key: string]: string };\n}): HTMLIFrameElement {\n const iframe = document.createElement('iframe');\n iframe.id = 'satoshi-wallet-iframe';\n iframe.allow = 'clipboard-read; clipboard-write';\n iframe.src = iframeUrl;\n\n const isVisible = localStorage.getItem('btc-wallet-iframe-visible') === 'true';\n\n Object.assign(iframe.style, {\n position: 'fixed',\n bottom: '90px',\n right: '20px',\n zIndex: '100000',\n boxShadow: '0 0 10px rgba(0, 0, 0, 0.1)',\n borderRadius: '10px',\n display: isVisible ? 'block' : 'none',\n border: 'none',\n ...iframeStyle,\n });\n\n document.body.appendChild(iframe);\n\n return iframe;\n}\n\nasync function setupButtonClickHandler(\n button: HTMLImageElement,\n iframe: HTMLIFrameElement,\n wallet: Wallet,\n originalWallet: OriginalWallet,\n) {\n const accountId = (await wallet?.getAccounts())?.[0].accountId;\n const originalAccountId = originalWallet.account;\n const originalPublicKey = await originalWallet.getPublicKey();\n console.log({ accountId, originalAccountId, originalPublicKey });\n const iframeSrc = new URL(iframe.src);\n iframeSrc.searchParams.set('origin', window.location.origin);\n accountId && iframeSrc.searchParams.set('accountId', accountId);\n originalAccountId && iframeSrc.searchParams.set('originalAccountId', originalAccountId);\n originalPublicKey && iframeSrc.searchParams.set('originalPublicKey', originalPublicKey);\n\n iframe.src = iframeSrc.toString();\n\n window.addEventListener('message', async (event) => {\n if (event.origin !== iframeSrc.origin) return;\n const { action, requestId, data } = event.data;\n\n if (action === 'signAndSendTransaction') {\n console.log('signAndSendTransaction message', event.data);\n try {\n const result = await wallet.signAndSendTransaction(data);\n console.log('signAndSendTransaction result', result);\n event.source?.postMessage(\n {\n requestId,\n data,\n success: true,\n },\n { targetOrigin: event.origin },\n );\n } catch (error: any) {\n console.error('signAndSendTransaction error', error);\n event.source?.postMessage(\n {\n requestId,\n error: error.message,\n success: false,\n },\n { targetOrigin: event.origin },\n );\n }\n }\n });\n}\n\nexport function removeWalletButton() {\n const button = document.getElementById('satoshi-wallet-button');\n button?.remove();\n const iframe = document.getElementById('satoshi-wallet-iframe');\n iframe?.remove();\n}\n\nfunction updateIframePosition(\n iframe: HTMLIFrameElement,\n buttonRight: number,\n buttonBottom: number,\n windowWidth: number,\n windowHeight: number,\n) {\n const iframeWidth = parseInt(iframe.style.width);\n const iframeHeight = parseInt(iframe.style.height);\n\n let iframeRight = buttonRight;\n let iframeBottom = buttonBottom + 70;\n\n if (iframeRight + iframeWidth > windowWidth - 20) {\n iframeRight = Math.max(20, windowWidth - iframeWidth - 20);\n }\n\n if (iframeBottom + iframeHeight > windowHeight - 20) {\n iframeBottom = Math.max(20, buttonBottom - iframeHeight - 10);\n }\n\n iframe.style.right = `${iframeRight}px`;\n iframe.style.bottom = `${iframeBottom}px`;\n}\n", "import type { ProviderService } from '@near-wallet-selector/core/src/lib/services';\nimport { providers } from 'near-api-js';\nimport { nearRpcUrls } from '../config';\nimport { delay } from '.';\nimport type { FinalExecutionOutcome } from '@near-wallet-selector/core';\n\nexport async function nearCallFunction<T>(\n contractId: string,\n methodName: string,\n args: any,\n options: {\n network?: string;\n provider?: ProviderService;\n },\n): Promise<T> {\n const nearProvider =\n options?.provider ||\n new providers.FailoverRpcProvider(\n nearRpcUrls[options?.network as keyof typeof nearRpcUrls].map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n );\n const res: any = await nearProvider.query({\n request_type: 'call_function',\n account_id: contractId,\n method_name: methodName,\n args_base64: Buffer.from(JSON.stringify(args)).toString('base64'),\n finality: 'final',\n });\n return JSON.parse(Buffer.from(res.result).toString()) as T;\n}\n\nexport async function pollTransactionStatuses(network: string, hashes: string[]) {\n const provider = new providers.FailoverRpcProvider(\n Object.values(nearRpcUrls[network as keyof typeof nearRpcUrls]).map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n );\n\n const maxAttempts = 30;\n let currentAttempt = 0;\n const pendingHashes = new Set(hashes);\n const results = new Map<string, FinalExecutionOutcome>();\n\n while (pendingHashes.size > 0 && currentAttempt < maxAttempts) {\n currentAttempt++;\n\n const promises = Array.from(pendingHashes).map(async (hash) => {\n try {\n const result = await provider.txStatus(hash, 'unused', 'FINAL');\n if (result && result.status) {\n console.log(`Transaction ${hash} result:`, result);\n results.set(hash, result);\n pendingHashes.delete(hash);\n }\n } catch (error: any) {\n console.error(`Failed to fetch transaction status for ${hash}: ${error.message}`);\n }\n });\n\n await Promise.all(promises);\n\n if (pendingHashes.size > 0) {\n if (currentAttempt === maxAttempts) {\n throw new Error(\n `Transactions not found after max attempts: ${Array.from(pendingHashes).join(', ')}`,\n );\n }\n console.log(\n `Waiting for ${pendingHashes.size} transactions, retrying ${maxAttempts - currentAttempt} more times`,\n );\n await delay(10000);\n }\n }\n\n const result = hashes.map((hash) => results.get(hash)).filter(Boolean) as FinalExecutionOutcome[];\n return result;\n}\n", "import Big from 'big.js';\nimport type { ENV } from '../config';\nimport { walletConfig, btcRpcUrls } from '../config';\nimport { delay, retryOperation } from '../utils';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport {\n checkBridgeTransactionStatus,\n getWhitelist,\n preReceiveDepositMsg,\n receiveDepositMsg,\n} from '../utils/satoshi';\nimport { Dialog } from '../utils/Dialog';\nimport type { FinalExecutionOutcome, Transaction } from '@near-wallet-selector/core';\nimport bitcoin from 'bitcoinjs-lib';\n// @ts-ignore\nimport coinselect from 'coinselect';\n\n/** NEAR Storage Deposit Amount */\nconst NEAR_STORAGE_DEPOSIT_AMOUNT = '1250000000000000000000';\n/** NBTC Storage Deposit Amount */\nconst NBTC_STORAGE_DEPOSIT_AMOUNT = '3000';\n/** NEAR Gas Limit */\nconst GAS_LIMIT = '50000000000000';\n/** New account min deposit amount */\nconst NEW_ACCOUNT_MIN_DEPOSIT_AMOUNT = '1000';\n\nfunction getBtcProvider() {\n if (typeof window === 'undefined' || !window.btcContext) {\n throw new Error('BTC Provider is not initialized.');\n }\n return window.btcContext;\n}\n\nasync function getNetwork() {\n const network = await getBtcProvider().getNetwork();\n console.log('btc network:', network);\n return network === 'livenet' ? 'mainnet' : 'testnet';\n}\n\nasync function getBtcRpcUrl() {\n const network = await getNetwork();\n return btcRpcUrls[network as keyof typeof btcRpcUrls];\n}\n\nasync function getConfig(env: ENV) {\n return walletConfig[env];\n}\n\nasync function nearCall<T>(contractId: string, methodName: string, args: any) {\n const network = await getNetwork();\n return nearCallFunction<T>(contractId, methodName, args, { network });\n}\n\nexport interface AccountInfo {\n nonce: string;\n gas_token: Record<string, string>;\n debt_info?: {\n gas_token_id: string;\n near_gas_debt_amount: string;\n protocol_fee_debt_amount: string;\n };\n relayer_fee?: { amount?: string };\n}\n\nexport async function getAccountInfo(csna: string, accountContractId: string) {\n const accountInfo = await nearCall<AccountInfo>(accountContractId, 'get_account', {\n account_id: csna,\n }).catch((error) => {\n return undefined;\n });\n console.log('get_account accountInfo:', accountInfo);\n return accountInfo;\n}\n\nexport async function checkGasTokenBalance(\n csna: string,\n gasToken: string,\n minAmount: string,\n env: ENV,\n) {\n const amount = await nearCall<string>(gasToken, 'ft_balance_of', { account_id: csna });\n console.log('gas token balance:', amount);\n if (new Big(amount).lt(minAmount)) {\n await Dialog.confirm({\n title: 'Gas token balance is insufficient',\n message: 'Please deposit gas token to continue, will open bridge website.',\n });\n const config = await getConfig(env);\n window.open(config.bridgeUrl, '_blank');\n throw new Error('Gas token balance is insufficient');\n }\n}\n\ntype CheckGasTokenDebtReturnType<T extends boolean> = T extends true\n ? void\n : { receiver_id: string; amount: string; msg: string } | undefined;\n\nexport async function checkGasTokenDebt<T extends boolean>(\n accountInfo: AccountInfo | undefined,\n env: ENV,\n autoDeposit?: T,\n): Promise<CheckGasTokenDebtReturnType<T>> {\n const debtAmount = new Big(accountInfo?.debt_info?.near_gas_debt_amount || 0)\n .plus(accountInfo?.debt_info?.protocol_fee_debt_amount || 0)\n .toString();\n const relayerFeeAmount = !accountInfo?.nonce\n ? NBTC_STORAGE_DEPOSIT_AMOUNT\n : accountInfo?.relayer_fee?.amount || 0;\n const hasDebtArrears = new Big(debtAmount).gt(0);\n const hasRelayerFeeArrears = new Big(relayerFeeAmount).gt(0);\n if (!hasDebtArrears && !hasRelayerFeeArrears) return;\n const config = await getConfig(env);\n const transferAmount = hasDebtArrears ? debtAmount : relayerFeeAmount;\n console.log('get_account:', accountInfo);\n\n const action = {\n receiver_id: config.accountContractId,\n amount: transferAmount.toString(),\n msg: JSON.stringify(hasDebtArrears ? 'Repay' : 'RelayerFee'),\n };\n\n if (!autoDeposit) return action as CheckGasTokenDebtReturnType<T>;\n\n const confirmed = await Dialog.confirm({\n title: hasDebtArrears ? 'Has gas token arrears' : 'Has relayer fee arrears',\n message: hasDebtArrears\n ? 'You have gas token arrears, please deposit gas token to continue.'\n : 'You have relayer fee arrears, please deposit relayer fee to continue.',\n });\n\n if (confirmed) {\n await executeBTCDepositAndAction({ action, env });\n\n await Dialog.alert({\n title: 'Deposit success',\n message: 'Deposit success, will continue to execute transaction.',\n });\n } else {\n throw new Error('Deposit failed, please deposit gas token first.');\n }\n}\n\ninterface DepositMsg {\n recipient_id: string;\n post_actions?: Array<{\n receiver_id: string;\n amount: string;\n memo?: string;\n msg: string;\n gas?: string;\n }>;\n extra_msg?: string;\n}\n\nexport async function getBtcGasPrice(): Promise<number> {\n const network = await getNetwork();\n const defaultFeeRate = network === 'mainnet' ? 5 : 2500;\n try {\n const btcRpcUrl = await getBtcRpcUrl();\n const res = await fetch(`${btcRpcUrl}/v1/fees/recommended`).then((res) => res.json());\n const feeRate = res.fastestFee;\n return feeRate || defaultFeeRate;\n } catch (error) {\n return defaultFeeRate;\n }\n}\n\nexport async function getBtcBalance() {\n const { account } = await retryOperation(getBtcProvider, (res) => !!res.account);\n\n if (!account) {\n console.error('BTC Account is not available.');\n return { rawBalance: 0, balance: 0, availableBalance: 0 };\n }\n\n const btcRpcUrl = await getBtcRpcUrl();\n const utxos = await fetch(`${btcRpcUrl}/address/${account}/utxo`).then((res) => res.json());\n\n const btcDecimals = 8;\n\n const rawBalance: number =\n utxos?.reduce((acc: number, cur: { value: number }) => acc + cur.value, 0) || 0;\n const balance = rawBalance / 10 ** btcDecimals;\n\n // get the recommended fee rate\n const feeRate = await getBtcGasPrice();\n\n // P2WPKH input vsize \u2248 69 vbytes\n const inputSize = (utxos?.length || 0) * 69;\n const outputSize = 33 * 2;\n const overheadSize = 11;\n const estimatedTxSize = inputSize + outputSize + overheadSize;\n\n const estimatedFee = Math.ceil(estimatedTxSize * feeRate);\n console.log('estimatedFee:', estimatedFee);\n const availableRawBalance = (rawBalance - estimatedFee).toFixed(0);\n const availableBalance = new Big(availableRawBalance)\n .div(10 ** btcDecimals)\n .round(btcDecimals, Big.roundDown)\n .toNumber();\n\n return {\n rawBalance,\n balance,\n availableBalance: Math.max(availableBalance, 0),\n };\n}\n\nexport async function getNBTCBalance(address: string, env?: ENV) {\n const config = await getConfig(env || 'mainnet');\n const rawBalance = await nearCall<string>(config.token, 'ft_balance_of', {\n account_id: address,\n });\n const balance = new Big(rawBalance)\n .div(10 ** 8)\n .round(8, Big.roundDown)\n .toNumber();\n const rawAvailableBalance = new Big(rawBalance).minus(1000).toNumber();\n const availableBalance = new Big(rawAvailableBalance)\n .div(10 ** 8)\n .round(8, Big.roundDown)\n .toNumber();\n return { balance, availableBalance, rawBalance, rawAvailableBalance };\n}\n\nexport async function sendBitcoin(\n address: string,\n amount: number,\n feeRate: number,\n): Promise<string> {\n const { sendBitcoin } = getBtcProvider();\n const txHash = await sendBitcoin(address, amount, { feeRate });\n return txHash;\n}\n\n/** estimate deposit receive amount, deduct protocol fee and repay amount */\nexport async function estimateDepositAmount(\n amount: string,\n option?: {\n env?: ENV;\n },\n) {\n return amount;\n}\n\nexport async function getDepositAmount(\n amount: string,\n option?: {\n env?: ENV;\n },\n) {\n const env = option?.env || 'mainnet';\n const config = await getConfig(env);\n const csna = await getCsnaAccountId(env);\n const accountInfo = await getAccountInfo(csna, config.accountContractId);\n const debtAction = await checkGasTokenDebt(accountInfo, env, false);\n const repayAmount = debtAction?.amount || 0;\n const {\n deposit_bridge_fee: { fee_min, fee_rate },\n min_deposit_amount,\n } = await nearCall<{\n deposit_bridge_fee: { fee_min: string; fee_rate: number };\n min_deposit_amount: string;\n }>(config.bridgeContractId, 'get_config', {});\n const depositAmount = Math.max(Number(min_deposit_amount), Number(amount));\n const protocolFee = Math.max(Number(fee_min), Number(depositAmount) * fee_rate);\n const newAccountMinDepositAmount = !accountInfo?.nonce ? NEW_ACCOUNT_MIN_DEPOSIT_AMOUNT : 0;\n const totalDepositAmount = new Big(depositAmount)\n .plus(protocolFee)\n .plus(repayAmount)\n .plus(newAccountMinDepositAmount)\n .round(0, Big.roundDown)\n .toNumber();\n\n return {\n depositAmount,\n totalDepositAmount,\n protocolFee,\n repayAmount,\n newAccountMinDepositAmount,\n };\n}\n\nexport async function getCsnaAccountId(env: ENV) {\n const config = await getConfig(env);\n const { getPublicKey } = getBtcProvider();\n const btcPublicKey = await getPublicKey();\n const csna = await nearCall<string>(\n config.accountContractId,\n 'get_chain_signature_near_account_id',\n {\n btc_public_key: btcPublicKey,\n },\n );\n return csna;\n}\n\ninterface ExecuteBTCDepositAndActionParams<T extends boolean = true> {\n action?: {\n receiver_id: string;\n amount: string;\n msg: string;\n };\n amount?: string;\n /** if registerDeposit is true, It will consume the deposit, otherwise it will be 0.000125 NEAR */\n registerDeposit?: string;\n feeRate?: number;\n env?: ENV;\n pollResult?: T;\n}\n\n/**\n * @param T - if true, return the poll result, otherwise return the btcTxHash\n */\ntype ExecuteBTCDepositAndActionReturn<T extends boolean> = T extends true\n ? FinalExecutionOutcome[]\n : string;\n\nexport async function executeBTCDepositAndAction<T extends boolean = true>({\n action,\n amount,\n feeRate,\n pollResult = true as T,\n registerDeposit,\n env = 'mainnet',\n}: ExecuteBTCDepositAndActionParams<T>): Promise<ExecuteBTCDepositAndActionReturn<T>> {\n try {\n const { getPublicKey } = getBtcProvider();\n\n const config = await getConfig(env);\n\n const btcPublicKey = await getPublicKey();\n\n if (!btcPublicKey) {\n throw new Error('BTC Public Key is not available.');\n }\n if (!amount && !action) {\n throw new Error('amount or action is required');\n }\n\n const csna = await getCsnaAccountId(env);\n\n const depositAmount = (action ? action.amount : amount) ?? '0';\n\n if (new Big(depositAmount).lt(0)) {\n throw new Error('amount must be greater than 0');\n }\n\n const { totalDepositAmount, protocolFee, repayAmount } = await getDepositAmount(depositAmount, {\n env,\n });\n\n const accountInfo = await getAccountInfo(csna, config.accountContractId);\n\n const newActions = [];\n\n const debtAction = await checkGasTokenDebt(accountInfo, env, false);\n\n if (debtAction) {\n newActions.push({\n ...debtAction,\n gas: GAS_LIMIT,\n });\n }\n\n // if action is not provided, and the gas token balance is less than the minimum deposit amount, then add the deposit action\n if (action) {\n newActions.push({\n ...action,\n gas: GAS_LIMIT,\n });\n }\n\n const storageDepositMsg: {\n storage_deposit_msg?: {\n contract_id: string;\n deposit: string;\n registration_only: boolean;\n };\n btc_public_key?: string;\n } = {};\n\n // check receiver_id is registered\n const registerRes = await nearCall<{\n available: string;\n total: string;\n }>(action?.receiver_id || config.token, 'storage_balance_of', {\n account_id: csna,\n });\n\n if (!registerRes?.available) {\n storageDepositMsg.storage_deposit_msg = {\n contract_id: action?.receiver_id || config.token,\n deposit: registerDeposit || NEAR_STORAGE_DEPOSIT_AMOUNT,\n registration_only: true,\n };\n }\n // check account is registerer\n if (!accountInfo?.nonce) {\n storageDepositMsg.btc_public_key = btcPublicKey;\n }\n\n const depositMsg: DepositMsg = {\n recipient_id: csna,\n post_actions: newActions.length > 0 ? newActions : undefined,\n extra_msg:\n Object.keys(storageDepositMsg).length > 0 ? JSON.stringify(storageDepositMsg) : undefined,\n };\n\n console.log('get_user_deposit_address params:', { deposit_msg: depositMsg });\n const userDepositAddress = await nearCall<string>(\n config.bridgeContractId,\n 'get_user_deposit_address',\n { deposit_msg: depositMsg },\n );\n const _feeRate = feeRate || (await getBtcGasPrice());\n\n // deposit amount detail\n console.table({\n 'User Deposit Address': userDepositAddress,\n 'Deposit Amount': depositAmount,\n 'Protocol Fee': protocolFee,\n 'Repay Amount': repayAmount,\n 'Total Deposit Amount': totalDepositAmount,\n 'Fee Rate': _feeRate,\n });\n\n const postActionsStr = newActions.length > 0 ? JSON.stringify(newActions) : undefined;\n\n await preReceiveDepositMsg(config.base_url, {\n btcPublicKey,\n depositType: postActionsStr || depositMsg.extra_msg ? 1 : 0,\n postActions: postActionsStr,\n extraMsg: depositMsg.extra_msg,\n });\n\n const txHash = await sendBitcoin(userDepositAddress, totalDepositAmount, _feeRate);\n\n await receiveDepositMsg(config.base_url, {\n btcPublicKey,\n txHash,\n depositType: postActionsStr || depositMsg.extra_msg ? 1 : 0,\n postActions: postActionsStr,\n extraMsg: depositMsg.extra_msg,\n });\n\n if (!pollResult) {\n return txHash as ExecuteBTCDepositAndActionReturn<T>;\n }\n\n const checkTransactionStatusRes = await checkBridgeTransactionStatus(config.base_url, txHash);\n console.log('checkBridgeTransactionStatus resp:', checkTransactionStatusRes);\n const network = await getNetwork();\n const result = await pollTransactionStatuses(network, [checkTransactionStatusRes.ToTxHash]);\n return result as ExecuteBTCDepositAndActionReturn<T>;\n } catch (error: any) {\n console.error('executeBTCDepositAndAction error:', error);\n throw error;\n }\n}\n\nexport async function checkSatoshiWhitelist(btcAccountId: string, env: ENV = 'mainnet') {\n if (env !== 'private_mainnet') return;\n const hasShownNotice = localStorage.getItem('btc-wallet-private-mainnet-notice');\n if (!hasShownNotice) {\n Dialog.alert({\n title: 'Notice',\n message:\n 'You are currently using Satoshi Private Mainnet. This is a private version for testing. Please try a small amount of assets in Ramp',\n });\n localStorage.setItem('btc-wallet-private-mainnet-notice', 'true');\n }\n if (!btcAccountId) return;\n const config = await getConfig(env);\n const whitelist = await getWhitelist(config.base_url);\n if (!whitelist?.length) return;\n const isWhitelisted = whitelist.includes(btcAccountId);\n if (!isWhitelisted) {\n Dialog.alert({\n title: 'Account is not whitelisted',\n message: `We're live on beta mainnet! Join the whitelist to on-ramp your BTC in just 24 hours.\nSign up now: <a style=\"color: #ff7a00; text-decoration: underline;\" href=\"https://forms.gle/rrTP1ZbGU5mRZpHdA\" target=\"_blank\">https://forms.gle/rrTP1ZbGU5mRZpHdA</a>`,\n dangerouslyUseHTML: true,\n closable: false,\n });\n throw new Error('Account is not whitelisted');\n }\n}\n\ninterface WithdrawParams {\n amount: string | number;\n feeRate?: number;\n env?: ENV;\n}\n\nexport async function getWithdrawTransaction({\n amount,\n feeRate,\n env = 'mainnet',\n}: WithdrawParams): Promise<Transaction> {\n const provider = getBtcProvider();\n const btcAddress = await provider.account;\n const config = await getConfig(env);\n\n // Get configuration\n const brgConfig = await nearCall<{\n min_withdraw_amount: string;\n withdraw_bridge_fee: {\n fee_rate: number;\n fee_min: string;\n };\n max_btc_gas_fee: string;\n change_address: string;\n }>(config.bridgeContractId, 'get_config', {});\n\n // Check minimum withdrawal amount\n if (brgConfig.min_withdraw_amount) {\n if (Number(amount) < Number(brgConfig.min_withdraw_amount)) {\n throw new Error('Mini withdraw amount is ' + brgConfig.min_withdraw_amount);\n }\n }\n\n // Calculate withdrawal fee\n const feePercent = Number(brgConfig.withdraw_bridge_fee.fee_rate) * Number(amount);\n const withdrawFee =\n feePercent > Number(brgConfig.withdraw_bridge_fee.fee_min)\n ? feePercent\n : Number(brgConfig.withdraw_bridge_fee.fee_min);\n\n // Get UTXOs\n const allUTXO = await nearCall<\n Record<\n string,\n {\n vout: number;\n balance: string;\n script: string;\n }\n >\n >(config.bridgeContractId, 'get_utxos_paged', {});\n\n if (!allUTXO || Object.keys(allUTXO).length === 0) {\n throw new Error('The network is busy, please try again later.');\n }\n\n // Format UTXOs\n const utxos = Object.keys(allUTXO).map((key) => {\n const txid = key.split('@');\n return {\n txid: txid[0],\n vout: allUTXO[key].vout,\n value: Number(allUTXO[key].balance),\n script: allUTXO[key].script,\n };\n });\n\n const _feeRate = feeRate || (await getBtcGasPrice());\n // Use coinselect to calculate inputs and outputs\n const { inputs, outputs, fee } = coinselect(\n utxos,\n [{ address: btcAddress, value: Number(amount) }],\n Math.ceil(_feeRate),\n );\n\n if (!outputs || !inputs) {\n throw new Error('The network is busy, please try again later.');\n }\n\n // Process outputs\n const maxBtcFee = Number(brgConfig.max_btc_gas_fee);\n const newFee = fee;\n const withdrawChangeAddress = brgConfig.change_address;\n\n if (newFee > maxBtcFee) {\n throw new Error('Gas exceeds maximum value');\n }\n\n // Process output amounts\n let userOutput, noUserOutput;\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n if (output.value.toString() === amount.toString()) {\n userOutput = output;\n } else {\n noUserOutput = output;\n }\n if (!output.address) {\n output.address = withdrawChangeAddress;\n }\n }\n\n userOutput.value = new Big(userOutput.value).minus(newFee).minus(withdrawFee).toNumber();\n\n if (noUserOutput) {\n noUserOutput.value = new Big(noUserOutput.value).plus(newFee).plus(withdrawFee).toNumber();\n } else {\n noUserOutput = {\n address: withdrawChangeAddress,\n value: new Big(newFee).plus(withdrawFee).toNumber(),\n };\n outputs.push(noUserOutput);\n }\n\n // Validate outputs\n const insufficientOutput = outputs.some((item: any) => item.value < 0);\n if (insufficientOutput) {\n throw new Error('Not enough gas');\n }\n\n // Verify input/output balance\n const inputSum = inputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n const outputSum = outputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n\n if (newFee + outputSum !== inputSum) {\n throw new Error('compute error');\n }\n\n // Build PSBT transaction\n const network = await getNetwork();\n const btcNetwork = network === 'mainnet' ? bitcoin.networks.bitcoin : bitcoin.networks.testnet;\n const psbt = new bitcoin.Psbt({ network: btcNetwork });\n\n // Add inputs\n const btcRpcUrl = await getBtcRpcUrl();\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i];\n const txData = await fetch(`${btcRpcUrl}/tx/${input.txid}`).then((res) => res.json());\n\n const inputOptions = {\n hash: input.txid,\n index: input.vout,\n sequence: 0xfffffffd,\n witnessUtxo: {\n script: Buffer.from(txData.vout[input.vout].scriptpubkey, 'hex'),\n value: input.value,\n },\n };\n\n psbt.addInput(inputOptions);\n }\n\n // Add outputs\n outputs.forEach((output: { address: string; value: any }) => {\n psbt.addOutput({\n address: output.address,\n value: output.value,\n });\n });\n\n // Build contract call message\n const _inputs = inputs.map((item: any) => {\n return `${item.txid}:${item.vout}`;\n });\n\n const txOutputs = psbt.txOutputs.map((item: any) => {\n return {\n script_pubkey: uint8ArrayToHex(item.script),\n value: item.value,\n };\n });\n\n const msg = {\n Withdraw: {\n target_btc_address: btcAddress,\n input: _inputs,\n output: txOutputs,\n },\n };\n const csna = await getCsnaAccountId(env);\n // Finally return the transaction object\n const transaction: Transaction = {\n receiverId: config.token,\n signerId: csna,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.bridgeContractId,\n amount: amount.toString(),\n msg: JSON.stringify(msg),\n },\n gas: '300000000000000', // 300 TGas\n deposit: '1', // 1 yoctoNEAR\n },\n },\n ],\n };\n return transaction;\n}\n\n// Helper function\nfunction uint8ArrayToHex(uint8Array: Uint8Array): string {\n return Array.from(uint8Array)\n .map((byte) => byte.toString(16).padStart(2, '0'))\n .join('');\n}\n", "interface RequestOptions<T> extends RequestInit {\n body?: RequestInit['body'] | any;\n retryCount?: number;\n timeout?: number;\n cacheTimeout?: number;\n pollingInterval?: number;\n maxPollingAttempts?: number;\n shouldStopPolling?: (response: T) => boolean;\n}\n\nconst cache = new Map<string, { timestamp: number; data: any }>();\n\nconst defaultCacheTimeout = 3000;\n\nexport default async function request<T>(url: string, options?: RequestOptions<T>): Promise<T> {\n const defaultHeaders = {\n 'Content-Type': 'application/json',\n };\n\n const cacheTimeout = options?.cacheTimeout || defaultCacheTimeout;\n\n const headers = {\n ...defaultHeaders,\n ...options?.headers,\n };\n\n let body = options?.body;\n if (headers['Content-Type'] === 'application/json' && body && typeof body !== 'string') {\n body = JSON.stringify(body);\n }\n\n const method = options?.method || 'GET';\n const cacheKey = method.toUpperCase() === 'GET' ? url : null;\n\n if (cacheKey) {\n const cached = cache.get(cacheKey);\n const isCacheValid = cached && Date.now() - cached.timestamp < cacheTimeout;\n if (isCacheValid) {\n return Promise.resolve(cached.data as T);\n }\n }\n\n const newOptions: RequestInit = {\n ...options,\n headers,\n body,\n method,\n };\n\n const retryCount = options?.retryCount ?? 1;\n\n const controller = new AbortController();\n const timeout = options?.timeout || 20000;\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const res = await fetch(url, { ...newOptions, signal: controller.signal }).finally(() =>\n clearTimeout(timeoutId),\n );\n\n if (!res.ok) throw new Error(res.statusText);\n const data = await res.json();\n\n if (options?.shouldStopPolling) {\n if (options.shouldStopPolling(data)) {\n return data as T;\n }\n if (options.maxPollingAttempts && options.maxPollingAttempts > 0) {\n await new Promise((resolve) => setTimeout(resolve, options.pollingInterval));\n return request(url, {\n ...options,\n maxPollingAttempts: options.maxPollingAttempts - 1,\n });\n }\n throw new Error('Polling failed: maximum attempts reached without meeting the condition');\n }\n\n if (cacheKey) {\n cache.set(cacheKey, { timestamp: Date.now(), data });\n setTimeout(() => {\n cache.delete(cacheKey);\n }, cacheTimeout);\n }\n\n return data as T;\n } catch (err) {\n if (retryCount > 0) {\n console.log(`Retrying... attempts left: ${retryCount}`);\n return request(url, { ...options, retryCount: retryCount - 1 });\n } else if (options?.pollingInterval && options?.maxPollingAttempts) {\n if (options.maxPollingAttempts > 0) {\n console.log(`Polling... attempts left: ${options.maxPollingAttempts}`);\n await new Promise((resolve) => setTimeout(resolve, options.pollingInterval));\n return request(url, {\n ...options,\n maxPollingAttempts: options.maxPollingAttempts - 1,\n retryCount: retryCount,\n });\n }\n }\n throw err;\n }\n}\n", "import { toHex } from '.';\nimport request from './request';\n\ninterface RequestResult<T> {\n result_code: number;\n result_message: string;\n result_data: T;\n}\n\nexport async function getNonce(url: string, accountId: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<string>>(\n `${url}/v1/nonce?csna=${accountId}`,\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function getNearNonce(url: string, accountId: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<string>>(\n `${url}/v1/nonceNear?csna=${accountId}`,\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function receiveTransaction(url: string, data: any) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveTransaction`,\n {\n method: 'POST',\n body: data,\n },\n );\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\ninterface ReceiveDepositMsgParams {\n btcPublicKey: string;\n txHash: string;\n depositType?: number;\n postActions?: string;\n extraMsg?: string;\n}\n\nexport async function preReceiveDepositMsg(\n url: string,\n { btcPublicKey, depositType = 1, postActions, extraMsg }: Omit<ReceiveDepositMsgParams, 'txHash'>,\n) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/preReceiveDepositMsg`,\n {\n method: 'POST',\n body: { btcPublicKey, depositType, postActions, extraMsg },\n },\n );\n console.log('preReceiveDepositMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function receiveDepositMsg(\n url: string,\n { btcPublicKey, txHash, depositType = 1, postActions, extraMsg }: ReceiveDepositMsgParams,\n) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveDepositMsg`,\n {\n method: 'POST',\n body: { btcPublicKey, txHash, depositType, postActions, extraMsg },\n },\n );\n console.log('receiveDepositMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function checkBridgeTransactionStatus(url: string, txHash: string) {\n const { result_code, result_message, result_data } = await request<\n RequestResult<{ Status: number; ToTxHash: string }>\n >(`${url}/v1/bridgeFromTx?fromTxHash=${txHash}&fromChainId=1`, {\n timeout: 300000,\n pollingInterval: 5000,\n maxPollingAttempts: 60,\n shouldStopPolling: (res) =>\n res.result_code === 0 && [4, 102].includes(res.result_data?.Status || 0),\n });\n console.log('checkTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 4) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function checkBtcTransactionStatus(url: string, sig: string) {\n const { result_code, result_message, result_data } = await request<\n RequestResult<{ Status: number; NearHashList: string[] }>\n >(`${url}/v1/btcTx?sig=${toHex(sig)}`, {\n timeout: 300000,\n pollingInterval: 5000,\n maxPollingAttempts: 60,\n shouldStopPolling: (res) =>\n res.result_code === 0 && [3, 101, 102].includes(res.result_data?.Status || 0),\n });\n console.log('checkBtcTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 3) {\n throw new Error(result_message);\n }\n return result_data;\n}\n\nexport async function getWhitelist(url: string) {\n const data = await request<string[]>(`${url}/v1/whitelist/users`).catch((error) => {\n console.error('getWhitelist error:', error);\n return [] as string[];\n });\n return data;\n}\n\nexport async function receiveWithdrawMsg(url: string, txHash: string) {\n const { result_code, result_message, result_data } = await request<RequestResult<any>>(\n `${url}/v1/receiveWithdrawMsg`,\n {\n method: 'POST',\n body: { txHash },\n },\n );\n console.log('receiveWithdrawMsg resp:', { result_code, result_message, result_data });\n if (result_code !== 0) {\n throw new Error(result_message);\n }\n return result_data;\n}\n"],
|
5
|
+
"mappings": "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",
|
6
|
+
"names": ["messageEl", "EventEmitter", "import_events", "_network", "_event", "EventEmitter", "import_chains", "import_react", "import_react", "getNetwork", "sendBitcoin", "import_react", "import_react", "import_events", "chainId", "digest", "classes", "css", "import_jsx_runtime", "import_react", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "import_chains", "import_react", "import_viem", "import_util", "bitcore", "import_react", "digest", "classes", "css", "import_jsx_runtime", "import_react", "import_viem", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "digest", "classes", "css", "import_jsx_runtime", "import_util", "import_chains", "import_events", "import_viem", "import_react", "import_jsx_runtime", "_a", "sendBitcoin", "options", "getNetwork", "smartAccount", "connector", "accounts", "_b", "import_react", "import_jsx_runtime", "Modal", "import_jsx_runtime", "Modal", "import_jsx_runtime", "React", "sendBitcoin", "getNetwork", "import_near_api_js", "import_utils", "_a", "result", "import_big", "Big", "res", "sendBitcoin", "coinselect", "bitcoin", "nearCall", "_0", "transactions", "Big", "bs58"]
|
7
7
|
}
|