@star-factory/sdk-launchpad 0.1.0
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 +343 -0
- package/dist/claims/accounts.d.ts +49 -0
- package/dist/claims/accounts.d.ts.map +1 -0
- package/dist/claims/accounts.js +118 -0
- package/dist/claims/accounts.js.map +1 -0
- package/dist/claims/eligibility.d.ts +67 -0
- package/dist/claims/eligibility.d.ts.map +1 -0
- package/dist/claims/eligibility.js +275 -0
- package/dist/claims/eligibility.js.map +1 -0
- package/dist/claims/index.d.ts +5 -0
- package/dist/claims/index.d.ts.map +1 -0
- package/dist/claims/index.js +41 -0
- package/dist/claims/index.js.map +1 -0
- package/dist/claims/pdas.d.ts +24 -0
- package/dist/claims/pdas.d.ts.map +1 -0
- package/dist/claims/pdas.js +43 -0
- package/dist/claims/pdas.js.map +1 -0
- package/dist/claims/tx.d.ts +47 -0
- package/dist/claims/tx.d.ts.map +1 -0
- package/dist/claims/tx.js +126 -0
- package/dist/claims/tx.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/instructions/cancel-launch.d.ts +16 -0
- package/dist/instructions/cancel-launch.d.ts.map +1 -0
- package/dist/instructions/cancel-launch.js +72 -0
- package/dist/instructions/cancel-launch.js.map +1 -0
- package/dist/instructions/configure-launch.d.ts +16 -0
- package/dist/instructions/configure-launch.d.ts.map +1 -0
- package/dist/instructions/configure-launch.js +50 -0
- package/dist/instructions/configure-launch.js.map +1 -0
- package/dist/instructions/constants.d.ts +8 -0
- package/dist/instructions/constants.d.ts.map +1 -0
- package/dist/instructions/constants.js +14 -0
- package/dist/instructions/constants.js.map +1 -0
- package/dist/instructions/create-launch-token.d.ts +18 -0
- package/dist/instructions/create-launch-token.d.ts.map +1 -0
- package/dist/instructions/create-launch-token.js +65 -0
- package/dist/instructions/create-launch-token.js.map +1 -0
- package/dist/instructions/execute-launch.d.ts +68 -0
- package/dist/instructions/execute-launch.d.ts.map +1 -0
- package/dist/instructions/execute-launch.js +190 -0
- package/dist/instructions/execute-launch.js.map +1 -0
- package/dist/instructions/index.d.ts +8 -0
- package/dist/instructions/index.d.ts.map +1 -0
- package/dist/instructions/index.js +57 -0
- package/dist/instructions/index.js.map +1 -0
- package/dist/instructions/initialize-launch.d.ts +15 -0
- package/dist/instructions/initialize-launch.d.ts.map +1 -0
- package/dist/instructions/initialize-launch.js +71 -0
- package/dist/instructions/initialize-launch.js.map +1 -0
- package/dist/instructions/pdas.d.ts +95 -0
- package/dist/instructions/pdas.d.ts.map +1 -0
- package/dist/instructions/pdas.js +168 -0
- package/dist/instructions/pdas.js.map +1 -0
- package/dist/pdas.d.ts +19 -0
- package/dist/pdas.d.ts.map +1 -0
- package/dist/pdas.js +40 -0
- package/dist/pdas.js.map +1 -0
- package/dist/sdk.d.ts +274 -0
- package/dist/sdk.d.ts.map +1 -0
- package/dist/sdk.js +505 -0
- package/dist/sdk.js.map +1 -0
- package/dist/types.d.ts +578 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/zc/client.d.ts +69 -0
- package/dist/zc/client.d.ts.map +1 -0
- package/dist/zc/client.js +121 -0
- package/dist/zc/client.js.map +1 -0
- package/dist/zc/constants.d.ts +49 -0
- package/dist/zc/constants.d.ts.map +1 -0
- package/dist/zc/constants.js +64 -0
- package/dist/zc/constants.js.map +1 -0
- package/dist/zc/index.d.ts +4 -0
- package/dist/zc/index.d.ts.map +1 -0
- package/dist/zc/index.js +7 -0
- package/dist/zc/index.js.map +1 -0
- package/dist/zc/types.d.ts +65 -0
- package/dist/zc/types.d.ts.map +1 -0
- package/dist/zc/types.js +3 -0
- package/dist/zc/types.js.map +1 -0
- package/package.json +63 -0
package/dist/sdk.js
ADDED
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LaunchpadSDK = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
6
|
+
const bn_js_1 = tslib_1.__importDefault(require("bn.js"));
|
|
7
|
+
const claims_1 = require("./claims");
|
|
8
|
+
const instructions_1 = require("./instructions");
|
|
9
|
+
const pdas_1 = require("./pdas");
|
|
10
|
+
const zc_1 = require("./zc");
|
|
11
|
+
/**
|
|
12
|
+
* Launchpad SDK
|
|
13
|
+
*
|
|
14
|
+
* Handles the off-chain prerequisites for token launches:
|
|
15
|
+
* 1. Derive DAMM pool address
|
|
16
|
+
* 2. Reserve admin with zCombinator API
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* const sdk = new LaunchpadSDK({
|
|
21
|
+
* connection,
|
|
22
|
+
* cluster: 'devnet',
|
|
23
|
+
* zcApiKey: process.env.ZC_API_KEY!,
|
|
24
|
+
* });
|
|
25
|
+
*
|
|
26
|
+
* // Step 1: Derive pool address (pool doesn't exist yet!)
|
|
27
|
+
* const poolAddress = sdk.derivePoolAddress(baseMint, quoteMint);
|
|
28
|
+
*
|
|
29
|
+
* // Step 2: Reserve admin (off-chain API call to ZC)
|
|
30
|
+
* const reservation = await sdk.reserveAdmin({
|
|
31
|
+
* name: 'SurfCash',
|
|
32
|
+
* tokenMint: baseMint,
|
|
33
|
+
* poolAddress,
|
|
34
|
+
* poolType: 'damm',
|
|
35
|
+
* quoteMint,
|
|
36
|
+
* treasuryCosigner: teamMultisig,
|
|
37
|
+
* ownerWallet: projectOwner,
|
|
38
|
+
* });
|
|
39
|
+
*
|
|
40
|
+
* // reservation.adminWallet is ZC's managed admin
|
|
41
|
+
* // Use this in transferAdmin IX after DAO creation
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @see https://docs.combinator.trade/llms.txt
|
|
45
|
+
*/
|
|
46
|
+
class LaunchpadSDK {
|
|
47
|
+
connection;
|
|
48
|
+
cluster;
|
|
49
|
+
dammProgramId;
|
|
50
|
+
zcClient;
|
|
51
|
+
constructor(config) {
|
|
52
|
+
this.connection = config.connection;
|
|
53
|
+
this.cluster = config.cluster ?? 'devnet';
|
|
54
|
+
this.dammProgramId = config.dammProgramId ?? zc_1.DAMM_PROGRAM_ID;
|
|
55
|
+
this.zcClient = new zc_1.ZCClient({
|
|
56
|
+
apiKey: config.zcApiKey,
|
|
57
|
+
cluster: this.cluster,
|
|
58
|
+
apiEndpoint: config.zcApiEndpoint,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
derivePoolAddress(baseMintOrInput, maybeQuoteMint, maybeConfig) {
|
|
62
|
+
if (baseMintOrInput instanceof web3_js_1.PublicKey) {
|
|
63
|
+
if (!maybeQuoteMint) {
|
|
64
|
+
throw new Error('quoteMint is required when using positional derivePoolAddress arguments');
|
|
65
|
+
}
|
|
66
|
+
return (0, pdas_1.derivePoolAddress)({
|
|
67
|
+
baseMint: baseMintOrInput,
|
|
68
|
+
quoteMint: maybeQuoteMint,
|
|
69
|
+
config: maybeConfig ?? zc_1.DAMM_CONFIG_PDA,
|
|
70
|
+
}, this.dammProgramId);
|
|
71
|
+
}
|
|
72
|
+
return (0, pdas_1.derivePoolAddress)({
|
|
73
|
+
baseMint: baseMintOrInput.baseMint,
|
|
74
|
+
quoteMint: baseMintOrInput.quoteMint,
|
|
75
|
+
config: baseMintOrInput.config ?? zc_1.DAMM_CONFIG_PDA,
|
|
76
|
+
}, this.dammProgramId);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Derive pool address with sorted mint context for downstream account building.
|
|
80
|
+
*/
|
|
81
|
+
derivePoolAddressWithContext(input) {
|
|
82
|
+
const config = input.config ?? zc_1.DAMM_CONFIG_PDA;
|
|
83
|
+
const poolAddress = this.derivePoolAddress({
|
|
84
|
+
baseMint: input.baseMint,
|
|
85
|
+
quoteMint: input.quoteMint,
|
|
86
|
+
config,
|
|
87
|
+
});
|
|
88
|
+
const [tokenA, tokenB] = (0, pdas_1.sortMints)(input.baseMint, input.quoteMint);
|
|
89
|
+
return { poolAddress, tokenA, tokenB, config };
|
|
90
|
+
}
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// Step 2: Reserve Admin
|
|
93
|
+
// ============================================================================
|
|
94
|
+
/**
|
|
95
|
+
* Reserve an admin key with zCombinator.
|
|
96
|
+
*
|
|
97
|
+
* This is an OFF-CHAIN API call that must be made before building the
|
|
98
|
+
* execute_launch transaction.
|
|
99
|
+
*
|
|
100
|
+
* PREREQUISITES (derive these first):
|
|
101
|
+
* - tokenMint: the vanity mint address (from grinding)
|
|
102
|
+
* - poolAddress: use derivePoolAddress() above
|
|
103
|
+
*
|
|
104
|
+
* The reservation returns:
|
|
105
|
+
* - adminWallet: ZC's managed admin (use in transferAdmin IX)
|
|
106
|
+
* - adminKeyIdx: ZC internal key index
|
|
107
|
+
* - daoId: ZC database DAO ID
|
|
108
|
+
*
|
|
109
|
+
* After calling this, build your atomic transaction:
|
|
110
|
+
* 1. Token launch instructions
|
|
111
|
+
* 2. Pool launch instructions
|
|
112
|
+
* 3. DAO creation (with launchpad PDA as temp admin)
|
|
113
|
+
* 4. transferAdmin to adminWallet (from this response)
|
|
114
|
+
* 5. LP transfer to adminWallet
|
|
115
|
+
*
|
|
116
|
+
* @param params - Name, token mint, pool address, etc.
|
|
117
|
+
*
|
|
118
|
+
* @see https://github.com/zcombinatorio/combinator/blob/main/ui/routes/dao/creation.ts
|
|
119
|
+
*/
|
|
120
|
+
async reserveAdmin(params) {
|
|
121
|
+
return this.zcClient.reserveAdmin(params);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Validate launch pre-execution values that are known off-chain.
|
|
125
|
+
*/
|
|
126
|
+
validateLaunchPreparation(request) {
|
|
127
|
+
const issues = [];
|
|
128
|
+
if (!request.daoName || request.daoName.trim().length === 0) {
|
|
129
|
+
issues.push({
|
|
130
|
+
code: 'INVALID_DAO_NAME',
|
|
131
|
+
message: 'daoName must be a non-empty string',
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else if (request.daoName.length > 32) {
|
|
135
|
+
issues.push({
|
|
136
|
+
code: 'INVALID_DAO_NAME',
|
|
137
|
+
message: 'daoName exceeds max length of 32 characters',
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
return { ok: issues.length === 0, issues };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Validate configure_launch metadata constraints before submitting on-chain tx.
|
|
144
|
+
*/
|
|
145
|
+
validateConfigureLaunchMetadata(input) {
|
|
146
|
+
const issues = [];
|
|
147
|
+
const name = input.name?.trim() ?? '';
|
|
148
|
+
const symbol = input.symbol?.trim() ?? '';
|
|
149
|
+
const uri = input.uri?.trim() ?? '';
|
|
150
|
+
if (!name || name.length > 32) {
|
|
151
|
+
issues.push({
|
|
152
|
+
code: 'INVALID_TOKEN_NAME',
|
|
153
|
+
message: 'name must be non-empty and <= 32 characters',
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
if (!symbol || symbol.length > 10) {
|
|
157
|
+
issues.push({
|
|
158
|
+
code: 'INVALID_TOKEN_SYMBOL',
|
|
159
|
+
message: 'symbol must be non-empty and <= 10 characters',
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (!uri || uri.length > 200) {
|
|
163
|
+
issues.push({
|
|
164
|
+
code: 'INVALID_TOKEN_URI',
|
|
165
|
+
message: 'uri must be non-empty and <= 200 characters',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
return { ok: issues.length === 0, issues };
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Build canonical configure_launch metadata args with validation.
|
|
172
|
+
*/
|
|
173
|
+
buildConfigureLaunchMetadataArgs(input) {
|
|
174
|
+
const validation = this.validateConfigureLaunchMetadata(input);
|
|
175
|
+
if (!validation.ok) {
|
|
176
|
+
throw new Error(validation.issues[0].message);
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
name: input.name.trim(),
|
|
180
|
+
symbol: input.symbol.trim(),
|
|
181
|
+
uri: input.uri.trim(),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Build metadata JSON payload for off-chain hosting providers.
|
|
186
|
+
* Caller uploads resulting JSON and uses returned URL as configure_launch `uri`.
|
|
187
|
+
*/
|
|
188
|
+
buildTokenMetadataJson(input) {
|
|
189
|
+
const metadata = {
|
|
190
|
+
name: input.name.trim(),
|
|
191
|
+
symbol: input.symbol.trim(),
|
|
192
|
+
description: input.description?.trim() || `${input.name.trim()} token`,
|
|
193
|
+
};
|
|
194
|
+
if (input.image) {
|
|
195
|
+
metadata.image = input.image;
|
|
196
|
+
}
|
|
197
|
+
if (input.externalUrl) {
|
|
198
|
+
metadata.external_url = input.externalUrl;
|
|
199
|
+
}
|
|
200
|
+
if (input.attributes && input.attributes.length > 0) {
|
|
201
|
+
metadata.attributes = input.attributes.map((attr) => ({
|
|
202
|
+
trait_type: attr.traitType,
|
|
203
|
+
value: attr.value,
|
|
204
|
+
}));
|
|
205
|
+
}
|
|
206
|
+
return metadata;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Build reserve-admin params in a deterministic and typed way.
|
|
210
|
+
*/
|
|
211
|
+
buildReserveAdminParams(input) {
|
|
212
|
+
const validation = this.validateLaunchPreparation({ daoName: input.daoName });
|
|
213
|
+
if (!validation.ok) {
|
|
214
|
+
throw new Error(validation.issues[0].message);
|
|
215
|
+
}
|
|
216
|
+
const poolAddress = input.poolAddress ?? this.derivePoolAddress({
|
|
217
|
+
baseMint: input.tokenMint,
|
|
218
|
+
quoteMint: input.quoteMint,
|
|
219
|
+
config: input.poolConfig ?? zc_1.DAMM_CONFIG_PDA,
|
|
220
|
+
});
|
|
221
|
+
const reserveAdminParams = {
|
|
222
|
+
name: input.daoName,
|
|
223
|
+
tokenMint: input.tokenMint,
|
|
224
|
+
poolAddress,
|
|
225
|
+
poolType: input.poolType ?? 'damm',
|
|
226
|
+
quoteMint: input.quoteMint,
|
|
227
|
+
treasuryCosigner: input.treasuryCosigner,
|
|
228
|
+
ownerWallet: input.ownerWallet,
|
|
229
|
+
};
|
|
230
|
+
return { reserveAdminParams, poolAddress };
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Build `execute_launch` args from reservation output.
|
|
234
|
+
*/
|
|
235
|
+
buildExecuteLaunchArgs(input) {
|
|
236
|
+
const validation = this.validateLaunchPreparation({ daoName: input.daoName });
|
|
237
|
+
if (!validation.ok) {
|
|
238
|
+
throw new Error(validation.issues[0].message);
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
daoName: input.daoName,
|
|
242
|
+
treasuryCosigner: input.treasuryCosigner,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* One-call helper for all pre-execution off-chain ops:
|
|
247
|
+
* 1) derive pool address
|
|
248
|
+
* 2) call ZC reserve-admin
|
|
249
|
+
* 3) construct execute_launch args
|
|
250
|
+
*/
|
|
251
|
+
async prepareLaunchExecution(input) {
|
|
252
|
+
const { reserveAdminParams, poolAddress } = this.buildReserveAdminParams({
|
|
253
|
+
daoName: input.daoName,
|
|
254
|
+
tokenMint: input.tokenMint,
|
|
255
|
+
quoteMint: input.quoteMint,
|
|
256
|
+
treasuryCosigner: input.treasuryCosigner,
|
|
257
|
+
ownerWallet: input.ownerWallet,
|
|
258
|
+
poolType: input.poolType,
|
|
259
|
+
poolAddress: input.poolAddress,
|
|
260
|
+
poolConfig: input.poolConfig,
|
|
261
|
+
});
|
|
262
|
+
const reservation = await this.reserveAdmin(reserveAdminParams);
|
|
263
|
+
const executeLaunchArgs = this.buildExecuteLaunchArgs({
|
|
264
|
+
daoName: input.daoName,
|
|
265
|
+
treasuryCosigner: input.treasuryCosigner,
|
|
266
|
+
reservation,
|
|
267
|
+
});
|
|
268
|
+
return {
|
|
269
|
+
cluster: this.cluster,
|
|
270
|
+
poolAddress,
|
|
271
|
+
reserveAdminParams,
|
|
272
|
+
reservation,
|
|
273
|
+
executeLaunchArgs,
|
|
274
|
+
executeLaunchAccounts: {
|
|
275
|
+
newDaoAdmin: reservation.adminWallet,
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
// ============================================================================
|
|
280
|
+
// Instruction Builders (on-chain TX construction)
|
|
281
|
+
// ============================================================================
|
|
282
|
+
/**
|
|
283
|
+
* Build an unsigned `initialize_launch` transaction.
|
|
284
|
+
*
|
|
285
|
+
* Creates a LaunchConfig PDA + underlying vault via CPI to vault::make.
|
|
286
|
+
*
|
|
287
|
+
* ```typescript
|
|
288
|
+
* const tx = await sdk.buildInitializeLaunchTx(launchpadProgram, {
|
|
289
|
+
* creator: wallet.publicKey,
|
|
290
|
+
* seed: new BN(Date.now()),
|
|
291
|
+
* vaultSeed: new BN(Date.now() + 1),
|
|
292
|
+
* totalSupply: new BN('1000000000000000'),
|
|
293
|
+
* tokensToParticipants: new BN('500000000000000'),
|
|
294
|
+
* quoteMint: NATIVE_MINT,
|
|
295
|
+
* minRaise: new BN('100000000'),
|
|
296
|
+
* targetRaise: new BN('100000000'),
|
|
297
|
+
* startTime: new BN(now - 5),
|
|
298
|
+
* endTime: new BN(now + 300),
|
|
299
|
+
* vaultProgramId: VAULT_PROGRAM_ID,
|
|
300
|
+
* });
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
async buildInitializeLaunchTx(launchpadProgram, opts) {
|
|
304
|
+
return (0, instructions_1.buildInitializeLaunchTx)(this.connection, launchpadProgram, opts);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Build an unsigned `configure_launch` transaction.
|
|
308
|
+
*
|
|
309
|
+
* Sets vanity mint config + token metadata.
|
|
310
|
+
* Transitions FundraiseActive → ReadyToLaunch.
|
|
311
|
+
*/
|
|
312
|
+
async buildConfigureLaunchTx(launchpadProgram, opts) {
|
|
313
|
+
return (0, instructions_1.buildConfigureLaunchTx)(this.connection, launchpadProgram, opts);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Build an unsigned `create_launch_token` transaction.
|
|
317
|
+
*
|
|
318
|
+
* Creates vanity mint, Metaplex metadata, mints total supply.
|
|
319
|
+
* Transitions ReadyToLaunch → TokenCreated.
|
|
320
|
+
*
|
|
321
|
+
* **Important**: The returned TX must be signed by both `admin` and `baseKeypair`.
|
|
322
|
+
*/
|
|
323
|
+
async buildCreateLaunchTokenTx(launchpadProgram, opts) {
|
|
324
|
+
return (0, instructions_1.buildCreateLaunchTokenTx)(this.connection, launchpadProgram, opts);
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Build an unsigned `execute_launch` transaction.
|
|
328
|
+
*
|
|
329
|
+
* Atomically finalizes vault, creates DAMM pool, creates DAO,
|
|
330
|
+
* transfers authorities, and routes funds.
|
|
331
|
+
* Transitions TokenCreated → Launched.
|
|
332
|
+
*
|
|
333
|
+
* Returns both the transaction and all resolved accounts (for ALT creation).
|
|
334
|
+
*
|
|
335
|
+
* **Important**: This TX has ~35 accounts and requires an Address Lookup Table.
|
|
336
|
+
* Use the returned `accounts` to populate the ALT, then compile to a
|
|
337
|
+
* VersionedTransaction before sending.
|
|
338
|
+
*
|
|
339
|
+
* ```typescript
|
|
340
|
+
* const { tx, accounts } = await sdk.buildExecuteLaunchTx(launchpadProgram, {
|
|
341
|
+
* admin: adminKeypair.publicKey,
|
|
342
|
+
* launchConfig: launchConfigPda,
|
|
343
|
+
* launchConfigData,
|
|
344
|
+
* poolActivationTime: new BN(now + 120),
|
|
345
|
+
* daoName: 'MyDAO',
|
|
346
|
+
* treasuryCosigner: teamMultisig,
|
|
347
|
+
* newDaoAdmin: reservation.adminWallet,
|
|
348
|
+
* dammPool: poolAddress,
|
|
349
|
+
* vaultProgramId: VAULT_PROGRAM_ID,
|
|
350
|
+
* computeUnits: 1_400_000,
|
|
351
|
+
* });
|
|
352
|
+
* ```
|
|
353
|
+
*/
|
|
354
|
+
async buildExecuteLaunchTx(launchpadProgram, opts) {
|
|
355
|
+
return (0, instructions_1.buildExecuteLaunchTx)(this.connection, launchpadProgram, opts);
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Build an unsigned `cancel_launch` transaction.
|
|
359
|
+
*
|
|
360
|
+
* Cancels from any pre-Launched state. Burns tokens if minted.
|
|
361
|
+
*/
|
|
362
|
+
async buildCancelLaunchTx(launchpadProgram, opts) {
|
|
363
|
+
return (0, instructions_1.buildCancelLaunchTx)(this.connection, launchpadProgram, opts);
|
|
364
|
+
}
|
|
365
|
+
// ============================================================================
|
|
366
|
+
// Claims — Eligibility
|
|
367
|
+
// ============================================================================
|
|
368
|
+
/**
|
|
369
|
+
* Check whether a user can claim tokens, and how much.
|
|
370
|
+
*
|
|
371
|
+
* This is the primary method for frontends to determine whether to show
|
|
372
|
+
* the claim button and what information to display.
|
|
373
|
+
*
|
|
374
|
+
* **Works on both client and server** — fetches on-chain state and
|
|
375
|
+
* runs a pure eligibility computation.
|
|
376
|
+
*
|
|
377
|
+
* @param launchpadProgram - Anchor program instance for the launchpad
|
|
378
|
+
* @param vaultProgram - Anchor program instance for the vault
|
|
379
|
+
* @param launchConfig - The launch config PDA address
|
|
380
|
+
* @param user - The user's wallet pubkey
|
|
381
|
+
* @param currentTime - Optional unix timestamp override (for testing).
|
|
382
|
+
* Defaults to `Date.now() / 1000`.
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const eligibility = await sdk.getClaimEligibility(
|
|
387
|
+
* launchpadProgram,
|
|
388
|
+
* vaultProgram,
|
|
389
|
+
* launchConfigPda,
|
|
390
|
+
* wallet.publicKey,
|
|
391
|
+
* );
|
|
392
|
+
*
|
|
393
|
+
* if (eligibility.canClaim) {
|
|
394
|
+
* console.log(`Claimable: ${eligibility.claimableNow.toString()} tokens`);
|
|
395
|
+
* } else {
|
|
396
|
+
* console.log(`Cannot claim: ${eligibility.reason}`);
|
|
397
|
+
* }
|
|
398
|
+
* ```
|
|
399
|
+
*/
|
|
400
|
+
async getClaimEligibility(launchpadProgram, vaultProgram, launchConfig, user, currentTime) {
|
|
401
|
+
const now = currentTime ?? Math.floor(Date.now() / 1000);
|
|
402
|
+
// Fetch launch config
|
|
403
|
+
const launchConfigData = await (0, claims_1.fetchLaunchConfig)(launchpadProgram, launchConfig);
|
|
404
|
+
if (!launchConfigData) {
|
|
405
|
+
return {
|
|
406
|
+
canClaim: false,
|
|
407
|
+
reason: 'launch_not_executed',
|
|
408
|
+
claimableNow: new bn_js_1.default(0),
|
|
409
|
+
totalTokens: new bn_js_1.default(0),
|
|
410
|
+
totalClaimed: new bn_js_1.default(0),
|
|
411
|
+
totalVested: new bn_js_1.default(0),
|
|
412
|
+
tier: null,
|
|
413
|
+
vestingSchedule: null,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
// Fetch vault state (tier allocation data for accurate claim computation)
|
|
417
|
+
const vaultProgramId = vaultProgram.programId;
|
|
418
|
+
let vaultData = null;
|
|
419
|
+
try {
|
|
420
|
+
const vaultAccounts = vaultProgram.account;
|
|
421
|
+
const raw = await vaultAccounts.starVault.fetch(launchConfigData.fundraiseState);
|
|
422
|
+
vaultData = {
|
|
423
|
+
tierAllocated: raw.tierAllocated,
|
|
424
|
+
tierTotalsAtAllocation: raw.tierTotalsAtAllocation,
|
|
425
|
+
totalAllocated: raw.totalAllocated,
|
|
426
|
+
allocationsCalculated: raw.allocationsCalculated,
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
catch {
|
|
430
|
+
vaultData = null;
|
|
431
|
+
}
|
|
432
|
+
if (!vaultData) {
|
|
433
|
+
return {
|
|
434
|
+
canClaim: false,
|
|
435
|
+
reason: 'allocations_not_calculated',
|
|
436
|
+
claimableNow: new bn_js_1.default(0),
|
|
437
|
+
totalTokens: new bn_js_1.default(0),
|
|
438
|
+
totalClaimed: new bn_js_1.default(0),
|
|
439
|
+
totalVested: new bn_js_1.default(0),
|
|
440
|
+
tier: null,
|
|
441
|
+
vestingSchedule: null,
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
// Fetch depositor record
|
|
445
|
+
const [depositorRecordPda] = (0, claims_1.deriveDepositorRecordPda)(launchConfigData.fundraiseState, user, vaultProgramId);
|
|
446
|
+
const depositorRecord = await (0, claims_1.fetchDepositorRecord)(vaultProgram, depositorRecordPda);
|
|
447
|
+
// Fetch claim record (may not exist yet)
|
|
448
|
+
const launchpadProgramId = launchpadProgram.programId;
|
|
449
|
+
const [claimRecordPda] = web3_js_1.PublicKey.findProgramAddressSync([Buffer.from('claim'), launchConfig.toBuffer(), user.toBuffer()], launchpadProgramId);
|
|
450
|
+
const claimRecord = await (0, claims_1.fetchClaimRecord)(launchpadProgram, claimRecordPda);
|
|
451
|
+
return (0, claims_1.computeClaimEligibility)(launchConfigData, depositorRecord, claimRecord, now, vaultData);
|
|
452
|
+
}
|
|
453
|
+
// ============================================================================
|
|
454
|
+
// Claims — Transaction Building
|
|
455
|
+
// ============================================================================
|
|
456
|
+
/**
|
|
457
|
+
* Build an unsigned `claim_tokens` transaction for a user.
|
|
458
|
+
*
|
|
459
|
+
* The transaction is ready for signing by the user's wallet (or relay).
|
|
460
|
+
* Includes compute budget and priority fee if specified.
|
|
461
|
+
*
|
|
462
|
+
* **Client-side (wallet adapter):**
|
|
463
|
+
* ```typescript
|
|
464
|
+
* const tx = await sdk.buildClaimTx(launchpadProgram, {
|
|
465
|
+
* user: wallet.publicKey,
|
|
466
|
+
* launchConfig: launchConfigPda,
|
|
467
|
+
* launchConfigData,
|
|
468
|
+
* vaultProgramId: VAULT_PROGRAM_ID,
|
|
469
|
+
* });
|
|
470
|
+
* const sig = await wallet.sendTransaction(tx, connection);
|
|
471
|
+
* ```
|
|
472
|
+
*
|
|
473
|
+
* **Server-side (relay/sponsored):**
|
|
474
|
+
* ```typescript
|
|
475
|
+
* const tx = await sdk.buildClaimTx(launchpadProgram, {
|
|
476
|
+
* user: userPubkey,
|
|
477
|
+
* launchConfig: launchConfigPda,
|
|
478
|
+
* launchConfigData,
|
|
479
|
+
* vaultProgramId: VAULT_PROGRAM_ID,
|
|
480
|
+
* feePayer: relayPubkey, // sponsor pays gas
|
|
481
|
+
* priorityFee: 10_000, // 10k micro-lamports/CU
|
|
482
|
+
* });
|
|
483
|
+
* // Serialize and send to user for signing, then relay signs + submits
|
|
484
|
+
* ```
|
|
485
|
+
*
|
|
486
|
+
* @param launchpadProgram - Anchor program instance for the launchpad
|
|
487
|
+
* @param opts - Claim transaction options
|
|
488
|
+
*/
|
|
489
|
+
async buildClaimTx(launchpadProgram, opts) {
|
|
490
|
+
return (0, claims_1.buildClaimTransaction)(this.connection, launchpadProgram, opts);
|
|
491
|
+
}
|
|
492
|
+
// ============================================================================
|
|
493
|
+
// Health Check
|
|
494
|
+
// ============================================================================
|
|
495
|
+
/**
|
|
496
|
+
* Check ZC API health status.
|
|
497
|
+
*
|
|
498
|
+
* @see https://docs.combinator.trade/api-reference/health
|
|
499
|
+
*/
|
|
500
|
+
async healthCheck() {
|
|
501
|
+
return this.zcClient.health();
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
exports.LaunchpadSDK = LaunchpadSDK;
|
|
505
|
+
//# sourceMappingURL=sdk.js.map
|
package/dist/sdk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../src/sdk.ts"],"names":[],"mappings":"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"}
|