@sign-global/tokentable-wallets 1.6.3 → 2.0.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 +20 -0
- package/dist/index.d.mts +7 -8
- package/dist/index.d.ts +7 -8
- package/dist/index.js +58 -33
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +58 -40
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -4
- package/src/providers/sui/index.tsx +90 -56
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# @sign-global/tokentable-wallets
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- 1db0af2: Migrate Sui to `SuiGrpcClient` (`@mysten/sui` 2.x) and `@mysten/dapp-kit-react`. Sui Foundation public full nodes no longer serve JSON-RPC.
|
|
8
|
+
|
|
9
|
+
Breaking changes:
|
|
10
|
+
- core: `SuiContractInfo.chainRpc` must be a gRPC-web endpoint; JSON-RPC URLs no longer work.
|
|
11
|
+
- core: `signAndExecute` returns the 2.x `Transaction` object (`effects.changedObjects` instead of `effects.created`) and throws when execution fails.
|
|
12
|
+
- core: `readMoveFunction` returns the BCS bytes of the first return value.
|
|
13
|
+
- core: `getDistributorInfo().signer` now reads the on-chain `authorized_public_key` field.
|
|
14
|
+
- wallets: `@mysten/dapp-kit` is replaced by `@mysten/dapp-kit-react`; consumers must install `@mysten/dapp-kit-react` and `@mysten/sui` 2.x. The `@mysten/dapp-kit/dist/index.css` import is no longer needed.
|
|
15
|
+
- wallets: `SuiWallet.getStore().wallet` is now the wallet-standard `Wallet` (previously `{ currentWallet }`); pass it directly as `walletClient`.
|
|
16
|
+
- Requires `moduleResolution: bundler` (or `node16`/`nodenext`) in consuming TypeScript projects, as the 2.x `@mysten/sui` package exposes subpaths only through `exports`.
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- Updated dependencies [1db0af2]
|
|
21
|
+
- @sign-global/tokentable-core@2.0.0
|
|
22
|
+
|
|
3
23
|
## 1.6.3
|
|
4
24
|
|
|
5
25
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -8,7 +8,8 @@ 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
10
|
import { useChain } from '@cosmos-kit/react';
|
|
11
|
-
import {
|
|
11
|
+
import { UiWalletAccount } from '@mysten/dapp-kit-react';
|
|
12
|
+
import { Wallet } from '@mysten/wallet-standard';
|
|
12
13
|
import { ChainType } from '@sign-global/tokentable-core';
|
|
13
14
|
|
|
14
15
|
type ISignResult = {
|
|
@@ -133,13 +134,11 @@ declare const CosmosProvider: ({ children, chainName }: {
|
|
|
133
134
|
chainName?: string;
|
|
134
135
|
}) => react_jsx_runtime.JSX.Element;
|
|
135
136
|
|
|
137
|
+
type SuiNetwork = 'testnet' | 'mainnet';
|
|
136
138
|
interface SuiStoreType {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
} | null;
|
|
141
|
-
account: ReturnType<typeof useCurrentAccount> | null;
|
|
142
|
-
wallet: ReturnType<typeof useCurrentWallet> | null;
|
|
139
|
+
openConnectModal: (() => void) | null;
|
|
140
|
+
account: UiWalletAccount | null;
|
|
141
|
+
wallet: Wallet | null;
|
|
143
142
|
counter: number;
|
|
144
143
|
}
|
|
145
144
|
declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
@@ -152,7 +151,7 @@ declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
|
152
151
|
}
|
|
153
152
|
declare const SuiProvider: ({ children, network }: {
|
|
154
153
|
children: ReactNode;
|
|
155
|
-
network:
|
|
154
|
+
network: SuiNetwork;
|
|
156
155
|
}) => react_jsx_runtime.JSX.Element;
|
|
157
156
|
|
|
158
157
|
declare abstract class WalletFactory {
|
package/dist/index.d.ts
CHANGED
|
@@ -8,7 +8,8 @@ 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
10
|
import { useChain } from '@cosmos-kit/react';
|
|
11
|
-
import {
|
|
11
|
+
import { UiWalletAccount } from '@mysten/dapp-kit-react';
|
|
12
|
+
import { Wallet } from '@mysten/wallet-standard';
|
|
12
13
|
import { ChainType } from '@sign-global/tokentable-core';
|
|
13
14
|
|
|
14
15
|
type ISignResult = {
|
|
@@ -133,13 +134,11 @@ declare const CosmosProvider: ({ children, chainName }: {
|
|
|
133
134
|
chainName?: string;
|
|
134
135
|
}) => react_jsx_runtime.JSX.Element;
|
|
135
136
|
|
|
137
|
+
type SuiNetwork = 'testnet' | 'mainnet';
|
|
136
138
|
interface SuiStoreType {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
} | null;
|
|
141
|
-
account: ReturnType<typeof useCurrentAccount> | null;
|
|
142
|
-
wallet: ReturnType<typeof useCurrentWallet> | null;
|
|
139
|
+
openConnectModal: (() => void) | null;
|
|
140
|
+
account: UiWalletAccount | null;
|
|
141
|
+
wallet: Wallet | null;
|
|
143
142
|
counter: number;
|
|
144
143
|
}
|
|
145
144
|
declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
@@ -152,7 +151,7 @@ declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
|
152
151
|
}
|
|
153
152
|
declare const SuiProvider: ({ children, network }: {
|
|
154
153
|
children: ReactNode;
|
|
155
|
-
network:
|
|
154
|
+
network: SuiNetwork;
|
|
156
155
|
}) => react_jsx_runtime.JSX.Element;
|
|
157
156
|
|
|
158
157
|
declare abstract class WalletFactory {
|
package/dist/index.js
CHANGED
|
@@ -997,14 +997,26 @@ var CosmosProvider = ({ children, chainName = "cosmoshub" }) => {
|
|
|
997
997
|
};
|
|
998
998
|
|
|
999
999
|
// src/providers/sui/index.tsx
|
|
1000
|
-
var import_dist = require("@mysten/dapp-kit/dist/index.css");
|
|
1001
1000
|
var import_events5 = __toESM(require("events"));
|
|
1002
1001
|
var import_react6 = require("react");
|
|
1003
|
-
var
|
|
1004
|
-
var
|
|
1002
|
+
var import_dapp_kit_react = require("@mysten/dapp-kit-react");
|
|
1003
|
+
var import_ui2 = require("@mysten/dapp-kit-react/ui");
|
|
1004
|
+
var import_grpc = require("@mysten/sui/grpc");
|
|
1005
|
+
var import_wallet_standard = require("@mysten/wallet-standard");
|
|
1005
1006
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1007
|
+
var createSuiDAppKit = () => (0, import_dapp_kit_react.createDAppKit)({
|
|
1008
|
+
networks: ["mainnet", "testnet"],
|
|
1009
|
+
createClient: (network) => new import_grpc.SuiGrpcClient({ network, baseUrl: `https://fullnode.${network}.sui.io:443` })
|
|
1010
|
+
});
|
|
1011
|
+
var dAppKitInstance;
|
|
1012
|
+
var getDAppKit = () => {
|
|
1013
|
+
if (!dAppKitInstance) {
|
|
1014
|
+
dAppKitInstance = createSuiDAppKit();
|
|
1015
|
+
}
|
|
1016
|
+
return dAppKitInstance;
|
|
1017
|
+
};
|
|
1006
1018
|
var suiStore = {
|
|
1007
|
-
|
|
1019
|
+
openConnectModal: null,
|
|
1008
1020
|
account: null,
|
|
1009
1021
|
wallet: null,
|
|
1010
1022
|
counter: 0
|
|
@@ -1019,19 +1031,17 @@ var SuiWallet = class extends WalletBase {
|
|
|
1019
1031
|
return suiStore;
|
|
1020
1032
|
}
|
|
1021
1033
|
get isConnected() {
|
|
1022
|
-
return
|
|
1034
|
+
return getDAppKit().stores.$connection.get().isConnected;
|
|
1023
1035
|
}
|
|
1024
1036
|
connect() {
|
|
1025
|
-
suiStore.
|
|
1037
|
+
suiStore.openConnectModal?.();
|
|
1026
1038
|
}
|
|
1027
1039
|
disconnect() {
|
|
1028
|
-
|
|
1040
|
+
getDAppKit().disconnectWallet();
|
|
1029
1041
|
}
|
|
1030
1042
|
async sign(message) {
|
|
1031
|
-
const
|
|
1032
|
-
|
|
1033
|
-
message: new Uint8Array(Buffer.from(message)),
|
|
1034
|
-
account: suiStore.account
|
|
1043
|
+
const res = await getDAppKit().signPersonalMessage({
|
|
1044
|
+
message: new Uint8Array(Buffer.from(message))
|
|
1035
1045
|
});
|
|
1036
1046
|
return {
|
|
1037
1047
|
message,
|
|
@@ -1042,7 +1052,7 @@ var SuiWallet = class extends WalletBase {
|
|
|
1042
1052
|
return new Promise((resolve) => {
|
|
1043
1053
|
const signCallback = (data) => {
|
|
1044
1054
|
this.publicKey = Buffer.from(data.publicKey).toString("hex");
|
|
1045
|
-
this.address = data
|
|
1055
|
+
this.address = data.address;
|
|
1046
1056
|
this.chainId = 1;
|
|
1047
1057
|
let fullMessage = statement;
|
|
1048
1058
|
if (prepare) {
|
|
@@ -1066,35 +1076,50 @@ var SuiWallet = class extends WalletBase {
|
|
|
1066
1076
|
});
|
|
1067
1077
|
}
|
|
1068
1078
|
};
|
|
1079
|
+
var dappKitThemeReset = Object.fromEntries(
|
|
1080
|
+
[
|
|
1081
|
+
"background",
|
|
1082
|
+
"foreground",
|
|
1083
|
+
"primary",
|
|
1084
|
+
"primary-foreground",
|
|
1085
|
+
"secondary",
|
|
1086
|
+
"secondary-foreground",
|
|
1087
|
+
"border",
|
|
1088
|
+
"accent",
|
|
1089
|
+
"accent-foreground",
|
|
1090
|
+
"muted",
|
|
1091
|
+
"muted-foreground",
|
|
1092
|
+
"popover",
|
|
1093
|
+
"popover-foreground",
|
|
1094
|
+
"destructive",
|
|
1095
|
+
"positive",
|
|
1096
|
+
"ring",
|
|
1097
|
+
"input"
|
|
1098
|
+
].map((name) => [`--${name}`, "initial"])
|
|
1099
|
+
);
|
|
1069
1100
|
var SuiConnector = () => {
|
|
1070
|
-
const [
|
|
1071
|
-
const account = (0,
|
|
1072
|
-
const wallet = (0, import_dapp_kit.useCurrentWallet)();
|
|
1101
|
+
const [modalKey, setModalKey] = (0, import_react6.useState)(0);
|
|
1102
|
+
const { wallet, account, isConnected } = (0, import_dapp_kit_react.useWalletConnection)({ dAppKit: getDAppKit() });
|
|
1073
1103
|
(0, import_react6.useEffect)(() => {
|
|
1074
|
-
if (
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
eventBus5.emit(eventKey, account);
|
|
1078
|
-
}
|
|
1104
|
+
if (isConnected && account) {
|
|
1105
|
+
const eventKey = getEventKey5();
|
|
1106
|
+
eventBus5.emit(eventKey, account);
|
|
1079
1107
|
}
|
|
1080
|
-
}, [
|
|
1081
|
-
suiStore.
|
|
1082
|
-
open: showModal,
|
|
1083
|
-
setOpen: setShowModal
|
|
1084
|
-
};
|
|
1108
|
+
}, [isConnected, account]);
|
|
1109
|
+
suiStore.openConnectModal = () => setModalKey((key) => key + 1);
|
|
1085
1110
|
suiStore.account = account;
|
|
1086
|
-
suiStore.wallet = wallet;
|
|
1087
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
1111
|
+
suiStore.wallet = wallet ? (0, import_wallet_standard.getWallets)().get().find((w) => w.name === wallet.name) ?? null : null;
|
|
1112
|
+
return modalKey > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: dappKitThemeReset, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_ui2.ConnectModal, { open: true }, modalKey) }) : null;
|
|
1088
1113
|
};
|
|
1089
1114
|
var SuiProvider = ({ children, network }) => {
|
|
1090
|
-
const
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
});
|
|
1094
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.
|
|
1115
|
+
const dAppKit = getDAppKit();
|
|
1116
|
+
(0, import_react6.useEffect)(() => {
|
|
1117
|
+
dAppKit.switchNetwork(network);
|
|
1118
|
+
}, [dAppKit, network]);
|
|
1119
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_dapp_kit_react.DAppKitProvider, { dAppKit, children: [
|
|
1095
1120
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SuiConnector, {}),
|
|
1096
1121
|
children
|
|
1097
|
-
] })
|
|
1122
|
+
] });
|
|
1098
1123
|
};
|
|
1099
1124
|
|
|
1100
1125
|
// src/WalletFactory.tsx
|
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/providers/cosmos/index.tsx","../src/providers/sui/index.tsx","../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 { ReactNode, useEffect } from 'react';\nimport { ChainProvider, useChain } from '@cosmos-kit/react';\nimport { chains, assets } from 'chain-registry';\nimport { wallets } from '@cosmos-kit/keplr';\nimport { wallets as okxWallets } from '@cosmos-kit/okxwallet-extension';\nimport { wallets as compassWallets } from '@cosmos-kit/compass-extension';\nimport '@interchain-ui/react/styles';\nimport EventEmitter from 'events';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\ninterface CosmosStoreType {\n chainContext: ReturnType<typeof useChain> | null;\n counter: number;\n}\n\nconst cosmosStore: CosmosStoreType = {\n chainContext: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst COSMOS_EVENT_KEY = 'cosmos_signin';\n\nexport const getEventKey = () => {\n return `${COSMOS_EVENT_KEY}_${cosmosStore.counter}`;\n};\n\nexport class CosmosWallet extends WalletBase<CosmosStoreType> {\n getStore(): CosmosStoreType {\n return cosmosStore;\n }\n get isConnected() {\n return !!cosmosStore.chainContext?.isWalletConnected;\n }\n connect(): void {\n cosmosStore.chainContext?.connect();\n }\n\n disconnect() {\n cosmosStore.chainContext?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = cosmosStore.chainContext!;\n if (!provider.address) {\n throw new Error('Cosmos wallet not connected');\n }\n const result = await provider.signArbitrary?.(provider.address, message);\n\n this.publicKey = result?.pub_key?.value;\n\n return {\n message,\n signature: result?.signature\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 useChain>) => {\n try {\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chain.chain_id, 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(cosmosStore.chainContext!);\n return;\n }\n cosmosStore.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\nexport const CosmosConnector = ({ chainName = 'cosmoshub' }: { chainName?: string }) => {\n const chainContext = useChain(chainName);\n\n useEffect(() => {\n if (chainContext.address) {\n if (chainContext.isWalletConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, chainContext);\n }\n }\n }, [chainContext]);\n\n cosmosStore.chainContext = chainContext;\n return null;\n};\n\nexport const CosmosProvider = ({ children, chainName = 'cosmoshub' }: { children: ReactNode; chainName?: string }) => {\n const assetList = assets.find(({ chain_name }) => chain_name === chainName);\n return (\n <ChainProvider\n chains={chains} // supported chains\n assetLists={assetList ? [assetList] : undefined} // supported asset lists\n wallets={[...wallets, ...compassWallets, ...okxWallets]}\n signerOptions={{}}\n endpointOptions={{ endpoints: {} }}\n throwErrors={true}\n >\n <CosmosConnector chainName={chainName} />\n {children}\n </ChainProvider>\n );\n};\n","import '@mysten/dapp-kit/dist/index.css';\nimport EventEmitter from 'events';\nimport { ReactNode, useEffect, useState } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport {\n createNetworkConfig,\n SuiClientProvider,\n WalletProvider,\n ConnectModal,\n useCurrentAccount,\n useCurrentWallet\n} from '@mysten/dapp-kit';\nimport { getFullnodeUrl } from '@mysten/sui/client';\n\ninterface SuiStoreType {\n connectModal: {\n open: boolean;\n setOpen: (open: boolean) => void;\n } | null;\n account: ReturnType<typeof useCurrentAccount> | null;\n wallet: ReturnType<typeof useCurrentWallet> | null;\n counter: number;\n}\n\nconst suiStore: SuiStoreType = {\n connectModal: null,\n account: null,\n wallet: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst Sui_EVENT_KEY = 'sui_signin';\n\nexport const getEventKey = () => {\n return `${Sui_EVENT_KEY}_${suiStore.counter}`;\n};\n\nexport class SuiWallet extends WalletBase<SuiStoreType> {\n getStore(): SuiStoreType {\n return suiStore;\n }\n get isConnected(): boolean {\n return !!this.getStore().wallet?.isConnected;\n }\n\n connect() {\n suiStore.connectModal?.setOpen(true);\n }\n\n disconnect() {\n suiStore.wallet?.currentWallet?.features['standard:disconnect']?.disconnect();\n }\n async sign(message: string): Promise<ISignResult> {\n const signPersonalFeature = suiStore.wallet?.currentWallet?.features['sui:signPersonalMessage'];\n const res = await signPersonalFeature?.signPersonalMessage({\n message: new Uint8Array(Buffer.from(message)),\n account: suiStore.account!\n });\n\n return {\n message: message,\n signature: res!.signature\n };\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve) => {\n const signCallback = (data: ReturnType<typeof useCurrentAccount>) => {\n this.publicKey = Buffer.from(data!.publicKey).toString('hex');\n this.address = data?.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = this.sign(JSON.stringify(fullMessage, null, ' '));\n\n resolve(res);\n };\n\n if (this.isConnected && suiStore.account) {\n signCallback(suiStore.account!);\n return;\n }\n suiStore.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\nexport const SuiConnector = () => {\n const [showModal, setShowModal] = useState(false);\n const account = useCurrentAccount();\n const wallet = useCurrentWallet();\n\n useEffect(() => {\n if (wallet) {\n if (wallet.isConnected && account) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }\n }, [wallet, account]);\n\n suiStore.connectModal = {\n open: showModal,\n setOpen: setShowModal\n };\n suiStore.account = account;\n suiStore.wallet = wallet;\n\n return <ConnectModal open={showModal} onOpenChange={(open) => setShowModal(open)} trigger={<div></div>} />;\n};\n\nexport const SuiProvider = ({ children, network }: { children: ReactNode; network: 'testnet' | 'mainnet' }) => {\n const { networkConfig } = createNetworkConfig({\n testnet: { url: getFullnodeUrl('testnet') },\n mainnet: { url: getFullnodeUrl('mainnet') }\n });\n return (\n <SuiClientProvider networks={networkConfig} network={network}>\n <WalletProvider autoConnect>\n <SuiConnector />\n {children}\n </WalletProvider>\n </SuiClientProvider>\n );\n};\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\nimport { SuiWallet } from './providers/sui';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet> = {};\n static getWallet(\n type: ChainType,\n userAddress?: string\n ): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet {\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.Sui:\n WalletClass = SuiWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n\n case ChainType.Cosmos:\n WalletClass = CosmosWallet;\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","wallets","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","wallets","import_react","import_styles","import_events","import_jsx_runtime","eventBus","EventEmitter","getEventKey","compassWallets","okxWallets","import_events","import_react","import_jsx_runtime","eventBus","EventEmitter","getEventKey","import_tokentable_core"]}
|
|
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/providers/cosmos/index.tsx","../src/providers/sui/index.tsx","../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 { ReactNode, useEffect } from 'react';\nimport { ChainProvider, useChain } from '@cosmos-kit/react';\nimport { chains, assets } from 'chain-registry';\nimport { wallets } from '@cosmos-kit/keplr';\nimport { wallets as okxWallets } from '@cosmos-kit/okxwallet-extension';\nimport { wallets as compassWallets } from '@cosmos-kit/compass-extension';\nimport '@interchain-ui/react/styles';\nimport EventEmitter from 'events';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\ninterface CosmosStoreType {\n chainContext: ReturnType<typeof useChain> | null;\n counter: number;\n}\n\nconst cosmosStore: CosmosStoreType = {\n chainContext: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst COSMOS_EVENT_KEY = 'cosmos_signin';\n\nexport const getEventKey = () => {\n return `${COSMOS_EVENT_KEY}_${cosmosStore.counter}`;\n};\n\nexport class CosmosWallet extends WalletBase<CosmosStoreType> {\n getStore(): CosmosStoreType {\n return cosmosStore;\n }\n get isConnected() {\n return !!cosmosStore.chainContext?.isWalletConnected;\n }\n connect(): void {\n cosmosStore.chainContext?.connect();\n }\n\n disconnect() {\n cosmosStore.chainContext?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = cosmosStore.chainContext!;\n if (!provider.address) {\n throw new Error('Cosmos wallet not connected');\n }\n const result = await provider.signArbitrary?.(provider.address, message);\n\n this.publicKey = result?.pub_key?.value;\n\n return {\n message,\n signature: result?.signature\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 useChain>) => {\n try {\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chain.chain_id, 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(cosmosStore.chainContext!);\n return;\n }\n cosmosStore.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\nexport const CosmosConnector = ({ chainName = 'cosmoshub' }: { chainName?: string }) => {\n const chainContext = useChain(chainName);\n\n useEffect(() => {\n if (chainContext.address) {\n if (chainContext.isWalletConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, chainContext);\n }\n }\n }, [chainContext]);\n\n cosmosStore.chainContext = chainContext;\n return null;\n};\n\nexport const CosmosProvider = ({ children, chainName = 'cosmoshub' }: { children: ReactNode; chainName?: string }) => {\n const assetList = assets.find(({ chain_name }) => chain_name === chainName);\n return (\n <ChainProvider\n chains={chains} // supported chains\n assetLists={assetList ? [assetList] : undefined} // supported asset lists\n wallets={[...wallets, ...compassWallets, ...okxWallets]}\n signerOptions={{}}\n endpointOptions={{ endpoints: {} }}\n throwErrors={true}\n >\n <CosmosConnector chainName={chainName} />\n {children}\n </ChainProvider>\n );\n};\n","import EventEmitter from 'events';\nimport { CSSProperties, ReactNode, useEffect, useState } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport { createDAppKit, DAppKitProvider, useWalletConnection, UiWalletAccount } from '@mysten/dapp-kit-react';\nimport { ConnectModal } from '@mysten/dapp-kit-react/ui';\nimport { SuiGrpcClient } from '@mysten/sui/grpc';\nimport { getWallets, Wallet } from '@mysten/wallet-standard';\n\ntype SuiNetwork = 'testnet' | 'mainnet';\n\nconst createSuiDAppKit = () =>\n createDAppKit({\n networks: ['mainnet', 'testnet'] as SuiNetwork[],\n createClient: (network) => new SuiGrpcClient({ network, baseUrl: `https://fullnode.${network}.sui.io:443` })\n });\n\nlet dAppKitInstance: ReturnType<typeof createSuiDAppKit> | undefined;\n\n// 延迟创建:createDAppKit 会触发钱包发现与自动连接,只能在浏览器端执行\nconst getDAppKit = () => {\n if (!dAppKitInstance) {\n dAppKitInstance = createSuiDAppKit();\n }\n return dAppKitInstance;\n};\n\ninterface SuiStoreType {\n openConnectModal: (() => void) | null;\n account: UiWalletAccount | null;\n wallet: Wallet | null;\n counter: number;\n}\n\nconst suiStore: SuiStoreType = {\n openConnectModal: null,\n account: null,\n wallet: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst Sui_EVENT_KEY = 'sui_signin';\n\nexport const getEventKey = () => {\n return `${Sui_EVENT_KEY}_${suiStore.counter}`;\n};\n\nexport class SuiWallet extends WalletBase<SuiStoreType> {\n getStore(): SuiStoreType {\n return suiStore;\n }\n get isConnected(): boolean {\n return getDAppKit().stores.$connection.get().isConnected;\n }\n\n connect() {\n suiStore.openConnectModal?.();\n }\n\n disconnect() {\n getDAppKit().disconnectWallet();\n }\n async sign(message: string): Promise<ISignResult> {\n const res = await getDAppKit().signPersonalMessage({\n message: new Uint8Array(Buffer.from(message))\n });\n\n return {\n message: message,\n signature: res.signature\n };\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve) => {\n const signCallback = (data: UiWalletAccount) => {\n this.publicKey = Buffer.from(data.publicKey).toString('hex');\n this.address = data.address;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = this.sign(JSON.stringify(fullMessage, null, ' '));\n\n resolve(res);\n };\n\n if (this.isConnected && suiStore.account) {\n signCallback(suiStore.account!);\n return;\n }\n suiStore.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\n// dapp-kit 组件把宿主的 --background 等同名变量当完整颜色读取,shadcn 主题存的是 HSL 通道值会让弹窗变透明,这里重置为组件默认主题\nconst dappKitThemeReset = Object.fromEntries(\n [\n 'background',\n 'foreground',\n 'primary',\n 'primary-foreground',\n 'secondary',\n 'secondary-foreground',\n 'border',\n 'accent',\n 'accent-foreground',\n 'muted',\n 'muted-foreground',\n 'popover',\n 'popover-foreground',\n 'destructive',\n 'positive',\n 'ring',\n 'input'\n ].map((name) => [`--${name}`, 'initial'])\n) as CSSProperties;\n\nexport const SuiConnector = () => {\n // ConnectModal 的 React 封装不转发 ref,用 key 重挂载来重新打开被用户关闭的弹窗\n const [modalKey, setModalKey] = useState(0);\n const { wallet, account, isConnected } = useWalletConnection({ dAppKit: getDAppKit() });\n\n useEffect(() => {\n if (isConnected && account) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [isConnected, account]);\n\n suiStore.openConnectModal = () => setModalKey((key) => key + 1);\n suiStore.account = account;\n // 还原 wallet-standard 的 Wallet 对象,供 core 的 walletClient 使用\n suiStore.wallet = wallet\n ? (getWallets()\n .get()\n .find((w) => w.name === wallet.name) ?? null)\n : null;\n\n return modalKey > 0 ? (\n <div style={dappKitThemeReset}>\n <ConnectModal key={modalKey} open />\n </div>\n ) : null;\n};\n\nexport const SuiProvider = ({ children, network }: { children: ReactNode; network: SuiNetwork }) => {\n const dAppKit = getDAppKit();\n\n useEffect(() => {\n dAppKit.switchNetwork(network);\n }, [dAppKit, network]);\n\n return (\n <DAppKitProvider dAppKit={dAppKit}>\n <SuiConnector />\n {children}\n </DAppKitProvider>\n );\n};\n","import { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\nimport { SuiWallet } from './providers/sui';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet> = {};\n static getWallet(\n type: ChainType,\n userAddress?: string\n ): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet {\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.Sui:\n WalletClass = SuiWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n\n case ChainType.Cosmos:\n WalletClass = CosmosWallet;\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","wallets","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","wallets","import_react","import_styles","import_events","import_jsx_runtime","eventBus","EventEmitter","getEventKey","compassWallets","okxWallets","import_events","import_react","import_ui","import_jsx_runtime","eventBus","EventEmitter","getEventKey","import_tokentable_core"]}
|