@sign-global/tokentable 0.0.2 → 0.0.3
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/README.md +12 -34
- package/dist/cjs/airdrop/common/index.d.ts +1 -1
- package/dist/cjs/airdrop/common/index.js +4 -0
- package/dist/cjs/airdrop/common/index.js.map +1 -1
- package/dist/cjs/airdrop/core/evm/AirdropService.js +0 -1
- package/dist/cjs/airdrop/core/evm/AirdropService.js.map +1 -1
- package/dist/cjs/airdrop/index.d.ts +9 -6
- package/dist/cjs/airdrop/index.js +85 -37
- package/dist/cjs/airdrop/index.js.map +1 -1
- package/dist/cjs/airdrop/types/index.d.ts +31 -1
- package/dist/cjs/airdrop/types/index.js +7 -1
- package/dist/cjs/airdrop/types/index.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/airdrop/common/index.d.ts +1 -1
- package/dist/esm/airdrop/common/index.js +4 -0
- package/dist/esm/airdrop/common/index.js.map +1 -1
- package/dist/esm/airdrop/core/evm/AirdropService.js +0 -1
- package/dist/esm/airdrop/core/evm/AirdropService.js.map +1 -1
- package/dist/esm/airdrop/index.d.ts +9 -6
- package/dist/esm/airdrop/index.js +86 -38
- package/dist/esm/airdrop/index.js.map +1 -1
- package/dist/esm/airdrop/types/index.d.ts +31 -1
- package/dist/esm/airdrop/types/index.js +6 -0
- package/dist/esm/airdrop/types/index.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/jest.config.cjs +5 -0
- package/package.json +6 -2
- package/src/airdrop/common/index.ts +6 -1
- package/src/airdrop/core/evm/AirdropService.ts +0 -1
- package/src/airdrop/index.ts +111 -43
- package/src/airdrop/tests/index.test.ts +95 -0
- package/src/airdrop/types/index.ts +33 -1
- package/src/index.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AirdropService as TonAirdropService } from './core/ton/AirdropService';
|
|
2
2
|
import { AirdropService as EvmAirdropService } from './core/evm/AirdropService';
|
|
3
3
|
import { getAirdropPro, getAirdropProject, getAirdropQuery } from './services';
|
|
4
|
-
import { ChainType } from './types';
|
|
4
|
+
import { ChainType, ETokenType, EvmAirdropVersionEnum } from './types';
|
|
5
5
|
import { getTonProjectIdByAddress } from './common';
|
|
6
6
|
export class AirdropClient {
|
|
7
7
|
tonClient;
|
|
@@ -10,8 +10,11 @@ export class AirdropClient {
|
|
|
10
10
|
endpoint;
|
|
11
11
|
project;
|
|
12
12
|
claims;
|
|
13
|
-
|
|
13
|
+
contractInstanceWithWallet;
|
|
14
|
+
contractInstanceWithoutWallet;
|
|
14
15
|
projectPromise;
|
|
16
|
+
claimHook;
|
|
17
|
+
cachedVersion = null;
|
|
15
18
|
constructor(params) {
|
|
16
19
|
if ('slug' in params) {
|
|
17
20
|
this.slug = params.slug;
|
|
@@ -25,14 +28,9 @@ export class AirdropClient {
|
|
|
25
28
|
let projectId = this.projectId;
|
|
26
29
|
if (this.slug) {
|
|
27
30
|
const res = await getAirdropPro(this.slug, this.endpoint);
|
|
28
|
-
const projectMap = res?.childProjectMapping;
|
|
31
|
+
const projectMap = res?.childProjectMapping || {};
|
|
29
32
|
let legacyProjectId;
|
|
30
|
-
|
|
31
|
-
legacyProjectId = Object.values(projectMap)[0];
|
|
32
|
-
}
|
|
33
|
-
else {
|
|
34
|
-
legacyProjectId = getTonProjectIdByAddress({ address, slug: this.slug, data: projectMap });
|
|
35
|
-
}
|
|
33
|
+
legacyProjectId = getTonProjectIdByAddress({ address, slug: this.slug, data: projectMap });
|
|
36
34
|
if (legacyProjectId) {
|
|
37
35
|
projectId = legacyProjectId;
|
|
38
36
|
}
|
|
@@ -42,7 +40,6 @@ export class AirdropClient {
|
|
|
42
40
|
this.project = await getAirdropProject(projectId, this.endpoint);
|
|
43
41
|
}
|
|
44
42
|
async getProjectInfo() {
|
|
45
|
-
console.log(this.projectPromise);
|
|
46
43
|
await this.projectPromise;
|
|
47
44
|
if (!this.project)
|
|
48
45
|
throw new Error('Project not found');
|
|
@@ -64,23 +61,41 @@ export class AirdropClient {
|
|
|
64
61
|
return this.claims;
|
|
65
62
|
}
|
|
66
63
|
async getAirdropContractWrapper(options) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
64
|
+
const project = await this.getProjectInfo();
|
|
65
|
+
if (options?.walletClient) {
|
|
66
|
+
if (!this.contractInstanceWithWallet) {
|
|
67
|
+
const instance = project.chainType === ChainType.Evm
|
|
68
|
+
? new EvmAirdropService({
|
|
69
|
+
contractAddress: project.contractAddress,
|
|
70
|
+
chainId: Number(project.chainId),
|
|
71
|
+
walletClient: options.walletClient
|
|
72
|
+
})
|
|
73
|
+
: new TonAirdropService({
|
|
74
|
+
chainId: project.chainId.toString(),
|
|
75
|
+
address: project.contractAddress,
|
|
76
|
+
walletClient: options.walletClient,
|
|
77
|
+
tonClient: this.tonClient
|
|
78
|
+
});
|
|
79
|
+
this.contractInstanceWithWallet = instance;
|
|
80
|
+
}
|
|
81
|
+
return this.contractInstanceWithWallet;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
if (!this.contractInstanceWithoutWallet) {
|
|
85
|
+
const instance = project.chainType === ChainType.Evm
|
|
86
|
+
? new EvmAirdropService({
|
|
87
|
+
contractAddress: project.contractAddress,
|
|
88
|
+
chainId: Number(project.chainId)
|
|
89
|
+
})
|
|
90
|
+
: new TonAirdropService({
|
|
91
|
+
chainId: project.chainId.toString(),
|
|
92
|
+
address: project.contractAddress,
|
|
93
|
+
tonClient: this.tonClient
|
|
94
|
+
});
|
|
95
|
+
this.contractInstanceWithoutWallet = instance;
|
|
96
|
+
}
|
|
97
|
+
return this.contractInstanceWithoutWallet;
|
|
82
98
|
}
|
|
83
|
-
return this.contractInstance;
|
|
84
99
|
}
|
|
85
100
|
getClaimDataById(claimId) {
|
|
86
101
|
const claimData = this.claims?.find((it) => it.claimId === claimId);
|
|
@@ -88,19 +103,41 @@ export class AirdropClient {
|
|
|
88
103
|
throw new Error('Claim data not found');
|
|
89
104
|
return claimData;
|
|
90
105
|
}
|
|
106
|
+
setClaimFeeHook(fn) {
|
|
107
|
+
this.claimHook = fn;
|
|
108
|
+
}
|
|
91
109
|
async claimAirdrop({ claimId, walletClient }, options) {
|
|
92
110
|
const claimData = this.getClaimDataById(claimId);
|
|
111
|
+
const project = await this.getProjectInfo();
|
|
93
112
|
const contractWrapper = await this.getAirdropContractWrapper({
|
|
94
113
|
walletClient
|
|
95
114
|
});
|
|
115
|
+
if (project.chainType === ChainType.Evm) {
|
|
116
|
+
const version = await contractWrapper.getVersion();
|
|
117
|
+
const needsFeeData = !(project.tokenType === ETokenType.Native &&
|
|
118
|
+
[EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version));
|
|
119
|
+
const value = needsFeeData ? await this.getClaimFee(BigInt(claimData.amount)) : undefined;
|
|
120
|
+
let extraData = {
|
|
121
|
+
isLegacy: true,
|
|
122
|
+
attestationId: BigInt(1)
|
|
123
|
+
};
|
|
124
|
+
if (this.claimHook) {
|
|
125
|
+
extraData = this.claimHook(claimData);
|
|
126
|
+
}
|
|
127
|
+
return contractWrapper.claim({
|
|
128
|
+
proof: claimData.proof,
|
|
129
|
+
group: claimData.group,
|
|
130
|
+
data: claimData.data,
|
|
131
|
+
value: value,
|
|
132
|
+
extraData: extraData
|
|
133
|
+
});
|
|
134
|
+
}
|
|
96
135
|
return contractWrapper.claim(claimData, options);
|
|
97
136
|
}
|
|
98
137
|
async checkClaimed(claimId) {
|
|
99
138
|
const claimData = this.getClaimDataById(claimId);
|
|
100
139
|
const project = await this.getProjectInfo();
|
|
101
|
-
const contractWrapper = await this.getAirdropContractWrapper(
|
|
102
|
-
tonClient: this.tonClient
|
|
103
|
-
});
|
|
140
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
104
141
|
if (project.chainType === ChainType.Evm) {
|
|
105
142
|
return contractWrapper.isLeafUsed(claimData.leaf);
|
|
106
143
|
}
|
|
@@ -108,32 +145,43 @@ export class AirdropClient {
|
|
|
108
145
|
}
|
|
109
146
|
async getPaused() {
|
|
110
147
|
const project = await this.getProjectInfo();
|
|
111
|
-
const contractWrapper = await this.getAirdropContractWrapper(
|
|
112
|
-
tonClient: this.tonClient
|
|
113
|
-
});
|
|
148
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
114
149
|
if (project.chainType === ChainType.Evm) {
|
|
115
150
|
throw new Error('EVM chain is not supported');
|
|
116
151
|
}
|
|
117
152
|
return contractWrapper.getPaused();
|
|
118
153
|
}
|
|
119
154
|
async getVersion() {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
123
|
-
|
|
155
|
+
if (this.cachedVersion) {
|
|
156
|
+
return this.cachedVersion;
|
|
157
|
+
}
|
|
158
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
159
|
+
this.cachedVersion = await contractWrapper?.getVersion();
|
|
160
|
+
return this.cachedVersion;
|
|
124
161
|
}
|
|
125
|
-
async
|
|
162
|
+
async batchCheckClaimed() {
|
|
126
163
|
const project = await this.getProjectInfo();
|
|
127
164
|
if (project.chainType === ChainType.Ton) {
|
|
128
165
|
throw new Error('TON chain is not supported');
|
|
129
166
|
}
|
|
130
167
|
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
168
|
+
const leafs = this.claims?.map((it) => it.leaf);
|
|
169
|
+
if (!leafs)
|
|
170
|
+
return [];
|
|
131
171
|
return contractWrapper.batchFetchClaimed(leafs);
|
|
132
172
|
}
|
|
173
|
+
async getNFT() {
|
|
174
|
+
const project = await this.getProjectInfo();
|
|
175
|
+
if (project.chainType === ChainType.Ton) {
|
|
176
|
+
throw new Error('TON chain is not supported');
|
|
177
|
+
}
|
|
178
|
+
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
179
|
+
return contractWrapper.getNFT();
|
|
180
|
+
}
|
|
133
181
|
async getClaimFee(amount) {
|
|
134
182
|
const project = await this.getProjectInfo();
|
|
135
183
|
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
136
|
-
return contractWrapper.getClaimFee(project.contractAddress, amount);
|
|
184
|
+
return contractWrapper.getClaimFee(project.contractAddress, amount || BigInt(1));
|
|
137
185
|
}
|
|
138
186
|
}
|
|
139
187
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/airdrop/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,cAAc,IAAI,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/airdrop/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,31 @@ export declare enum ChainType {
|
|
|
15
15
|
Evm = "evm",
|
|
16
16
|
Ton = "ton"
|
|
17
17
|
}
|
|
18
|
+
export type ThemeConfig = {
|
|
19
|
+
logo: string;
|
|
20
|
+
title: string;
|
|
21
|
+
description: string;
|
|
22
|
+
coverImage: string;
|
|
23
|
+
subTitle: string;
|
|
24
|
+
primaryColor: string;
|
|
25
|
+
secondaryColor: string;
|
|
26
|
+
buttonPrimaryHover: string;
|
|
27
|
+
buttonSecondaryHover: string;
|
|
28
|
+
buttonPrimaryForeground: string;
|
|
29
|
+
buttonSecondaryForeground: string;
|
|
30
|
+
welcomeModalText: string;
|
|
31
|
+
welcomeModalTitle: string;
|
|
32
|
+
isShowWelcomeModal: boolean;
|
|
33
|
+
blockCountries: string;
|
|
34
|
+
termsOfUse: string;
|
|
35
|
+
successModalPrimaryBtnText: string;
|
|
36
|
+
successModalUrl: string;
|
|
37
|
+
successModalTitle: string;
|
|
38
|
+
successModalDesc: string;
|
|
39
|
+
successModalShareTexts: string;
|
|
40
|
+
isUnAvailable: boolean;
|
|
41
|
+
privacyPolicy: string;
|
|
42
|
+
};
|
|
18
43
|
export interface IProject {
|
|
19
44
|
id: string;
|
|
20
45
|
name: string;
|
|
@@ -29,13 +54,18 @@ export interface IProject {
|
|
|
29
54
|
merkleRoot: string;
|
|
30
55
|
ownerAddress: string;
|
|
31
56
|
blockCountries: Record<string, string>;
|
|
32
|
-
themeConf:
|
|
57
|
+
themeConf: ThemeConfig | null;
|
|
33
58
|
version: string;
|
|
34
59
|
extra?: {
|
|
35
60
|
kyc: boolean;
|
|
36
61
|
tag: string;
|
|
37
62
|
};
|
|
38
63
|
}
|
|
64
|
+
export declare enum ETokenType {
|
|
65
|
+
Erc20 = "ERC20",
|
|
66
|
+
Native = "NATIVE_TOKEN",
|
|
67
|
+
NFT = "ERC721"
|
|
68
|
+
}
|
|
39
69
|
export type IAirdropClaim = {
|
|
40
70
|
index: number;
|
|
41
71
|
recipient: string;
|
|
@@ -3,6 +3,12 @@ export var ChainType;
|
|
|
3
3
|
ChainType["Evm"] = "evm";
|
|
4
4
|
ChainType["Ton"] = "ton";
|
|
5
5
|
})(ChainType || (ChainType = {}));
|
|
6
|
+
export var ETokenType;
|
|
7
|
+
(function (ETokenType) {
|
|
8
|
+
ETokenType["Erc20"] = "ERC20";
|
|
9
|
+
ETokenType["Native"] = "NATIVE_TOKEN";
|
|
10
|
+
ETokenType["NFT"] = "ERC721";
|
|
11
|
+
})(ETokenType || (ETokenType = {}));
|
|
6
12
|
export var TonAirdropVersionEnum;
|
|
7
13
|
(function (TonAirdropVersionEnum) {
|
|
8
14
|
TonAirdropVersionEnum["V1"] = "1.0.0";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/airdrop/types/index.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/airdrop/types/index.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACnB,wBAAW,CAAA;IACX,wBAAW,CAAA;AACb,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AAkDD,MAAM,CAAN,IAAY,UAIX;AAJD,WAAY,UAAU;IACpB,6BAAe,CAAA;IACf,qCAAuB,CAAA;IACvB,4BAAc,CAAA;AAChB,CAAC,EAJW,UAAU,KAAV,UAAU,QAIrB;AA6BD,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,qCAAY,CAAA;IACZ,qCAAY,CAAA;IACZ,0CAAiB,CAAA;AACnB,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC;AAED,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,qCAAY,CAAA;IACZ,qCAAY,CAAA;IACZ,qCAAY,CAAA,CAAC,yBAAyB;AACxC,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC"}
|
package/dist/esm/index.d.ts
CHANGED
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,cAAc,iBAAiB,CAAC"}
|
package/jest.config.cjs
ADDED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sign-global/tokentable",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"scripts": {
|
|
12
12
|
"build-cjs": "tsc -m commonjs --outDir dist/cjs",
|
|
13
13
|
"build-esm": "tsc -m esnext --outDir dist/esm",
|
|
14
|
-
"build": "pnpm run build-cjs && pnpm run build-esm"
|
|
14
|
+
"build": "pnpm run build-cjs && pnpm run build-esm",
|
|
15
|
+
"test": "jest"
|
|
15
16
|
},
|
|
16
17
|
"author": "Evan",
|
|
17
18
|
"license": "ISC",
|
|
@@ -20,10 +21,13 @@
|
|
|
20
21
|
"@ton/core": "^0.59.0",
|
|
21
22
|
"@ton/ton": "^15.1.0",
|
|
22
23
|
"@tonconnect/ui-react": "^2.0.9",
|
|
24
|
+
"@types/jest": "^29.5.14",
|
|
23
25
|
"bignumber.js": "^9.1.2",
|
|
24
26
|
"dayjs": "^1.11.13",
|
|
27
|
+
"jest": "^29.7.0",
|
|
25
28
|
"tonapi-sdk-js": "^2.0.3",
|
|
26
29
|
"tonweb": "^0.0.66",
|
|
30
|
+
"ts-jest": "^29.2.5",
|
|
27
31
|
"viem": "^2.21.49",
|
|
28
32
|
"wagmi": "^2.13.0"
|
|
29
33
|
},
|
|
@@ -31,7 +31,7 @@ export const getTonProjectIdByAddress = ({
|
|
|
31
31
|
slug,
|
|
32
32
|
data
|
|
33
33
|
}: {
|
|
34
|
-
address
|
|
34
|
+
address?: string;
|
|
35
35
|
slug: string;
|
|
36
36
|
data: Record<string, string>;
|
|
37
37
|
}): string | undefined => {
|
|
@@ -39,6 +39,11 @@ export const getTonProjectIdByAddress = ({
|
|
|
39
39
|
if (!project) {
|
|
40
40
|
project = data;
|
|
41
41
|
}
|
|
42
|
+
|
|
43
|
+
if (!address) {
|
|
44
|
+
const firstProject = Object.values(project)[0];
|
|
45
|
+
return firstProject;
|
|
46
|
+
}
|
|
42
47
|
const lastText = address[address.length - 1];
|
|
43
48
|
|
|
44
49
|
const group = Object.keys(project || {}).find((key) => key.includes(lastText));
|
package/src/airdrop/index.ts
CHANGED
|
@@ -3,7 +3,16 @@ import { TonConnectUI } from '@tonconnect/ui-react';
|
|
|
3
3
|
import { AirdropService as TonAirdropService } from './core/ton/AirdropService';
|
|
4
4
|
import { AirdropService as EvmAirdropService } from './core/evm/AirdropService';
|
|
5
5
|
import { getAirdropPro, getAirdropProject, getAirdropQuery } from './services';
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
ChainId,
|
|
8
|
+
ChainType,
|
|
9
|
+
ETokenType,
|
|
10
|
+
EvmAirdropVersionEnum,
|
|
11
|
+
IAirdropClaim,
|
|
12
|
+
IAirdropOptions,
|
|
13
|
+
IProject,
|
|
14
|
+
IWalletClient
|
|
15
|
+
} from './types';
|
|
7
16
|
import { getTonProjectIdByAddress } from './common';
|
|
8
17
|
import { WalletClient as ViemWalletClient } from 'viem';
|
|
9
18
|
|
|
@@ -14,8 +23,11 @@ export class AirdropClient {
|
|
|
14
23
|
private endpoint?: string;
|
|
15
24
|
private project: IProject | undefined;
|
|
16
25
|
protected claims?: IAirdropClaim[];
|
|
17
|
-
private
|
|
26
|
+
private contractInstanceWithWallet: TonAirdropService | EvmAirdropService | undefined;
|
|
27
|
+
private contractInstanceWithoutWallet: TonAirdropService | EvmAirdropService | undefined;
|
|
18
28
|
private projectPromise: Promise<void> | undefined;
|
|
29
|
+
private claimHook: ((v: any) => any) | undefined;
|
|
30
|
+
private cachedVersion: string | null = null;
|
|
19
31
|
|
|
20
32
|
constructor(params: IAirdropOptions) {
|
|
21
33
|
if ('slug' in params) {
|
|
@@ -31,14 +43,10 @@ export class AirdropClient {
|
|
|
31
43
|
let projectId: string | undefined = this.projectId;
|
|
32
44
|
if (this.slug) {
|
|
33
45
|
const res = await getAirdropPro(this.slug, this.endpoint);
|
|
34
|
-
const projectMap = res?.childProjectMapping;
|
|
46
|
+
const projectMap = res?.childProjectMapping || {};
|
|
35
47
|
|
|
36
48
|
let legacyProjectId: string | undefined;
|
|
37
|
-
|
|
38
|
-
legacyProjectId = Object.values(projectMap)[0];
|
|
39
|
-
} else {
|
|
40
|
-
legacyProjectId = getTonProjectIdByAddress({ address, slug: this.slug, data: projectMap });
|
|
41
|
-
}
|
|
49
|
+
legacyProjectId = getTonProjectIdByAddress({ address, slug: this.slug, data: projectMap });
|
|
42
50
|
|
|
43
51
|
if (legacyProjectId) {
|
|
44
52
|
projectId = legacyProjectId;
|
|
@@ -49,7 +57,6 @@ export class AirdropClient {
|
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
async getProjectInfo() {
|
|
52
|
-
console.log(this.projectPromise);
|
|
53
60
|
await this.projectPromise;
|
|
54
61
|
if (!this.project) throw new Error('Project not found');
|
|
55
62
|
return this.project;
|
|
@@ -75,30 +82,46 @@ export class AirdropClient {
|
|
|
75
82
|
return this.claims;
|
|
76
83
|
}
|
|
77
84
|
|
|
78
|
-
async getAirdropContractWrapper(options
|
|
85
|
+
async getAirdropContractWrapper(options?: {
|
|
79
86
|
walletClient?: IWalletClient;
|
|
80
|
-
tonClient?: TonClient;
|
|
81
87
|
}): Promise<TonAirdropService | EvmAirdropService> {
|
|
82
|
-
|
|
83
|
-
const project = await this.getProjectInfo();
|
|
84
|
-
|
|
85
|
-
const instance =
|
|
86
|
-
project.chainType === ChainType.Evm
|
|
87
|
-
? new EvmAirdropService({
|
|
88
|
-
contractAddress: project.contractAddress,
|
|
89
|
-
chainId: Number(project.chainId) as ChainId,
|
|
90
|
-
walletClient: options.walletClient as ViemWalletClient
|
|
91
|
-
})
|
|
92
|
-
: new TonAirdropService({
|
|
93
|
-
chainId: project.chainId.toString(),
|
|
94
|
-
address: project.contractAddress,
|
|
95
|
-
walletClient: options.walletClient as TonConnectUI,
|
|
96
|
-
tonClient: this.tonClient
|
|
97
|
-
});
|
|
98
|
-
this.contractInstance = instance;
|
|
99
|
-
}
|
|
88
|
+
const project = await this.getProjectInfo();
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
if (options?.walletClient) {
|
|
91
|
+
if (!this.contractInstanceWithWallet) {
|
|
92
|
+
const instance =
|
|
93
|
+
project.chainType === ChainType.Evm
|
|
94
|
+
? new EvmAirdropService({
|
|
95
|
+
contractAddress: project.contractAddress,
|
|
96
|
+
chainId: Number(project.chainId) as ChainId,
|
|
97
|
+
walletClient: options.walletClient as ViemWalletClient
|
|
98
|
+
})
|
|
99
|
+
: new TonAirdropService({
|
|
100
|
+
chainId: project.chainId.toString(),
|
|
101
|
+
address: project.contractAddress,
|
|
102
|
+
walletClient: options.walletClient as TonConnectUI,
|
|
103
|
+
tonClient: this.tonClient
|
|
104
|
+
});
|
|
105
|
+
this.contractInstanceWithWallet = instance;
|
|
106
|
+
}
|
|
107
|
+
return this.contractInstanceWithWallet;
|
|
108
|
+
} else {
|
|
109
|
+
if (!this.contractInstanceWithoutWallet) {
|
|
110
|
+
const instance =
|
|
111
|
+
project.chainType === ChainType.Evm
|
|
112
|
+
? new EvmAirdropService({
|
|
113
|
+
contractAddress: project.contractAddress,
|
|
114
|
+
chainId: Number(project.chainId) as ChainId
|
|
115
|
+
})
|
|
116
|
+
: new TonAirdropService({
|
|
117
|
+
chainId: project.chainId.toString(),
|
|
118
|
+
address: project.contractAddress,
|
|
119
|
+
tonClient: this.tonClient
|
|
120
|
+
});
|
|
121
|
+
this.contractInstanceWithoutWallet = instance;
|
|
122
|
+
}
|
|
123
|
+
return this.contractInstanceWithoutWallet;
|
|
124
|
+
}
|
|
102
125
|
}
|
|
103
126
|
|
|
104
127
|
private getClaimDataById(claimId: string) {
|
|
@@ -107,16 +130,47 @@ export class AirdropClient {
|
|
|
107
130
|
return claimData;
|
|
108
131
|
}
|
|
109
132
|
|
|
133
|
+
setClaimFeeHook(fn: (v: any) => any) {
|
|
134
|
+
this.claimHook = fn;
|
|
135
|
+
}
|
|
136
|
+
|
|
110
137
|
async claimAirdrop(
|
|
111
138
|
{ claimId, walletClient }: { claimId: string; walletClient: IWalletClient },
|
|
112
139
|
options: { onLoading?: () => void }
|
|
113
140
|
) {
|
|
114
141
|
const claimData = this.getClaimDataById(claimId);
|
|
142
|
+
const project = await this.getProjectInfo();
|
|
115
143
|
|
|
116
144
|
const contractWrapper = await this.getAirdropContractWrapper({
|
|
117
145
|
walletClient
|
|
118
146
|
});
|
|
119
147
|
|
|
148
|
+
if (project.chainType === ChainType.Evm) {
|
|
149
|
+
const version = await contractWrapper.getVersion();
|
|
150
|
+
const needsFeeData = !(
|
|
151
|
+
project.tokenType === ETokenType.Native &&
|
|
152
|
+
[EvmAirdropVersionEnum.V3, EvmAirdropVersionEnum.V4].includes(version as EvmAirdropVersionEnum)
|
|
153
|
+
);
|
|
154
|
+
|
|
155
|
+
const value = needsFeeData ? await this.getClaimFee(BigInt(claimData.amount)) : undefined;
|
|
156
|
+
|
|
157
|
+
let extraData = {
|
|
158
|
+
isLegacy: true,
|
|
159
|
+
attestationId: BigInt(1)
|
|
160
|
+
};
|
|
161
|
+
if (this.claimHook) {
|
|
162
|
+
extraData = this.claimHook(claimData);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return (contractWrapper as EvmAirdropService).claim({
|
|
166
|
+
proof: claimData.proof,
|
|
167
|
+
group: claimData.group,
|
|
168
|
+
data: claimData.data,
|
|
169
|
+
value: value as bigint | undefined,
|
|
170
|
+
extraData: extraData
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
|
|
120
174
|
return contractWrapper.claim(claimData, options);
|
|
121
175
|
}
|
|
122
176
|
|
|
@@ -124,9 +178,7 @@ export class AirdropClient {
|
|
|
124
178
|
const claimData = this.getClaimDataById(claimId);
|
|
125
179
|
const project = await this.getProjectInfo();
|
|
126
180
|
|
|
127
|
-
const contractWrapper = await this.getAirdropContractWrapper(
|
|
128
|
-
tonClient: this.tonClient
|
|
129
|
-
});
|
|
181
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
130
182
|
|
|
131
183
|
if (project.chainType === ChainType.Evm) {
|
|
132
184
|
return (contractWrapper as EvmAirdropService).isLeafUsed(claimData.leaf);
|
|
@@ -137,9 +189,7 @@ export class AirdropClient {
|
|
|
137
189
|
|
|
138
190
|
async getPaused() {
|
|
139
191
|
const project = await this.getProjectInfo();
|
|
140
|
-
const contractWrapper = await this.getAirdropContractWrapper(
|
|
141
|
-
tonClient: this.tonClient
|
|
142
|
-
});
|
|
192
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
143
193
|
if (project.chainType === ChainType.Evm) {
|
|
144
194
|
throw new Error('EVM chain is not supported');
|
|
145
195
|
}
|
|
@@ -147,13 +197,16 @@ export class AirdropClient {
|
|
|
147
197
|
}
|
|
148
198
|
|
|
149
199
|
async getVersion() {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
200
|
+
if (this.cachedVersion) {
|
|
201
|
+
return this.cachedVersion;
|
|
202
|
+
}
|
|
203
|
+
const contractWrapper = await this.getAirdropContractWrapper();
|
|
204
|
+
|
|
205
|
+
this.cachedVersion = await contractWrapper?.getVersion();
|
|
206
|
+
return this.cachedVersion;
|
|
154
207
|
}
|
|
155
208
|
|
|
156
|
-
async
|
|
209
|
+
async batchCheckClaimed() {
|
|
157
210
|
const project = await this.getProjectInfo();
|
|
158
211
|
|
|
159
212
|
if (project.chainType === ChainType.Ton) {
|
|
@@ -161,15 +214,30 @@ export class AirdropClient {
|
|
|
161
214
|
}
|
|
162
215
|
|
|
163
216
|
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
217
|
+
const leafs = this.claims?.map((it) => it.leaf);
|
|
218
|
+
|
|
219
|
+
if (!leafs) return [];
|
|
164
220
|
|
|
165
221
|
return (contractWrapper as EvmAirdropService).batchFetchClaimed(leafs);
|
|
166
222
|
}
|
|
167
223
|
|
|
168
|
-
async
|
|
224
|
+
async getNFT() {
|
|
225
|
+
const project = await this.getProjectInfo();
|
|
226
|
+
|
|
227
|
+
if (project.chainType === ChainType.Ton) {
|
|
228
|
+
throw new Error('TON chain is not supported');
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
232
|
+
|
|
233
|
+
return (contractWrapper as EvmAirdropService).getNFT();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
async getClaimFee(amount?: bigint) {
|
|
169
237
|
const project = await this.getProjectInfo();
|
|
170
238
|
|
|
171
239
|
const contractWrapper = await this.getAirdropContractWrapper({});
|
|
172
240
|
|
|
173
|
-
return contractWrapper.getClaimFee(project.contractAddress, amount);
|
|
241
|
+
return contractWrapper.getClaimFee(project.contractAddress, amount || BigInt(1));
|
|
174
242
|
}
|
|
175
243
|
}
|