@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.
- package/dist/cjs/airdrop/AirdropClient.d.ts +1 -1
- package/dist/cjs/airdrop/AirdropClient.js +4 -3
- package/dist/cjs/airdrop/AirdropClient.js.map +1 -1
- package/dist/cjs/airdrop/SignatureAirdropClient.d.ts +10 -1
- package/dist/cjs/airdrop/SignatureAirdropClient.js +48 -11
- package/dist/cjs/airdrop/SignatureAirdropClient.js.map +1 -1
- package/dist/cjs/airdrop/common/index.d.ts +1 -1
- package/dist/cjs/airdrop/constants/chain-config.d.ts +1 -1
- package/dist/cjs/airdrop/constants/chain-config.js +1 -1
- package/dist/cjs/airdrop/constants/chain-config.js.map +1 -1
- package/dist/cjs/airdrop/constants/index.d.ts +1 -0
- package/dist/cjs/airdrop/constants/index.js +1 -0
- package/dist/cjs/airdrop/constants/index.js.map +1 -1
- package/dist/cjs/airdrop/contracts/evm/contracts/AirdropSignatureClient.js +0 -1
- package/dist/cjs/airdrop/contracts/evm/contracts/AirdropSignatureClient.js.map +1 -1
- package/dist/cjs/airdrop/contracts/index.d.ts +1 -0
- package/dist/cjs/airdrop/contracts/index.js +3 -1
- package/dist/cjs/airdrop/contracts/index.js.map +1 -1
- package/dist/cjs/airdrop/contracts/solana/AirdropService.d.ts +16 -0
- package/dist/cjs/airdrop/contracts/solana/AirdropService.js +38 -0
- package/dist/cjs/airdrop/contracts/solana/AirdropService.js.map +1 -0
- package/dist/cjs/airdrop/contracts/solana/AirdropSignatureClient.js +2 -2
- package/dist/cjs/airdrop/contracts/solana/AirdropSignatureClient.js.map +1 -1
- package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.d.ts +3 -2
- package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.js +7 -3
- package/dist/cjs/airdrop/contracts/solana/FeeCollectorClient.js.map +1 -1
- package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.d.ts +49 -0
- package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.js +242 -0
- package/dist/cjs/airdrop/contracts/solana/MerkleDistributorClient.js.map +1 -0
- package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.d.ts +1 -0
- package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.js +3 -0
- package/dist/cjs/airdrop/contracts/solana/SolanaContractClient.js.map +1 -1
- package/dist/cjs/airdrop/contracts/solana/fee_collector.d.ts +49 -1
- package/dist/cjs/airdrop/contracts/solana/fee_collector.json +51 -3
- package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.d.ts +1695 -0
- package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.js +3 -0
- package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.js.map +1 -0
- package/dist/cjs/airdrop/contracts/solana/merkle_token_distributor_solana.json +1689 -0
- package/dist/cjs/airdrop/services/index.d.ts +3 -2
- package/dist/cjs/airdrop/services/index.js +8 -1
- package/dist/cjs/airdrop/services/index.js.map +1 -1
- package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.d.ts +1 -0
- package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.js +2 -1
- package/dist/cjs/airdrop/strategies/AirdropStrategyFactory.js.map +1 -1
- package/dist/cjs/airdrop/strategies/IAirdropStrategy.d.ts +1 -0
- package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.d.ts +25 -0
- package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.js +62 -0
- package/dist/cjs/airdrop/strategies/SolanaAirdropStrategy.js.map +1 -0
- package/dist/cjs/airdrop/types/index.d.ts +6 -1
- package/dist/cjs/airdrop/types/index.js +1 -0
- package/dist/cjs/airdrop/types/index.js.map +1 -1
- package/dist/esm/airdrop/AirdropClient.d.ts +1 -1
- package/dist/esm/airdrop/AirdropClient.js +4 -3
- package/dist/esm/airdrop/AirdropClient.js.map +1 -1
- package/dist/esm/airdrop/SignatureAirdropClient.d.ts +10 -1
- package/dist/esm/airdrop/SignatureAirdropClient.js +49 -12
- package/dist/esm/airdrop/SignatureAirdropClient.js.map +1 -1
- package/dist/esm/airdrop/common/index.d.ts +1 -1
- package/dist/esm/airdrop/constants/chain-config.d.ts +1 -1
- package/dist/esm/airdrop/constants/chain-config.js +1 -1
- package/dist/esm/airdrop/constants/chain-config.js.map +1 -1
- package/dist/esm/airdrop/constants/index.d.ts +1 -0
- package/dist/esm/airdrop/constants/index.js +1 -0
- package/dist/esm/airdrop/constants/index.js.map +1 -1
- package/dist/esm/airdrop/contracts/evm/contracts/AirdropSignatureClient.js +0 -1
- package/dist/esm/airdrop/contracts/evm/contracts/AirdropSignatureClient.js.map +1 -1
- package/dist/esm/airdrop/contracts/index.d.ts +1 -0
- package/dist/esm/airdrop/contracts/index.js +1 -0
- package/dist/esm/airdrop/contracts/index.js.map +1 -1
- package/dist/esm/airdrop/contracts/solana/AirdropService.d.ts +16 -0
- package/dist/esm/airdrop/contracts/solana/AirdropService.js +34 -0
- package/dist/esm/airdrop/contracts/solana/AirdropService.js.map +1 -0
- package/dist/esm/airdrop/contracts/solana/AirdropSignatureClient.js +2 -2
- package/dist/esm/airdrop/contracts/solana/AirdropSignatureClient.js.map +1 -1
- package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.d.ts +3 -2
- package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.js +7 -3
- package/dist/esm/airdrop/contracts/solana/FeeCollectorClient.js.map +1 -1
- package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.d.ts +49 -0
- package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.js +212 -0
- package/dist/esm/airdrop/contracts/solana/MerkleDistributorClient.js.map +1 -0
- package/dist/esm/airdrop/contracts/solana/SolanaContractClient.d.ts +1 -0
- package/dist/esm/airdrop/contracts/solana/SolanaContractClient.js +3 -0
- package/dist/esm/airdrop/contracts/solana/SolanaContractClient.js.map +1 -1
- package/dist/esm/airdrop/contracts/solana/fee_collector.d.ts +49 -1
- package/dist/esm/airdrop/contracts/solana/fee_collector.json +51 -3
- package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.d.ts +1695 -0
- package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.js +2 -0
- package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.js.map +1 -0
- package/dist/esm/airdrop/contracts/solana/merkle_token_distributor_solana.json +1689 -0
- package/dist/esm/airdrop/services/index.d.ts +3 -2
- package/dist/esm/airdrop/services/index.js +6 -0
- package/dist/esm/airdrop/services/index.js.map +1 -1
- package/dist/esm/airdrop/strategies/AirdropStrategyFactory.d.ts +1 -0
- package/dist/esm/airdrop/strategies/AirdropStrategyFactory.js +2 -1
- package/dist/esm/airdrop/strategies/AirdropStrategyFactory.js.map +1 -1
- package/dist/esm/airdrop/strategies/IAirdropStrategy.d.ts +1 -0
- package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.d.ts +25 -0
- package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.js +58 -0
- package/dist/esm/airdrop/strategies/SolanaAirdropStrategy.js.map +1 -0
- package/dist/esm/airdrop/types/index.d.ts +6 -1
- package/dist/esm/airdrop/types/index.js +1 -0
- package/dist/esm/airdrop/types/index.js.map +1 -1
- package/package.json +2 -9
- package/src/airdrop/AirdropClient.ts +0 -307
- package/src/airdrop/SignatureAirdropClient.ts +0 -337
- package/src/airdrop/common/index.ts +0 -54
- package/src/airdrop/common/projectDataForTon.ts +0 -79
- package/src/airdrop/constants/chain-config.ts +0 -107
- package/src/airdrop/constants/index.ts +0 -8
- package/src/airdrop/constants/network.ts +0 -78
- package/src/airdrop/contracts/evm/AirdropService.ts +0 -181
- package/src/airdrop/contracts/evm/SignatureAirdropService.ts +0 -114
- package/src/airdrop/contracts/evm/contracts/AirdropSignatureClient.ts +0 -63
- package/src/airdrop/contracts/evm/contracts/AirdropSignatureFeeClient.ts +0 -61
- package/src/airdrop/contracts/evm/contracts/AirdropV2Client.ts +0 -37
- package/src/airdrop/contracts/evm/contracts/AirdropV3Client.ts +0 -49
- package/src/airdrop/contracts/evm/contracts/AirdropV3FeeClient.ts +0 -16
- package/src/airdrop/contracts/evm/contracts/AirdropV4Client.ts +0 -36
- package/src/airdrop/contracts/evm/contracts/ContractBaseClient.ts +0 -85
- package/src/airdrop/contracts/evm/contracts/DeployClient.ts +0 -35
- package/src/airdrop/contracts/evm/contracts/FeeCollectorClient.ts +0 -21
- package/src/airdrop/contracts/evm/contracts/KycClient.ts +0 -21
- package/src/airdrop/contracts/evm/contracts/abis/Airdrop.json +0 -674
- package/src/airdrop/contracts/evm/contracts/abis/AirdropV2.json +0 -676
- package/src/airdrop/contracts/evm/contracts/abis/AirdropV3.json +0 -740
- package/src/airdrop/contracts/evm/contracts/abis/AirdropV3_Fee.json +0 -678
- package/src/airdrop/contracts/evm/contracts/abis/CustomFeeNativeAirdropV4.json +0 -701
- package/src/airdrop/contracts/evm/contracts/abis/Deployer.json +0 -271
- package/src/airdrop/contracts/evm/contracts/abis/ERC721.json +0 -737
- package/src/airdrop/contracts/evm/contracts/abis/FeeCollector.json +0 -322
- package/src/airdrop/contracts/evm/contracts/abis/FungibleTokenECDSADistributor.json +0 -564
- package/src/airdrop/contracts/evm/contracts/abis/FungibleTokenWithFeesECDSADistributor.json +0 -260
- package/src/airdrop/contracts/evm/contracts/abis/KycHook.json +0 -312
- package/src/airdrop/contracts/index.ts +0 -4
- package/src/airdrop/contracts/solana/AirdropSignatureClient.ts +0 -242
- package/src/airdrop/contracts/solana/FeeCollectorClient.ts +0 -43
- package/src/airdrop/contracts/solana/SignatureAirdropService.ts +0 -51
- package/src/airdrop/contracts/solana/SolanaContractClient.ts +0 -126
- package/src/airdrop/contracts/solana/fee_collector.json +0 -1063
- package/src/airdrop/contracts/solana/fee_collector.ts +0 -1069
- package/src/airdrop/contracts/solana/fungible_token_distributor_solana.json +0 -1573
- package/src/airdrop/contracts/solana/fungible_token_distributor_solana.ts +0 -1579
- package/src/airdrop/contracts/ton/AirdropClientV1.ts +0 -122
- package/src/airdrop/contracts/ton/AirdropClientV2.ts +0 -118
- package/src/airdrop/contracts/ton/AirdropClientV21.ts +0 -131
- package/src/airdrop/contracts/ton/AirdropClientV3.ts +0 -127
- package/src/airdrop/contracts/ton/AirdropService.ts +0 -150
- package/src/airdrop/contracts/ton/TonContractBaseClient.ts +0 -236
- package/src/airdrop/contracts/ton/v1/build/Leaf.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v1/build/MerkleTokenDistributor.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v1/utils/constants.ts +0 -42
- package/src/airdrop/contracts/ton/v1/utils/date.utils.ts +0 -11
- package/src/airdrop/contracts/ton/v1/utils/index.ts +0 -3
- package/src/airdrop/contracts/ton/v1/utils/ton.utils.ts +0 -84
- package/src/airdrop/contracts/ton/v1/wrappers/JettonMinter.ts +0 -81
- package/src/airdrop/contracts/ton/v1/wrappers/JettonWallet.ts +0 -73
- package/src/airdrop/contracts/ton/v1/wrappers/Leaf.ts +0 -88
- package/src/airdrop/contracts/ton/v1/wrappers/MerkleTokenDistributor.ts +0 -317
- package/src/airdrop/contracts/ton/v1/wrappers/index.ts +0 -2
- package/src/airdrop/contracts/ton/v2/build/Leaf.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v2/build/MerkleTokenDistributor.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v2/utils/constants.ts +0 -43
- package/src/airdrop/contracts/ton/v2/utils/date.utils.ts +0 -11
- package/src/airdrop/contracts/ton/v2/utils/index.ts +0 -3
- package/src/airdrop/contracts/ton/v2/utils/ton.utils.ts +0 -102
- package/src/airdrop/contracts/ton/v2/wrappers/Leaf.ts +0 -69
- package/src/airdrop/contracts/ton/v2/wrappers/MerkleTokenDistributor.ts +0 -340
- package/src/airdrop/contracts/ton/v2/wrappers/index.ts +0 -2
- package/src/airdrop/contracts/ton/v21/build/Leaf.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v21/build/MerkleTokenDistributor.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v21/utils/constants.ts +0 -48
- package/src/airdrop/contracts/ton/v21/utils/date.utils.ts +0 -11
- package/src/airdrop/contracts/ton/v21/utils/index.ts +0 -3
- package/src/airdrop/contracts/ton/v21/utils/ton.utils.ts +0 -84
- package/src/airdrop/contracts/ton/v21/wrappers/Leaf.ts +0 -69
- package/src/airdrop/contracts/ton/v21/wrappers/MerkleTokenDistributor.ts +0 -346
- package/src/airdrop/contracts/ton/v21/wrappers/index.ts +0 -2
- package/src/airdrop/contracts/ton/v3/build/Leaf.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v3/build/MerkleTokenDistributor.compiled.json +0 -1
- package/src/airdrop/contracts/ton/v3/utils/constants.ts +0 -43
- package/src/airdrop/contracts/ton/v3/utils/date.utils.ts +0 -11
- package/src/airdrop/contracts/ton/v3/utils/index.ts +0 -3
- package/src/airdrop/contracts/ton/v3/utils/ton.utils.ts +0 -84
- package/src/airdrop/contracts/ton/v3/wrappers/Leaf.ts +0 -68
- package/src/airdrop/contracts/ton/v3/wrappers/MerkleTokenDistributor.ts +0 -316
- package/src/airdrop/contracts/ton/v3/wrappers/index.ts +0 -2
- package/src/airdrop/index.ts +0 -10
- package/src/airdrop/services/index.ts +0 -159
- package/src/airdrop/services/wallet-service/ton/WalletService.ts +0 -226
- package/src/airdrop/services/wallet-service/ton/index.ts +0 -1
- package/src/airdrop/strategies/AirdropStrategyFactory.ts +0 -31
- package/src/airdrop/strategies/EvmAirdropStrategy.ts +0 -81
- package/src/airdrop/strategies/IAirdropStrategy.ts +0 -26
- package/src/airdrop/strategies/StrategyCache.ts +0 -34
- package/src/airdrop/strategies/TonAirdropStrategy.ts +0 -77
- package/src/airdrop/tests/index.test.ts +0 -387
- package/src/airdrop/types/index.ts +0 -199
- package/src/index.ts +0 -3
- package/src/utils/api-client.ts +0 -69
- package/src/utils/index.ts +0 -3
- package/src/utils/utils.ts +0 -45
- package/src/utils/web3.ts +0 -172
- package/src/wallets/WalletBase.ts +0 -92
- package/src/wallets/WalletFactory.tsx +0 -35
- package/src/wallets/index.ts +0 -3
- package/src/wallets/providers/evm/EvmWallet.ts +0 -101
- package/src/wallets/providers/evm/index.tsx +0 -56
- package/src/wallets/providers/index.ts +0 -4
- package/src/wallets/providers/solana/index.tsx +0 -133
- package/src/wallets/providers/ton/TonWallet.ts +0 -153
- package/src/wallets/providers/ton/index.tsx +0 -41
- package/src/wallets/types.ts +0 -45
- package/src/wallets/utils/index.ts +0 -61
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
import { TonConnectUI as TonWalletClient } from '@tonconnect/ui-react';
|
|
2
|
-
import { AirdropService as TonAirdropService } from '../contracts/ton/AirdropService';
|
|
3
|
-
import { AirdropService as EvmAirdropService } from '../contracts/evm/AirdropService';
|
|
4
|
-
import { ChainConfig } from '../constants';
|
|
5
|
-
import { WalletClient as ViemWalletClient } from 'viem';
|
|
6
|
-
import { WalletContextState as SolanaWalletState } from '@solana/wallet-adapter-react';
|
|
7
|
-
|
|
8
|
-
export type ChainId = keyof typeof ChainConfig;
|
|
9
|
-
|
|
10
|
-
export interface EvmContractClientOption {
|
|
11
|
-
chainId: ChainId;
|
|
12
|
-
walletClient?: ViemWalletClient;
|
|
13
|
-
contractAddress: string;
|
|
14
|
-
abi?: any;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export enum ChainType {
|
|
18
|
-
Evm = 'evm',
|
|
19
|
-
Ton = 'ton',
|
|
20
|
-
Solana = 'solana'
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type ThemeConfig = {
|
|
24
|
-
logo?: string;
|
|
25
|
-
title?: string;
|
|
26
|
-
description?: string;
|
|
27
|
-
coverImage?: string;
|
|
28
|
-
subTitle?: string;
|
|
29
|
-
primaryColor?: string;
|
|
30
|
-
secondaryColor?: string;
|
|
31
|
-
buttonPrimaryHover?: string;
|
|
32
|
-
buttonSecondaryHover?: string;
|
|
33
|
-
buttonPrimaryForeground?: string;
|
|
34
|
-
buttonSecondaryForeground?: string;
|
|
35
|
-
welcomeModalText?: string;
|
|
36
|
-
welcomeModalTitle?: string;
|
|
37
|
-
isShowWelcomeModal?: boolean;
|
|
38
|
-
blockCountries?: string;
|
|
39
|
-
termsOfUse?: string;
|
|
40
|
-
successModalPrimaryBtnText?: string;
|
|
41
|
-
successModalUrl?: string;
|
|
42
|
-
successModalTitle?: string;
|
|
43
|
-
successModalDesc?: string;
|
|
44
|
-
successModalShareTexts?: string;
|
|
45
|
-
isUnAvailable?: boolean;
|
|
46
|
-
privacyPolicy?: string;
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
export interface IProject {
|
|
50
|
-
id: string;
|
|
51
|
-
name: string;
|
|
52
|
-
chainId: string;
|
|
53
|
-
chainType: ChainType;
|
|
54
|
-
tokenAddress: string;
|
|
55
|
-
tokenType: string;
|
|
56
|
-
startTime: number;
|
|
57
|
-
endTime: number;
|
|
58
|
-
contractAddress: string;
|
|
59
|
-
recipientType: string;
|
|
60
|
-
merkleRoot: string;
|
|
61
|
-
ownerAddress: string;
|
|
62
|
-
blockCountries: Record<string, string>;
|
|
63
|
-
themeConf: ThemeConfig | null;
|
|
64
|
-
version: string;
|
|
65
|
-
extra?: IProjectExtra;
|
|
66
|
-
identities: Identity[];
|
|
67
|
-
projectTag: string;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
export interface Identity {
|
|
71
|
-
identityType: string;
|
|
72
|
-
authorizeUrl?: string;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export enum AirdropSigIdentityTypeEnum {
|
|
76
|
-
Twitter = 'X Account',
|
|
77
|
-
SolanaWallet = 'Solana Wallet',
|
|
78
|
-
EVMWallet = 'EVM Wallet',
|
|
79
|
-
TONWallet = 'TON Wallet'
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export interface IProjectExtra {
|
|
83
|
-
kyc: boolean;
|
|
84
|
-
tag: string;
|
|
85
|
-
seed: number;
|
|
86
|
-
signer: string;
|
|
87
|
-
identities: string[];
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
export enum ETokenType {
|
|
91
|
-
Erc20 = 'ERC20',
|
|
92
|
-
Native = 'NATIVE_TOKEN',
|
|
93
|
-
NFT = 'ERC721'
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export type IAirdropClaim = {
|
|
97
|
-
index: number;
|
|
98
|
-
recipient: string;
|
|
99
|
-
proof: string[];
|
|
100
|
-
amount: string;
|
|
101
|
-
unlockingAt: number;
|
|
102
|
-
group: string;
|
|
103
|
-
data: string;
|
|
104
|
-
leaf: string;
|
|
105
|
-
claimed?: boolean;
|
|
106
|
-
|
|
107
|
-
claimId?: string;
|
|
108
|
-
|
|
109
|
-
// ton
|
|
110
|
-
claimable?: boolean;
|
|
111
|
-
proofHash: string;
|
|
112
|
-
ownerAddress: string;
|
|
113
|
-
proofBoc: string;
|
|
114
|
-
expiryTimestamp: number;
|
|
115
|
-
expired?: boolean;
|
|
116
|
-
project: IProject;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export type IAirdropSignatureClaim = {
|
|
120
|
-
percent: number;
|
|
121
|
-
unlockingAt: number;
|
|
122
|
-
claimDeadline: number;
|
|
123
|
-
value: string;
|
|
124
|
-
recipient: string;
|
|
125
|
-
recipientType: string;
|
|
126
|
-
claimId: string;
|
|
127
|
-
data?: string;
|
|
128
|
-
signature?: string;
|
|
129
|
-
claimed?: boolean;
|
|
130
|
-
note: string;
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
export interface IAirdropSignatureIdentity {
|
|
134
|
-
type: AirdropSigIdentityTypeEnum;
|
|
135
|
-
value: string;
|
|
136
|
-
displayName: string;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
export interface IAirdropData {
|
|
140
|
-
claims: IAirdropClaim[];
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export interface IAirdropSignatureData {
|
|
144
|
-
claims: IAirdropSignatureClaim[];
|
|
145
|
-
identities: IAirdropSignatureIdentity[];
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
export interface IClaimSignature {
|
|
149
|
-
claimId: string;
|
|
150
|
-
data: string;
|
|
151
|
-
signature: string;
|
|
152
|
-
hash: string;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
export enum TonAirdropVersionEnum {
|
|
156
|
-
V1 = '1.0.0',
|
|
157
|
-
V2 = '2.0.0',
|
|
158
|
-
LiteV1 = '11.0.0',
|
|
159
|
-
NativeV1 = '21.0.0'
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
export enum EvmAirdropVersionEnum {
|
|
163
|
-
V0 = '0.0.2', // 兼容btc减半 airdrop
|
|
164
|
-
V3 = '0.3.0', // zeta 收费
|
|
165
|
-
V4 = '0.4.0' // zeta kyc、kyc threshold
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export type IWalletClient = TonWalletClient | ViemWalletClient | SolanaWalletState;
|
|
169
|
-
|
|
170
|
-
export type { TonWalletClient, ViemWalletClient, SolanaWalletState };
|
|
171
|
-
export type IAirdropService = TonAirdropService | EvmAirdropService;
|
|
172
|
-
|
|
173
|
-
type BaseAirdropOptions = {
|
|
174
|
-
endpoint?: string;
|
|
175
|
-
project?: IProject;
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
type ProjectIdOptions = BaseAirdropOptions & {
|
|
179
|
-
projectId: string;
|
|
180
|
-
slug?: never;
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
type SlugOptions = BaseAirdropOptions & {
|
|
184
|
-
slug: string;
|
|
185
|
-
projectId?: never;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
export type IAirdropOptions = ProjectIdOptions | SlugOptions;
|
|
189
|
-
|
|
190
|
-
export interface IContractConfig {
|
|
191
|
-
version?: string | null;
|
|
192
|
-
paused: boolean | null;
|
|
193
|
-
claimFee?: string | null;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
export enum ErrorCode {
|
|
197
|
-
// 'Wallet already connected'
|
|
198
|
-
WALLET_ALREADY_CONNECTED = 'Wallet already connected'
|
|
199
|
-
}
|
package/src/index.ts
DELETED
package/src/utils/api-client.ts
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
export type ApiClientOptions = {
|
|
2
|
-
baseURL?: string;
|
|
3
|
-
};
|
|
4
|
-
|
|
5
|
-
export type ApiRequestOptions = {
|
|
6
|
-
params?: Record<string, string | number>;
|
|
7
|
-
skipHandleError?: boolean;
|
|
8
|
-
headers?: Record<string, string>;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
type ApiResponse = {
|
|
12
|
-
message: string;
|
|
13
|
-
statusCode: number;
|
|
14
|
-
data: unknown;
|
|
15
|
-
success: boolean;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export class ApiClient {
|
|
19
|
-
constructor(private options?: ApiClientOptions) {}
|
|
20
|
-
|
|
21
|
-
extend(options: ApiClientOptions): ApiClient {
|
|
22
|
-
return new ApiClient({
|
|
23
|
-
...this.options,
|
|
24
|
-
...options
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async get<TRes>(url: string, options?: ApiRequestOptions): Promise<TRes> {
|
|
29
|
-
return this.request('GET', url, null, options) as TRes;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async post<TRes, TReq = unknown>(url: string, data?: TReq, options?: ApiRequestOptions): Promise<TRes> {
|
|
33
|
-
return this.request('POST', url, data, options) as TRes;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
async put<TRes, TReq = unknown>(url: string, data?: TReq, options?: ApiRequestOptions): Promise<TRes> {
|
|
37
|
-
return this.request('PUT', url, data, options) as TRes;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
async delete<TRes>(url: string, options?: ApiRequestOptions): Promise<TRes> {
|
|
41
|
-
return this.request('DELETE', url, null, options) as TRes;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
private async request(
|
|
45
|
-
method: 'GET' | 'POST' | 'PUT' | 'DELETE',
|
|
46
|
-
url: string,
|
|
47
|
-
data: unknown,
|
|
48
|
-
options?: ApiRequestOptions
|
|
49
|
-
): Promise<unknown> {
|
|
50
|
-
const finalUrl = (this.options?.baseURL || '') + url;
|
|
51
|
-
|
|
52
|
-
const init: RequestInit = { method, headers: options?.headers || {} };
|
|
53
|
-
if (data instanceof FormData) {
|
|
54
|
-
init.body = data;
|
|
55
|
-
} else {
|
|
56
|
-
init.headers = { 'content-type': 'application/json', ...init.headers };
|
|
57
|
-
init.body = data ? JSON.stringify(data) : void 0;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
const res = await fetch(finalUrl, init);
|
|
61
|
-
const [status, resData]: [number, ApiResponse] = await Promise.all([res.status, res.json() as any]);
|
|
62
|
-
if ((status < 200 && status >= 300) || resData?.success !== true) {
|
|
63
|
-
return Promise.reject(resData);
|
|
64
|
-
}
|
|
65
|
-
return resData.data;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export const apiClient = new ApiClient({ baseURL: 'https://claim.tokentable.xyz/api' });
|
package/src/utils/index.ts
DELETED
package/src/utils/utils.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import dayjs from 'dayjs';
|
|
2
|
-
|
|
3
|
-
export const safeParseJSON = (str: string): any => {
|
|
4
|
-
try {
|
|
5
|
-
return JSON.parse(str);
|
|
6
|
-
} catch (error) {
|
|
7
|
-
return {};
|
|
8
|
-
}
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const isBeforeByUnix = (unix: number) => {
|
|
12
|
-
return dayjs(new Date()).isBefore(dayjs.unix(unix), 'millisecond');
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export const delay = (ms: number): Promise<unknown> => new Promise((res) => setTimeout(res, ms));
|
|
16
|
-
|
|
17
|
-
export async function retry<T>(fn: () => Promise<T>, options: { retries: number; delay: number }): Promise<T> {
|
|
18
|
-
let lastError: Error | undefined;
|
|
19
|
-
for (let i = 0; i < options.retries; i++) {
|
|
20
|
-
try {
|
|
21
|
-
return await fn();
|
|
22
|
-
} catch (e) {
|
|
23
|
-
if (e instanceof Error) {
|
|
24
|
-
lastError = e;
|
|
25
|
-
}
|
|
26
|
-
await new Promise((resolve) => setTimeout(resolve, options.delay));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
throw lastError;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const isMobile = () => {
|
|
33
|
-
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
export const cleanUrlParams = (paramsToRemove: string[]) => {
|
|
37
|
-
if (typeof window !== 'undefined') {
|
|
38
|
-
const url = new URL(window.location.href);
|
|
39
|
-
paramsToRemove.forEach((param) => {
|
|
40
|
-
url.searchParams.delete(param);
|
|
41
|
-
});
|
|
42
|
-
|
|
43
|
-
window.history.replaceState({}, document.title, url.toString());
|
|
44
|
-
}
|
|
45
|
-
};
|
package/src/utils/web3.ts
DELETED
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import TonWeb from 'tonweb';
|
|
2
|
-
import {
|
|
3
|
-
ASSOCIATED_TOKEN_PROGRAM_ID,
|
|
4
|
-
getAssociatedTokenAddress,
|
|
5
|
-
getAccount,
|
|
6
|
-
createAssociatedTokenAccountInstruction,
|
|
7
|
-
TokenAccountNotFoundError,
|
|
8
|
-
TokenInvalidAccountOwnerError,
|
|
9
|
-
TokenInvalidMintError,
|
|
10
|
-
TokenInvalidOwnerError,
|
|
11
|
-
TOKEN_PROGRAM_ID,
|
|
12
|
-
TOKEN_2022_PROGRAM_ID
|
|
13
|
-
} from '@solana/spl-token';
|
|
14
|
-
import {
|
|
15
|
-
Cluster,
|
|
16
|
-
clusterApiUrl,
|
|
17
|
-
Commitment,
|
|
18
|
-
Connection,
|
|
19
|
-
ParsedAccountData,
|
|
20
|
-
PublicKey,
|
|
21
|
-
Transaction
|
|
22
|
-
} from '@solana/web3.js';
|
|
23
|
-
|
|
24
|
-
export function flipAddressType(address: string) {
|
|
25
|
-
if (!address) return '';
|
|
26
|
-
return address.includes(':')
|
|
27
|
-
? new TonWeb.utils.Address(address).toString(true, true, true)
|
|
28
|
-
: new TonWeb.utils.Address(address).toString(false, false, true);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export function hexStrToU8Array(hexStr: string): number[] {
|
|
32
|
-
// 移除 "0x" 前缀(如果存在)
|
|
33
|
-
hexStr = hexStr.startsWith('0x') ? hexStr.slice(2) : hexStr;
|
|
34
|
-
|
|
35
|
-
// 确保 hexStr 长度正确(64 个字符,即 32 字节)
|
|
36
|
-
// if (hexStr.length !== 64) {
|
|
37
|
-
// throw new Error('Invalid hex string length. Expected 64 characters (32 bytes).');
|
|
38
|
-
// }
|
|
39
|
-
|
|
40
|
-
// 将 16 进制字符串转换为 Uint8Array
|
|
41
|
-
const bytes = [];
|
|
42
|
-
for (let i = 0; i < hexStr.length / 2; i++) {
|
|
43
|
-
bytes[i] = parseInt(hexStr.substring(i * 2, i * 2 + 2), 16);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
return bytes;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export async function getOrCreateAssociatedTokenAccount({
|
|
50
|
-
connection,
|
|
51
|
-
payer,
|
|
52
|
-
mint,
|
|
53
|
-
owner,
|
|
54
|
-
signTransaction,
|
|
55
|
-
allowOwnerOffCurve = false,
|
|
56
|
-
commitment,
|
|
57
|
-
programId = TOKEN_PROGRAM_ID,
|
|
58
|
-
associatedTokenProgramId = ASSOCIATED_TOKEN_PROGRAM_ID
|
|
59
|
-
}: {
|
|
60
|
-
connection: Connection;
|
|
61
|
-
payer: PublicKey;
|
|
62
|
-
mint: PublicKey;
|
|
63
|
-
owner: PublicKey;
|
|
64
|
-
allowOwnerOffCurve?: boolean;
|
|
65
|
-
commitment?: Commitment;
|
|
66
|
-
programId?: PublicKey;
|
|
67
|
-
associatedTokenProgramId?: PublicKey;
|
|
68
|
-
signTransaction: (signature: Transaction) => Promise<Transaction>;
|
|
69
|
-
}) {
|
|
70
|
-
const associatedToken = await getAssociatedTokenAddress(
|
|
71
|
-
mint,
|
|
72
|
-
owner,
|
|
73
|
-
allowOwnerOffCurve,
|
|
74
|
-
programId,
|
|
75
|
-
associatedTokenProgramId
|
|
76
|
-
);
|
|
77
|
-
// This is the optimal logic, considering TX fee, client-side computation, RPC roundtrips and guaranteed idempotent.
|
|
78
|
-
// Sadly we can't do this atomically.
|
|
79
|
-
let account;
|
|
80
|
-
try {
|
|
81
|
-
account = await getAccount(connection, associatedToken, commitment, programId);
|
|
82
|
-
} catch (error) {
|
|
83
|
-
// TokenAccountNotFoundError can be possible if the associated address has already received some lamports,
|
|
84
|
-
// becoming a system account. Assuming program derived addressing is safe, this is the only case for the
|
|
85
|
-
// TokenInvalidAccountOwnerError in this code path.
|
|
86
|
-
if (error instanceof TokenAccountNotFoundError || error instanceof TokenInvalidAccountOwnerError) {
|
|
87
|
-
// As this isn't atomic, it's possible others can create associated accounts meanwhile.
|
|
88
|
-
try {
|
|
89
|
-
const transaction = new Transaction().add(
|
|
90
|
-
createAssociatedTokenAccountInstruction(
|
|
91
|
-
payer,
|
|
92
|
-
associatedToken,
|
|
93
|
-
owner,
|
|
94
|
-
mint,
|
|
95
|
-
programId,
|
|
96
|
-
associatedTokenProgramId
|
|
97
|
-
)
|
|
98
|
-
);
|
|
99
|
-
const blockHash = await connection.getRecentBlockhash();
|
|
100
|
-
transaction.feePayer = await payer;
|
|
101
|
-
transaction.recentBlockhash = await blockHash.blockhash;
|
|
102
|
-
const signed = await signTransaction(transaction);
|
|
103
|
-
|
|
104
|
-
const signature = await connection.sendRawTransaction(signed.serialize());
|
|
105
|
-
|
|
106
|
-
await connection.confirmTransaction(signature);
|
|
107
|
-
} catch (error) {
|
|
108
|
-
console.log(error);
|
|
109
|
-
// Ignore all errors; for now there is no API-compatible way to selectively ignore the expected
|
|
110
|
-
// instruction error if the associated account exists already.
|
|
111
|
-
}
|
|
112
|
-
// Now this should always succeed
|
|
113
|
-
account = await getAccount(connection, associatedToken, commitment, programId);
|
|
114
|
-
} else {
|
|
115
|
-
throw error;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (!account.mint.equals(mint)) throw new TokenInvalidMintError();
|
|
119
|
-
if (!account.owner.equals(owner)) throw new TokenInvalidOwnerError();
|
|
120
|
-
return account;
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
export enum SplTokenVersion {
|
|
124
|
-
SplToken = 'spl-token',
|
|
125
|
-
SplToken2022 = 'spl-token-2022'
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export type FetchTokenVersionOptions = {
|
|
129
|
-
clusterOrEndpoint?: Cluster | string;
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
export type FetchTokenMetadataOptions = FetchTokenVersionOptions & {
|
|
133
|
-
fetchOffchainMetadata?: boolean;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
async function _getTokenProgramAndParsedAccountData(conn: Connection, tokenAddress: string) {
|
|
137
|
-
const tokenMintAddress = new PublicKey(tokenAddress);
|
|
138
|
-
const parsedMintAccountInfo = await conn.getParsedAccountInfo(tokenMintAddress);
|
|
139
|
-
const parsedMintAccountData = parsedMintAccountInfo.value?.data as ParsedAccountData;
|
|
140
|
-
if (parsedMintAccountData?.program === SplTokenVersion.SplToken) {
|
|
141
|
-
return {
|
|
142
|
-
name: SplTokenVersion.SplToken,
|
|
143
|
-
programId: TOKEN_PROGRAM_ID,
|
|
144
|
-
parsedMintAccountData
|
|
145
|
-
};
|
|
146
|
-
} else if (parsedMintAccountData?.program === SplTokenVersion.SplToken2022) {
|
|
147
|
-
return {
|
|
148
|
-
name: SplTokenVersion.SplToken2022,
|
|
149
|
-
programId: TOKEN_2022_PROGRAM_ID,
|
|
150
|
-
parsedMintAccountData
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
return null;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
function _getConnection(clusterOrEndpoint: Cluster | string) {
|
|
157
|
-
let endpoint: string;
|
|
158
|
-
try {
|
|
159
|
-
endpoint = clusterApiUrl((clusterOrEndpoint as Cluster) ?? 'mainnet-beta');
|
|
160
|
-
} catch {
|
|
161
|
-
endpoint = clusterOrEndpoint as string;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const conn = new Connection(endpoint);
|
|
165
|
-
return conn;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export async function fetchTokenVersion(tokenAddress: string, options: FetchTokenMetadataOptions) {
|
|
169
|
-
const conn = _getConnection(options.clusterOrEndpoint!);
|
|
170
|
-
const data = await _getTokenProgramAndParsedAccountData(conn, tokenAddress);
|
|
171
|
-
return data ? { name: data.name, programId: data.programId } : null;
|
|
172
|
-
}
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import { ISignResult } from './types';
|
|
2
|
-
import { prepareSignMessage } from './utils';
|
|
3
|
-
|
|
4
|
-
export abstract class WalletBase<S> {
|
|
5
|
-
type: string;
|
|
6
|
-
provider: any;
|
|
7
|
-
address?: string;
|
|
8
|
-
publicKey?: string;
|
|
9
|
-
chainId?: number | string;
|
|
10
|
-
protocolTag?: string;
|
|
11
|
-
authType: string;
|
|
12
|
-
userAddress?: string;
|
|
13
|
-
network?: string;
|
|
14
|
-
|
|
15
|
-
constructor(type: string, userAddress?: string) {
|
|
16
|
-
this.type = type;
|
|
17
|
-
this.provider = null;
|
|
18
|
-
this.address = '';
|
|
19
|
-
this.chainId = 1;
|
|
20
|
-
this.authType = '';
|
|
21
|
-
this.userAddress = userAddress || '';
|
|
22
|
-
// this.init();
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// abstract init(): void;
|
|
26
|
-
|
|
27
|
-
// abstract init(): void;
|
|
28
|
-
protected get isConnected(): boolean {
|
|
29
|
-
throw new Error('Not implemented');
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
abstract connect(_?: string): void;
|
|
33
|
-
|
|
34
|
-
// common sign
|
|
35
|
-
abstract sign(_: string, _1?: string): Promise<ISignResult>;
|
|
36
|
-
|
|
37
|
-
// checkAddressValidity(): boolean {
|
|
38
|
-
// console.log(this.userAddress, this.address);
|
|
39
|
-
// if (!this.address) {
|
|
40
|
-
// // 兼容ton的情况,ton只有sign之后才有地址
|
|
41
|
-
// return true;
|
|
42
|
-
// }
|
|
43
|
-
// if (this.userAddress && this.address !== this.userAddress) {
|
|
44
|
-
// console.error('Wallet address and user address do not match.');
|
|
45
|
-
// globalVm.toggleAccountChangedModal(true);
|
|
46
|
-
// return false;
|
|
47
|
-
// }
|
|
48
|
-
// return true;
|
|
49
|
-
// }
|
|
50
|
-
|
|
51
|
-
async safeSign(_: string, _1?: string): Promise<ISignResult> {
|
|
52
|
-
// if (!this.checkAddressValidity()) {
|
|
53
|
-
// throw new Error('Wallet address and user address do not match.');
|
|
54
|
-
// }
|
|
55
|
-
return this.sign(_, _1);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async signin(statement?: string): Promise<ISignResult> {
|
|
59
|
-
const msgRes = prepareSignMessage({ statement, chainId: this.chainId!, address: this.address! });
|
|
60
|
-
return this.sign(JSON.stringify(msgRes, null, ' '));
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// for metamask sign of EIP-712
|
|
64
|
-
signByEIP712(_: string): Promise<ISignResult> {
|
|
65
|
-
throw new Error(`received message:${_},Method not implemented.`);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
getSignEIP712Message(_: { chainId: number | string; info: string; hash: string }): string {
|
|
69
|
-
throw new Error(`received message:${JSON.stringify(_)},Method not implemented.`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
getWallet(): {
|
|
73
|
-
address?: string;
|
|
74
|
-
isConnected: boolean;
|
|
75
|
-
publicKey: string | undefined;
|
|
76
|
-
type: string;
|
|
77
|
-
network: string | undefined;
|
|
78
|
-
} {
|
|
79
|
-
// 获取钱包信息
|
|
80
|
-
return {
|
|
81
|
-
type: this.type,
|
|
82
|
-
isConnected: this.isConnected,
|
|
83
|
-
address: this.address,
|
|
84
|
-
publicKey: this.publicKey,
|
|
85
|
-
network: this.network
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
abstract getStore(): S;
|
|
90
|
-
|
|
91
|
-
// abstract decrypt(message: string, address: string): Promise<string>;
|
|
92
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { EvmWallet } from './providers/evm';
|
|
2
|
-
import { ChainType } from './types';
|
|
3
|
-
import { TonWallet } from './providers/ton';
|
|
4
|
-
import { SolWallet } from './providers/solana';
|
|
5
|
-
|
|
6
|
-
export abstract class WalletFactory {
|
|
7
|
-
private static instances: Record<string, EvmWallet | TonWallet | SolWallet> = {};
|
|
8
|
-
static getWallet(type: ChainType, userAddress?: string): EvmWallet | TonWallet | SolWallet {
|
|
9
|
-
if (!this.instances[type]) {
|
|
10
|
-
let WalletClass;
|
|
11
|
-
switch (type) {
|
|
12
|
-
case ChainType.Evm:
|
|
13
|
-
WalletClass = EvmWallet;
|
|
14
|
-
break;
|
|
15
|
-
case ChainType.Ton:
|
|
16
|
-
WalletClass = TonWallet;
|
|
17
|
-
break;
|
|
18
|
-
// case ChainType.Starknet:
|
|
19
|
-
// WalletClass = StarknetWallet;
|
|
20
|
-
// break;
|
|
21
|
-
case ChainType.Solana:
|
|
22
|
-
WalletClass = SolWallet;
|
|
23
|
-
break;
|
|
24
|
-
default:
|
|
25
|
-
throw new Error('Unsupported wallet type');
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
if (!WalletClass) {
|
|
29
|
-
throw new Error('Unsupported wallet type');
|
|
30
|
-
}
|
|
31
|
-
this.instances[type] = new WalletClass(type, userAddress);
|
|
32
|
-
}
|
|
33
|
-
return this.instances[type];
|
|
34
|
-
}
|
|
35
|
-
}
|
package/src/wallets/index.ts
DELETED