@sign-global/tokentable 0.4.3-beta.0 → 0.4.3-beta.2
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.d.ts +3 -2
- package/dist/cjs/airdrop/contracts/solana/AirdropSignatureClient.js +12 -11
- 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/SignatureAirdropService.d.ts +1 -0
- package/dist/cjs/airdrop/contracts/solana/SignatureAirdropService.js.map +1 -1
- 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/eddsa_token_with_fees_distributor_solana.d.ts +1668 -0
- package/dist/cjs/airdrop/contracts/solana/eddsa_token_with_fees_distributor_solana.js +3 -0
- package/dist/cjs/airdrop/contracts/solana/eddsa_token_with_fees_distributor_solana.js.map +1 -0
- package/dist/cjs/airdrop/contracts/solana/{fungible_token_distributor_solana.json → eddsa_token_with_fees_distributor_solana.json} +127 -38
- package/dist/cjs/airdrop/contracts/solana/fee_collector.d.ts +198 -1
- package/dist/cjs/airdrop/contracts/solana/fee_collector.json +200 -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 +8 -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.d.ts +3 -2
- package/dist/esm/airdrop/contracts/solana/AirdropSignatureClient.js +11 -10
- 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/SignatureAirdropService.d.ts +1 -0
- package/dist/esm/airdrop/contracts/solana/SignatureAirdropService.js.map +1 -1
- 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/eddsa_token_with_fees_distributor_solana.d.ts +1668 -0
- package/dist/esm/airdrop/contracts/solana/eddsa_token_with_fees_distributor_solana.js +2 -0
- package/dist/esm/airdrop/contracts/solana/eddsa_token_with_fees_distributor_solana.js.map +1 -0
- package/dist/esm/airdrop/contracts/solana/{fungible_token_distributor_solana.json → eddsa_token_with_fees_distributor_solana.json} +127 -38
- package/dist/esm/airdrop/contracts/solana/fee_collector.d.ts +198 -1
- package/dist/esm/airdrop/contracts/solana/fee_collector.json +200 -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 +8 -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,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,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
|
-
};
|
package/src/wallets/types.ts
DELETED
|
@@ -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
|
-
};
|