@sign-global/tokentable 0.4.3-beta.0 → 0.4.3-beta.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.
Files changed (213) hide show
  1. package/dist/cjs/airdrop/AirdropClient.d.ts +1 -1
  2. package/dist/cjs/airdrop/AirdropClient.js +4 -3
  3. package/dist/cjs/airdrop/AirdropClient.js.map +1 -1
  4. package/dist/cjs/airdrop/SignatureAirdropClient.d.ts +10 -1
  5. package/dist/cjs/airdrop/SignatureAirdropClient.js +48 -11
  6. package/dist/cjs/airdrop/SignatureAirdropClient.js.map +1 -1
  7. package/dist/cjs/airdrop/common/index.d.ts +1 -1
  8. package/dist/cjs/airdrop/constants/chain-config.d.ts +1 -1
  9. package/dist/cjs/airdrop/constants/chain-config.js +1 -1
  10. package/dist/cjs/airdrop/constants/chain-config.js.map +1 -1
  11. package/dist/cjs/airdrop/constants/index.d.ts +1 -0
  12. package/dist/cjs/airdrop/constants/index.js +1 -0
  13. package/dist/cjs/airdrop/constants/index.js.map +1 -1
  14. package/dist/cjs/airdrop/contracts/evm/contracts/AirdropSignatureClient.js +0 -1
  15. package/dist/cjs/airdrop/contracts/evm/contracts/AirdropSignatureClient.js.map +1 -1
  16. package/dist/cjs/airdrop/contracts/index.d.ts +1 -0
  17. package/dist/cjs/airdrop/contracts/index.js +3 -1
  18. package/dist/cjs/airdrop/contracts/index.js.map +1 -1
  19. package/dist/cjs/airdrop/contracts/solana/AirdropService.d.ts +16 -0
  20. package/dist/cjs/airdrop/contracts/solana/AirdropService.js +38 -0
  21. package/dist/cjs/airdrop/contracts/solana/AirdropService.js.map +1 -0
  22. package/dist/cjs/airdrop/contracts/solana/AirdropSignatureClient.js +2 -2
  23. package/dist/cjs/airdrop/contracts/solana/AirdropSignatureClient.js.map +1 -1
  24. package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.d.ts +3 -2
  25. package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.js +7 -3
  26. package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.js.map +1 -1
  27. package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.d.ts +49 -0
  28. package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.js +242 -0
  29. package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.js.map +1 -0
  30. package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.d.ts +1 -0
  31. package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.js +3 -0
  32. package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.js.map +1 -1
  33. package/dist/cjs/airdrop/contracts/solana/fee_collector.d.ts +49 -1
  34. package/dist/cjs/airdrop/contracts/solana/fee_collector.json +51 -3
  35. package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.d.ts +1695 -0
  36. package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.js +3 -0
  37. package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.js.map +1 -0
  38. package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.json +1689 -0
  39. package/dist/cjs/airdrop/services/index.d.ts +3 -2
  40. package/dist/cjs/airdrop/services/index.js +8 -1
  41. package/dist/cjs/airdrop/services/index.js.map +1 -1
  42. package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.d.ts +1 -0
  43. package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.js +2 -1
  44. package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.js.map +1 -1
  45. package/dist/cjs/airdrop/strategies/IAirdropStrategy.d.ts +1 -0
  46. package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.d.ts +25 -0
  47. package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.js +62 -0
  48. package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.js.map +1 -0
  49. package/dist/cjs/airdrop/types/index.d.ts +6 -1
  50. package/dist/cjs/airdrop/types/index.js +1 -0
  51. package/dist/cjs/airdrop/types/index.js.map +1 -1
  52. package/dist/esm/airdrop/AirdropClient.d.ts +1 -1
  53. package/dist/esm/airdrop/AirdropClient.js +4 -3
  54. package/dist/esm/airdrop/AirdropClient.js.map +1 -1
  55. package/dist/esm/airdrop/SignatureAirdropClient.d.ts +10 -1
  56. package/dist/esm/airdrop/SignatureAirdropClient.js +49 -12
  57. package/dist/esm/airdrop/SignatureAirdropClient.js.map +1 -1
  58. package/dist/esm/airdrop/common/index.d.ts +1 -1
  59. package/dist/esm/airdrop/constants/chain-config.d.ts +1 -1
  60. package/dist/esm/airdrop/constants/chain-config.js +1 -1
  61. package/dist/esm/airdrop/constants/chain-config.js.map +1 -1
  62. package/dist/esm/airdrop/constants/index.d.ts +1 -0
  63. package/dist/esm/airdrop/constants/index.js +1 -0
  64. package/dist/esm/airdrop/constants/index.js.map +1 -1
  65. package/dist/esm/airdrop/contracts/evm/contracts/AirdropSignatureClient.js +0 -1
  66. package/dist/esm/airdrop/contracts/evm/contracts/AirdropSignatureClient.js.map +1 -1
  67. package/dist/esm/airdrop/contracts/index.d.ts +1 -0
  68. package/dist/esm/airdrop/contracts/index.js +1 -0
  69. package/dist/esm/airdrop/contracts/index.js.map +1 -1
  70. package/dist/esm/airdrop/contracts/solana/AirdropService.d.ts +16 -0
  71. package/dist/esm/airdrop/contracts/solana/AirdropService.js +34 -0
  72. package/dist/esm/airdrop/contracts/solana/AirdropService.js.map +1 -0
  73. package/dist/esm/airdrop/contracts/solana/AirdropSignatureClient.js +2 -2
  74. package/dist/esm/airdrop/contracts/solana/AirdropSignatureClient.js.map +1 -1
  75. package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.d.ts +3 -2
  76. package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.js +7 -3
  77. package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.js.map +1 -1
  78. package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.d.ts +49 -0
  79. package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.js +212 -0
  80. package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.js.map +1 -0
  81. package/dist/esm/airdrop/contracts/solana/SolanaContractClient.d.ts +1 -0
  82. package/dist/esm/airdrop/contracts/solana/SolanaContractClient.js +3 -0
  83. package/dist/esm/airdrop/contracts/solana/SolanaContractClient.js.map +1 -1
  84. package/dist/esm/airdrop/contracts/solana/fee_collector.d.ts +49 -1
  85. package/dist/esm/airdrop/contracts/solana/fee_collector.json +51 -3
  86. package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.d.ts +1695 -0
  87. package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.js +2 -0
  88. package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.js.map +1 -0
  89. package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.json +1689 -0
  90. package/dist/esm/airdrop/services/index.d.ts +3 -2
  91. package/dist/esm/airdrop/services/index.js +6 -0
  92. package/dist/esm/airdrop/services/index.js.map +1 -1
  93. package/dist/esm/airdrop/strategies/AirdropStrategyFactory.d.ts +1 -0
  94. package/dist/esm/airdrop/strategies/AirdropStrategyFactory.js +2 -1
  95. package/dist/esm/airdrop/strategies/AirdropStrategyFactory.js.map +1 -1
  96. package/dist/esm/airdrop/strategies/IAirdropStrategy.d.ts +1 -0
  97. package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.d.ts +25 -0
  98. package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.js +58 -0
  99. package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.js.map +1 -0
  100. package/dist/esm/airdrop/types/index.d.ts +6 -1
  101. package/dist/esm/airdrop/types/index.js +1 -0
  102. package/dist/esm/airdrop/types/index.js.map +1 -1
  103. package/package.json +2 -9
  104. package/src/airdrop/AirdropClient.ts +0 -307
  105. package/src/airdrop/SignatureAirdropClient.ts +0 -337
  106. package/src/airdrop/common/index.ts +0 -54
  107. package/src/airdrop/common/projectDataForTon.ts +0 -79
  108. package/src/airdrop/constants/chain-config.ts +0 -107
  109. package/src/airdrop/constants/index.ts +0 -8
  110. package/src/airdrop/constants/network.ts +0 -78
  111. package/src/airdrop/contracts/evm/AirdropService.ts +0 -181
  112. package/src/airdrop/contracts/evm/SignatureAirdropService.ts +0 -114
  113. package/src/airdrop/contracts/evm/contracts/AirdropSignatureClient.ts +0 -63
  114. package/src/airdrop/contracts/evm/contracts/AirdropSignatureFeeClient.ts +0 -61
  115. package/src/airdrop/contracts/evm/contracts/AirdropV2Client.ts +0 -37
  116. package/src/airdrop/contracts/evm/contracts/AirdropV3Client.ts +0 -49
  117. package/src/airdrop/contracts/evm/contracts/AirdropV3FeeClient.ts +0 -16
  118. package/src/airdrop/contracts/evm/contracts/AirdropV4Client.ts +0 -36
  119. package/src/airdrop/contracts/evm/contracts/ContractBaseClient.ts +0 -85
  120. package/src/airdrop/contracts/evm/contracts/DeployClient.ts +0 -35
  121. package/src/airdrop/contracts/evm/contracts/FeeCollectorClient.ts +0 -21
  122. package/src/airdrop/contracts/evm/contracts/KycClient.ts +0 -21
  123. package/src/airdrop/contracts/evm/contracts/abis/Airdrop.json +0 -674
  124. package/src/airdrop/contracts/evm/contracts/abis/AirdropV2.json +0 -676
  125. package/src/airdrop/contracts/evm/contracts/abis/AirdropV3.json +0 -740
  126. package/src/airdrop/contracts/evm/contracts/abis/AirdropV3_Fee.json +0 -678
  127. package/src/airdrop/contracts/evm/contracts/abis/CustomFeeNativeAirdropV4.json +0 -701
  128. package/src/airdrop/contracts/evm/contracts/abis/Deployer.json +0 -271
  129. package/src/airdrop/contracts/evm/contracts/abis/ERC721.json +0 -737
  130. package/src/airdrop/contracts/evm/contracts/abis/FeeCollector.json +0 -322
  131. package/src/airdrop/contracts/evm/contracts/abis/FungibleTokenECDSADistributor.json +0 -564
  132. package/src/airdrop/contracts/evm/contracts/abis/FungibleTokenWithFeesECDSADistributor.json +0 -260
  133. package/src/airdrop/contracts/evm/contracts/abis/KycHook.json +0 -312
  134. package/src/airdrop/contracts/index.ts +0 -4
  135. package/src/airdrop/contracts/solana/AirdropSignatureClient.ts +0 -242
  136. package/src/airdrop/contracts/solana/FeeCollectorClient.ts +0 -43
  137. package/src/airdrop/contracts/solana/SignatureAirdropService.ts +0 -51
  138. package/src/airdrop/contracts/solana/SolanaContractClient.ts +0 -126
  139. package/src/airdrop/contracts/solana/fee_collector.json +0 -1063
  140. package/src/airdrop/contracts/solana/fee_collector.ts +0 -1069
  141. package/src/airdrop/contracts/solana/fungible_token_distributor_solana.json +0 -1573
  142. package/src/airdrop/contracts/solana/fungible_token_distributor_solana.ts +0 -1579
  143. package/src/airdrop/contracts/ton/AirdropClientV1.ts +0 -122
  144. package/src/airdrop/contracts/ton/AirdropClientV2.ts +0 -118
  145. package/src/airdrop/contracts/ton/AirdropClientV21.ts +0 -131
  146. package/src/airdrop/contracts/ton/AirdropClientV3.ts +0 -127
  147. package/src/airdrop/contracts/ton/AirdropService.ts +0 -150
  148. package/src/airdrop/contracts/ton/TonContractBaseClient.ts +0 -236
  149. package/src/airdrop/contracts/ton/v1/build/Leaf.compiled.json +0 -1
  150. package/src/airdrop/contracts/ton/v1/build/MerkleTokenDistributor.compiled.json +0 -1
  151. package/src/airdrop/contracts/ton/v1/utils/constants.ts +0 -42
  152. package/src/airdrop/contracts/ton/v1/utils/date.utils.ts +0 -11
  153. package/src/airdrop/contracts/ton/v1/utils/index.ts +0 -3
  154. package/src/airdrop/contracts/ton/v1/utils/ton.utils.ts +0 -84
  155. package/src/airdrop/contracts/ton/v1/wrappers/JettonMinter.ts +0 -81
  156. package/src/airdrop/contracts/ton/v1/wrappers/JettonWallet.ts +0 -73
  157. package/src/airdrop/contracts/ton/v1/wrappers/Leaf.ts +0 -88
  158. package/src/airdrop/contracts/ton/v1/wrappers/MerkleTokenDistributor.ts +0 -317
  159. package/src/airdrop/contracts/ton/v1/wrappers/index.ts +0 -2
  160. package/src/airdrop/contracts/ton/v2/build/Leaf.compiled.json +0 -1
  161. package/src/airdrop/contracts/ton/v2/build/MerkleTokenDistributor.compiled.json +0 -1
  162. package/src/airdrop/contracts/ton/v2/utils/constants.ts +0 -43
  163. package/src/airdrop/contracts/ton/v2/utils/date.utils.ts +0 -11
  164. package/src/airdrop/contracts/ton/v2/utils/index.ts +0 -3
  165. package/src/airdrop/contracts/ton/v2/utils/ton.utils.ts +0 -102
  166. package/src/airdrop/contracts/ton/v2/wrappers/Leaf.ts +0 -69
  167. package/src/airdrop/contracts/ton/v2/wrappers/MerkleTokenDistributor.ts +0 -340
  168. package/src/airdrop/contracts/ton/v2/wrappers/index.ts +0 -2
  169. package/src/airdrop/contracts/ton/v21/build/Leaf.compiled.json +0 -1
  170. package/src/airdrop/contracts/ton/v21/build/MerkleTokenDistributor.compiled.json +0 -1
  171. package/src/airdrop/contracts/ton/v21/utils/constants.ts +0 -48
  172. package/src/airdrop/contracts/ton/v21/utils/date.utils.ts +0 -11
  173. package/src/airdrop/contracts/ton/v21/utils/index.ts +0 -3
  174. package/src/airdrop/contracts/ton/v21/utils/ton.utils.ts +0 -84
  175. package/src/airdrop/contracts/ton/v21/wrappers/Leaf.ts +0 -69
  176. package/src/airdrop/contracts/ton/v21/wrappers/MerkleTokenDistributor.ts +0 -346
  177. package/src/airdrop/contracts/ton/v21/wrappers/index.ts +0 -2
  178. package/src/airdrop/contracts/ton/v3/build/Leaf.compiled.json +0 -1
  179. package/src/airdrop/contracts/ton/v3/build/MerkleTokenDistributor.compiled.json +0 -1
  180. package/src/airdrop/contracts/ton/v3/utils/constants.ts +0 -43
  181. package/src/airdrop/contracts/ton/v3/utils/date.utils.ts +0 -11
  182. package/src/airdrop/contracts/ton/v3/utils/index.ts +0 -3
  183. package/src/airdrop/contracts/ton/v3/utils/ton.utils.ts +0 -84
  184. package/src/airdrop/contracts/ton/v3/wrappers/Leaf.ts +0 -68
  185. package/src/airdrop/contracts/ton/v3/wrappers/MerkleTokenDistributor.ts +0 -316
  186. package/src/airdrop/contracts/ton/v3/wrappers/index.ts +0 -2
  187. package/src/airdrop/index.ts +0 -10
  188. package/src/airdrop/services/index.ts +0 -159
  189. package/src/airdrop/services/wallet-service/ton/WalletService.ts +0 -226
  190. package/src/airdrop/services/wallet-service/ton/index.ts +0 -1
  191. package/src/airdrop/strategies/AirdropStrategyFactory.ts +0 -31
  192. package/src/airdrop/strategies/EvmAirdropStrategy.ts +0 -81
  193. package/src/airdrop/strategies/IAirdropStrategy.ts +0 -26
  194. package/src/airdrop/strategies/StrategyCache.ts +0 -34
  195. package/src/airdrop/strategies/TonAirdropStrategy.ts +0 -77
  196. package/src/airdrop/tests/index.test.ts +0 -387
  197. package/src/airdrop/types/index.ts +0 -199
  198. package/src/index.ts +0 -3
  199. package/src/utils/api-client.ts +0 -69
  200. package/src/utils/index.ts +0 -3
  201. package/src/utils/utils.ts +0 -45
  202. package/src/utils/web3.ts +0 -172
  203. package/src/wallets/WalletBase.ts +0 -92
  204. package/src/wallets/WalletFactory.tsx +0 -35
  205. package/src/wallets/index.ts +0 -3
  206. package/src/wallets/providers/evm/EvmWallet.ts +0 -101
  207. package/src/wallets/providers/evm/index.tsx +0 -56
  208. package/src/wallets/providers/index.ts +0 -4
  209. package/src/wallets/providers/solana/index.tsx +0 -133
  210. package/src/wallets/providers/ton/TonWallet.ts +0 -153
  211. package/src/wallets/providers/ton/index.tsx +0 -41
  212. package/src/wallets/types.ts +0 -45
  213. package/src/wallets/utils/index.ts +0 -61
