btc-wallet 0.5.20-beta → 0.5.22-beta
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/core/btcUtils.d.ts +2 -1
- package/dist/index.js +240 -175
- package/dist/index.js.map +3 -3
- package/dist/utils/satoshi.d.ts +35 -0
- package/esm/index.js +240 -175
- package/esm/index.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
{
|
2
2
|
"version": 3,
|
3
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/config.ts", "../src/core/btcUtils.ts", "../src/utils/nearUtils.ts", "../src/utils/request.ts", "../src/utils/satoshi.ts", "../src/core/setupBTCWallet/state.ts", "../src/utils/initWalletButton.ts", "../src/core/setupBTCWallet/index.ts"],
|
4
|
-
"sourcesContent": ["export * from './connector';\nexport { ConnectProvider } from './context';\nexport * from './hooks';\nexport * from './core/btcWalletSelectorContext';\nexport * from './core/setupBTCWallet/index';\nexport * from './core/btcUtils';\nexport * from './config';\nexport const getVersion = () => {\n return '0.5.20-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\n const showGuideDialog = async () => {\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 };\n\n if (!universalLink) {\n await showGuideDialog();\n return false;\n }\n\n const openWallet = () => {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = universalLink;\n document.body.appendChild(iframe);\n\n setTimeout(async () => {\n document.body.removeChild(iframe);\n await showGuideDialog();\n }, 2000);\n };\n\n window.location.href = universalLink;\n setTimeout(openWallet, 100);\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 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 { Address } from 'sats-connect';\nimport icon from '../icons/xverse.png';\nimport { BaseConnector, type WalletMetadata } from './base';\nimport { MobileWalletConnect } from './universalLink';\nimport { isMobile } from '../utils';\n\ninterface XverseAddress extends Address {\n walletType: 'software' | 'ledger';\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 { AddressPurpose } = await import('sats-connect');\n const provider = this.getProvider();\n await provider.request('wallet_requestPermissions', undefined);\n const { result: walletType } = await provider.request('wallet_getWalletType', undefined);\n\n const { result } = await provider.request('getAddresses', {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n });\n const addresses: XverseAddress[] = result.addresses.map((item: XverseAddress) => ({\n ...item,\n walletType,\n }));\n console.log('\uD83D\uDE80 ~ XverseConnector ~ loadAccounts ~ res:', addresses);\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()) {\n try {\n this.getProvider();\n } catch (error) {\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 getAddresses() {\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n return JSON.parse(data) as XverseAddress[];\n }\n return [];\n }\n async getCurrentAddress() {\n const addresses = await this.getAddresses();\n const address = addresses?.[0];\n if (!address) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n return address;\n }\n async getAccounts() {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAddresses();\n return addresses.map((item) => item.address);\n }\n async getPublicKey(): Promise<string> {\n const address = await this.getCurrentAddress();\n return address.publicKey;\n }\n async signMessage(signStr: string): Promise<string> {\n const address = await this.getCurrentAddress();\n const provider = this.getProvider();\n const { result } = await provider.request('signMessage', {\n address: address.address,\n message: signStr,\n protocol: 'ECDSA',\n });\n console.log('xverse walletType', address.walletType);\n console.log('xverse raw sig', result.signature);\n const modifiedSig = Buffer.from(result.signature, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n const sig = modifiedSig.toString('base64');\n console.log('xverse modified sig', sig);\n return sig;\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 const provider = window.BitcoinProvider;\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return provider;\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 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 console.error('btcLoginError', e);\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}", "export type ENV = 'mainnet' | 'testnet' | 'private_mainnet' | 'dev';\n\nexport const walletConfig: Record<\n ENV,\n {\n base_url: string;\n btcToken: string;\n btcTokenDecimals: number;\n nearToken: string;\n nearTokenDecimals: number;\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 btcToken: 'nbtc-dev.testnet',\n btcTokenDecimals: 8,\n nearToken: 'wrap.testnet',\n nearTokenDecimals: 24,\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 btcToken: 'nbtc2-nsp.testnet',\n btcTokenDecimals: 8,\n nearToken: 'wrap.testnet',\n nearTokenDecimals: 24,\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 btcToken: 'nbtc.toalice.near',\n btcTokenDecimals: 8,\n nearToken: 'wrap.near',\n nearTokenDecimals: 24,\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet-stg.satoshibridge.top',\n bridgeUrl: 'https://old.ramp.satos.network',\n },\n mainnet: {\n base_url: 'https://api.satos.network',\n btcToken: 'nbtc.bridge.near',\n btcTokenDecimals: 8,\n nearToken: 'wrap.near',\n nearTokenDecimals: 24,\n accountContractId: 'acc.ref-labs.near',\n bridgeContractId: 'btc-connector.bridge.near',\n walletUrl: 'https://wallet.satoshibridge.top',\n bridgeUrl: 'https://ramp.satos.network',\n },\n};\n\nexport function getWalletConfig(env: ENV) {\n const config = walletConfig[env];\n const network = env === 'mainnet' || env === 'private_mainnet' ? 'mainnet' : 'testnet';\n return {\n ...config,\n network,\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 Big from 'big.js';\nimport type { ENV } from '../config';\nimport { getWalletConfig, btcRpcUrls } from '../config';\nimport { retryOperation } from '../utils';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport {\n calculateGasLimit,\n checkBridgeTransactionStatus,\n getAccountInfo,\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 * as ecc from '@bitcoinerlab/secp256k1';\n// @ts-ignore\nimport coinselect from 'coinselect';\n\n// init ecc lib\nbitcoin.initEccLib(ecc);\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 nearCall<T>(contractId: string, methodName: string, args: any) {\n const network = await getNetwork();\n return nearCallFunction<T>(contractId, methodName, args, { network });\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 csna: string,\n env: ENV,\n autoDeposit?: T,\n): Promise<CheckGasTokenDebtReturnType<T>> {\n const accountInfo = await getAccountInfo({ csna, env });\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 = getWalletConfig(env);\n const transferAmount = hasDebtArrears ? debtAmount : relayerFeeAmount;\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 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 /** default is true, if true, new account minimum deposit amount 1000sat, otherwise 0 */\n newAccountMinDepositAmount?: boolean;\n },\n) {\n const env = option?.env || 'mainnet';\n const _newAccountMinDepositAmount = option?.newAccountMinDepositAmount ?? true;\n const config = getWalletConfig(env);\n const csna = await getCsnaAccountId(env);\n const accountInfo = await getAccountInfo({ csna, env });\n const debtAction = await checkGasTokenDebt(csna, 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 =\n !accountInfo?.nonce && _newAccountMinDepositAmount ? 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 = getWalletConfig(env);\n const { getPublicKey } = getBtcProvider();\n const btcPublicKey = await getPublicKey();\n if (!btcPublicKey) {\n throw new Error('BTC Public Key is not available.');\n }\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\nfunction checkDepositDisabledAddress() {\n const data = localStorage.getItem('btc-connect-xverse-addresses-Mainnet');\n if (!data) return;\n const addresses = JSON.parse(data);\n const address = addresses?.[0];\n if (address.walletType === 'ledger' && !['p2wpkh', 'p2sh'].includes(address.addressType)) {\n throw new Error('Ledger is only supported for p2wpkh and p2sh address');\n }\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 newAccountMinDepositAmount?: boolean;\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 newAccountMinDepositAmount,\n}: ExecuteBTCDepositAndActionParams<T>): Promise<ExecuteBTCDepositAndActionReturn<T>> {\n try {\n console.log('executeBTCDepositAndAction start', amount);\n checkDepositDisabledAddress();\n const { getPublicKey } = getBtcProvider();\n\n const config = getWalletConfig(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 newAccountMinDepositAmount,\n });\n\n const accountInfo = await getAccountInfo({ csna, env });\n\n const newActions = [];\n\n const debtAction = await checkGasTokenDebt(csna, 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 const registerContractId = (action?.receiver_id || config.btcToken).replace(\n config.accountContractId,\n config.btcToken,\n );\n console.log('executeBTCDepositAndAction registerContractId', registerContractId);\n // check receiver_id is registered\n const registerRes = await nearCall<{\n available: string;\n total: string;\n }>(registerContractId, 'storage_balance_of', {\n account_id: csna,\n });\n\n if (!registerRes?.available) {\n storageDepositMsg.storage_deposit_msg = {\n contract_id: registerContractId,\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 !== '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 = getWalletConfig(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 console.log('=== Start getWithdrawTransaction ===');\n\n const provider = getBtcProvider();\n const btcAddress = provider.account;\n\n const config = getWalletConfig(env);\n\n const csna = await getCsnaAccountId(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 min_change_amount: 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 console.log('Withdrawal Fee:', {\n feePercent,\n withdrawFee,\n minFee: brgConfig.withdraw_bridge_fee.fee_min,\n });\n\n // calculate gas limit mock transaction\n const gasLimit = await calculateGasLimit({\n csna,\n transactions: [\n {\n signerId: '',\n receiverId: config.btcToken,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.btcToken,\n amount: '100',\n msg: '',\n },\n gas: '300000000000000',\n deposit: '1',\n },\n },\n ],\n },\n ],\n env,\n });\n const finalAmount = Number(gasLimit) > 0 ? Number(amount) - Number(gasLimit) : Number(amount);\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 console.log('All UTXOs:', allUTXO);\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 console.log('Formatted UTXOs:', utxos);\n\n const _feeRate = feeRate || (await getBtcGasPrice());\n console.log('Fee Rate:', _feeRate);\n\n // Use coinselect to calculate inputs and outputs\n const coinSelectResult = coinselect(\n utxos,\n [{ address: btcAddress, value: Number(finalAmount) }],\n Math.ceil(_feeRate),\n );\n console.log('Coinselect Result:', coinSelectResult);\n\n const { inputs, outputs, fee } = coinSelectResult;\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 transactionFee = fee;\n console.log('Transaction Fee:', { transactionFee, maxBtcFee });\n\n if (transactionFee > maxBtcFee) {\n throw new Error('Gas exceeds maximum value');\n }\n\n // Process output amounts\n let recipientOutput, changeOutput;\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n if (output.value.toString() === finalAmount.toString()) {\n recipientOutput = output;\n } else {\n changeOutput = output;\n }\n if (!output.address) {\n output.address = brgConfig.change_address;\n }\n }\n console.log('Initial Outputs:', { recipientOutput, changeOutput });\n\n // Deduct fees from recipient output\n recipientOutput.value = new Big(recipientOutput.value)\n .minus(transactionFee)\n .minus(withdrawFee)\n .toNumber();\n\n if (changeOutput) {\n changeOutput.value = new Big(changeOutput.value)\n .plus(transactionFee)\n .plus(withdrawFee)\n .toNumber();\n\n // Handle minimum input value logic\n const remainingInputs = [...inputs];\n let smallestInput = Math.min.apply(\n null,\n remainingInputs.map((input) => input.value),\n );\n let remainingChangeAmount = changeOutput.value;\n console.log('Initial Change Processing:', { smallestInput, remainingChangeAmount });\n\n while (\n remainingChangeAmount >= smallestInput &&\n smallestInput > 0 &&\n remainingInputs.length > 0\n ) {\n remainingChangeAmount -= smallestInput;\n changeOutput.value = remainingChangeAmount;\n const smallestInputIndex = remainingInputs.findIndex(\n (input) => input.value === smallestInput,\n );\n if (smallestInputIndex > -1) {\n remainingInputs.splice(smallestInputIndex, 1);\n }\n smallestInput = Math.min.apply(\n null,\n remainingInputs.map((input) => input.value),\n );\n console.log('Change Processing Loop:', {\n remainingChangeAmount,\n smallestInput,\n remainingInputsCount: remainingInputs.length,\n });\n }\n\n // Handle minimum change amount logic\n const minChangeAmount = Number(brgConfig.min_change_amount);\n let additionalFee = 0;\n console.log('Checking minimum change amount:', {\n changeValue: changeOutput.value,\n minChangeAmount,\n });\n\n let finalOutputs = [...outputs];\n if (changeOutput.value === 0) {\n finalOutputs = finalOutputs.filter((output) => output.value !== 0);\n console.log('Removed zero-value change output', finalOutputs);\n } else if (changeOutput.value < minChangeAmount) {\n additionalFee = minChangeAmount - changeOutput.value;\n recipientOutput.value -= additionalFee;\n changeOutput.value = minChangeAmount;\n console.log('Adjusted for minimum change amount:', {\n additionalFee,\n newRecipientValue: recipientOutput.value,\n newChangeValue: changeOutput.value,\n });\n }\n } else {\n changeOutput = {\n address: brgConfig.change_address,\n value: new Big(transactionFee).plus(withdrawFee).toNumber(),\n };\n outputs.push(changeOutput);\n console.log('Created new change output:', changeOutput);\n }\n\n // Validate outputs\n const insufficientOutput = outputs.some((item: any) => item.value < 0);\n if (insufficientOutput) {\n console.error('Negative output value detected');\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 console.log('Balance verification:', { inputSum, outputSum, transactionFee });\n\n if (transactionFee + outputSum !== inputSum) {\n console.error('Balance mismatch:', { inputSum, outputSum, transactionFee });\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 console.log('outputs:', JSON.stringify(outputs));\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\n // Finally return the transaction object\n const transaction: Transaction = {\n receiverId: config.btcToken,\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\n console.log('=== End getWithdrawTransaction ===');\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", "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';\nimport { withCache } from './request';\n\nexport function getNearProvider(option: { network?: string; provider?: ProviderService }) {\n return (\n option.provider ||\n new providers.FailoverRpcProvider(\n nearRpcUrls[option?.network as keyof typeof nearRpcUrls].map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n )\n );\n}\n\nexport async function nearCallFunction<T>(\n contractId: string,\n methodName: string,\n args: any,\n options: {\n network?: string;\n provider?: ProviderService;\n cacheTimeout?: number;\n skipCache?: boolean;\n } = {},\n): Promise<T> {\n if (!options.skipCache) {\n const cacheKey = `near:${contractId}:${methodName}:${args ? JSON.stringify(args) : ''}`;\n return withCache(\n cacheKey,\n () => executeNearCall<T>(contractId, methodName, args, options),\n options.cacheTimeout || 5000,\n );\n }\n\n return executeNearCall<T>(contractId, methodName, args, options);\n}\n\nasync function executeNearCall<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 = getNearProvider(options);\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", "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 function withCache<T>(\n key: string,\n fetcher: () => Promise<T>,\n timeout: number = defaultCacheTimeout,\n): Promise<T> {\n const cached = cache.get(key);\n const isCacheValid = cached && Date.now() - cached.timestamp < timeout;\n\n if (isCacheValid) {\n return Promise.resolve(cached.data as T);\n }\n\n return fetcher().then((data) => {\n cache.set(key, { timestamp: Date.now(), data });\n setTimeout(() => {\n cache.delete(key);\n }, timeout);\n return data;\n });\n}\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 throw new Error('Polling should continue');\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 console.error(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 return Promise.reject(err);\n }\n}\n", "import { toHex } from '.';\nimport request from './request';\nimport type { AccessKeyViewRaw } from 'near-api-js/lib/providers/provider';\nimport { actionCreators } from '@near-js/transactions';\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 type { Transaction } from '@near-wallet-selector/core';\nimport { getNearProvider, nearCallFunction } from './nearUtils';\nimport { getWalletConfig, type ENV } from '../config';\nimport { transactions } from 'near-api-js';\nimport Big from 'big.js';\nimport { Dialog } from './Dialog';\nimport state from '../core/setupBTCWallet/state';\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 const status = res.result_data?.Status || 0;\n return res.result_code === 0 && (status === 4 || status >= 50);\n },\n });\n console.log('checkTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 4) {\n throw new Error(result_message || `Transaction failed, status: ${result_data?.Status}`);\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 const status = res.result_data?.Status || 0;\n return res.result_code === 0 && (status === 3 || status >= 10);\n },\n });\n console.log('checkBtcTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 3) {\n throw new Error(result_message || `Transaction failed, status: ${result_data?.Status}`);\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\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, env }: { csna: string; env: ENV }) {\n const config = getWalletConfig(env);\n const accountInfo = await nearCallFunction<AccountInfo>(\n config.accountContractId,\n 'get_account',\n {\n account_id: csna,\n },\n { network: config.network },\n ).catch((error) => {\n return undefined;\n });\n console.log('get_account accountInfo:', accountInfo);\n return accountInfo;\n}\n\nexport async function getTokenBalance({\n csna,\n tokenId,\n env,\n}: {\n csna: string;\n tokenId: string;\n env: ENV;\n}): Promise<{ balance: number; rawBalance: string }> {\n const config = getWalletConfig(env);\n const nearProvider = getNearProvider({ network: config.network });\n try {\n if (tokenId === config.nearToken) {\n const nearAccount = await nearProvider.query<any>({\n request_type: 'view_account',\n account_id: csna,\n finality: 'final',\n });\n const balance = parseFloat(nearAccount.amount) / 10 ** config.nearTokenDecimals;\n return { balance, rawBalance: nearAccount.amount };\n } else {\n const res = await nearCallFunction<string>(\n tokenId,\n 'ft_balance_of',\n { account_id: csna },\n { network: config.network },\n );\n const decimals =\n tokenId === config.btcToken\n ? config.btcTokenDecimals\n : (\n await nearCallFunction<{ decimals: number }>(\n tokenId,\n 'ft_metadata',\n {},\n { network: config.network },\n )\n ).decimals;\n const balance = parseFloat(res) / 10 ** decimals;\n return { balance, rawBalance: res };\n }\n } catch (error) {\n console.error('getTokenBalance error:', error);\n return { balance: 0, rawBalance: '0' };\n }\n}\n\nexport async function checkGasTokenBalance(csna: string, minAmount: string, env: ENV) {\n const config = getWalletConfig(env);\n const { rawBalance } = await getTokenBalance({ csna, tokenId: config.btcToken, env });\n console.log('gas token balance:', rawBalance);\n if (new Big(rawBalance).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 window.open(config.bridgeUrl, '_blank');\n throw new Error('Gas token balance is insufficient');\n }\n}\n\nconst { functionCall, transfer } = actionCreators;\nexport async function convertTransactionToTxHex({\n transaction,\n accountId,\n publicKey,\n env,\n index = 0,\n}: {\n transaction: Transaction;\n accountId: string;\n publicKey: string;\n env: ENV;\n index?: number;\n}) {\n const publicKeyFormat = PublicKey.from(publicKey);\n const currentConfig = getWalletConfig(env);\n const provider = getNearProvider({ network: currentConfig.network });\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 const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));\n\n return { txBytes, txHex, hash };\n}\n\ninterface CalculateGasLimitParams {\n transactions: Transaction[];\n csna: string;\n env: ENV;\n}\n\nexport async function calculateGasLimit(params: CalculateGasLimitParams) {\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const { gasLimit } = await calculateGasStrategy(params);\n\n return gasLimit;\n}\n\nexport async function calculateGasStrategy({\n csna,\n transactions,\n env,\n}: CalculateGasLimitParams): Promise<{\n transferGasTransaction?: Transaction;\n useNearPayGas: boolean;\n gasLimit: string;\n}> {\n const currentConfig = getWalletConfig(env);\n\n const accountInfo = await getAccountInfo({ csna, env });\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.btcToken] || '0';\n const { balance: nearBalance } = await getTokenBalance({\n csna,\n tokenId: currentConfig.nearToken,\n env,\n });\n\n const transferAmount = transactions.reduce(\n (acc, tx) => {\n // deposit near\n tx.actions.forEach((action: any) => {\n // deposit near\n if (action.params.deposit) {\n const amount = Number(action.params.deposit) / 10 ** currentConfig.nearTokenDecimals;\n console.log('near deposit amount:', amount);\n acc.near = acc.near.plus(amount);\n }\n //transfer btc\n if (\n tx.receiverId === currentConfig.btcToken &&\n ['ft_transfer_call', 'ft_transfer'].includes(action.params.methodName)\n ) {\n const amount = Number(action.params.args.amount) / 10 ** currentConfig.btcTokenDecimals;\n console.log('btc transfer amount:', amount);\n acc.btc = acc.btc.plus(amount);\n }\n });\n return acc;\n },\n { near: new Big(0), btc: new Big(0) },\n );\n\n const nearAvailableBalance = new Big(nearBalance).minus(transferAmount.near).toNumber();\n\n console.log('available near balance:', nearAvailableBalance);\n console.log('available gas token balance:', gasTokenBalance);\n\n const convertTx = await Promise.all(\n transactions.map((transaction, index) =>\n convertTransactionToTxHex({\n transaction,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index,\n env,\n }),\n ),\n );\n\n if (nearAvailableBalance > 0.5) {\n console.log('near balance is enough, get the protocol fee of each transaction');\n const gasTokens = await nearCallFunction<Record<string, { per_tx_protocol_fee: string }>>(\n currentConfig.accountContractId,\n 'list_gas_token',\n { token_ids: [currentConfig.btcToken] },\n { network: currentConfig.network },\n );\n\n console.log('list_gas_token gas tokens:', gasTokens);\n\n const perTxFee = Math.max(\n Number(gasTokens[currentConfig.btcToken]?.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({ csna, amount: protocolFee, env });\n return recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions: convertTx,\n useNearPayGas: true,\n perTxFee: perTxFee.toString(),\n env,\n });\n // }\n } else {\n console.log('near balance is not enough, predict the gas token amount required');\n const adjustedGas = await getPredictedGasAmount({\n accountContractId: currentConfig.accountContractId,\n tokenId: currentConfig.btcToken,\n transactions: convertTx.map((t) => t.txHex),\n env,\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({ csna, amount: adjustedGas, env });\n return recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions: convertTx,\n useNearPayGas: false,\n env,\n });\n // }\n }\n}\n\nasync function createGasTokenTransfer({\n csna,\n amount,\n env,\n}: {\n csna: string;\n amount: string;\n env: ENV;\n}) {\n const currentConfig = getWalletConfig(env);\n return {\n signerId: csna,\n receiverId: currentConfig.btcToken,\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\nasync function recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions,\n useNearPayGas,\n perTxFee,\n env,\n}: {\n csna: string;\n transferTx: Transaction;\n transactions: { txHex: string }[];\n useNearPayGas: boolean;\n perTxFee?: string;\n env: ENV;\n}) {\n const currentConfig = getWalletConfig(env);\n const { txHex: transferTxHex } = await convertTransactionToTxHex({\n transaction: transferTx,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index: 0,\n env,\n });\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 accountContractId: currentConfig.accountContractId,\n tokenId: currentConfig.btcToken,\n transactions: [transferTxHex, ...transactions.map((t) => t.txHex)],\n env,\n });\n }\n\n (transferTx.actions[0] as any).params.args.amount = newGasLimit;\n\n return { transferGasTransaction: transferTx, useNearPayGas, gasLimit: newGasLimit };\n}\n\nasync function getPredictedGasAmount({\n accountContractId,\n tokenId,\n transactions,\n env,\n}: {\n accountContractId: string;\n tokenId: string;\n transactions: string[];\n env: ENV;\n}): Promise<string> {\n const currentConfig = getWalletConfig(env);\n const predictedGas = await nearCallFunction<string>(\n accountContractId,\n 'predict_txs_gas_token_amount',\n {\n gas_token_id: tokenId,\n near_transactions: transactions,\n },\n { network: currentConfig.network },\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", "const 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\nexport default {\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", "import type { Wallet } from '@near-wallet-selector/core';\nimport { walletConfig, type ENV } from '../config';\nimport { executeBTCDepositAndAction, getWithdrawTransaction } from '../core/btcUtils';\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 updateIframePosition(iframe, right, bottom, windowWidth, windowHeight);\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 const actions = {\n signAndSendTransaction: wallet.signAndSendTransaction,\n signAndSendTransactions: wallet.signAndSendTransactions,\n executeBTCDepositAndAction,\n getWithdrawTransaction,\n };\n\n window.addEventListener('message', async (event) => {\n if (event.origin !== iframeSrc.origin) return;\n const { action, requestId, data } = event.data;\n\n try {\n const actionFn = actions[action as keyof typeof actions];\n if (!actionFn) return;\n console.log('handleWalletAction', action, event.data);\n const result = await actionFn(data);\n console.log('handleWalletAction result', action, 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('handleWalletAction error', action, 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\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 {\n Transaction,\n InjectedWallet,\n WalletModuleFactory,\n WalletBehaviourFactory,\n} from '@near-wallet-selector/core';\nimport { setupWalletButton, removeWalletButton } from '../../utils/initWalletButton';\nimport type { useBtcWalletSelector } from '../btcWalletSelectorContext';\nimport { retryOperation, toHex } from '../../utils';\nimport type { ENV } from '../../config';\nimport { getWalletConfig } from '../../config';\nimport { nearCallFunction, pollTransactionStatuses } from '../../utils/nearUtils';\n\nimport { checkGasTokenDebt, getCsnaAccountId } from '../btcUtils';\n\nimport {\n getAccountInfo,\n checkBtcTransactionStatus,\n convertTransactionToTxHex,\n getNonce,\n receiveTransaction,\n checkGasTokenBalance,\n calculateGasStrategy,\n calculateGasLimit,\n} from '../../utils/satoshi';\nimport { getVersion } from '../../index';\nimport state from './state';\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 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 = getWalletConfig(env as ENV);\n\n await initBtcContext();\n\n function validateWalletState() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const btcPublicKey = state.getBtcPublicKey();\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(currentConfig.network);\n\n if (!state.isValid()) {\n state.clear();\n console.log('setupBtcContextListeners clear');\n }\n\n validateWalletState();\n const btcContext = window.btcContext;\n if (btcContext.account) {\n const btcPublicKey = await btcContext.getPublicKey();\n if (btcPublicKey) {\n await getNearAccountByBtcPublicKey(btcPublicKey);\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 console.log('updatePublicKey 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 }\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 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 csna = state.getAccount();\n\n const accountInfo = await getAccountInfo({ csna, env });\n\n // check gas token arrears\n await checkGasTokenDebt(csna, env, true);\n\n const trans = [...params.transactions];\n console.log('signAndSendTransactions raw trans:', trans);\n\n const { transferGasTransaction, useNearPayGas, gasLimit } = await calculateGasStrategy({\n csna,\n transactions: trans,\n env,\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(csna, 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) =>\n convertTransactionToTxHex({\n transaction,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index,\n env,\n }),\n ),\n );\n\n const nonceFromApi = await getNonce(currentConfig.base_url, csna);\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,\n near_transactions: newTrans.map((t) => t.txHex),\n gas_token: currentConfig.btcToken,\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 // Skip the outcome of the first transaction, which is the gas token transfer transaction\n const hash = newTrans.slice(1).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 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"],
|
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_big", "result", "import_utils", "import_near_api_js", "Big", "bs58", "transactions", "bitcoin", "Big", "res", "sendBitcoin", "
|
4
|
+
"sourcesContent": ["export * from './connector';\nexport { ConnectProvider } from './context';\nexport * from './hooks';\nexport * from './core/btcWalletSelectorContext';\nexport * from './core/setupBTCWallet/index';\nexport * from './core/btcUtils';\nexport * from './config';\nexport const getVersion = () => {\n return '0.5.22-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\n const showGuideDialog = async () => {\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 };\n\n if (!universalLink) {\n await showGuideDialog();\n return false;\n }\n\n const openWallet = () => {\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = universalLink;\n document.body.appendChild(iframe);\n\n setTimeout(async () => {\n document.body.removeChild(iframe);\n await showGuideDialog();\n }, 2000);\n };\n\n window.location.href = universalLink;\n setTimeout(openWallet, 100);\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 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 { Address } from 'sats-connect';\nimport icon from '../icons/xverse.png';\nimport { BaseConnector, type WalletMetadata } from './base';\nimport { MobileWalletConnect } from './universalLink';\nimport { isMobile } from '../utils';\n\ninterface XverseAddress extends Address {\n walletType: 'software' | 'ledger';\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 { AddressPurpose } = await import('sats-connect');\n const provider = this.getProvider();\n await provider.request('wallet_requestPermissions', undefined);\n const { result: walletType } = await provider.request('wallet_getWalletType', undefined);\n\n const { result } = await provider.request('getAddresses', {\n purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],\n message: 'Address for receiving Ordinals and payments',\n });\n const addresses: XverseAddress[] = result.addresses.map((item: XverseAddress) => ({\n ...item,\n walletType,\n }));\n console.log('\uD83D\uDE80 ~ XverseConnector ~ loadAccounts ~ res:', addresses);\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()) {\n try {\n this.getProvider();\n } catch (error) {\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 getAddresses() {\n const data = localStorage.getItem('btc-connect-xverse-addresses-' + this.#network);\n if (data) {\n return JSON.parse(data) as XverseAddress[];\n }\n return [];\n }\n async getCurrentAddress() {\n const addresses = await this.getAddresses();\n const address = addresses?.[0];\n if (!address) {\n throw new Error(`${this.metadata.name} not connected!`);\n }\n return address;\n }\n async getAccounts() {\n if (!this.isReady()) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n const addresses = await this.getAddresses();\n return addresses.map((item) => item.address);\n }\n async getPublicKey(): Promise<string> {\n const address = await this.getCurrentAddress();\n return address.publicKey;\n }\n async signMessage(signStr: string): Promise<string> {\n const address = await this.getCurrentAddress();\n const provider = this.getProvider();\n const { result } = await provider.request('signMessage', {\n address: address.address,\n message: signStr,\n protocol: 'ECDSA',\n });\n console.log('xverse walletType', address.walletType);\n console.log('xverse raw sig', result.signature);\n const modifiedSig = Buffer.from(result.signature, 'base64');\n modifiedSig[0] = 31 + ((modifiedSig[0] - 31) % 4);\n const sig = modifiedSig.toString('base64');\n console.log('xverse modified sig', sig);\n return sig;\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 const provider = window.BitcoinProvider;\n if (!provider) {\n throw new Error(`${this.metadata.name} is not install!`);\n }\n return provider;\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 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 console.error('btcLoginError', e);\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}", "export type ENV = 'mainnet' | 'testnet' | 'private_mainnet' | 'dev';\n\nexport const walletConfig: Record<\n ENV,\n {\n base_url: string;\n btcToken: string;\n btcTokenDecimals: number;\n nearToken: string;\n nearTokenDecimals: number;\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 btcToken: 'nbtc-dev.testnet',\n btcTokenDecimals: 8,\n nearToken: 'wrap.testnet',\n nearTokenDecimals: 24,\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 btcToken: 'nbtc2-nsp.testnet',\n btcTokenDecimals: 8,\n nearToken: 'wrap.testnet',\n nearTokenDecimals: 24,\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 btcToken: 'nbtc.toalice.near',\n btcTokenDecimals: 8,\n nearToken: 'wrap.near',\n nearTokenDecimals: 24,\n accountContractId: 'acc.toalice.near',\n bridgeContractId: 'brg.toalice.near',\n walletUrl: 'https://wallet-stg.satoshibridge.top',\n bridgeUrl: 'https://old.ramp.satos.network',\n },\n mainnet: {\n base_url: 'https://api.satos.network',\n btcToken: 'nbtc.bridge.near',\n btcTokenDecimals: 8,\n nearToken: 'wrap.near',\n nearTokenDecimals: 24,\n accountContractId: 'acc.ref-labs.near',\n bridgeContractId: 'btc-connector.bridge.near',\n walletUrl: 'https://wallet.satoshibridge.top',\n bridgeUrl: 'https://ramp.satos.network',\n },\n};\n\nexport function getWalletConfig(env: ENV) {\n const config = walletConfig[env];\n const network = env === 'mainnet' || env === 'private_mainnet' ? 'mainnet' : 'testnet';\n return {\n ...config,\n network,\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 Big from 'big.js';\nimport type { ENV } from '../config';\nimport { getWalletConfig, btcRpcUrls } from '../config';\nimport { retryOperation } from '../utils';\nimport { nearCallFunction, pollTransactionStatuses } from '../utils/nearUtils';\nimport {\n calculateWithdraw,\n checkBridgeTransactionStatus,\n getAccountInfo,\n getBridgeConfig,\n getWhitelist,\n preReceiveDepositMsg,\n receiveDepositMsg,\n calculateGasLimit,\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 * as ecc from '@bitcoinerlab/secp256k1';\n\nexport { calculateGasLimit };\n\n// init ecc lib\nbitcoin.initEccLib(ecc);\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 nearCall<T>(contractId: string, methodName: string, args: any) {\n const network = await getNetwork();\n return nearCallFunction<T>(contractId, methodName, args, { network });\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 csna: string,\n env: ENV,\n autoDeposit?: T,\n): Promise<CheckGasTokenDebtReturnType<T>> {\n const accountInfo = await getAccountInfo({ csna, env });\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 = getWalletConfig(env);\n const transferAmount = hasDebtArrears ? debtAmount : relayerFeeAmount;\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 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 /** default is true, if true, new account minimum deposit amount 1000sat, otherwise 0 */\n newAccountMinDepositAmount?: boolean;\n },\n) {\n const env = option?.env || 'mainnet';\n const _newAccountMinDepositAmount = option?.newAccountMinDepositAmount ?? true;\n const csna = await getCsnaAccountId(env);\n const accountInfo = await getAccountInfo({ csna, env });\n const debtAction = await checkGasTokenDebt(csna, env, false);\n const repayAmount = debtAction?.amount || 0;\n const {\n deposit_bridge_fee: { fee_min, fee_rate },\n min_deposit_amount,\n } = await getBridgeConfig({ env });\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 =\n !accountInfo?.nonce && _newAccountMinDepositAmount ? 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 = getWalletConfig(env);\n const { getPublicKey } = getBtcProvider();\n const btcPublicKey = await getPublicKey();\n if (!btcPublicKey) {\n throw new Error('BTC Public Key is not available.');\n }\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\nfunction checkDepositDisabledAddress() {\n const data = localStorage.getItem('btc-connect-xverse-addresses-Mainnet');\n if (!data) return;\n const addresses = JSON.parse(data);\n const address = addresses?.[0];\n if (address.walletType === 'ledger' && !['p2wpkh', 'p2sh'].includes(address.addressType)) {\n throw new Error('Ledger is only supported for p2wpkh and p2sh address');\n }\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 newAccountMinDepositAmount?: boolean;\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 newAccountMinDepositAmount,\n}: ExecuteBTCDepositAndActionParams<T>): Promise<ExecuteBTCDepositAndActionReturn<T>> {\n try {\n console.log('executeBTCDepositAndAction start', amount);\n checkDepositDisabledAddress();\n const { getPublicKey } = getBtcProvider();\n\n const config = getWalletConfig(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 newAccountMinDepositAmount,\n });\n\n const accountInfo = await getAccountInfo({ csna, env });\n\n const newActions = [];\n\n const debtAction = await checkGasTokenDebt(csna, 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 const registerContractId = (action?.receiver_id || config.btcToken).replace(\n config.accountContractId,\n config.btcToken,\n );\n console.log('executeBTCDepositAndAction registerContractId', registerContractId);\n // check receiver_id is registered\n const registerRes = await nearCall<{\n available: string;\n total: string;\n }>(registerContractId, 'storage_balance_of', {\n account_id: csna,\n });\n\n if (!registerRes?.available) {\n storageDepositMsg.storage_deposit_msg = {\n contract_id: registerContractId,\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 !== '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 = getWalletConfig(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 config = getWalletConfig(env);\n const provider = getBtcProvider();\n const btcAddress = provider.account;\n const csna = await getCsnaAccountId(env);\n\n const _feeRate = feeRate || (await getBtcGasPrice());\n\n // calculate gas and get transaction details\n const { inputs, outputs, isError, errorMsg, ...rest } = await calculateWithdraw({\n amount,\n feeRate: _feeRate,\n csna,\n btcAddress,\n env,\n });\n\n if (isError || !inputs || !outputs) {\n throw new Error(errorMsg);\n }\n console.log('inputs:', JSON.stringify(inputs));\n console.log('outputs:', JSON.stringify(outputs));\n\n console.log('inputs - outputs = gas');\n console.log(\n `(${inputs.map((item) => item.value).join(' + ')}) - (${outputs.map((item) => item.value).join(' + ')}) = ${rest.gasFee}`,\n );\n\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 Promise.all(\n inputs.map(async (input) => {\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\n // Add outputs\n outputs.forEach((output: { address: string; value: number }) => {\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: { txid: string; vout: number; value: number }) => {\n return `${item.txid}:${item.vout}`;\n });\n\n const txOutputs = psbt.txOutputs.map((item: { script: Uint8Array; value: number }) => {\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\n // Finally return the transaction object\n const transaction: Transaction = {\n receiverId: config.btcToken,\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\n console.log('=== End getWithdrawTransaction ===');\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", "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';\nimport { withCache } from './request';\n\nexport function getNearProvider(option: { network?: string; provider?: ProviderService }) {\n return (\n option.provider ||\n new providers.FailoverRpcProvider(\n nearRpcUrls[option?.network as keyof typeof nearRpcUrls].map(\n (url) => new providers.JsonRpcProvider({ url }),\n ),\n )\n );\n}\n\nexport async function nearCallFunction<T>(\n contractId: string,\n methodName: string,\n args: any,\n options: {\n network?: string;\n provider?: ProviderService;\n cacheTimeout?: number;\n skipCache?: boolean;\n } = {},\n): Promise<T> {\n if (!options.skipCache) {\n const cacheKey = `near:${contractId}:${methodName}:${args ? JSON.stringify(args) : ''}`;\n return withCache(\n cacheKey,\n () => executeNearCall<T>(contractId, methodName, args, options),\n options.cacheTimeout || 5000,\n );\n }\n\n return executeNearCall<T>(contractId, methodName, args, options);\n}\n\nasync function executeNearCall<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 = getNearProvider(options);\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", "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 function withCache<T>(\n key: string,\n fetcher: () => Promise<T>,\n timeout: number = defaultCacheTimeout,\n): Promise<T> {\n const cached = cache.get(key);\n const isCacheValid = cached && Date.now() - cached.timestamp < timeout;\n\n if (isCacheValid) {\n return Promise.resolve(cached.data as T);\n }\n\n return fetcher().then((data) => {\n cache.set(key, { timestamp: Date.now(), data });\n setTimeout(() => {\n cache.delete(key);\n }, timeout);\n return data;\n });\n}\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 throw new Error('Polling should continue');\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 console.error(err);\n return Promise.reject(err);\n }\n}\n", "import { toHex } from '.';\nimport request from './request';\nimport type { AccessKeyViewRaw } from 'near-api-js/lib/providers/provider';\nimport { actionCreators } from '@near-js/transactions';\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 type { Transaction } from '@near-wallet-selector/core';\nimport { getNearProvider, nearCallFunction } from './nearUtils';\nimport { getWalletConfig, type ENV } from '../config';\nimport { transactions } from 'near-api-js';\nimport Big from 'big.js';\nimport { Dialog } from './Dialog';\nimport state from '../core/setupBTCWallet/state';\n\n// @ts-ignore\nimport coinselect from 'coinselect';\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 const status = res.result_data?.Status || 0;\n return res.result_code === 0 && (status === 4 || status >= 50);\n },\n });\n console.log('checkTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 4) {\n throw new Error(result_message || `Transaction failed, status: ${result_data?.Status}`);\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 const status = res.result_data?.Status || 0;\n return res.result_code === 0 && (status === 3 || status >= 10);\n },\n });\n console.log('checkBtcTransactionStatus resp:', { result_code, result_message, result_data });\n if (result_data?.Status !== 3) {\n throw new Error(result_message || `Transaction failed, status: ${result_data?.Status}`);\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\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, env }: { csna: string; env: ENV }) {\n const config = getWalletConfig(env);\n const accountInfo = await nearCallFunction<AccountInfo>(\n config.accountContractId,\n 'get_account',\n {\n account_id: csna,\n },\n { network: config.network },\n ).catch((error) => {\n return undefined;\n });\n return accountInfo;\n}\n\nexport async function getBridgeConfig({ env }: { env: ENV }) {\n const config = getWalletConfig(env);\n const bridgeConfig = await nearCallFunction<{\n min_withdraw_amount: string;\n withdraw_bridge_fee: { fee_rate: number; fee_min: string };\n max_btc_gas_fee: string;\n change_address: string;\n min_change_amount: string;\n deposit_bridge_fee: { fee_rate: number; fee_min: string };\n min_deposit_amount: string;\n }>(config.bridgeContractId, 'get_config', {}, { network: config.network });\n return bridgeConfig;\n}\n\nexport async function getTokenBalance({\n csna,\n tokenId,\n env,\n}: {\n csna: string;\n tokenId: string;\n env: ENV;\n}): Promise<{ balance: number; rawBalance: string }> {\n const config = getWalletConfig(env);\n const nearProvider = getNearProvider({ network: config.network });\n try {\n if (tokenId === config.nearToken) {\n const nearAccount = await nearProvider.query<any>({\n request_type: 'view_account',\n account_id: csna,\n finality: 'final',\n });\n const balance = parseFloat(nearAccount.amount) / 10 ** config.nearTokenDecimals;\n return { balance, rawBalance: nearAccount.amount };\n } else {\n const res = await nearCallFunction<string>(\n tokenId,\n 'ft_balance_of',\n { account_id: csna },\n { network: config.network },\n );\n const decimals =\n tokenId === config.btcToken\n ? config.btcTokenDecimals\n : (\n await nearCallFunction<{ decimals: number }>(\n tokenId,\n 'ft_metadata',\n {},\n { network: config.network },\n )\n ).decimals;\n const balance = parseFloat(res) / 10 ** decimals;\n return { balance, rawBalance: res };\n }\n } catch (error) {\n console.error('getTokenBalance error:', error);\n return { balance: 0, rawBalance: '0' };\n }\n}\n\nexport async function checkGasTokenBalance(csna: string, minAmount: string, env: ENV) {\n const config = getWalletConfig(env);\n const { rawBalance } = await getTokenBalance({ csna, tokenId: config.btcToken, env });\n console.log('gas token balance:', rawBalance);\n if (new Big(rawBalance).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 window.open(config.bridgeUrl, '_blank');\n throw new Error('Gas token balance is insufficient');\n }\n}\n\nconst { functionCall, transfer } = actionCreators;\nexport async function convertTransactionToTxHex({\n transaction,\n accountId,\n publicKey,\n env,\n index = 0,\n}: {\n transaction: Transaction;\n accountId: string;\n publicKey: string;\n env: ENV;\n index?: number;\n}) {\n const publicKeyFormat = PublicKey.from(publicKey);\n const currentConfig = getWalletConfig(env);\n const provider = getNearProvider({ network: currentConfig.network });\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 const hash = bs58.encode(new Uint8Array(sha256.array(txBytes)));\n\n return { txBytes, txHex, hash };\n}\n\ninterface CalculateGasLimitParams {\n transactions: Transaction[];\n csna: string;\n env: ENV;\n}\n\nexport async function calculateGasLimit(params: CalculateGasLimitParams) {\n const trans = [...params.transactions];\n console.log('raw trans:', trans);\n\n const { gasLimit } = await calculateGasStrategy(params);\n\n return gasLimit;\n}\n\nexport async function calculateGasStrategy({\n csna,\n transactions,\n env,\n}: CalculateGasLimitParams): Promise<{\n transferGasTransaction?: Transaction;\n useNearPayGas: boolean;\n gasLimit: string;\n}> {\n const currentConfig = getWalletConfig(env);\n\n const accountInfo = await getAccountInfo({ csna, env });\n const gasTokenBalance = accountInfo?.gas_token[currentConfig.btcToken] || '0';\n const { balance: nearBalance } = await getTokenBalance({\n csna,\n tokenId: currentConfig.nearToken,\n env,\n });\n\n const transferAmount = transactions.reduce(\n (acc, tx) => {\n // deposit near\n tx.actions.forEach((action: any) => {\n // deposit near\n if (action.params.deposit) {\n const amount = Number(action.params.deposit) / 10 ** currentConfig.nearTokenDecimals;\n console.log('near deposit amount:', amount);\n acc.near = acc.near.plus(amount);\n }\n //transfer btc\n if (\n tx.receiverId === currentConfig.btcToken &&\n ['ft_transfer_call', 'ft_transfer'].includes(action.params.methodName)\n ) {\n const amount = Number(action.params.args.amount) / 10 ** currentConfig.btcTokenDecimals;\n console.log('btc transfer amount:', amount);\n acc.btc = acc.btc.plus(amount);\n }\n });\n return acc;\n },\n { near: new Big(0), btc: new Big(0) },\n );\n\n const nearAvailableBalance = new Big(nearBalance).minus(transferAmount.near).toNumber();\n\n console.log('available near balance:', nearAvailableBalance);\n console.log('available gas token balance:', gasTokenBalance);\n\n const convertTx = await Promise.all(\n transactions.map((transaction, index) =>\n convertTransactionToTxHex({\n transaction,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index,\n env,\n }),\n ),\n );\n\n if (nearAvailableBalance > 0.5) {\n console.log('near balance is enough, get the protocol fee of each transaction');\n const gasTokens = await nearCallFunction<Record<string, { per_tx_protocol_fee: string }>>(\n currentConfig.accountContractId,\n 'list_gas_token',\n { token_ids: [currentConfig.btcToken] },\n { network: currentConfig.network },\n );\n\n console.log('list_gas_token gas tokens:', gasTokens);\n\n const perTxFee = Math.max(\n Number(gasTokens[currentConfig.btcToken]?.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({ csna, amount: protocolFee, env });\n return recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions: convertTx,\n useNearPayGas: true,\n perTxFee: perTxFee.toString(),\n env,\n });\n // }\n } else {\n console.log('near balance is not enough, predict the gas token amount required');\n const adjustedGas = await getPredictedGasAmount({\n accountContractId: currentConfig.accountContractId,\n tokenId: currentConfig.btcToken,\n transactions: convertTx.map((t) => t.txHex),\n env,\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({ csna, amount: adjustedGas, env });\n return recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions: convertTx,\n useNearPayGas: false,\n env,\n });\n // }\n }\n}\n\nasync function createGasTokenTransfer({\n csna,\n amount,\n env,\n}: {\n csna: string;\n amount: string;\n env: ENV;\n}) {\n const currentConfig = getWalletConfig(env);\n return {\n signerId: csna,\n receiverId: currentConfig.btcToken,\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\nasync function recalculateGasWithTransfer({\n csna,\n transferTx,\n transactions,\n useNearPayGas,\n perTxFee,\n env,\n}: {\n csna: string;\n transferTx: Transaction;\n transactions: { txHex: string }[];\n useNearPayGas: boolean;\n perTxFee?: string;\n env: ENV;\n}) {\n const currentConfig = getWalletConfig(env);\n const { txHex: transferTxHex } = await convertTransactionToTxHex({\n transaction: transferTx,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index: 0,\n env,\n });\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 accountContractId: currentConfig.accountContractId,\n tokenId: currentConfig.btcToken,\n transactions: [transferTxHex, ...transactions.map((t) => t.txHex)],\n env,\n });\n }\n\n (transferTx.actions[0] as any).params.args.amount = newGasLimit;\n\n return { transferGasTransaction: transferTx, useNearPayGas, gasLimit: newGasLimit };\n}\n\nasync function getPredictedGasAmount({\n accountContractId,\n tokenId,\n transactions,\n env,\n}: {\n accountContractId: string;\n tokenId: string;\n transactions: string[];\n env: ENV;\n}): Promise<string> {\n const currentConfig = getWalletConfig(env);\n const predictedGas = await nearCallFunction<string>(\n accountContractId,\n 'predict_txs_gas_token_amount',\n {\n gas_token_id: tokenId,\n near_transactions: transactions,\n },\n { network: currentConfig.network },\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\ninterface CalculateWithdrawParams {\n amount: string | number;\n feeRate?: number;\n csna: string;\n btcAddress: string;\n env: ENV;\n}\ninterface CalculateWithdrawResult {\n withdrawFee: number;\n gasFee?: number;\n inputs?: any[];\n outputs?: any[];\n fromAmount?: number;\n receiveAmount?: string;\n isError: boolean;\n errorMsg?: string;\n}\n\nexport async function calculateWithdraw({\n amount,\n feeRate,\n csna,\n btcAddress,\n env,\n}: CalculateWithdrawParams): Promise<CalculateWithdrawResult> {\n console.log('calculateWithdraw feeRate:', feeRate);\n try {\n const config = getWalletConfig(env);\n // mock the gas limit\n const gasLimit = await calculateGasLimit({\n csna,\n transactions: [\n {\n signerId: '',\n receiverId: config.btcToken,\n actions: [\n {\n type: 'FunctionCall',\n params: {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.btcToken,\n amount: '100',\n msg: '',\n },\n gas: '300000000000000',\n deposit: '1',\n },\n },\n ],\n },\n ],\n env,\n });\n\n let satoshis = Number(amount);\n if (Number(gasLimit) > 0) {\n satoshis = new Big(amount).minus(gasLimit).toNumber();\n }\n\n const brgConfig = await getBridgeConfig({ env });\n\n const allUTXO = await nearCallFunction<\n Record<\n string,\n {\n vout: number;\n balance: string;\n script: string;\n }\n >\n >(config.bridgeContractId, 'get_utxos_paged', {}, { network: config.network });\n\n if (brgConfig.min_withdraw_amount) {\n if (Number(satoshis) < Number(brgConfig.min_withdraw_amount)) {\n return {\n withdrawFee: 0,\n isError: true,\n errorMsg:\n 'Mini withdraw amount is ' + (Number(brgConfig.min_withdraw_amount) + Number(gasLimit)),\n };\n }\n }\n\n const feePercent = Number(brgConfig.withdraw_bridge_fee.fee_rate) * Number(satoshis);\n const withdrawFee =\n feePercent > Number(brgConfig.withdraw_bridge_fee.fee_min)\n ? feePercent\n : Number(brgConfig.withdraw_bridge_fee.fee_min);\n\n const withdrawChangeAddress = brgConfig.change_address;\n\n const utxos = Object.keys(allUTXO)\n .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 .filter((utxo) => utxo.value > Number(brgConfig.min_change_amount));\n\n if (!utxos || utxos.length === 0) {\n return {\n withdrawFee,\n isError: true,\n errorMsg: 'The network is busy, please try again later.',\n };\n }\n\n const userSatoshis = Number(satoshis);\n const maxBtcFee = Number(brgConfig.max_btc_gas_fee);\n\n const { inputs, outputs, fee } = coinselect(\n utxos,\n [{ address: btcAddress, value: userSatoshis }],\n Math.ceil(feeRate || 0),\n );\n\n const newInputs = inputs;\n let newOutputs = outputs;\n let newFee = fee;\n\n if (!newOutputs || newOutputs.length === 0) {\n return {\n withdrawFee,\n isError: true,\n errorMsg: 'The network is busy, please try again later.',\n };\n }\n\n let userOutput, noUserOutput;\n for (let i = 0; i < newOutputs.length; i++) {\n const output = newOutputs[i];\n if (output.value.toString() === userSatoshis.toString()) {\n userOutput = output;\n } else {\n noUserOutput = output;\n }\n if (!output.address) {\n output.address = withdrawChangeAddress;\n }\n }\n\n let dis = 0;\n if (newFee > maxBtcFee) {\n dis = newFee - maxBtcFee;\n newFee = maxBtcFee;\n\n return {\n gasFee: newFee,\n withdrawFee,\n isError: true,\n errorMsg: 'Gas exceeds maximum value',\n };\n }\n\n userOutput.value = new Big(userOutput.value).minus(newFee).minus(withdrawFee).toNumber();\n\n if (userOutput.value < 0) {\n return {\n gasFee: newFee,\n withdrawFee,\n isError: true,\n errorMsg: 'Not enough gas',\n };\n }\n\n if (noUserOutput) {\n if (!noUserOutput.address) {\n noUserOutput.address = withdrawChangeAddress;\n }\n noUserOutput.value = new Big(noUserOutput.value)\n .plus(newFee)\n .plus(withdrawFee)\n .plus(dis)\n .toNumber();\n } else {\n noUserOutput = {\n address: withdrawChangeAddress,\n value: new Big(newFee).plus(withdrawFee).plus(dis).toNumber(),\n };\n newOutputs.push(noUserOutput);\n }\n\n let minValue = Math.min(...newInputs.map((input: any) => input.value));\n let totalNoUserOutputValue = noUserOutput.value;\n\n while (totalNoUserOutputValue >= minValue && minValue > 0 && newInputs.length > 0) {\n totalNoUserOutputValue -= minValue;\n noUserOutput.value = totalNoUserOutputValue;\n const minValueIndex = newInputs.findIndex((input: any) => input.value === minValue);\n if (minValueIndex > -1) {\n newInputs.splice(minValueIndex, 1);\n }\n minValue = Math.min(...newInputs.map((input: any) => input.value));\n }\n\n let gasMore = 0;\n if (noUserOutput.value === 0) {\n newOutputs = newOutputs.filter((item: any) => item.value !== 0);\n } else if (noUserOutput.value < Number(brgConfig.min_change_amount)) {\n gasMore = Number(brgConfig.min_change_amount) - noUserOutput.value;\n userOutput.value -= gasMore;\n noUserOutput.value = Number(brgConfig.min_change_amount);\n }\n\n const insufficientOutput = newOutputs.some((item: any) => item.value < 0);\n if (insufficientOutput) {\n return {\n gasFee: newFee,\n withdrawFee,\n isError: true,\n errorMsg: 'Not enough gas',\n };\n }\n\n const inputSum = newInputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n const outputSum = newOutputs.reduce((sum: number, cur: any) => sum + Number(cur.value), 0);\n\n if (newFee + outputSum !== inputSum) {\n return {\n withdrawFee,\n isError: true,\n errorMsg: 'Service busy, please try again later',\n };\n }\n return {\n withdrawFee: new Big(withdrawFee).plus(gasLimit).plus(gasMore).toNumber(),\n gasFee: new Big(newFee).toNumber(),\n inputs: newInputs,\n outputs: newOutputs,\n fromAmount: satoshis,\n receiveAmount: userOutput.value,\n isError: false,\n };\n } catch (error: any) {\n return {\n withdrawFee: 0,\n isError: true,\n errorMsg: error.message,\n };\n }\n}\n", "const 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\nexport default {\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", "import type { Wallet } from '@near-wallet-selector/core';\nimport { walletConfig, type ENV } from '../config';\nimport { executeBTCDepositAndAction, getWithdrawTransaction } from '../core/btcUtils';\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 updateIframePosition(iframe, right, bottom, windowWidth, windowHeight);\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 const actions = {\n signAndSendTransaction: wallet.signAndSendTransaction,\n signAndSendTransactions: wallet.signAndSendTransactions,\n executeBTCDepositAndAction,\n getWithdrawTransaction,\n };\n\n window.addEventListener('message', async (event) => {\n if (event.origin !== iframeSrc.origin) return;\n const { action, requestId, data } = event.data;\n\n try {\n const actionFn = actions[action as keyof typeof actions];\n if (!actionFn) return;\n console.log('handleWalletAction', action, event.data);\n const result = await actionFn(data);\n console.log('handleWalletAction result', action, 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('handleWalletAction error', action, 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\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 {\n Transaction,\n InjectedWallet,\n WalletModuleFactory,\n WalletBehaviourFactory,\n} from '@near-wallet-selector/core';\nimport { setupWalletButton, removeWalletButton } from '../../utils/initWalletButton';\nimport type { useBtcWalletSelector } from '../btcWalletSelectorContext';\nimport { retryOperation, toHex } from '../../utils';\nimport type { ENV } from '../../config';\nimport { getWalletConfig } from '../../config';\nimport { nearCallFunction, pollTransactionStatuses } from '../../utils/nearUtils';\n\nimport { checkGasTokenDebt, getCsnaAccountId } from '../btcUtils';\n\nimport {\n getAccountInfo,\n checkBtcTransactionStatus,\n convertTransactionToTxHex,\n getNonce,\n receiveTransaction,\n checkGasTokenBalance,\n calculateGasStrategy,\n} from '../../utils/satoshi';\nimport { getVersion } from '../../index';\nimport state from './state';\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 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 };\n const env = (metadata as any).env || options.network.networkId || 'mainnet';\n const currentConfig = getWalletConfig(env as ENV);\n\n await initBtcContext();\n\n function validateWalletState() {\n const accountId = state.getAccount();\n const publicKey = state.getPublicKey();\n const btcPublicKey = state.getBtcPublicKey();\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(currentConfig.network);\n\n if (!state.isValid()) {\n state.clear();\n console.log('setupBtcContextListeners clear');\n }\n\n validateWalletState();\n const btcContext = window.btcContext;\n if (btcContext.account) {\n const btcPublicKey = await btcContext.getPublicKey();\n if (btcPublicKey) {\n await getNearAccountByBtcPublicKey(btcPublicKey);\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 console.log('updatePublicKey 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 }\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 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 csna = state.getAccount();\n\n const accountInfo = await getAccountInfo({ csna, env });\n\n // check gas token arrears\n await checkGasTokenDebt(csna, env, true);\n\n const trans = [...params.transactions];\n console.log('signAndSendTransactions raw trans:', trans);\n\n const { transferGasTransaction, useNearPayGas, gasLimit } = await calculateGasStrategy({\n csna,\n transactions: trans,\n env,\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(csna, 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) =>\n convertTransactionToTxHex({\n transaction,\n accountId: state.getAccount(),\n publicKey: state.getPublicKey(),\n index,\n env,\n }),\n ),\n );\n\n const nonceFromApi = await getNonce(currentConfig.base_url, csna);\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,\n near_transactions: newTrans.map((t) => t.txHex),\n gas_token: currentConfig.btcToken,\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 // Skip the outcome of the first transaction, which is the gas token transfer transaction\n const hash = newTrans.slice(1).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 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"],
|
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_big", "result", "import_utils", "import_near_api_js", "Big", "bs58", "transactions", "coinselect", "bitcoin", "Big", "res", "sendBitcoin", "_a", "nearCall", "_0", "transactions"]
|
7
7
|
}
|