@sign-global/tokentable-wallets 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/index.d.mts +25 -2
- package/dist/index.d.ts +25 -2
- package/dist/index.js +108 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +113 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -2
- package/src/WalletFactory.tsx +10 -2
- package/src/providers/index.ts +1 -0
- package/src/providers/sui/index.tsx +139 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @sign-global/tokentable-wallets
|
|
2
2
|
|
|
3
|
+
## 1.5.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @sign-global/tokentable-core@1.7.0
|
|
9
|
+
|
|
10
|
+
## 1.5.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- feat: add Sui wallet support
|
|
15
|
+
|
|
3
16
|
## 1.4.0
|
|
4
17
|
|
|
5
18
|
### Minor Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -8,6 +8,7 @@ import { useWallet } from '@solana/wallet-adapter-react';
|
|
|
8
8
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
9
9
|
import { Cluster } from '@solana/web3.js';
|
|
10
10
|
import { useChain } from '@cosmos-kit/react';
|
|
11
|
+
import { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';
|
|
11
12
|
import { ChainType } from '@sign-global/tokentable-core';
|
|
12
13
|
|
|
13
14
|
type ISignResult = {
|
|
@@ -132,9 +133,31 @@ declare const CosmosProvider: ({ children, chainName }: {
|
|
|
132
133
|
chainName?: string;
|
|
133
134
|
}) => react_jsx_runtime.JSX.Element;
|
|
134
135
|
|
|
136
|
+
interface SuiStoreType {
|
|
137
|
+
connectModal: {
|
|
138
|
+
open: boolean;
|
|
139
|
+
setOpen: (open: boolean) => void;
|
|
140
|
+
} | null;
|
|
141
|
+
account: ReturnType<typeof useCurrentAccount> | null;
|
|
142
|
+
wallet: ReturnType<typeof useCurrentWallet> | null;
|
|
143
|
+
counter: number;
|
|
144
|
+
}
|
|
145
|
+
declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
146
|
+
getStore(): SuiStoreType;
|
|
147
|
+
get isConnected(): boolean;
|
|
148
|
+
connect(): void;
|
|
149
|
+
disconnect(): void;
|
|
150
|
+
sign(message: string): Promise<ISignResult>;
|
|
151
|
+
signin(statement: string, prepare?: boolean): Promise<ISignResult>;
|
|
152
|
+
}
|
|
153
|
+
declare const SuiProvider: ({ children, network }: {
|
|
154
|
+
children: ReactNode;
|
|
155
|
+
network: "testnet" | "mainnet";
|
|
156
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
157
|
+
|
|
135
158
|
declare abstract class WalletFactory {
|
|
136
159
|
private static instances;
|
|
137
|
-
static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet;
|
|
160
|
+
static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet;
|
|
138
161
|
}
|
|
139
162
|
|
|
140
|
-
export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, TonProvider, TonWallet, WalletFactory };
|
|
163
|
+
export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, SuiProvider, SuiWallet, TonProvider, TonWallet, WalletFactory };
|
package/dist/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { useWallet } from '@solana/wallet-adapter-react';
|
|
|
8
8
|
import { Adapter } from '@solana/wallet-adapter-base';
|
|
9
9
|
import { Cluster } from '@solana/web3.js';
|
|
10
10
|
import { useChain } from '@cosmos-kit/react';
|
|
11
|
+
import { useCurrentAccount, useCurrentWallet } from '@mysten/dapp-kit';
|
|
11
12
|
import { ChainType } from '@sign-global/tokentable-core';
|
|
12
13
|
|
|
13
14
|
type ISignResult = {
|
|
@@ -132,9 +133,31 @@ declare const CosmosProvider: ({ children, chainName }: {
|
|
|
132
133
|
chainName?: string;
|
|
133
134
|
}) => react_jsx_runtime.JSX.Element;
|
|
134
135
|
|
|
136
|
+
interface SuiStoreType {
|
|
137
|
+
connectModal: {
|
|
138
|
+
open: boolean;
|
|
139
|
+
setOpen: (open: boolean) => void;
|
|
140
|
+
} | null;
|
|
141
|
+
account: ReturnType<typeof useCurrentAccount> | null;
|
|
142
|
+
wallet: ReturnType<typeof useCurrentWallet> | null;
|
|
143
|
+
counter: number;
|
|
144
|
+
}
|
|
145
|
+
declare class SuiWallet extends WalletBase<SuiStoreType> {
|
|
146
|
+
getStore(): SuiStoreType;
|
|
147
|
+
get isConnected(): boolean;
|
|
148
|
+
connect(): void;
|
|
149
|
+
disconnect(): void;
|
|
150
|
+
sign(message: string): Promise<ISignResult>;
|
|
151
|
+
signin(statement: string, prepare?: boolean): Promise<ISignResult>;
|
|
152
|
+
}
|
|
153
|
+
declare const SuiProvider: ({ children, network }: {
|
|
154
|
+
children: ReactNode;
|
|
155
|
+
network: "testnet" | "mainnet";
|
|
156
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
157
|
+
|
|
135
158
|
declare abstract class WalletFactory {
|
|
136
159
|
private static instances;
|
|
137
|
-
static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet;
|
|
160
|
+
static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet;
|
|
138
161
|
}
|
|
139
162
|
|
|
140
|
-
export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, TonProvider, TonWallet, WalletFactory };
|
|
163
|
+
export { CosmosProvider, CosmosWallet, EvmProvider, EvmWallet, SolWallet, SolanaProvider, SuiProvider, SuiWallet, TonProvider, TonWallet, WalletFactory };
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,8 @@ __export(index_exports, {
|
|
|
36
36
|
EvmWallet: () => EvmWallet,
|
|
37
37
|
SolWallet: () => SolWallet,
|
|
38
38
|
SolanaProvider: () => SolanaProvider,
|
|
39
|
+
SuiProvider: () => SuiProvider,
|
|
40
|
+
SuiWallet: () => SuiWallet,
|
|
39
41
|
TonProvider: () => TonProvider,
|
|
40
42
|
TonWallet: () => TonWallet,
|
|
41
43
|
WalletFactory: () => WalletFactory
|
|
@@ -994,6 +996,107 @@ var CosmosProvider = ({ children, chainName = "cosmoshub" }) => {
|
|
|
994
996
|
);
|
|
995
997
|
};
|
|
996
998
|
|
|
999
|
+
// src/providers/sui/index.tsx
|
|
1000
|
+
var import_dist = require("@mysten/dapp-kit/dist/index.css");
|
|
1001
|
+
var import_events5 = __toESM(require("events"));
|
|
1002
|
+
var import_react6 = require("react");
|
|
1003
|
+
var import_dapp_kit = require("@mysten/dapp-kit");
|
|
1004
|
+
var import_client = require("@mysten/sui/client");
|
|
1005
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
1006
|
+
var suiStore = {
|
|
1007
|
+
connectModal: null,
|
|
1008
|
+
account: null,
|
|
1009
|
+
wallet: null,
|
|
1010
|
+
counter: 0
|
|
1011
|
+
};
|
|
1012
|
+
var eventBus5 = new import_events5.default();
|
|
1013
|
+
var Sui_EVENT_KEY = "sui_signin";
|
|
1014
|
+
var getEventKey5 = () => {
|
|
1015
|
+
return `${Sui_EVENT_KEY}_${suiStore.counter}`;
|
|
1016
|
+
};
|
|
1017
|
+
var SuiWallet = class extends WalletBase {
|
|
1018
|
+
getStore() {
|
|
1019
|
+
return suiStore;
|
|
1020
|
+
}
|
|
1021
|
+
get isConnected() {
|
|
1022
|
+
return !!this.getStore().wallet?.isConnected;
|
|
1023
|
+
}
|
|
1024
|
+
connect() {
|
|
1025
|
+
suiStore.connectModal?.setOpen(true);
|
|
1026
|
+
}
|
|
1027
|
+
disconnect() {
|
|
1028
|
+
suiStore.wallet?.currentWallet?.features["standard:disconnect"]?.disconnect();
|
|
1029
|
+
}
|
|
1030
|
+
async sign(message) {
|
|
1031
|
+
const signPersonalFeature = suiStore.wallet?.currentWallet?.features["sui:signPersonalMessage"];
|
|
1032
|
+
const res = await signPersonalFeature?.signPersonalMessage({
|
|
1033
|
+
message: new Uint8Array(Buffer.from(message)),
|
|
1034
|
+
account: suiStore.account
|
|
1035
|
+
});
|
|
1036
|
+
return {
|
|
1037
|
+
message,
|
|
1038
|
+
signature: res.signature
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
signin(statement, prepare = true) {
|
|
1042
|
+
return new Promise((resolve) => {
|
|
1043
|
+
const signCallback = (data) => {
|
|
1044
|
+
this.publicKey = Buffer.from(data.publicKey).toString("hex");
|
|
1045
|
+
this.address = data?.address;
|
|
1046
|
+
this.chainId = 1;
|
|
1047
|
+
let fullMessage = statement;
|
|
1048
|
+
if (prepare) {
|
|
1049
|
+
const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address });
|
|
1050
|
+
fullMessage = get4361Message(msg);
|
|
1051
|
+
}
|
|
1052
|
+
const res = this.sign(JSON.stringify(fullMessage, null, " "));
|
|
1053
|
+
resolve(res);
|
|
1054
|
+
};
|
|
1055
|
+
if (this.isConnected && suiStore.account) {
|
|
1056
|
+
signCallback(suiStore.account);
|
|
1057
|
+
return;
|
|
1058
|
+
}
|
|
1059
|
+
suiStore.counter++;
|
|
1060
|
+
this.connect();
|
|
1061
|
+
const eventKey = getEventKey5();
|
|
1062
|
+
eventBus5.once(eventKey, (data) => {
|
|
1063
|
+
console.log("listen event key success, event key = %s, data = %j", eventKey, data);
|
|
1064
|
+
signCallback(data);
|
|
1065
|
+
});
|
|
1066
|
+
});
|
|
1067
|
+
}
|
|
1068
|
+
};
|
|
1069
|
+
var SuiConnector = () => {
|
|
1070
|
+
const [showModal, setShowModal] = (0, import_react6.useState)(false);
|
|
1071
|
+
const account = (0, import_dapp_kit.useCurrentAccount)();
|
|
1072
|
+
const wallet = (0, import_dapp_kit.useCurrentWallet)();
|
|
1073
|
+
(0, import_react6.useEffect)(() => {
|
|
1074
|
+
if (wallet) {
|
|
1075
|
+
if (wallet.isConnected && account) {
|
|
1076
|
+
const eventKey = getEventKey5();
|
|
1077
|
+
eventBus5.emit(eventKey, account);
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
}, [wallet, account]);
|
|
1081
|
+
suiStore.connectModal = {
|
|
1082
|
+
open: showModal,
|
|
1083
|
+
setOpen: setShowModal
|
|
1084
|
+
};
|
|
1085
|
+
suiStore.account = account;
|
|
1086
|
+
suiStore.wallet = wallet;
|
|
1087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dapp_kit.ConnectModal, { open: showModal, onOpenChange: (open) => setShowModal(open), trigger: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", {}) });
|
|
1088
|
+
};
|
|
1089
|
+
var SuiProvider = ({ children, network }) => {
|
|
1090
|
+
const { networkConfig } = (0, import_dapp_kit.createNetworkConfig)({
|
|
1091
|
+
testnet: { url: (0, import_client.getFullnodeUrl)("testnet") },
|
|
1092
|
+
mainnet: { url: (0, import_client.getFullnodeUrl)("mainnet") }
|
|
1093
|
+
});
|
|
1094
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_dapp_kit.SuiClientProvider, { networks: networkConfig, network, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_dapp_kit.WalletProvider, { autoConnect: true, children: [
|
|
1095
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SuiConnector, {}),
|
|
1096
|
+
children
|
|
1097
|
+
] }) });
|
|
1098
|
+
};
|
|
1099
|
+
|
|
997
1100
|
// src/WalletFactory.tsx
|
|
998
1101
|
var import_tokentable_core4 = require("@sign-global/tokentable-core");
|
|
999
1102
|
var WalletFactory = class {
|
|
@@ -1008,6 +1111,9 @@ var WalletFactory = class {
|
|
|
1008
1111
|
case import_tokentable_core4.ChainType.Ton:
|
|
1009
1112
|
WalletClass = TonWallet;
|
|
1010
1113
|
break;
|
|
1114
|
+
case import_tokentable_core4.ChainType.Sui:
|
|
1115
|
+
WalletClass = SuiWallet;
|
|
1116
|
+
break;
|
|
1011
1117
|
// case ChainType.Starknet:
|
|
1012
1118
|
// WalletClass = StarknetWallet;
|
|
1013
1119
|
// break;
|
|
@@ -1036,6 +1142,8 @@ var WalletFactory = class {
|
|
|
1036
1142
|
EvmWallet,
|
|
1037
1143
|
SolWallet,
|
|
1038
1144
|
SolanaProvider,
|
|
1145
|
+
SuiProvider,
|
|
1146
|
+
SuiWallet,
|
|
1039
1147
|
TonProvider,
|
|
1040
1148
|
TonWallet,
|
|
1041
1149
|
WalletFactory
|
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/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 { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n 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_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 '@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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -967,6 +967,114 @@ var CosmosProvider = ({ children, chainName = "cosmoshub" }) => {
|
|
|
967
967
|
);
|
|
968
968
|
};
|
|
969
969
|
|
|
970
|
+
// src/providers/sui/index.tsx
|
|
971
|
+
import "@mysten/dapp-kit/dist/index.css";
|
|
972
|
+
import EventEmitter5 from "events";
|
|
973
|
+
import { useEffect as useEffect5, useState } from "react";
|
|
974
|
+
import {
|
|
975
|
+
createNetworkConfig,
|
|
976
|
+
SuiClientProvider,
|
|
977
|
+
WalletProvider as WalletProvider2,
|
|
978
|
+
ConnectModal,
|
|
979
|
+
useCurrentAccount,
|
|
980
|
+
useCurrentWallet
|
|
981
|
+
} from "@mysten/dapp-kit";
|
|
982
|
+
import { getFullnodeUrl } from "@mysten/sui/client";
|
|
983
|
+
import { jsx as jsx5, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
984
|
+
var suiStore = {
|
|
985
|
+
connectModal: null,
|
|
986
|
+
account: null,
|
|
987
|
+
wallet: null,
|
|
988
|
+
counter: 0
|
|
989
|
+
};
|
|
990
|
+
var eventBus5 = new EventEmitter5();
|
|
991
|
+
var Sui_EVENT_KEY = "sui_signin";
|
|
992
|
+
var getEventKey5 = () => {
|
|
993
|
+
return `${Sui_EVENT_KEY}_${suiStore.counter}`;
|
|
994
|
+
};
|
|
995
|
+
var SuiWallet = class extends WalletBase {
|
|
996
|
+
getStore() {
|
|
997
|
+
return suiStore;
|
|
998
|
+
}
|
|
999
|
+
get isConnected() {
|
|
1000
|
+
return !!this.getStore().wallet?.isConnected;
|
|
1001
|
+
}
|
|
1002
|
+
connect() {
|
|
1003
|
+
suiStore.connectModal?.setOpen(true);
|
|
1004
|
+
}
|
|
1005
|
+
disconnect() {
|
|
1006
|
+
suiStore.wallet?.currentWallet?.features["standard:disconnect"]?.disconnect();
|
|
1007
|
+
}
|
|
1008
|
+
async sign(message) {
|
|
1009
|
+
const signPersonalFeature = suiStore.wallet?.currentWallet?.features["sui:signPersonalMessage"];
|
|
1010
|
+
const res = await signPersonalFeature?.signPersonalMessage({
|
|
1011
|
+
message: new Uint8Array(Buffer.from(message)),
|
|
1012
|
+
account: suiStore.account
|
|
1013
|
+
});
|
|
1014
|
+
return {
|
|
1015
|
+
message,
|
|
1016
|
+
signature: res.signature
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
signin(statement, prepare = true) {
|
|
1020
|
+
return new Promise((resolve) => {
|
|
1021
|
+
const signCallback = (data) => {
|
|
1022
|
+
this.publicKey = Buffer.from(data.publicKey).toString("hex");
|
|
1023
|
+
this.address = data?.address;
|
|
1024
|
+
this.chainId = 1;
|
|
1025
|
+
let fullMessage = statement;
|
|
1026
|
+
if (prepare) {
|
|
1027
|
+
const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address });
|
|
1028
|
+
fullMessage = get4361Message(msg);
|
|
1029
|
+
}
|
|
1030
|
+
const res = this.sign(JSON.stringify(fullMessage, null, " "));
|
|
1031
|
+
resolve(res);
|
|
1032
|
+
};
|
|
1033
|
+
if (this.isConnected && suiStore.account) {
|
|
1034
|
+
signCallback(suiStore.account);
|
|
1035
|
+
return;
|
|
1036
|
+
}
|
|
1037
|
+
suiStore.counter++;
|
|
1038
|
+
this.connect();
|
|
1039
|
+
const eventKey = getEventKey5();
|
|
1040
|
+
eventBus5.once(eventKey, (data) => {
|
|
1041
|
+
console.log("listen event key success, event key = %s, data = %j", eventKey, data);
|
|
1042
|
+
signCallback(data);
|
|
1043
|
+
});
|
|
1044
|
+
});
|
|
1045
|
+
}
|
|
1046
|
+
};
|
|
1047
|
+
var SuiConnector = () => {
|
|
1048
|
+
const [showModal, setShowModal] = useState(false);
|
|
1049
|
+
const account = useCurrentAccount();
|
|
1050
|
+
const wallet = useCurrentWallet();
|
|
1051
|
+
useEffect5(() => {
|
|
1052
|
+
if (wallet) {
|
|
1053
|
+
if (wallet.isConnected && account) {
|
|
1054
|
+
const eventKey = getEventKey5();
|
|
1055
|
+
eventBus5.emit(eventKey, account);
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
}, [wallet, account]);
|
|
1059
|
+
suiStore.connectModal = {
|
|
1060
|
+
open: showModal,
|
|
1061
|
+
setOpen: setShowModal
|
|
1062
|
+
};
|
|
1063
|
+
suiStore.account = account;
|
|
1064
|
+
suiStore.wallet = wallet;
|
|
1065
|
+
return /* @__PURE__ */ jsx5(ConnectModal, { open: showModal, onOpenChange: (open) => setShowModal(open), trigger: /* @__PURE__ */ jsx5("div", {}) });
|
|
1066
|
+
};
|
|
1067
|
+
var SuiProvider = ({ children, network }) => {
|
|
1068
|
+
const { networkConfig } = createNetworkConfig({
|
|
1069
|
+
testnet: { url: getFullnodeUrl("testnet") },
|
|
1070
|
+
mainnet: { url: getFullnodeUrl("mainnet") }
|
|
1071
|
+
});
|
|
1072
|
+
return /* @__PURE__ */ jsx5(SuiClientProvider, { networks: networkConfig, network, children: /* @__PURE__ */ jsxs5(WalletProvider2, { autoConnect: true, children: [
|
|
1073
|
+
/* @__PURE__ */ jsx5(SuiConnector, {}),
|
|
1074
|
+
children
|
|
1075
|
+
] }) });
|
|
1076
|
+
};
|
|
1077
|
+
|
|
970
1078
|
// src/WalletFactory.tsx
|
|
971
1079
|
import { ChainType } from "@sign-global/tokentable-core";
|
|
972
1080
|
var WalletFactory = class {
|
|
@@ -981,6 +1089,9 @@ var WalletFactory = class {
|
|
|
981
1089
|
case ChainType.Ton:
|
|
982
1090
|
WalletClass = TonWallet;
|
|
983
1091
|
break;
|
|
1092
|
+
case ChainType.Sui:
|
|
1093
|
+
WalletClass = SuiWallet;
|
|
1094
|
+
break;
|
|
984
1095
|
// case ChainType.Starknet:
|
|
985
1096
|
// WalletClass = StarknetWallet;
|
|
986
1097
|
// break;
|
|
@@ -1008,6 +1119,8 @@ export {
|
|
|
1008
1119
|
EvmWallet,
|
|
1009
1120
|
SolWallet,
|
|
1010
1121
|
SolanaProvider,
|
|
1122
|
+
SuiProvider,
|
|
1123
|
+
SuiWallet,
|
|
1011
1124
|
TonProvider,
|
|
1012
1125
|
TonWallet,
|
|
1013
1126
|
WalletFactory
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/providers/cosmos/index.tsx","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { 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 { EvmWallet } from './providers/evm';\nimport { TonWallet } from './providers/ton';\nimport { SolWallet } from './providers/solana';\nimport { CosmosWallet } from './providers/cosmos';\n\nimport { ChainType } from '@sign-global/tokentable-core';\n\nexport abstract class WalletFactory {\n private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet> = {};\n static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet | CosmosWallet {\n if (!this.instances[type]) {\n let WalletClass;\n switch (type) {\n case ChainType.Evm:\n WalletClass = EvmWallet;\n break;\n case ChainType.Ton:\n WalletClass = TonWallet;\n break;\n // case ChainType.Starknet:\n // WalletClass = StarknetWallet;\n // break;\n case ChainType.Solana:\n WalletClass = SolWallet;\n break;\n 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":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","wallets","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","wallets","useEffect","EventEmitter","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/evm/index.tsx","../src/utils/index.ts","../src/WalletBase.ts","../src/providers/evm/EvmWallet.ts","../src/providers/ton/index.tsx","../src/providers/ton/TonWallet.ts","../src/providers/solana/index.tsx","../src/utils/ledger/adapter.ts","../src/utils/ledger/polyfills/Buffer.ts","../src/utils/ledger/util.ts","../src/providers/cosmos/index.tsx","../src/providers/sui/index.tsx","../src/WalletFactory.tsx"],"sourcesContent":["import '@rainbow-me/rainbowkit/styles.css';\nimport { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';\nimport { ReactNode, useEffect } from 'react';\n\nimport { evmStore, getEventKey, eventBus } from './EvmWallet';\n\nexport { EvmWallet } from './EvmWallet';\n\nexport const EVMConnector = () => {\n const connectModal = useConnectModal();\n const walletClient = useWalletClient();\n const account = useAccount();\n\n evmStore.connectModal = connectModal;\n evmStore.walletClient = walletClient;\n evmStore.account = account;\n\n useEffect(() => {\n if (account.isConnected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, account);\n }\n }, [account]);\n\n return null;\n};\n\nexport const EvmProvider = ({\n children,\n config,\n theme\n}: {\n children: ReactNode;\n config: ResolvedRegister['config'];\n theme?: any;\n}) => {\n evmStore.config = config;\n return (\n <WagmiProvider config={config}>\n <RainbowKitProvider\n locale=\"en-US\"\n theme={\n theme ||\n darkTheme({\n accentColor: 'var(--t-primary)',\n accentColorForeground: 'var(--t-button-primary-foreground)'\n })\n }\n >\n {children}\n <EVMConnector />\n </RainbowKitProvider>\n </WagmiProvider>\n );\n};\n","import { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { ISignInMessage } from '../types';\n\nexport function prepareSignMessage({\n chainId,\n address,\n statement\n}: {\n address: string;\n chainId: number | string;\n statement?: string;\n}): ISignInMessage {\n return {\n statement: statement || 'Welcome to EthSign',\n chainId: chainId,\n address: address,\n issuedAt: new Date().toISOString(),\n domain: window.location.host,\n uri: window.location.origin,\n version: '1',\n nonce: getCustomNaNoId()\n };\n}\n\nexport const get4361Message = ({\n domain,\n version,\n nonce,\n issuedAt,\n statement,\n chainId,\n uri,\n address\n}: ISignInMessage): string => {\n const header = `${domain} wants you to sign in with your Ethereum account:`;\n const uriField = `URI: ${uri}`;\n let prefix = [header, address].join('\\n');\n const versionField = `Version: ${version}`;\n\n // const addressField = `Address: ` + address;\n\n const chainField = `Chain ID: ` + chainId || '1';\n\n const nonceField = `Nonce: ${nonce}`;\n\n const suffixArray = [uriField, versionField, chainField, nonceField];\n\n suffixArray.push(`Issued At: ${issuedAt}`);\n\n const suffix = suffixArray.join('\\n');\n prefix = [prefix, statement].join('\\n\\n');\n if (statement) {\n prefix += '\\n';\n }\n return [prefix, suffix].join('\\n');\n};\n","import { ISignResult } from './types';\nimport { prepareSignMessage } from './utils';\n\nexport abstract class WalletBase<S> {\n type: string;\n provider: any;\n address?: string;\n publicKey?: string;\n chainId?: number | string;\n protocolTag?: string;\n authType: string;\n userAddress?: string;\n network?: string;\n\n constructor(type: string, userAddress?: string) {\n this.type = type;\n this.provider = null;\n this.address = '';\n this.chainId = 1;\n this.authType = '';\n this.userAddress = userAddress || '';\n // this.init();\n }\n\n // abstract init(): void;\n\n // abstract init(): void;\n protected get isConnected(): boolean {\n throw new Error('Not implemented');\n }\n\n abstract connect(_?: string): void;\n\n // common sign\n abstract sign(_: string, _1?: string): Promise<ISignResult>;\n\n // checkAddressValidity(): boolean {\n // console.log(this.userAddress, this.address);\n // if (!this.address) {\n // // 兼容ton的情况,ton只有sign之后才有地址\n // return true;\n // }\n // if (this.userAddress && this.address !== this.userAddress) {\n // console.error('Wallet address and user address do not match.');\n // globalVm.toggleAccountChangedModal(true);\n // return false;\n // }\n // return true;\n // }\n\n async safeSign(_: string, _1?: string): Promise<ISignResult> {\n // if (!this.checkAddressValidity()) {\n // throw new Error('Wallet address and user address do not match.');\n // }\n return this.sign(_, _1);\n }\n\n async signin(statement?: string): Promise<ISignResult> {\n const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });\n return this.sign(JSON.stringify(msgRes, null, ' '));\n }\n\n // for metamask sign of EIP-712\n signByEIP712(_: string): Promise<ISignResult> {\n throw new Error(`received message:${_},Method not implemented.`);\n }\n\n getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {\n throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);\n }\n\n getWallet(): {\n address?: string;\n isConnected: boolean;\n publicKey: string | undefined;\n type: string;\n network: string | undefined;\n } {\n // 获取钱包信息\n return {\n type: this.type,\n isConnected: this.isConnected,\n address: this.address,\n publicKey: this.publicKey,\n network: this.network\n };\n }\n\n abstract getStore(): S;\n\n // abstract decrypt(message: string, address: string): Promise<string>;\n}\n","import { useConnectModal } from '@rainbow-me/rainbowkit';\nimport { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';\nimport { WalletBase } from '../../WalletBase';\nimport { disconnect, getAccount, signMessage } from 'wagmi/actions';\nimport { EventEmitter } from 'events';\nimport { ISignResult } from '../../types';\nimport { get4361Message, prepareSignMessage } from '../../utils';\n\nexport const eventBus = new EventEmitter();\n\nconst EVM_EVENT_KEY = 'evm_signin';\n\nexport interface EVMStoreType {\n account: ReturnType<typeof useAccount> | null;\n connectModal: ReturnType<typeof useConnectModal> | undefined;\n walletClient: ReturnType<typeof useWalletClient> | undefined;\n config: ResolvedRegister['config'] | undefined;\n counter: number;\n}\n\nexport const evmStore: EVMStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const getEventKey = () => {\n return `${EVM_EVENT_KEY}_${evmStore.counter}`;\n};\n\nexport class EvmWallet extends WalletBase<EVMStoreType> {\n get isConnected() {\n return !!(evmStore.account?.address && evmStore.account?.isConnected);\n }\n\n connect() {\n evmStore?.connectModal?.openConnectModal?.();\n }\n\n async disconnect() {\n await disconnect(evmStore.config!);\n }\n\n async sign(_message: string) {\n try {\n const sign = await signMessage(evmStore.config!, {\n message: _message\n });\n return {\n message: _message,\n signature: sign\n };\n } catch (error) {\n throw error;\n }\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n const signCallback = async (data: ReturnType<typeof useAccount>) => {\n try {\n this.address = data.address;\n this.chainId = data.chainId;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n reject(error);\n }\n };\n\n const account = getAccount(evmStore.config!);\n this.provider = evmStore.walletClient;\n\n if (this.isConnected) {\n signCallback(account);\n return;\n }\n\n evmStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n });\n }\n\n getStore(): EVMStoreType {\n return evmStore;\n }\n}\n","import { ReactNode, useEffect } from 'react';\nimport {\n TonConnectUIProvider,\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\n\nimport { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';\n\nexport { TonWallet };\n\nexport const TonConnector = () => {\n const wallet = useTonWallet();\n const [tonConnectUI] = useTonConnectUI();\n const connectModal = useTonConnectModal();\n\n tonStore.connectModal = connectModal;\n tonStore.walletClient = tonConnectUI;\n tonStore.account = wallet;\n\n useEffect(() => {\n if (wallet) {\n eventBus.emit(getEventKey(), wallet);\n }\n }, [wallet]);\n\n return null;\n};\n\nexport const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {\n tonStore.config = config;\n\n return (\n <TonConnectUIProvider {...config}>\n {children}\n <TonConnector />\n </TonConnectUIProvider>\n );\n};\n","import {\n useTonConnectUI,\n useTonWallet,\n useTonConnectModal,\n WalletInfoRemote,\n TonConnectUIProviderProps\n} from '@tonconnect/ui-react';\nimport { WalletBase } from '../../WalletBase';\nimport { ISignResult } from '../../types';\nimport { getCustomNaNoId } from '@sign-global/tokentable-core';\nimport { hashSha256 } from '@ethsign/utils-web';\nimport { CHAIN, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';\nimport { EventEmitter } from 'events';\nimport { Cell } from 'ton-core';\n\nexport interface TonStoreType {\n account: ReturnType<typeof useTonWallet> | null;\n connectModal: ReturnType<typeof useTonConnectModal> | undefined;\n walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;\n config: TonConnectUIProviderProps | undefined;\n counter: number;\n}\n\nexport const tonStore: TonStoreType = {\n account: null,\n connectModal: undefined,\n walletClient: undefined,\n config: undefined,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nexport const getEventKey = () => {\n return `ton_sign_${tonStore.counter}`;\n};\n\nexport class TonWallet extends WalletBase<TonStoreType> {\n get isConnected() {\n return !!tonStore.account?.account;\n }\n\n connect() {\n tonStore?.connectModal?.open?.();\n }\n\n async disconnect() {\n await tonStore.walletClient?.disconnect();\n }\n\n private getPublicKey(stateInit: string): string {\n const state_init = Cell.fromBase64(stateInit);\n const bits = state_init.refs[1].bits;\n const pubKey = bits.toString().substring(16, 80).toLowerCase();\n return pubKey;\n }\n\n async sign(originMsg: string): Promise<ISignResult> {\n const message = await hashSha256(originMsg);\n const tonConnectUI = tonStore.walletClient as any;\n // const walletInfo = tonConnectUI?.wallet;\n const authType = '';\n // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {\n // authType = walletInfo.jsBridgeKey;\n // }\n\n console.log(this.isConnected, tonConnectUI, 'connected');\n if (this.isConnected) {\n await tonConnectUI.disconnect();\n }\n tonStore.counter++;\n if (authType) {\n const wallets = await tonConnectUI.getWallets();\n\n const currentWallet = wallets.find((wallet: any) =>\n [wallet.name, wallet.appName].includes(authType)\n ) as WalletInfoRemote;\n\n const link = tonConnectUI.connector.connect(\n {\n bridgeUrl: currentWallet.bridgeUrl,\n universalLink: currentWallet.universalLink\n },\n {\n tonProof: message\n }\n );\n\n // tonspace在tg内部打开\n window.open(link);\n } else {\n console.log('first time, call setConnectRequestParameters');\n tonConnectUI.setConnectRequestParameters({\n state: 'ready',\n value: {\n tonProof: message // 不能有空格,特殊字符\n }\n });\n this.connect();\n }\n\n const connectedWallet: Wallet = await new Promise((resolve) => {\n const eventKey = getEventKey();\n console.log('start listen event key, key = %s', eventKey);\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n resolve(data);\n });\n });\n\n this.provider = tonStore.walletClient;\n const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;\n this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算\n this.address = toUserFriendlyAddress(connectedWallet.account.address);\n this.chainId = connectedWallet.account.chain;\n this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';\n const fullMessage = JSON.stringify({\n timestamp: proof.timestamp,\n payload: proof.payload,\n domain: proof.domain\n });\n const signature = proof.signature;\n\n return {\n message: JSON.stringify({\n fullMessage,\n message: originMsg\n }),\n signature,\n tonProof: message\n };\n }\n\n override async signin(statement: string, prepare = true): Promise<ISignResult> {\n const fullMessage = prepare\n ? JSON.stringify(\n {\n statement: statement || 'Welcome to EthSign',\n issuedAt: new Date().toISOString(),\n nonce: getCustomNaNoId()\n },\n null,\n ' '\n )\n : statement;\n const signRes = await this.sign(fullMessage);\n return signRes;\n }\n\n getStore(): TonStoreType {\n return tonStore;\n }\n}\n","import { ReactNode, useCallback, useEffect, useMemo } from 'react';\nimport { WalletBase } from '../../WalletBase';\nimport { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';\nimport '@solana/wallet-adapter-react-ui/styles.css';\nimport { ISignResult } from '../../types';\nimport { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';\nimport { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';\nimport { type Adapter } from '@solana/wallet-adapter-base';\n\nimport { Cluster } from '@solana/web3.js';\nimport bs58 from 'bs58';\nimport { get4361Message, prepareSignMessage } from '../../utils';\nimport EventEmitter from 'events';\nimport { clusterApiUrl } from '@sign-global/tokentable-core';\nimport { getDerivationPath, LedgerWalletAdapter } from '../../utils/ledger';\n\ninterface SolStoreType {\n connectModal: ReturnType<typeof useWalletModal> | null;\n account: ReturnType<typeof useWallet> | null;\n counter: number;\n}\n\nconst solStore: SolStoreType = {\n connectModal: null,\n account: null,\n counter: 0\n};\n\nexport const eventBus = new EventEmitter();\n\nconst SOL_EVENT_KEY = 'sol_signin';\n\nexport const getEventKey = () => {\n return `${SOL_EVENT_KEY}_${solStore.counter}`;\n};\n\nexport class SolWallet extends WalletBase<SolStoreType> {\n getStore(): SolStoreType {\n return solStore;\n }\n get isConnected() {\n return !!solStore.account?.connected;\n }\n connect(): void {\n solStore.connectModal?.setVisible(true);\n }\n\n disconnect() {\n solStore.account?.disconnect();\n }\n\n async sign(message: string): Promise<ISignResult> {\n try {\n const provider = solStore.account!;\n const encodedMessage = new TextEncoder().encode(message);\n const result = await provider.signMessage?.(encodedMessage);\n\n const { signature, signedMessage } =\n result instanceof Uint8Array ? { signature: result, signedMessage: '' } : (result as any);\n return {\n message,\n signature: bs58.encode(signature),\n signedMessage: signedMessage instanceof Uint8Array ? bs58.encode(signedMessage) : ''\n };\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n signin(statement: string, prepare = true): Promise<ISignResult> {\n return new Promise((resolve, reject) => {\n try {\n const signCallback = async (data: ReturnType<typeof useWallet>) => {\n try {\n this.publicKey = data.publicKey?.toString();\n this.address = this.publicKey;\n this.chainId = 1;\n let fullMessage = statement;\n if (prepare) {\n const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });\n fullMessage = get4361Message(msg);\n }\n\n const res = await this.sign(fullMessage);\n\n resolve(res);\n } catch (error) {\n console.error('Error in signCallback:', error);\n reject(error);\n }\n };\n\n if (this.isConnected) {\n signCallback(solStore.account!);\n return;\n }\n solStore.counter++;\n this.connect();\n const eventKey = getEventKey();\n eventBus.once(eventKey, (data) => {\n console.log('listen event key success, event key = %s, data = %j', eventKey, data);\n signCallback(data);\n });\n } catch (error) {\n console.error('Error in signin:', error);\n reject(error);\n }\n });\n }\n}\n\n//Solana connection process: Open the modal first, then manually call wallet connect\nexport const SolConnector = () => {\n const walletModal = useWalletModal();\n const wallet = useWallet();\n\n useEffect(() => {\n if (wallet.wallet) {\n if (wallet.connected) {\n const eventKey = getEventKey();\n eventBus.emit(eventKey, wallet);\n }\n }\n }, [wallet]);\n\n solStore.connectModal = walletModal;\n solStore.account = wallet;\n return null;\n};\n\nexport const SolanaProvider = ({\n children,\n cluster,\n wallets\n}: {\n children: ReactNode;\n cluster?: Cluster;\n wallets?: Adapter[];\n}) => {\n const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');\n\n const defaultWallets = useMemo(\n () => [\n new PhantomWalletAdapter(),\n new TrustWalletAdapter(),\n new LedgerWalletAdapter({\n derivationPath: getDerivationPath(0)\n })\n ],\n []\n );\n\n const onError = useCallback((error: any) => {\n console.error(error);\n }, []);\n return (\n <ConnectionProvider endpoint={endpoint}>\n <WalletProvider wallets={wallets ? wallets : defaultWallets} onError={onError} autoConnect>\n <WalletModalProvider>\n <SolConnector />\n {children}\n </WalletModalProvider>\n </WalletProvider>\n </ConnectionProvider>\n );\n};\n","import type { default as Transport } from '@ledgerhq/hw-transport';\nimport type { default as TransportWebHID } from '@ledgerhq/hw-transport-webhid';\nimport {\n BaseSignerWalletAdapter,\n WalletConnectionError,\n WalletDisconnectedError,\n WalletDisconnectionError,\n WalletLoadError,\n WalletNotConnectedError,\n WalletNotReadyError,\n WalletPublicKeyError,\n WalletReadyState,\n WalletSignMessageError,\n WalletSignTransactionError,\n type WalletName\n} from '@solana/wallet-adapter-base';\nimport type { PublicKey, Transaction, TransactionVersion, VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\nimport {\n getAppConfiguration,\n getDerivationPath,\n getPublicKey,\n OffchainMessage,\n signMessage,\n signTransaction\n} from './util.js';\n\nexport interface SignMessageOutput {\n /**\n * Message bytes that were signed.\n * The wallet may prefix or otherwise modify the message before signing it.\n */\n readonly signedMessage: Uint8Array;\n\n /**\n * Message signature produced.\n * If the signature type is provided, the signature must be Ed25519.\n */\n readonly signature: Uint8Array;\n\n /**\n * Optional type of the message signature produced.\n * If not provided, the signature must be Ed25519.\n */\n readonly signatureType?: 'ed25519';\n}\n\nexport interface LedgerWalletAdapterConfig {\n derivationPath?: Buffer;\n}\n\nexport const LedgerWalletName = 'Ledger' as WalletName<'Ledger'>;\n\nexport class LedgerWalletAdapter extends BaseSignerWalletAdapter {\n name = LedgerWalletName;\n url = 'https://ledger.com';\n icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMzUgMzUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTIzLjU4OCAwaC0xNnYyMS41ODNoMjEuNnYtMTZhNS41ODUgNS41ODUgMCAwIDAgLTUuNi01LjU4M3oiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5KSIvPjxwYXRoIGQ9Im04LjM0MiAwaC0yLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCAtNS41ODUgNS41ODV2Mi43NTdoOC4zNDJ6Ii8+PHBhdGggZD0ibTAgNy41OWg4LjM0MnY4LjM0MmgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDUuNzM5KSIvPjxwYXRoIGQ9Im0xNS4xOCAyMy40NTFoMi43NTdhNS41ODUgNS41ODUgMCAwIDAgNS41ODUtNS42di0yLjY3MWgtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMS40NzggMTEuNDc4KSIvPjxwYXRoIGQ9Im03LjU5IDE1LjE4aDguMzQydjguMzQyaC04LjM0MnoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUuNzM5IDExLjQ3OCkiLz48cGF0aCBkPSJtMCAxNS4xOHYyLjc1N2E1LjU4NSA1LjU4NSAwIDAgMCA1LjU4NSA1LjU4NWgyLjc1N3YtOC4zNDJ6IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIDExLjQ3OCkiLz48L2c+PC9zdmc+';\n supportedTransactionVersions: ReadonlySet<TransactionVersion> = new Set(['legacy', 0]);\n\n private _derivationPath: Buffer;\n private _connecting: boolean;\n private _transport: Transport | null;\n private _publicKey: PublicKey | null;\n private _readyState: WalletReadyState =\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n typeof navigator === 'undefined' ||\n !(navigator as any).hid\n ? WalletReadyState.Unsupported\n : WalletReadyState.Loadable;\n\n constructor(config: LedgerWalletAdapterConfig = {}) {\n super();\n this._derivationPath = config.derivationPath || getDerivationPath(0, 0);\n this._connecting = false;\n this._transport = null;\n this._publicKey = null;\n }\n\n get publicKey() {\n return this._publicKey;\n }\n\n get connecting() {\n return this._connecting;\n }\n\n get readyState() {\n return this._readyState;\n }\n\n async connect(): Promise<void> {\n try {\n if (this.connected || this.connecting) return;\n if (this._readyState !== WalletReadyState.Loadable) throw new WalletNotReadyError();\n\n this._connecting = true;\n\n let TransportWebHIDClass: typeof TransportWebHID;\n try {\n TransportWebHIDClass = (await import('@ledgerhq/hw-transport-webhid')).default;\n } catch (error: any) {\n throw new WalletLoadError(error?.message, error);\n }\n\n let transport: Transport;\n try {\n transport = await TransportWebHIDClass.create();\n } catch (error: any) {\n throw new WalletConnectionError(error?.message, error);\n }\n\n let publicKey: PublicKey;\n try {\n publicKey = await getPublicKey(transport, this._derivationPath);\n } catch (error: any) {\n throw new WalletPublicKeyError(error?.message, error);\n }\n\n transport.on('disconnect', this._disconnected);\n\n this._transport = transport;\n this._publicKey = publicKey;\n\n this.emit('connect', publicKey);\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n } finally {\n this._connecting = false;\n }\n }\n\n async disconnect(): Promise<void> {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n try {\n await transport.close();\n } catch (error: any) {\n this.emit('error', new WalletDisconnectionError(error?.message, error));\n }\n }\n\n this.emit('disconnect');\n }\n\n async signTransaction<T extends Transaction | VersionedTransaction>(transaction: T): Promise<T> {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n try {\n const signature = await signTransaction(transport, transaction, this._derivationPath);\n transaction.addSignature(publicKey, signature);\n } catch (error: any) {\n throw new WalletSignTransactionError(error?.message, error);\n }\n\n return transaction;\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n async signMessage(message: Uint8Array): Promise<SignMessageOutput> {\n try {\n try {\n const transport = this._transport;\n const publicKey = this._publicKey;\n if (!transport || !publicKey) throw new WalletNotConnectedError();\n\n const appConfig = await getAppConfiguration(transport);\n const [major, minor] = appConfig.version.split('.').map(Number);\n if (major < 1 || (major === 1 && minor < 8)) {\n throw new WalletSignMessageError('Signing off-chain messages requires Solana Ledger App 1.8.0 or later');\n }\n\n const offchainMessage = new OffchainMessage({\n message: Buffer.from(message.buffer),\n signerAddress: publicKey\n });\n if (!offchainMessage.isLedgerSupported(appConfig.blindSigningEnabled)) {\n if (!offchainMessage.isValid()) {\n throw new WalletSignMessageError('Message is not valid for signing.');\n } else if (offchainMessage.messageFormat === 1 && !appConfig.blindSigningEnabled) {\n throw new WalletSignMessageError(\n 'Message contains non-ASCII characters and requires blind signing to be enabled on your Ledger device.'\n );\n } else if (offchainMessage.messageFormat === 2) {\n throw new WalletSignMessageError('Message is too long to be signed on Ledger device.');\n } else {\n throw new WalletSignMessageError('Message format is not supported by Ledger device.');\n }\n }\n\n const signature = await signMessage(transport, offchainMessage.serialize(), this._derivationPath);\n return { signature: new Uint8Array(signature), signedMessage: offchainMessage.serialize() };\n } catch (error: any) {\n throw new WalletSignMessageError(error?.message, error);\n }\n } catch (error: any) {\n this.emit('error', error);\n throw error;\n }\n }\n\n private _disconnected = () => {\n const transport = this._transport;\n if (transport) {\n transport.off('disconnect', this._disconnected);\n\n this._transport = null;\n this._publicKey = null;\n\n this.emit('error', new WalletDisconnectedError());\n this.emit('disconnect');\n }\n };\n}\n","import { Buffer } from 'buffer';\n\nif (typeof window !== 'undefined' && window.Buffer === undefined) {\n (window as any).Buffer = Buffer;\n}\n\nexport {};\n","import { StatusCodes, TransportStatusError, type default as Transport } from '@ledgerhq/hw-transport';\nimport { isVersionedTransaction } from '@solana/wallet-adapter-base';\nimport { PublicKey, type Transaction, type VersionedTransaction } from '@solana/web3.js';\nimport './polyfills/index.js';\n\nexport function getDerivationPath(account?: number, change?: number): Buffer {\n const length = account !== undefined ? (change === undefined ? 3 : 4) : 2;\n const derivationPath = Buffer.alloc(1 + length * 4);\n\n let offset = derivationPath.writeUInt8(length, 0);\n offset = derivationPath.writeUInt32BE(harden(44), offset); // Using BIP44\n offset = derivationPath.writeUInt32BE(harden(501), offset); // Solana's BIP44 path\n\n if (account !== undefined) {\n offset = derivationPath.writeUInt32BE(harden(account), offset);\n if (change !== undefined) {\n derivationPath.writeUInt32BE(harden(change), offset);\n }\n }\n\n return derivationPath;\n}\n\nconst BIP32_HARDENED_BIT = (1 << 31) >>> 0;\n\nfunction harden(n: number): number {\n return (n | BIP32_HARDENED_BIT) >>> 0;\n}\n\nconst INS_GET_VERSION = 0x04;\nconst INS_GET_PUBKEY = 0x05;\nconst INS_SIGN_MESSAGE = 0x06;\nconst INS_SIGN_MESSAGE_OFFCHAIN = 0x07;\n\nconst P1_NON_CONFIRM = 0x00;\nconst P1_CONFIRM = 0x01;\n\nconst P2_EXTEND = 0x01;\nconst P2_MORE = 0x02;\n\nconst MAX_PAYLOAD = 255;\n\nconst LEDGER_CLA = 0xe0;\n\n// Max off-chain message length supported by Ledger\nconst OFFCM_MAX_LEDGER_LEN = 1212;\n// Max length of version 0 off-chain message\nconst OFFCM_MAX_V0_LEN = 65515;\n\nexport class OffchainMessage {\n version: number;\n messageFormat: number | undefined;\n message: Buffer | undefined;\n signerAddress: PublicKey;\n\n /**\n * Constructs a new OffchainMessage\n * @param {version: number, messageFormat: number, message: string | Buffer} opts - Constructor parameters\n */\n constructor(opts: { version?: number; messageFormat?: number; message: Buffer; signerAddress: PublicKey }) {\n this.version = 0;\n this.messageFormat = undefined;\n this.message = undefined;\n this.signerAddress = opts.signerAddress;\n\n if (!opts) {\n return;\n }\n if (opts.version) {\n this.version = opts.version;\n }\n if (opts.messageFormat) {\n this.messageFormat = opts.messageFormat;\n }\n if (opts.message) {\n this.message = Buffer.from(opts.message);\n if (this.version === 0) {\n if (!this.messageFormat) {\n this.messageFormat = OffchainMessage.guessMessageFormat(this.message);\n }\n }\n }\n }\n\n static guessMessageFormat(message: Buffer) {\n if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {\n return undefined;\n }\n if (message.length <= OFFCM_MAX_LEDGER_LEN) {\n if (OffchainMessage.isPrintableASCII(message)) {\n return 0;\n } else if (OffchainMessage.isUTF8(message)) {\n return 1;\n }\n } else if (message.length <= OFFCM_MAX_V0_LEN) {\n if (OffchainMessage.isUTF8(message)) {\n return 2;\n }\n }\n return undefined;\n }\n\n static isPrintableASCII(buffer: Buffer) {\n return (\n buffer &&\n buffer.every((element) => {\n return element == 0xa || (element >= 0x20 && element <= 0x7e);\n })\n );\n }\n\n static isUTF8(buffer: Buffer) {\n try {\n new TextDecoder('utf8', { fatal: true }).decode(buffer);\n return true;\n } catch {\n return false;\n }\n }\n\n isValid() {\n if (this.version !== 0) {\n return false;\n }\n if (!this.message) {\n return false;\n }\n const format = OffchainMessage.guessMessageFormat(this.message);\n return format != null && format === this.messageFormat;\n }\n\n isLedgerSupported(allowBlindSigning: boolean) {\n return this.isValid() && (this.messageFormat === 0 || (this.messageFormat === 1 && allowBlindSigning));\n }\n\n serialize() {\n if (!this.isValid()) {\n throw new Error(`Invalid OffchainMessage: ${JSON.stringify(this)}`);\n }\n const signingDomain = Buffer.concat([Buffer.from([255]), Buffer.from('solana offchain')]);\n const headerVersion = Buffer.alloc(1);\n const applicationDomain = Buffer.alloc(32);\n const messageFormat = Buffer.alloc(1);\n const signerCount = Buffer.alloc(1);\n signerCount.writeUInt8(1);\n\n const messageLength = Buffer.alloc(2);\n\n // isValid() checks message\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const messageBuffer = Buffer.from(this.message!);\n\n // isValid() checks messageFormat\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n messageFormat.writeUInt8(this.messageFormat!);\n\n const signers = this.signerAddress.toBuffer();\n messageLength.writeUInt16LE(messageBuffer.length);\n\n return Buffer.concat([\n signingDomain,\n headerVersion,\n applicationDomain,\n messageFormat,\n signerCount,\n signers,\n messageLength,\n messageBuffer\n ]);\n }\n}\n\n/** @internal */\nexport async function getPublicKey(transport: Transport, derivationPath: Buffer): Promise<PublicKey> {\n const bytes = await send(transport, INS_GET_PUBKEY, P1_NON_CONFIRM, derivationPath);\n return new PublicKey(bytes);\n}\n\n/** @internal */\nexport async function signTransaction(\n transport: Transport,\n transaction: Transaction | VersionedTransaction,\n derivationPath: Buffer\n): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const message = isVersionedTransaction(transaction)\n ? transaction.message.serialize()\n : transaction.serializeMessage();\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function signMessage(transport: Transport, message: Buffer, derivationPath: Buffer): Promise<Buffer> {\n const paths = Buffer.alloc(1);\n paths.writeUInt8(1, 0);\n\n const data = Buffer.concat([paths, derivationPath, message]);\n\n return await send(transport, INS_SIGN_MESSAGE_OFFCHAIN, P1_CONFIRM, data);\n}\n\n/** @internal */\nexport async function getAppConfiguration(transport: Transport): Promise<AppConfig> {\n const [blindSigningEnabled, pubKeyDisplayMode, major, minor, patch] = await send(\n transport,\n INS_GET_VERSION,\n P1_NON_CONFIRM,\n Buffer.alloc(0)\n );\n return {\n blindSigningEnabled: Boolean(blindSigningEnabled),\n pubKeyDisplayMode,\n version: `${major}.${minor}.${patch}`\n };\n}\n\nenum PubKeyDisplayMode {\n LONG,\n SHORT\n}\n\ntype AppConfig = {\n blindSigningEnabled: boolean;\n pubKeyDisplayMode: PubKeyDisplayMode;\n version: string;\n};\n\nasync function send(transport: Transport, instruction: number, p1: number, data: Buffer): Promise<Buffer> {\n let p2 = 0;\n let offset = 0;\n\n if (data.length > MAX_PAYLOAD) {\n while (data.length - offset > MAX_PAYLOAD) {\n const buffer = data.slice(offset, offset + MAX_PAYLOAD);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2 | P2_MORE, buffer);\n\n if (response.length !== 2) throw new TransportStatusError(StatusCodes.INCORRECT_DATA);\n\n p2 |= P2_EXTEND;\n offset += MAX_PAYLOAD;\n }\n }\n\n const buffer = data.slice(offset);\n const response = await transport.send(LEDGER_CLA, instruction, p1, p2, buffer);\n\n return response.slice(0, response.length - 2);\n}\n","import { 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":["useEffect","getCustomNaNoId","EventEmitter","eventBus","getEventKey","wallets","jsx","jsxs","useEffect","eventBus","getEventKey","jsxs","jsx","useEffect","EventEmitter","Buffer","signMessage","buffer","response","signMessage","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","wallets","useEffect","EventEmitter","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect","EventEmitter","useEffect","WalletProvider","jsx","jsxs","eventBus","EventEmitter","getEventKey","useEffect"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sign-global/tokentable-wallets",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"module": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
}
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@sign-global/tokentable-core": "1.
|
|
15
|
+
"@sign-global/tokentable-core": "1.7.0"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
18
|
"@rainbow-me/rainbowkit": "^2.2.3",
|
|
@@ -28,6 +28,8 @@
|
|
|
28
28
|
"@cosmjs/crypto": "^0.36.0",
|
|
29
29
|
"chain-registry": "^1.69.340",
|
|
30
30
|
"@interchain-ui/react": "^1.26.3",
|
|
31
|
+
"@mysten/dapp-kit": "^0.16.3",
|
|
32
|
+
"@mysten/sui": "^1.29.1",
|
|
31
33
|
"react": "^18.2.0",
|
|
32
34
|
"viem": "^2.21.49",
|
|
33
35
|
"wagmi": "^2.13.0",
|
package/src/WalletFactory.tsx
CHANGED
|
@@ -2,12 +2,16 @@ import { EvmWallet } from './providers/evm';
|
|
|
2
2
|
import { TonWallet } from './providers/ton';
|
|
3
3
|
import { SolWallet } from './providers/solana';
|
|
4
4
|
import { CosmosWallet } from './providers/cosmos';
|
|
5
|
+
import { SuiWallet } from './providers/sui';
|
|
5
6
|
|
|
6
7
|
import { ChainType } from '@sign-global/tokentable-core';
|
|
7
8
|
|
|
8
9
|
export abstract class WalletFactory {
|
|
9
|
-
private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet> = {};
|
|
10
|
-
static getWallet(
|
|
10
|
+
private static instances: Record<string, EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet> = {};
|
|
11
|
+
static getWallet(
|
|
12
|
+
type: ChainType,
|
|
13
|
+
userAddress?: string
|
|
14
|
+
): EvmWallet | TonWallet | SolWallet | CosmosWallet | SuiWallet {
|
|
11
15
|
if (!this.instances[type]) {
|
|
12
16
|
let WalletClass;
|
|
13
17
|
switch (type) {
|
|
@@ -17,12 +21,16 @@ export abstract class WalletFactory {
|
|
|
17
21
|
case ChainType.Ton:
|
|
18
22
|
WalletClass = TonWallet;
|
|
19
23
|
break;
|
|
24
|
+
case ChainType.Sui:
|
|
25
|
+
WalletClass = SuiWallet;
|
|
26
|
+
break;
|
|
20
27
|
// case ChainType.Starknet:
|
|
21
28
|
// WalletClass = StarknetWallet;
|
|
22
29
|
// break;
|
|
23
30
|
case ChainType.Solana:
|
|
24
31
|
WalletClass = SolWallet;
|
|
25
32
|
break;
|
|
33
|
+
|
|
26
34
|
case ChainType.Cosmos:
|
|
27
35
|
WalletClass = CosmosWallet;
|
|
28
36
|
break;
|
package/src/providers/index.ts
CHANGED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import '@mysten/dapp-kit/dist/index.css';
|
|
2
|
+
import EventEmitter from 'events';
|
|
3
|
+
import { ReactNode, useEffect, useState } from 'react';
|
|
4
|
+
import { WalletBase } from '../../WalletBase';
|
|
5
|
+
import { ISignResult } from '../../types';
|
|
6
|
+
import { get4361Message, prepareSignMessage } from '../../utils';
|
|
7
|
+
import {
|
|
8
|
+
createNetworkConfig,
|
|
9
|
+
SuiClientProvider,
|
|
10
|
+
WalletProvider,
|
|
11
|
+
ConnectModal,
|
|
12
|
+
useCurrentAccount,
|
|
13
|
+
useCurrentWallet
|
|
14
|
+
} from '@mysten/dapp-kit';
|
|
15
|
+
import { getFullnodeUrl } from '@mysten/sui/client';
|
|
16
|
+
|
|
17
|
+
interface SuiStoreType {
|
|
18
|
+
connectModal: {
|
|
19
|
+
open: boolean;
|
|
20
|
+
setOpen: (open: boolean) => void;
|
|
21
|
+
} | null;
|
|
22
|
+
account: ReturnType<typeof useCurrentAccount> | null;
|
|
23
|
+
wallet: ReturnType<typeof useCurrentWallet> | null;
|
|
24
|
+
counter: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const suiStore: SuiStoreType = {
|
|
28
|
+
connectModal: null,
|
|
29
|
+
account: null,
|
|
30
|
+
wallet: null,
|
|
31
|
+
counter: 0
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export const eventBus = new EventEmitter();
|
|
35
|
+
|
|
36
|
+
const Sui_EVENT_KEY = 'sui_signin';
|
|
37
|
+
|
|
38
|
+
export const getEventKey = () => {
|
|
39
|
+
return `${Sui_EVENT_KEY}_${suiStore.counter}`;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
export class SuiWallet extends WalletBase<SuiStoreType> {
|
|
43
|
+
getStore(): SuiStoreType {
|
|
44
|
+
return suiStore;
|
|
45
|
+
}
|
|
46
|
+
get isConnected(): boolean {
|
|
47
|
+
return !!this.getStore().wallet?.isConnected;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
connect() {
|
|
51
|
+
suiStore.connectModal?.setOpen(true);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
disconnect() {
|
|
55
|
+
suiStore.wallet?.currentWallet?.features['standard:disconnect']?.disconnect();
|
|
56
|
+
}
|
|
57
|
+
async sign(message: string): Promise<ISignResult> {
|
|
58
|
+
const signPersonalFeature = suiStore.wallet?.currentWallet?.features['sui:signPersonalMessage'];
|
|
59
|
+
const res = await signPersonalFeature?.signPersonalMessage({
|
|
60
|
+
message: new Uint8Array(Buffer.from(message)),
|
|
61
|
+
account: suiStore.account!
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
return {
|
|
65
|
+
message: message,
|
|
66
|
+
signature: res!.signature
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
signin(statement: string, prepare = true): Promise<ISignResult> {
|
|
71
|
+
return new Promise((resolve) => {
|
|
72
|
+
const signCallback = (data: ReturnType<typeof useCurrentAccount>) => {
|
|
73
|
+
this.publicKey = Buffer.from(data!.publicKey).toString('hex');
|
|
74
|
+
this.address = data?.address;
|
|
75
|
+
this.chainId = 1;
|
|
76
|
+
let fullMessage = statement;
|
|
77
|
+
if (prepare) {
|
|
78
|
+
const msg = prepareSignMessage({ statement, chainId: this.chainId, address: this.address! });
|
|
79
|
+
fullMessage = get4361Message(msg);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const res = this.sign(JSON.stringify(fullMessage, null, ' '));
|
|
83
|
+
|
|
84
|
+
resolve(res);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
if (this.isConnected && suiStore.account) {
|
|
88
|
+
signCallback(suiStore.account!);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
suiStore.counter++;
|
|
92
|
+
this.connect();
|
|
93
|
+
const eventKey = getEventKey();
|
|
94
|
+
eventBus.once(eventKey, (data) => {
|
|
95
|
+
console.log('listen event key success, event key = %s, data = %j', eventKey, data);
|
|
96
|
+
signCallback(data);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export const SuiConnector = () => {
|
|
103
|
+
const [showModal, setShowModal] = useState(false);
|
|
104
|
+
const account = useCurrentAccount();
|
|
105
|
+
const wallet = useCurrentWallet();
|
|
106
|
+
|
|
107
|
+
useEffect(() => {
|
|
108
|
+
if (wallet) {
|
|
109
|
+
if (wallet.isConnected && account) {
|
|
110
|
+
const eventKey = getEventKey();
|
|
111
|
+
eventBus.emit(eventKey, account);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}, [wallet, account]);
|
|
115
|
+
|
|
116
|
+
suiStore.connectModal = {
|
|
117
|
+
open: showModal,
|
|
118
|
+
setOpen: setShowModal
|
|
119
|
+
};
|
|
120
|
+
suiStore.account = account;
|
|
121
|
+
suiStore.wallet = wallet;
|
|
122
|
+
|
|
123
|
+
return <ConnectModal open={showModal} onOpenChange={(open) => setShowModal(open)} trigger={<div></div>} />;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const SuiProvider = ({ children, network }: { children: ReactNode; network: 'testnet' | 'mainnet' }) => {
|
|
127
|
+
const { networkConfig } = createNetworkConfig({
|
|
128
|
+
testnet: { url: getFullnodeUrl('testnet') },
|
|
129
|
+
mainnet: { url: getFullnodeUrl('mainnet') }
|
|
130
|
+
});
|
|
131
|
+
return (
|
|
132
|
+
<SuiClientProvider networks={networkConfig} network={network}>
|
|
133
|
+
<WalletProvider autoConnect>
|
|
134
|
+
<SuiConnector />
|
|
135
|
+
{children}
|
|
136
|
+
</WalletProvider>
|
|
137
|
+
</SuiClientProvider>
|
|
138
|
+
);
|
|
139
|
+
};
|