@@ -1,101 +0,0 @@
1
- import { useConnectModal } from '@rainbow-me/rainbowkit';
2
- import { ResolvedRegister, useAccount, useWalletClient } from 'wagmi';
3
- import { WalletBase } from '../../WalletBase';
4
- import { disconnect, getAccount, signMessage } from 'wagmi/actions';
5
- import { EventEmitter } from 'events';
6
- import { ISignResult } from '../../types';
7
- import { get4361Message, prepareSignMessage } from '../../utils';
8
-
9
- export const eventBus = new EventEmitter();
10
-
11
- const EVM_EVENT_KEY = 'evm_signin';
12
-
13
- export interface EVMStoreType {
14
- account: ReturnType<typeof useAccount> | null;
15
- connectModal: ReturnType<typeof useConnectModal> | undefined;
16
- walletClient: ReturnType<typeof useWalletClient> | undefined;
17
- config: ResolvedRegister['config'] | undefined;
18
- counter: number;
19
- }
20
-
21
- export const evmStore: EVMStoreType = {
22
- account: null,
23
- connectModal: undefined,
24
- walletClient: undefined,
25
- config: undefined,
26
- counter: 0
27
- };
28
-
29
- export const getEventKey = () => {
30
- return `${EVM_EVENT_KEY}_${evmStore.counter}`;
31
- };
32
-
33
- export class EvmWallet extends WalletBase<EVMStoreType> {
34
- get isConnected() {
35
- return !!(evmStore.account?.address && evmStore.account?.isConnected);
36
- }
37
-
38
- connect() {
39
- evmStore?.connectModal?.openConnectModal?.();
40
- }
41
-
42
- async disconnect() {
43
- await disconnect(evmStore.config!);
44
- }
45
-
46
- async sign(_message: string) {
47
- try {
48
- const sign = await signMessage(evmStore.config!, {
49
- message: _message
50
- });
51
- return {
52
- message: _message,
53
- signature: sign
54
- };
55
- } catch (error) {
56
- throw error;
57
- }
58
- }
59
-
60
- override async signin(statement: string, prepare = true): Promise<ISignResult> {
61
- return new Promise((resolve, reject) => {
62
- const signCallback = async (data: ReturnType<typeof useAccount>) => {
63
- try {
64
- this.address = data.address;
65
- this.chainId = data.chainId;
66
- let fullMessage = statement;
67
- if (prepare) {
68
- const msg = prepareSignMessage({ statement, chainId: data.chainId!, address: data.address! });
69
- fullMessage = get4361Message(msg);
70
- }
71
-
72
- const res = await this.sign(fullMessage);
73
-
74
- resolve(res);
75
- } catch (error) {
76
- reject(error);
77
- }
78
- };
79
-
80
- const account = getAccount(evmStore.config!);
81
- this.provider = evmStore.walletClient;
82
-
83
- if (this.isConnected) {
84
- signCallback(account);
85
- return;
86
- }
87
-
88
- evmStore.counter++;
89
- this.connect();
90
- const eventKey = getEventKey();
91
- eventBus.once(eventKey, (data) => {
92
- console.log('listen event key success, event key = %s, data = %j', eventKey, data);
93
- signCallback(data);
94
- });
95
- });
96
- }
97
-
98
- getStore(): EVMStoreType {
99
- return evmStore;
100
- }
101
- }
@@ -1,56 +0,0 @@
1
- import '@rainbow-me/rainbowkit/styles.css';
2
- import { RainbowKitProvider, darkTheme, useConnectModal } from '@rainbow-me/rainbowkit';
3
- import { ResolvedRegister, WagmiProvider, useAccount, useWalletClient } from 'wagmi';
4
- import { ReactNode, useEffect } from 'react';
5
-
6
- import { evmStore, getEventKey, eventBus } from './EvmWallet';
7
-
8
- export { EvmWallet } from './EvmWallet';
9
-
10
- export const EVMConnector = () => {
11
- const connectModal = useConnectModal();
12
- const walletClient = useWalletClient();
13
- const account = useAccount();
14
-
15
- evmStore.connectModal = connectModal;
16
- evmStore.walletClient = walletClient;
17
- evmStore.account = account;
18
-
19
- useEffect(() => {
20
- if (account.isConnected) {
21
- const eventKey = getEventKey();
22
- eventBus.emit(eventKey, account);
23
- }
24
- }, [account]);
25
-
26
- return null;
27
- };
28
-
29
- export const EvmProvider = ({
30
- children,
31
- config,
32
- theme
33
- }: {
34
- children: ReactNode;
35
- config: ResolvedRegister['config'];
36
- theme?: any;
37
- }) => {
38
- evmStore.config = config;
39
- return (
40
- <WagmiProvider config={config}>
41
- <RainbowKitProvider
42
- locale="en-US"
43
- theme={
44
- theme ||
45
- darkTheme({
46
- accentColor: 'var(--t-primary)',
47
- accentColorForeground: 'var(--t-button-primary-foreground)'
48
- })
49
- }
50
- >
51
- {children}
52
- <EVMConnector />
53
- </RainbowKitProvider>
54
- </WagmiProvider>
55
- );
56
- };
@@ -1,4 +0,0 @@
1
- export { EvmWallet, EvmProvider } from './evm';
2
- export { SolWallet, SolanaProvider } from './solana';
3
- // export { StarknetWallet } from './starknet';
4
- export { TonWallet, TonProvider } from './ton';
@@ -1,133 +0,0 @@
1
- import { ReactNode, useCallback, useEffect, useMemo } from 'react';
2
- import { WalletBase } from '../../WalletBase';
3
- import { useWalletModal, WalletModalProvider } from '@solana/wallet-adapter-react-ui';
4
- import '@solana/wallet-adapter-react-ui/styles.css';
5
- import { ISignResult } from '../../types';
6
- import { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react';
7
- import { PhantomWalletAdapter, TrustWalletAdapter } from '@solana/wallet-adapter-wallets';
8
- import { Cluster, clusterApiUrl } from '@solana/web3.js';
9
- import bs58 from 'bs58';
10
- import { get4361Message, prepareSignMessage } from '../../utils';
11
- import EventEmitter from 'events';
12
-
13
- interface SolStoreType {
14
- connectModal: ReturnType<typeof useWalletModal> | null;
15
- account: ReturnType<typeof useWallet> | null;
16
- counter: number;
17
- }
18
-
19
- const solStore: SolStoreType = {
20
- connectModal: null,
21
- account: null,
22
- counter: 0
23
- };
24
-
25
- export const eventBus = new EventEmitter();
26
-
27
- const SOL_EVENT_KEY = 'sol_signin';
28
-
29
- export const getEventKey = () => {
30
- return `${SOL_EVENT_KEY}_${solStore.counter}`;
31
- };
32
-
33
- export class SolWallet extends WalletBase<SolStoreType> {
34
- getStore(): SolStoreType {
35
- return solStore;
36
- }
37
- get isConnected() {
38
- return !!solStore.account?.connected;
39
- }
40
- connect(): void {
41
- solStore.connectModal?.setVisible(true);
42
- }
43
-
44
- disconnect() {
45
- solStore.account?.disconnect();
46
- }
47
-
48
- async sign(message: string): Promise<ISignResult> {
49
- try {
50
- const provider = solStore.account!;
51
- const encodedMessage = new TextEncoder().encode(message);
52
- const signedMessage = await provider.signMessage?.(encodedMessage);
53
-
54
- return {
55
- message,
56
- signature: bs58.encode(signedMessage!)
57
- };
58
- } catch (error) {
59
- console.error(error);
60
- throw error;
61
- }
62
- }
63
-
64
- signin(statement: string, prepare = true): Promise<ISignResult> {
65
- return new Promise((resolve) => {
66
- const signCallback = (data: ReturnType<typeof useWallet>) => {
67
- this.publicKey = data.publicKey?.toString();
68
- this.address = this.publicKey;
69
- this.chainId = 1;
70
- let fullMessage = statement;
71
- if (prepare) {
72
- const msg = prepareSignMessage({ statement, chainId: '1', address: this.address! });
73
- fullMessage = get4361Message(msg);
74
- }
75
-
76
- const res = this.sign(fullMessage);
77
-
78
- resolve(res);
79
- };
80
-
81
- if (this.isConnected) {
82
- signCallback(solStore.account!);
83
- return;
84
- }
85
- solStore.counter++;
86
- this.connect();
87
- const eventKey = getEventKey();
88
- eventBus.once(eventKey, (data) => {
89
- console.log('listen event key success, event key = %s, data = %j', eventKey, data);
90
- signCallback(data);
91
- });
92
- });
93
- }
94
- }
95
-
96
- //Solana connection process: Open the modal first, then manually call wallet connect
97
- export const SolConnector = () => {
98
- const walletModal = useWalletModal();
99
- const wallet = useWallet();
100
-
101
- useEffect(() => {
102
- if (wallet.wallet) {
103
- if (wallet.connected) {
104
- const eventKey = getEventKey();
105
- eventBus.emit(eventKey, wallet);
106
- }
107
- }
108
- }, [wallet]);
109
-
110
- solStore.connectModal = walletModal;
111
- solStore.account = wallet;
112
- return null;
113
- };
114
-
115
- export const SolanaProvider = ({ children, cluster }: { children: ReactNode; cluster?: Cluster }) => {
116
- const endpoint = clusterApiUrl(cluster ? cluster : 'mainnet-beta');
117
-
118
- const wallets = useMemo(() => [new PhantomWalletAdapter(), new TrustWalletAdapter()], []);
119
-
120
- const onError = useCallback((error: any) => {
121
- console.error(error);
122
- }, []);
123
- return (
124
- <ConnectionProvider endpoint={endpoint}>
125
- <WalletProvider wallets={wallets} onError={onError} autoConnect>
126
- <WalletModalProvider>
127
- <SolConnector />
128
- {children}
129
- </WalletModalProvider>
130
- </WalletProvider>
131
- </ConnectionProvider>
132
- );
133
- };
@@ -1,153 +0,0 @@
1
- import {
2
- useTonConnectUI,
3
- useTonWallet,
4
- useTonConnectModal,
5
- WalletInfoRemote,
6
- TonConnectUIProviderProps
7
- } from '@tonconnect/ui-react';
8
- import { WalletBase } from '../../WalletBase';
9
- import { ISignResult } from '../../types';
10
- import { getCustomNaNoId } from '../../utils';
11
- import { hashSha256 } from '@ethsign/utils-web';
12
- import { CHAIN, TonConnectUI, TonProofItemReplySuccess, toUserFriendlyAddress, Wallet } from '@tonconnect/ui';
13
- import { EventEmitter } from 'events';
14
- import { Cell } from 'ton-core';
15
-
16
- export interface TonStoreType {
17
- account: ReturnType<typeof useTonWallet> | null;
18
- connectModal: ReturnType<typeof useTonConnectModal> | undefined;
19
- walletClient: ReturnType<typeof useTonConnectUI>[0] | undefined;
20
- config: TonConnectUIProviderProps | undefined;
21
- counter: number;
22
- }
23
-
24
- export const tonStore: TonStoreType = {
25
- account: null,
26
- connectModal: undefined,
27
- walletClient: undefined,
28
- config: undefined,
29
- counter: 0
30
- };
31
-
32
- export const eventBus = new EventEmitter();
33
-
34
- export const getEventKey = () => {
35
- return `ton_sign_${tonStore.counter}`;
36
- };
37
-
38
- export class TonWallet extends WalletBase<TonStoreType> {
39
- get isConnected() {
40
- return !!tonStore.account?.account;
41
- }
42
-
43
- connect() {
44
- tonStore?.connectModal?.open?.();
45
- }
46
-
47
- async disconnect() {
48
- await tonStore.walletClient?.disconnect();
49
- }
50
-
51
- private getPublicKey(stateInit: string): string {
52
- const state_init = Cell.fromBase64(stateInit);
53
- const bits = state_init.refs[1].bits;
54
- const pubKey = bits.toString().substring(16, 80).toLowerCase();
55
- return pubKey;
56
- }
57
-
58
- async sign(originMsg: string): Promise<ISignResult> {
59
- const message = await hashSha256(originMsg);
60
- const tonConnectUI = tonStore.walletClient as any;
61
- // const walletInfo = tonConnectUI?.wallet;
62
- const authType = '';
63
- // if (walletInfo?.jsBridgeKey && walletInfo?.openMethod !== 'qrcode') {
64
- // authType = walletInfo.jsBridgeKey;
65
- // }
66
-
67
- console.log(this.isConnected, tonConnectUI, 'connected');
68
- if (this.isConnected) {
69
- await tonConnectUI.disconnect();
70
- }
71
- tonStore.counter++;
72
- if (authType) {
73
- const wallets = await tonConnectUI.getWallets();
74
-
75
- const currentWallet = wallets.find((wallet: any) =>
76
- [wallet.name, wallet.appName].includes(authType)
77
- ) as WalletInfoRemote;
78
-
79
- const link = tonConnectUI.connector.connect(
80
- {
81
- bridgeUrl: currentWallet.bridgeUrl,
82
- universalLink: currentWallet.universalLink
83
- },
84
- {
85
- tonProof: message
86
- }
87
- );
88
-
89
- // tonspace在tg内部打开
90
- window.open(link);
91
- } else {
92
- console.log('first time, call setConnectRequestParameters');
93
- tonConnectUI.setConnectRequestParameters({
94
- state: 'ready',
95
- value: {
96
- tonProof: message // 不能有空格,特殊字符
97
- }
98
- });
99
- this.connect();
100
- }
101
-
102
- const connectedWallet: Wallet = await new Promise((resolve) => {
103
- const eventKey = getEventKey();
104
- console.log('start listen event key, key = %s', eventKey);
105
- eventBus.once(eventKey, (data) => {
106
- console.log('listen event key success, event key = %s, data = %j', eventKey, data);
107
- resolve(data);
108
- });
109
- });
110
-
111
- this.provider = tonStore.walletClient;
112
- const proof = (connectedWallet.connectItems?.tonProof as TonProofItemReplySuccess)?.proof;
113
- this.publicKey = connectedWallet.account.publicKey || this.getPublicKey(connectedWallet.account.walletStateInit); //使用walletStateInit,publicKey由后端计算
114
- this.address = toUserFriendlyAddress(connectedWallet.account.address);
115
- this.chainId = connectedWallet.account.chain;
116
- this.network = this.chainId === CHAIN.MAINNET ? 'TON_MAINNET' : 'TON_TESTNET';
117
- const fullMessage = JSON.stringify({
118
- timestamp: proof.timestamp,
119
- payload: proof.payload,
120
- domain: proof.domain
121
- });
122
- const signature = proof.signature;
123
-
124
- return {
125
- message: JSON.stringify({
126
- fullMessage,
127
- message: originMsg
128
- }),
129
- signature,
130
- tonProof: message
131
- };
132
- }
133
-
134
- override async signin(statement: string, prepare = true): Promise<ISignResult> {
135
- const fullMessage = prepare
136
- ? JSON.stringify(
137
- {
138
- statement: statement || 'Welcome to EthSign',
139
- issuedAt: new Date().toISOString(),
140
- nonce: getCustomNaNoId()
141
- },
142
- null,
143
- ' '
144
- )
145
- : statement;
146
- const signRes = await this.sign(fullMessage);
147
- return signRes;
148
- }
149
-
150
- getStore(): TonStoreType {
151
- return tonStore;
152
- }
153
- }
@@ -1,41 +0,0 @@
1
- import { ReactNode, useEffect } from 'react';
2
- import {
3
- TonConnectUIProvider,
4
- useTonConnectUI,
5
- useTonWallet,
6
- useTonConnectModal,
7
- TonConnectUIProviderProps
8
- } from '@tonconnect/ui-react';
9
-
10
- import { tonStore, eventBus, getEventKey, TonWallet } from './TonWallet';
11
-
12
- export { TonWallet };
13
-
14
- export const TonConnector = () => {
15
- const wallet = useTonWallet();
16
- const [tonConnectUI] = useTonConnectUI();
17
- const connectModal = useTonConnectModal();
18
-
19
- tonStore.connectModal = connectModal;
20
- tonStore.walletClient = tonConnectUI;
21
- tonStore.account = wallet;
22
-
23
- useEffect(() => {
24
- if (wallet) {
25
- eventBus.emit(getEventKey(), wallet);
26
- }
27
- }, [wallet]);
28
-
29
- return null;
30
- };
31
-
32
- export const TonProvider = ({ children, config }: { children: ReactNode; config: TonConnectUIProviderProps }) => {
33
- tonStore.config = config;
34
-
35
- return (
36
- <TonConnectUIProvider {...config}>
37
- {children}
38
- <TonConnector />
39
- </TonConnectUIProvider>
40
- );
41
- };
@@ -1,45 +0,0 @@
1
- export enum WalletType {
2
- EVM = 'evm',
3
- BITCOIN = 'bitcoin',
4
- SOLANA = 'solana',
5
- TON = 'ton',
6
- APTOS = 'aptos',
7
- PARTICLE = 'particle-evm',
8
- OKX = 'okx',
9
- Cyber = 'cyber',
10
- StarkNet = 'starknet',
11
- WALLETCONNECT = 'walletconnect',
12
- Cardano = 'cardano'
13
- }
14
-
15
- export enum ChainType {
16
- Evm = 'evm',
17
- Ton = 'ton',
18
- // Starknet = 'starknet',
19
- Solana = 'solana'
20
- }
21
- export enum ExtendedWalletType {
22
- UNISAT = 'unisat',
23
- OKXBTC = 'okx_btc'
24
- }
25
-
26
- export type ProviderType = WalletType | ExtendedWalletType;
27
-
28
- export type ISignResult =
29
- | {
30
- message: string;
31
- signature: string;
32
- [key: string]: any;
33
- }
34
- | undefined;
35
-
36
- export interface ISignInMessage {
37
- domain?: string;
38
- version?: string;
39
- nonce: string;
40
- issuedAt: string;
41
- statement: string;
42
- chainId?: number | string;
43
- uri?: string;
44
- address?: string;
45
- }
@@ -1,61 +0,0 @@
1
- import { ISignInMessage } from '../types';
2
- import { customAlphabet } from 'nanoid';
3
-
4
- export const getCustomNaNoId = (): string => {
5
- const nanoid = customAlphabet('1234567890abcdefghijklmnopqrstuvwxyz', 10);
6
- return nanoid();
7
- };
8
-
9
- export function prepareSignMessage({
10
- chainId,
11
- address,
12
- statement
13
- }: {
14
- address: string;
15
- chainId: number | string;
16
- statement?: string;
17
- }): ISignInMessage {
18
- return {
19
- statement: statement || 'Welcome to EthSign',
20
- chainId: chainId,
21
- address: address,
22
- issuedAt: new Date().toISOString(),
23
- domain: window.location.host,
24
- uri: window.location.origin,
25
- version: '1',
26
- nonce: getCustomNaNoId()
27
- };
28
- }
29
-
30
- export const get4361Message = ({
31
- domain,
32
- version,
33
- nonce,
34
- issuedAt,
35
- statement,
36
- chainId,
37
- uri,
38
- address
39
- }: ISignInMessage): string => {
40
- const header = `${domain} wants you to sign in with your Ethereum account:`;
41
- const uriField = `URI: ${uri}`;
42
- let prefix = [header, address].join('\n');
43
- const versionField = `Version: ${version}`;
44
-
45
- // const addressField = `Address: ` + address;
46
-
47
- const chainField = `Chain ID: ` + chainId || '1';
48
-
49
- const nonceField = `Nonce: ${nonce}`;
50
-
51
- const suffixArray = [uriField, versionField, chainField, nonceField];
52
-
53
- suffixArray.push(`Issued At: ${issuedAt}`);
54
-
55
- const suffix = suffixArray.join('\n');
56
- prefix = [prefix, statement].join('\n\n');
57
- if (statement) {
58
- prefix += '\n';
59
- }
60
- return [prefix, suffix].join('\n');
61
- };