@sign-global/tokentable-wallets 1.2.6 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/index.d.mts +1 -6
- package/dist/index.d.ts +1 -6
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +4 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/WalletFactory.tsx +1 -1
- package/src/types.ts +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @sign-global/tokentable-wallets
|
|
2
2
|
|
|
3
|
+
## 1.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- feat: add Aptos blockchain support for airdrop functionality
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies
|
|
12
|
+
- @sign-global/tokentable-core@1.5.0
|
|
13
|
+
|
|
3
14
|
## 1.2.6
|
|
4
15
|
|
|
5
16
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -7,13 +7,8 @@ import { useWalletModal } from '@solana/wallet-adapter-react-ui';
|
|
|
7
7
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
8
8
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
9
9
|
import { Cluster } from '@solana/web3.js';
|
|
10
|
+
import { ChainType } from '@sign-global/tokentable-core';
|
|
10
11
|
|
|
11
|
-
declare enum ChainType {
|
|
12
|
-
Evm = "evm",
|
|
13
|
-
Ton = "ton",
|
|
14
|
-
Solana = "solana",
|
|
15
|
-
Sui = "sui"
|
|
16
|
-
}
|
|
17
12
|
type ISignResult = {
|
|
18
13
|
message: string;
|
|
19
14
|
signature: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -7,13 +7,8 @@ import { useWalletModal } from '@solana/wallet-adapter-react-ui';
|
|
|
7
7
|
import { useWallet } from '@solana/wallet-adapter-react';
|
|
8
8
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
9
9
|
import { Cluster } from '@solana/web3.js';
|
|
10
|
+
import { ChainType } from '@sign-global/tokentable-core';
|
|
10
11
|
|
|
11
|
-
declare enum ChainType {
|
|
12
|
-
Evm = "evm",
|
|
13
|
-
Ton = "ton",
|
|
14
|
-
Solana = "solana",
|
|
15
|
-
Sui = "sui"
|
|
16
|
-
}
|
|
17
12
|
type ISignResult = {
|
|
18
13
|
message: string;
|
|
19
14
|
signature: string;
|
package/dist/index.js
CHANGED
|
@@ -875,22 +875,23 @@ var SolanaProvider = ({
|
|
|
875
875
|
};
|
|
876
876
|
|
|
877
877
|
// src/WalletFactory.tsx
|
|
878
|
+
var import_tokentable_core4 = require("@sign-global/tokentable-core");
|
|
878
879
|
var WalletFactory = class {
|
|
879
880
|
static instances = {};
|
|
880
881
|
static getWallet(type, userAddress) {
|
|
881
882
|
if (!this.instances[type]) {
|
|
882
883
|
let WalletClass;
|
|
883
884
|
switch (type) {
|
|
884
|
-
case
|
|
885
|
+
case import_tokentable_core4.ChainType.Evm:
|
|
885
886
|
WalletClass = EvmWallet;
|
|
886
887
|
break;
|
|
887
|
-
case
|
|
888
|
+
case import_tokentable_core4.ChainType.Ton:
|
|
888
889
|
WalletClass = TonWallet;
|
|
889
890
|
break;
|
|
890
891
|
// case ChainType.Starknet:
|
|
891
892
|
// WalletClass = StarknetWallet;
|
|
892
893
|
// break;
|
|
893
|
-
case
|
|
894
|
+
case import_tokentable_core4.ChainType.Solana:
|
|
894
895
|
WalletClass = SolWallet;
|
|
895
896
|
break;
|
|
896
897
|
default:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/WalletFactory.tsx"],"sourcesContent":["export { WalletFactory } from './WalletFactory';\n\nexport * from './providers';\n","import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { EvmWallet } from './providers/evm';\nimport { ChainType } from './types';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":"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","names":["import_react","import_tokentable_core","import_events","eventBus","getEventKey","import_jsx_runtime","eventBus","getEventKey","import_react","import_styles","import_events","import_tokentable_core","import_wallet_adapter_base","signMessage","buffer","response","signMessage","import_jsx_runtime","eventBus","EventEmitter","getEventKey","bs58"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/WalletFactory.tsx"],"sourcesContent":["export { WalletFactory } from './WalletFactory';\n\nexport * from './providers';\n","import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAO;AACP,wBAA+D;AAC/D,mBAA6E;AAC7E,mBAAqC;;;ACHrC,6BAAgC;AAGzB,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAImB;AACjB,SAAO;AAAA,IACL,WAAW,aAAa;AAAA,IACxB;AAAA,IACA;AAAA,IACA,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,IACjC,QAAQ,OAAO,SAAS;AAAA,IACxB,KAAK,OAAO,SAAS;AAAA,IACrB,SAAS;AAAA,IACT,WAAO,wCAAgB;AAAA,EACzB;AACF;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAA8B;AAC5B,QAAM,SAAS,GAAG,MAAM;AACxB,QAAM,WAAW,QAAQ,GAAG;AAC5B,MAAI,SAAS,CAAC,QAAQ,OAAO,EAAE,KAAK,IAAI;AACxC,QAAM,eAAe,YAAY,OAAO;AAIxC,QAAM,aAAa,eAAe,WAAW;AAE7C,QAAM,aAAa,UAAU,KAAK;AAElC,QAAM,cAAc,CAAC,UAAU,cAAc,YAAY,UAAU;AAEnE,cAAY,KAAK,cAAc,QAAQ,EAAE;AAEzC,QAAM,SAAS,YAAY,KAAK,IAAI;AACpC,WAAS,CAAC,QAAQ,SAAS,EAAE,KAAK,MAAM;AACxC,MAAI,WAAW;AACb,cAAU;AAAA,EACZ;AACA,SAAO,CAAC,QAAQ,MAAM,EAAE,KAAK,IAAI;AACnC;;;ACpDO,IAAe,aAAf,MAA6B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAc,aAAsB;AAC9C,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,SAAK,UAAU;AACf,SAAK,UAAU;AACf,SAAK,WAAW;AAChB,SAAK,cAAc,eAAe;AAAA,EAEpC;AAAA;AAAA;AAAA,EAKA,IAAc,cAAuB;AACnC,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,SAAS,GAAW,IAAmC;AAI3D,WAAO,KAAK,KAAK,GAAG,EAAE;AAAA,EACxB;AAAA,EAEA,MAAM,OAAO,WAA0C;AACrD,UAAM,SAAS,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAU,SAAS,KAAK,QAAS,CAAC;AAC/F,WAAO,KAAK,KAAK,KAAK,UAAU,QAAQ,MAAM,IAAI,CAAC;AAAA,EACrD;AAAA;AAAA,EAGA,aAAa,GAAiC;AAC5C,UAAM,IAAI,MAAM,oBAAoB,CAAC,0BAA0B;AAAA,EACjE;AAAA,EAEA,qBAAqB,GAAqE;AACxF,UAAM,IAAI,MAAM,oBAAoB,KAAK,UAAU,CAAC,CAAC,0BAA0B;AAAA,EACjF;AAAA,EAEA,YAME;AAEA,WAAO;AAAA,MACL,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,SAAS,KAAK;AAAA,MACd,WAAW,KAAK;AAAA,MAChB,SAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAAA;AAKF;;;ACxFA,qBAAoD;AACpD,oBAA6B;AAItB,IAAM,WAAW,IAAI,2BAAa;AAEzC,IAAM,gBAAgB;AAUf,IAAM,WAAyB;AAAA,EACpC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,IAAM,cAAc,MAAM;AAC/B,SAAO,GAAG,aAAa,IAAI,SAAS,OAAO;AAC7C;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,IAAI,cAAc;AAChB,WAAO,CAAC,EAAE,SAAS,SAAS,WAAW,SAAS,SAAS;AAAA,EAC3D;AAAA,EAEA,UAAU;AACR,cAAU,cAAc,mBAAmB;AAAA,EAC7C;AAAA,EAEA,MAAM,aAAa;AACjB,cAAM,2BAAW,SAAS,MAAO;AAAA,EACnC;AAAA,EAEA,MAAM,KAAK,UAAkB;AAC3B,QAAI;AACF,YAAM,OAAO,UAAM,4BAAY,SAAS,QAAS;AAAA,QAC/C,SAAS;AAAA,MACX,CAAC;AACD,aAAO;AAAA,QACL,SAAS;AAAA,QACT,WAAW;AAAA,MACb;AAAA,IACF,SAAS,OAAO;AACd,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAe,OAAO,WAAmB,UAAU,MAA4B;AAC7E,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,YAAM,eAAe,OAAO,SAAwC;AAClE,YAAI;AACF,eAAK,UAAU,KAAK;AACpB,eAAK,UAAU,KAAK;AACpB,cAAI,cAAc;AAClB,cAAI,SAAS;AACX,kBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAU,SAAS,KAAK,QAAS,CAAC;AAC5F,0BAAc,eAAe,GAAG;AAAA,UAClC;AAEA,gBAAM,MAAM,MAAM,KAAK,KAAK,WAAW;AAEvC,kBAAQ,GAAG;AAAA,QACb,SAAS,OAAO;AACd,iBAAO,KAAK;AAAA,QACd;AAAA,MACF;AAEA,YAAM,cAAU,2BAAW,SAAS,MAAO;AAC3C,WAAK,WAAW,SAAS;AAEzB,UAAI,KAAK,aAAa;AACpB,qBAAa,OAAO;AACpB;AAAA,MACF;AAEA,eAAS;AACT,WAAK,QAAQ;AACb,YAAM,WAAW,YAAY;AAC7B,eAAS,KAAK,UAAU,CAAC,SAAS;AAChC,gBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,qBAAa,IAAI;AAAA,MACnB,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,WAAyB;AACvB,WAAO;AAAA,EACT;AACF;;;AH5DM;AA/BC,IAAM,eAAe,MAAM;AAChC,QAAM,mBAAe,mCAAgB;AACrC,QAAM,mBAAe,8BAAgB;AACrC,QAAM,cAAU,yBAAW;AAE3B,WAAS,eAAe;AACxB,WAAS,eAAe;AACxB,WAAS,UAAU;AAEnB,8BAAU,MAAM;AACd,QAAI,QAAQ,aAAa;AACvB,YAAM,WAAW,YAAY;AAC7B,eAAS,KAAK,UAAU,OAAO;AAAA,IACjC;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEO,IAAM,cAAc,CAAC;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,WAAS,SAAS;AAClB,SACE,4CAAC,8BAAc,QACb;AAAA,IAAC;AAAA;AAAA,MACC,QAAO;AAAA,MACP,OACE,aACA,6BAAU;AAAA,QACR,aAAa;AAAA,QACb,uBAAuB;AAAA,MACzB,CAAC;AAAA,MAGF;AAAA;AAAA,QACD,4CAAC,gBAAa;AAAA;AAAA;AAAA,EAChB,GACF;AAEJ;;;AIvDA,IAAAA,gBAAqC;AACrC,sBAMO;;;ACEP,IAAAC,0BAAgC;AAChC,uBAA2B;AAC3B,gBAA+E;AAC/E,IAAAC,iBAA6B;AAC7B,sBAAqB;AAUd,IAAM,WAAyB;AAAA,EACpC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AACX;AAEO,IAAMC,YAAW,IAAI,4BAAa;AAElC,IAAMC,eAAc,MAAM;AAC/B,SAAO,YAAY,SAAS,OAAO;AACrC;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,SAAS,SAAS;AAAA,EAC7B;AAAA,EAEA,UAAU;AACR,cAAU,cAAc,OAAO;AAAA,EACjC;AAAA,EAEA,MAAM,aAAa;AACjB,UAAM,SAAS,cAAc,WAAW;AAAA,EAC1C;AAAA,EAEQ,aAAa,WAA2B;AAC9C,UAAM,aAAa,qBAAK,WAAW,SAAS;AAC5C,UAAM,OAAO,WAAW,KAAK,CAAC,EAAE;AAChC,UAAM,SAAS,KAAK,SAAS,EAAE,UAAU,IAAI,EAAE,EAAE,YAAY;AAC7D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,KAAK,WAAyC;AAClD,UAAM,UAAU,UAAM,6BAAW,SAAS;AAC1C,UAAM,eAAe,SAAS;AAE9B,UAAM,WAAW;AAKjB,YAAQ,IAAI,KAAK,aAAa,cAAc,WAAW;AACvD,QAAI,KAAK,aAAa;AACpB,YAAM,aAAa,WAAW;AAAA,IAChC;AACA,aAAS;AACT,QAAI,UAAU;AACZ,YAAM,UAAU,MAAM,aAAa,WAAW;AAE9C,YAAM,gBAAgB,QAAQ;AAAA,QAAK,CAAC,WAClC,CAAC,OAAO,MAAM,OAAO,OAAO,EAAE,SAAS,QAAQ;AAAA,MACjD;AAEA,YAAM,OAAO,aAAa,UAAU;AAAA,QAClC;AAAA,UACE,WAAW,cAAc;AAAA,UACzB,eAAe,cAAc;AAAA,QAC/B;AAAA,QACA;AAAA,UACE,UAAU;AAAA,QACZ;AAAA,MACF;AAGA,aAAO,KAAK,IAAI;AAAA,IAClB,OAAO;AACL,cAAQ,IAAI,8CAA8C;AAC1D,mBAAa,4BAA4B;AAAA,QACvC,OAAO;AAAA,QACP,OAAO;AAAA,UACL,UAAU;AAAA;AAAA,QACZ;AAAA,MACF,CAAC;AACD,WAAK,QAAQ;AAAA,IACf;AAEA,UAAM,kBAA0B,MAAM,IAAI,QAAQ,CAAC,YAAY;AAC7D,YAAM,WAAWA,aAAY;AAC7B,cAAQ,IAAI,oCAAoC,QAAQ;AACxD,MAAAD,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,gBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,gBAAQ,IAAI;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAED,SAAK,WAAW,SAAS;AACzB,UAAM,QAAS,gBAAgB,cAAc,UAAuC;AACpF,SAAK,YAAY,gBAAgB,QAAQ,aAAa,KAAK,aAAa,gBAAgB,QAAQ,eAAe;AAC/G,SAAK,cAAU,iCAAsB,gBAAgB,QAAQ,OAAO;AACpE,SAAK,UAAU,gBAAgB,QAAQ;AACvC,SAAK,UAAU,KAAK,YAAY,gBAAM,UAAU,gBAAgB;AAChE,UAAM,cAAc,KAAK,UAAU;AAAA,MACjC,WAAW,MAAM;AAAA,MACjB,SAAS,MAAM;AAAA,MACf,QAAQ,MAAM;AAAA,IAChB,CAAC;AACD,UAAM,YAAY,MAAM;AAExB,WAAO;AAAA,MACL,SAAS,KAAK,UAAU;AAAA,QACtB;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AAAA,MACD;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,EACF;AAAA,EAEA,MAAe,OAAO,WAAmB,UAAU,MAA4B;AAC7E,UAAM,cAAc,UAChB,KAAK;AAAA,MACH;AAAA,QACE,WAAW,aAAa;AAAA,QACxB,WAAU,oBAAI,KAAK,GAAE,YAAY;AAAA,QACjC,WAAO,yCAAgB;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF,IACA;AACJ,UAAM,UAAU,MAAM,KAAK,KAAK,WAAW;AAC3C,WAAO;AAAA,EACT;AAAA,EAEA,WAAyB;AACvB,WAAO;AAAA,EACT;AACF;;;ADrHI,IAAAE,sBAAA;AAtBG,IAAM,eAAe,MAAM;AAChC,QAAM,aAAS,8BAAa;AAC5B,QAAM,CAAC,YAAY,QAAI,iCAAgB;AACvC,QAAM,mBAAe,oCAAmB;AAExC,WAAS,eAAe;AACxB,WAAS,eAAe;AACxB,WAAS,UAAU;AAEnB,+BAAU,MAAM;AACd,QAAI,QAAQ;AACV,MAAAC,UAAS,KAAKC,aAAY,GAAG,MAAM;AAAA,IACrC;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,SAAO;AACT;AAEO,IAAM,cAAc,CAAC,EAAE,UAAU,OAAO,MAAkE;AAC/G,WAAS,SAAS;AAElB,SACE,8CAAC,wCAAsB,GAAG,QACvB;AAAA;AAAA,IACD,6CAAC,gBAAa;AAAA,KAChB;AAEJ;;;AExCA,IAAAC,gBAA2D;AAE3D,qCAAoD;AACpD,IAAAC,iBAAO;AAEP,kCAA8D;AAC9D,oCAAyD;AAIzD,kBAAiB;AAEjB,IAAAC,iBAAyB;AACzB,IAAAC,0BAA8B;;;ACX9B,IAAAC,8BAaO;;;ACfP,oBAAuB;AAEvB,IAAI,OAAO,WAAW,eAAe,OAAO,WAAW,QAAW;AAC9D,EAAC,OAAe,SAAS;AAC7B;;;ACJA,0BAA6E;AAC7E,iCAAuC;AACvC,kBAAuE;AAGhE,SAAS,kBAAkB,SAAkB,QAAyB;AAC3E,QAAM,SAAS,YAAY,SAAa,WAAW,SAAY,IAAI,IAAK;AACxE,QAAM,iBAAiB,OAAO,MAAM,IAAI,SAAS,CAAC;AAElD,MAAI,SAAS,eAAe,WAAW,QAAQ,CAAC;AAChD,WAAS,eAAe,cAAc,OAAO,EAAE,GAAG,MAAM;AACxD,WAAS,eAAe,cAAc,OAAO,GAAG,GAAG,MAAM;AAEzD,MAAI,YAAY,QAAW;AACzB,aAAS,eAAe,cAAc,OAAO,OAAO,GAAG,MAAM;AAC7D,QAAI,WAAW,QAAW;AACxB,qBAAe,cAAc,OAAO,MAAM,GAAG,MAAM;AAAA,IACrD;AAAA,EACF;AAEA,SAAO;AACT;AAEA,IAAM,qBAAsB,KAAK,OAAQ;AAEzC,SAAS,OAAO,GAAmB;AACjC,UAAQ,IAAI,wBAAwB;AACtC;AAEA,IAAM,kBAAkB;AACxB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,4BAA4B;AAElC,IAAM,iBAAiB;AACvB,IAAM,aAAa;AAEnB,IAAM,YAAY;AAClB,IAAM,UAAU;AAEhB,IAAM,cAAc;AAEpB,IAAM,aAAa;AAGnB,IAAM,uBAAuB;AAE7B,IAAM,mBAAmB;AAElB,IAAM,kBAAN,MAAM,iBAAgB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,YAAY,MAA+F;AACzG,SAAK,UAAU;AACf,SAAK,gBAAgB;AACrB,SAAK,UAAU;AACf,SAAK,gBAAgB,KAAK;AAE1B,QAAI,CAAC,MAAM;AACT;AAAA,IACF;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,KAAK;AAAA,IACtB;AACA,QAAI,KAAK,eAAe;AACtB,WAAK,gBAAgB,KAAK;AAAA,IAC5B;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,UAAU,OAAO,KAAK,KAAK,OAAO;AACvC,UAAI,KAAK,YAAY,GAAG;AACtB,YAAI,CAAC,KAAK,eAAe;AACvB,eAAK,gBAAgB,iBAAgB,mBAAmB,KAAK,OAAO;AAAA,QACtE;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,OAAO,mBAAmB,SAAiB;AACzC,QAAI,OAAO,UAAU,SAAS,KAAK,OAAO,MAAM,uBAAuB;AACrE,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,UAAU,sBAAsB;AAC1C,UAAI,iBAAgB,iBAAiB,OAAO,GAAG;AAC7C,eAAO;AAAA,MACT,WAAW,iBAAgB,OAAO,OAAO,GAAG;AAC1C,eAAO;AAAA,MACT;AAAA,IACF,WAAW,QAAQ,UAAU,kBAAkB;AAC7C,UAAI,iBAAgB,OAAO,OAAO,GAAG;AACnC,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,iBAAiB,QAAgB;AACtC,WACE,UACA,OAAO,MAAM,CAAC,YAAY;AACxB,aAAO,WAAW,MAAQ,WAAW,MAAQ,WAAW;AAAA,IAC1D,CAAC;AAAA,EAEL;AAAA,EAEA,OAAO,OAAO,QAAgB;AAC5B,QAAI;AACF,UAAI,YAAY,QAAQ,EAAE,OAAO,KAAK,CAAC,EAAE,OAAO,MAAM;AACtD,aAAO;AAAA,IACT,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,YAAY,GAAG;AACtB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,KAAK,SAAS;AACjB,aAAO;AAAA,IACT;AACA,UAAM,SAAS,iBAAgB,mBAAmB,KAAK,OAAO;AAC9D,WAAO,UAAU,QAAQ,WAAW,KAAK;AAAA,EAC3C;AAAA,EAEA,kBAAkB,mBAA4B;AAC5C,WAAO,KAAK,QAAQ,MAAM,KAAK,kBAAkB,KAAM,KAAK,kBAAkB,KAAK;AAAA,EACrF;AAAA,EAEA,YAAY;AACV,QAAI,CAAC,KAAK,QAAQ,GAAG;AACnB,YAAM,IAAI,MAAM,4BAA4B,KAAK,UAAU,IAAI,CAAC,EAAE;AAAA,IACpE;AACA,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,iBAAiB,CAAC,CAAC;AACxF,UAAM,gBAAgB,OAAO,MAAM,CAAC;AACpC,UAAM,oBAAoB,OAAO,MAAM,EAAE;AACzC,UAAM,gBAAgB,OAAO,MAAM,CAAC;AACpC,UAAM,cAAc,OAAO,MAAM,CAAC;AAClC,gBAAY,WAAW,CAAC;AAExB,UAAM,gBAAgB,OAAO,MAAM,CAAC;AAIpC,UAAM,gBAAgB,OAAO,KAAK,KAAK,OAAQ;AAI/C,kBAAc,WAAW,KAAK,aAAc;AAE5C,UAAM,UAAU,KAAK,cAAc,SAAS;AAC5C,kBAAc,cAAc,cAAc,MAAM;AAEhD,WAAO,OAAO,OAAO;AAAA,MACnB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGA,eAAsB,aAAa,WAAsB,gBAA4C;AACnG,QAAM,QAAQ,MAAM,KAAK,WAAW,gBAAgB,gBAAgB,cAAc;AAClF,SAAO,IAAI,sBAAU,KAAK;AAC5B;AAGA,eAAsB,gBACpB,WACA,aACA,gBACiB;AACjB,QAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,QAAM,WAAW,GAAG,CAAC;AAErB,QAAM,cAAU,mDAAuB,WAAW,IAC9C,YAAY,QAAQ,UAAU,IAC9B,YAAY,iBAAiB;AACjC,QAAM,OAAO,OAAO,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC;AAE3D,SAAO,MAAM,KAAK,WAAW,kBAAkB,YAAY,IAAI;AACjE;AAGA,eAAsBC,aAAY,WAAsB,SAAiB,gBAAyC;AAChH,QAAM,QAAQ,OAAO,MAAM,CAAC;AAC5B,QAAM,WAAW,GAAG,CAAC;AAErB,QAAM,OAAO,OAAO,OAAO,CAAC,OAAO,gBAAgB,OAAO,CAAC;AAE3D,SAAO,MAAM,KAAK,WAAW,2BAA2B,YAAY,IAAI;AAC1E;AAGA,eAAsB,oBAAoB,WAA0C;AAClF,QAAM,CAAC,qBAAqB,mBAAmB,OAAO,OAAO,KAAK,IAAI,MAAM;AAAA,IAC1E;AAAA,IACA;AAAA,IACA;AAAA,IACA,OAAO,MAAM,CAAC;AAAA,EAChB;AACA,SAAO;AAAA,IACL,qBAAqB,QAAQ,mBAAmB;AAAA,IAChD;AAAA,IACA,SAAS,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,EACrC;AACF;AAaA,eAAe,KAAK,WAAsB,aAAqB,IAAY,MAA+B;AACxG,MAAI,KAAK;AACT,MAAI,SAAS;AAEb,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO,KAAK,SAAS,SAAS,aAAa;AACzC,YAAMC,UAAS,KAAK,MAAM,QAAQ,SAAS,WAAW;AACtD,YAAMC,YAAW,MAAM,UAAU,KAAK,YAAY,aAAa,IAAI,KAAK,SAASD,OAAM;AAEvF,UAAIC,UAAS,WAAW,EAAG,OAAM,IAAI,yCAAqB,gCAAY,cAAc;AAEpF,YAAM;AACN,gBAAU;AAAA,IACZ;AAAA,EACF;AAEA,QAAM,SAAS,KAAK,MAAM,MAAM;AAChC,QAAM,WAAW,MAAM,UAAU,KAAK,YAAY,aAAa,IAAI,IAAI,MAAM;AAE7E,SAAO,SAAS,MAAM,GAAG,SAAS,SAAS,CAAC;AAC9C;;;AFxMO,IAAM,mBAAmB;AAEzB,IAAM,sBAAN,cAAkC,oDAAwB;AAAA,EAC/D,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OACE;AAAA,EACF,+BAAgE,oBAAI,IAAI,CAAC,UAAU,CAAC,CAAC;AAAA,EAE7E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cACN,OAAO,WAAW,eAClB,OAAO,aAAa,eACpB,OAAO,cAAc,eACrB,CAAE,UAAkB,MAChB,6CAAiB,cACjB,6CAAiB;AAAA,EAEvB,YAAY,SAAoC,CAAC,GAAG;AAClD,UAAM;AACN,SAAK,kBAAkB,OAAO,kBAAkB,kBAAkB,GAAG,CAAC;AACtE,SAAK,cAAc;AACnB,SAAK,aAAa;AAClB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAAyB;AAC7B,QAAI;AACF,UAAI,KAAK,aAAa,KAAK,WAAY;AACvC,UAAI,KAAK,gBAAgB,6CAAiB,SAAU,OAAM,IAAI,gDAAoB;AAElF,WAAK,cAAc;AAEnB,UAAI;AACJ,UAAI;AACF,gCAAwB,MAAM,OAAO,+BAA+B,GAAG;AAAA,MACzE,SAAS,OAAY;AACnB,cAAM,IAAI,4CAAgB,OAAO,SAAS,KAAK;AAAA,MACjD;AAEA,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,qBAAqB,OAAO;AAAA,MAChD,SAAS,OAAY;AACnB,cAAM,IAAI,kDAAsB,OAAO,SAAS,KAAK;AAAA,MACvD;AAEA,UAAI;AACJ,UAAI;AACF,oBAAY,MAAM,aAAa,WAAW,KAAK,eAAe;AAAA,MAChE,SAAS,OAAY;AACnB,cAAM,IAAI,iDAAqB,OAAO,SAAS,KAAK;AAAA,MACtD;AAEA,gBAAU,GAAG,cAAc,KAAK,aAAa;AAE7C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,WAAK,KAAK,WAAW,SAAS;AAAA,IAChC,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR,UAAE;AACA,WAAK,cAAc;AAAA,IACrB;AAAA,EACF;AAAA,EAEA,MAAM,aAA4B;AAChC,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACb,gBAAU,IAAI,cAAc,KAAK,aAAa;AAE9C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,UAAI;AACF,cAAM,UAAU,MAAM;AAAA,MACxB,SAAS,OAAY;AACnB,aAAK,KAAK,SAAS,IAAI,qDAAyB,OAAO,SAAS,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,SAAK,KAAK,YAAY;AAAA,EACxB;AAAA,EAEA,MAAM,gBAA8D,aAA4B;AAC9F,QAAI;AACF,YAAM,YAAY,KAAK;AACvB,YAAM,YAAY,KAAK;AACvB,UAAI,CAAC,aAAa,CAAC,UAAW,OAAM,IAAI,oDAAwB;AAEhE,UAAI;AACF,cAAM,YAAY,MAAM,gBAAgB,WAAW,aAAa,KAAK,eAAe;AACpF,oBAAY,aAAa,WAAW,SAAS;AAAA,MAC/C,SAAS,OAAY;AACnB,cAAM,IAAI,uDAA2B,OAAO,SAAS,KAAK;AAAA,MAC5D;AAEA,aAAO;AAAA,IACT,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,SAAiD;AACjE,QAAI;AACF,UAAI;AACF,cAAM,YAAY,KAAK;AACvB,cAAM,YAAY,KAAK;AACvB,YAAI,CAAC,aAAa,CAAC,UAAW,OAAM,IAAI,oDAAwB;AAEhE,cAAM,YAAY,MAAM,oBAAoB,SAAS;AACrD,cAAM,CAAC,OAAO,KAAK,IAAI,UAAU,QAAQ,MAAM,GAAG,EAAE,IAAI,MAAM;AAC9D,YAAI,QAAQ,KAAM,UAAU,KAAK,QAAQ,GAAI;AAC3C,gBAAM,IAAI,mDAAuB,sEAAsE;AAAA,QACzG;AAEA,cAAM,kBAAkB,IAAI,gBAAgB;AAAA,UAC1C,SAAS,OAAO,KAAK,QAAQ,MAAM;AAAA,UACnC,eAAe;AAAA,QACjB,CAAC;AACD,YAAI,CAAC,gBAAgB,kBAAkB,UAAU,mBAAmB,GAAG;AACrE,cAAI,CAAC,gBAAgB,QAAQ,GAAG;AAC9B,kBAAM,IAAI,mDAAuB,mCAAmC;AAAA,UACtE,WAAW,gBAAgB,kBAAkB,KAAK,CAAC,UAAU,qBAAqB;AAChF,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF,WAAW,gBAAgB,kBAAkB,GAAG;AAC9C,kBAAM,IAAI,mDAAuB,oDAAoD;AAAA,UACvF,OAAO;AACL,kBAAM,IAAI,mDAAuB,mDAAmD;AAAA,UACtF;AAAA,QACF;AAEA,cAAM,YAAY,MAAMC,aAAY,WAAW,gBAAgB,UAAU,GAAG,KAAK,eAAe;AAChG,eAAO,EAAE,WAAW,IAAI,WAAW,SAAS,GAAG,eAAe,gBAAgB,UAAU,EAAE;AAAA,MAC5F,SAAS,OAAY;AACnB,cAAM,IAAI,mDAAuB,OAAO,SAAS,KAAK;AAAA,MACxD;AAAA,IACF,SAAS,OAAY;AACnB,WAAK,KAAK,SAAS,KAAK;AACxB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,gBAAgB,MAAM;AAC5B,UAAM,YAAY,KAAK;AACvB,QAAI,WAAW;AACb,gBAAU,IAAI,cAAc,KAAK,aAAa;AAE9C,WAAK,aAAa;AAClB,WAAK,aAAa;AAElB,WAAK,KAAK,SAAS,IAAI,oDAAwB,CAAC;AAChD,WAAK,KAAK,YAAY;AAAA,IACxB;AAAA,EACF;AACF;;;ADnEQ,IAAAC,sBAAA;AAzIR,IAAM,WAAyB;AAAA,EAC7B,cAAc;AAAA,EACd,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAMC,YAAW,IAAI,eAAAC,QAAa;AAEzC,IAAM,gBAAgB;AAEf,IAAMC,eAAc,MAAM;AAC/B,SAAO,GAAG,aAAa,IAAI,SAAS,OAAO;AAC7C;AAEO,IAAM,YAAN,cAAwB,WAAyB;AAAA,EACtD,WAAyB;AACvB,WAAO;AAAA,EACT;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,CAAC,CAAC,SAAS,SAAS;AAAA,EAC7B;AAAA,EACA,UAAgB;AACd,aAAS,cAAc,WAAW,IAAI;AAAA,EACxC;AAAA,EAEA,aAAa;AACX,aAAS,SAAS,WAAW;AAAA,EAC/B;AAAA,EAEA,MAAM,KAAK,SAAuC;AAChD,QAAI;AACF,YAAM,WAAW,SAAS;AAC1B,YAAM,iBAAiB,IAAI,YAAY,EAAE,OAAO,OAAO;AACvD,YAAM,SAAS,MAAM,SAAS,cAAc,cAAc;AAE1D,YAAM,EAAE,WAAW,cAAc,IAC/B,kBAAkB,aAAa,EAAE,WAAW,QAAQ,eAAe,GAAG,IAAK;AAC7E,aAAO;AAAA,QACL;AAAA,QACA,WAAW,YAAAC,QAAK,OAAO,SAAS;AAAA,QAChC,eAAe,yBAAyB,aAAa,YAAAA,QAAK,OAAO,aAAa,IAAI;AAAA,MACpF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,MAAM,KAAK;AACnB,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAO,WAAmB,UAAU,MAA4B;AAC9D,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAI;AACF,cAAM,eAAe,OAAO,SAAuC;AACjE,cAAI;AACF,iBAAK,YAAY,KAAK,WAAW,SAAS;AAC1C,iBAAK,UAAU,KAAK;AACpB,iBAAK,UAAU;AACf,gBAAI,cAAc;AAClB,gBAAI,SAAS;AACX,oBAAM,MAAM,mBAAmB,EAAE,WAAW,SAAS,KAAK,SAAS,KAAK,QAAS,CAAC;AAClF,4BAAc,eAAe,GAAG;AAAA,YAClC;AAEA,kBAAM,MAAM,MAAM,KAAK,KAAK,WAAW;AAEvC,oBAAQ,GAAG;AAAA,UACb,SAAS,OAAO;AACd,oBAAQ,MAAM,0BAA0B,KAAK;AAC7C,mBAAO,KAAK;AAAA,UACd;AAAA,QACF;AAEA,YAAI,KAAK,aAAa;AACpB,uBAAa,SAAS,OAAQ;AAC9B;AAAA,QACF;AACA,iBAAS;AACT,aAAK,QAAQ;AACb,cAAM,WAAWD,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,CAAC,SAAS;AAChC,kBAAQ,IAAI,uDAAuD,UAAU,IAAI;AACjF,uBAAa,IAAI;AAAA,QACnB,CAAC;AAAA,MACH,SAAS,OAAO;AACd,gBAAQ,MAAM,oBAAoB,KAAK;AACvC,eAAO,KAAK;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAGO,IAAM,eAAe,MAAM;AAChC,QAAM,kBAAc,+CAAe;AACnC,QAAM,aAAS,uCAAU;AAEzB,+BAAU,MAAM;AACd,QAAI,OAAO,QAAQ;AACjB,UAAI,OAAO,WAAW;AACpB,cAAM,WAAWE,aAAY;AAC7B,QAAAF,UAAS,KAAK,UAAU,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,WAAS,eAAe;AACxB,WAAS,UAAU;AACnB,SAAO;AACT;AAEO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,MAIM;AACJ,QAAM,eAAW,uCAAc,UAAU,UAAU,cAAc;AAEjE,QAAM,qBAAiB;AAAA,IACrB,MAAM;AAAA,MACJ,IAAI,mDAAqB;AAAA,MACzB,IAAI,iDAAmB;AAAA,MACvB,IAAI,oBAAoB;AAAA,QACtB,gBAAgB,kBAAkB,CAAC;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,IACA,CAAC;AAAA,EACH;AAEA,QAAM,cAAU,2BAAY,CAAC,UAAe;AAC1C,YAAQ,MAAM,KAAK;AAAA,EACrB,GAAG,CAAC,CAAC;AACL,SACE,6CAAC,kDAAmB,UAClB,uDAAC,8CAAe,SAAS,UAAU,UAAU,gBAAgB,SAAkB,aAAW,MACxF,wDAAC,sDACC;AAAA,iDAAC,gBAAa;AAAA,IACb;AAAA,KACH,GACF,GACF;AAEJ;;;AInKA,IAAAI,0BAA0B;AAEnB,IAAe,gBAAf,MAA6B;AAAA,EAClC,OAAe,YAA+D,CAAC;AAAA,EAC/E,OAAO,UAAU,MAAiB,aAAyD;AACzF,QAAI,CAAC,KAAK,UAAU,IAAI,GAAG;AACzB,UAAI;AACJ,cAAQ,MAAM;AAAA,QACZ,KAAK,kCAAU;AACb,wBAAc;AACd;AAAA,QACF,KAAK,kCAAU;AACb,wBAAc;AACd;AAAA;AAAA;AAAA;AAAA,QAIF,KAAK,kCAAU;AACb,wBAAc;AACd;AAAA,QACF;AACE,gBAAM,IAAI,MAAM,yBAAyB;AAAA,MAC7C;AAEA,UAAI,CAAC,aAAa;AAChB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AACA,WAAK,UAAU,IAAI,IAAI,IAAI,YAAY,MAAM,WAAW;AAAA,IAC1D;AACA,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AACF;","names":["import_react","import_tokentable_core","import_events","eventBus","getEventKey","import_jsx_runtime","eventBus","getEventKey","import_react","import_styles","import_events","import_tokentable_core","import_wallet_adapter_base","signMessage","buffer","response","signMessage","import_jsx_runtime","eventBus","EventEmitter","getEventKey","bs58","import_tokentable_core"]}
|
package/dist/index.mjs
CHANGED
|
@@ -850,22 +850,23 @@ var SolanaProvider = ({
|
|
|
850
850
|
};
|
|
851
851
|
|
|
852
852
|
// src/WalletFactory.tsx
|
|
853
|
+
import { ChainType } from "@sign-global/tokentable-core";
|
|
853
854
|
var WalletFactory = class {
|
|
854
855
|
static instances = {};
|
|
855
856
|
static getWallet(type, userAddress) {
|
|
856
857
|
if (!this.instances[type]) {
|
|
857
858
|
let WalletClass;
|
|
858
859
|
switch (type) {
|
|
859
|
-
case
|
|
860
|
+
case ChainType.Evm:
|
|
860
861
|
WalletClass = EvmWallet;
|
|
861
862
|
break;
|
|
862
|
-
case
|
|
863
|
+
case ChainType.Ton:
|
|
863
864
|
WalletClass = TonWallet;
|
|
864
865
|
break;
|
|
865
866
|
// case ChainType.Starknet:
|
|
866
867
|
// WalletClass = StarknetWallet;
|
|
867
868
|
// break;
|
|
868
|
-
case
|
|
869
|
+
case ChainType.Solana:
|
|
869
870
|
WalletClass = SolWallet;
|
|
870
871
|
break;
|
|
871
872
|
default:
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { EvmWallet } from './providers/evm';\nimport { ChainType } from './types';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":"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","names":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n default:\n throw new Error('Unsupported wallet type');\n }\n\n if (!WalletClass) {\n throw new Error('Unsupported wallet type');\n }\n this.instances[type] = new WalletClass(type, userAddress);\n }\n return this.instances[type];\n }\n}\n"],"mappings":"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","names":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sign-global/tokentable-wallets",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sign-global/tokentable-core": "1.
|
|
15
|
+
"@sign-global/tokentable-core": "1.5.0"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@rainbow-me/rainbowkit": "^2.2.3",
|
package/src/WalletFactory.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EvmWallet } from './providers/evm';
|
|
2
|
-
import { ChainType } from './types';
|
|
3
2
|
import { TonWallet } from './providers/ton';
|
|
4
3
|
import { SolWallet } from './providers/solana';
|
|
4
|
+
import { ChainType } from '@sign-global/tokentable-core';
|
|
5
5
|
|
|
6
6
|
export abstract class WalletFactory {
|
|
7
7
|
private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};
|
package/src/types.ts
CHANGED
|
@@ -12,13 +12,6 @@ export enum WalletType {
|
|
|
12
12
|
Cardano = 'cardano'
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export enum ChainType {
|
|
16
|
-
Evm = 'evm',
|
|
17
|
-
Ton = 'ton',
|
|
18
|
-
// Starknet = 'starknet',
|
|
19
|
-
Solana = 'solana',
|
|
20
|
-
Sui = 'sui'
|
|
21
|
-
}
|
|
22
15
|
export enum ExtendedWalletType {
|
|
23
16
|
UNISAT = 'unisat',
|
|
24
17
|
OKXBTC = 'okx_btc'
|