@clawnch/clawncher-sdk 2.0.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 +331 -0
- package/dist/abis.d.ts +935 -0
- package/dist/abis.d.ts.map +1 -0
- package/dist/abis.js +486 -0
- package/dist/abis.js.map +1 -0
- package/dist/addresses.d.ts +45 -0
- package/dist/addresses.d.ts.map +1 -0
- package/dist/addresses.js +72 -0
- package/dist/addresses.js.map +1 -0
- package/dist/deployer.d.ts +255 -0
- package/dist/deployer.d.ts.map +1 -0
- package/dist/deployer.js +397 -0
- package/dist/deployer.js.map +1 -0
- package/dist/erc8004-types.d.ts +94 -0
- package/dist/erc8004-types.d.ts.map +1 -0
- package/dist/erc8004-types.js +8 -0
- package/dist/erc8004-types.js.map +1 -0
- package/dist/index.d.ts +192 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +340 -0
- package/dist/index.js.map +1 -0
- package/dist/molten-types.d.ts +282 -0
- package/dist/molten-types.d.ts.map +1 -0
- package/dist/molten-types.js +8 -0
- package/dist/molten-types.js.map +1 -0
- package/dist/molten.d.ts +336 -0
- package/dist/molten.d.ts.map +1 -0
- package/dist/molten.js +560 -0
- package/dist/molten.js.map +1 -0
- package/dist/reader.d.ts +248 -0
- package/dist/reader.d.ts.map +1 -0
- package/dist/reader.js +487 -0
- package/dist/reader.js.map +1 -0
- package/dist/types.d.ts +244 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/vanity.d.ts +115 -0
- package/dist/vanity.d.ts.map +1 -0
- package/dist/vanity.js +166 -0
- package/dist/vanity.js.map +1 -0
- package/package.json +63 -0
package/dist/reader.js
ADDED
|
@@ -0,0 +1,487 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClawnchReader - Read on-chain token data from Clawncher contracts
|
|
3
|
+
*
|
|
4
|
+
* This class provides read-only access to token deployment info, vault allocations,
|
|
5
|
+
* vested dev buy allocations, fee configurations, and reward info.
|
|
6
|
+
*
|
|
7
|
+
* Used by frontends to display token detail pages and admin functionality.
|
|
8
|
+
*/
|
|
9
|
+
import { formatUnits, } from 'viem';
|
|
10
|
+
import { base, baseSepolia } from 'viem/chains';
|
|
11
|
+
import { ClawnchFactoryABI, ClawnchFeeLockerABI, ClawnchLpLockerABI, ClawnchVaultABI, ClawncherVestedDevBuyABI, ClawnchMevModuleABI, ClawnchTokenABI, ERC20ABI, } from './abis.js';
|
|
12
|
+
import { getAddresses } from './addresses.js';
|
|
13
|
+
/**
|
|
14
|
+
* ClawnchReader - Read on-chain token data
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { ClawnchReader } from '@clawnch/clawncher-sdk';
|
|
19
|
+
* import { createPublicClient, http } from 'viem';
|
|
20
|
+
* import { baseSepolia } from 'viem/chains';
|
|
21
|
+
*
|
|
22
|
+
* const publicClient = createPublicClient({
|
|
23
|
+
* chain: baseSepolia,
|
|
24
|
+
* transport: http(),
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* const reader = new ClawnchReader({
|
|
28
|
+
* publicClient,
|
|
29
|
+
* network: 'sepolia',
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Get full token details
|
|
33
|
+
* const details = await reader.getTokenDetails('0x...');
|
|
34
|
+
*
|
|
35
|
+
* // Get vault allocation
|
|
36
|
+
* const vault = await reader.getVaultAllocation('0x...');
|
|
37
|
+
*
|
|
38
|
+
* // Get vested dev buy allocation
|
|
39
|
+
* const vested = await reader.getVestedDevBuyAllocation('0x...');
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export class ClawnchReader {
|
|
43
|
+
publicClient;
|
|
44
|
+
network;
|
|
45
|
+
constructor(config) {
|
|
46
|
+
this.publicClient = config.publicClient;
|
|
47
|
+
this.network = config.network;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Get contract addresses for configured network
|
|
51
|
+
*/
|
|
52
|
+
getAddresses() {
|
|
53
|
+
return getAddresses(this.network);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Get the chain for the configured network
|
|
57
|
+
*/
|
|
58
|
+
getChain() {
|
|
59
|
+
return this.network === 'mainnet' ? base : baseSepolia;
|
|
60
|
+
}
|
|
61
|
+
// =========================================================================
|
|
62
|
+
// Token Info
|
|
63
|
+
// =========================================================================
|
|
64
|
+
/**
|
|
65
|
+
* Get basic ERC20 token info
|
|
66
|
+
*/
|
|
67
|
+
async getTokenInfo(token) {
|
|
68
|
+
const [name, symbol, decimals, totalSupply] = await Promise.all([
|
|
69
|
+
this.publicClient.readContract({
|
|
70
|
+
address: token,
|
|
71
|
+
abi: ERC20ABI,
|
|
72
|
+
functionName: 'name',
|
|
73
|
+
}),
|
|
74
|
+
this.publicClient.readContract({
|
|
75
|
+
address: token,
|
|
76
|
+
abi: ERC20ABI,
|
|
77
|
+
functionName: 'symbol',
|
|
78
|
+
}),
|
|
79
|
+
this.publicClient.readContract({
|
|
80
|
+
address: token,
|
|
81
|
+
abi: ERC20ABI,
|
|
82
|
+
functionName: 'decimals',
|
|
83
|
+
}),
|
|
84
|
+
this.publicClient.readContract({
|
|
85
|
+
address: token,
|
|
86
|
+
abi: ERC20ABI,
|
|
87
|
+
functionName: 'totalSupply',
|
|
88
|
+
}),
|
|
89
|
+
]);
|
|
90
|
+
return { name, symbol, decimals, totalSupply };
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get Clawncher token metadata using allData() single call
|
|
94
|
+
*
|
|
95
|
+
* Returns originalAdmin, admin, imageUrl, metadata, context in one RPC call.
|
|
96
|
+
*/
|
|
97
|
+
async getTokenMetadata(token) {
|
|
98
|
+
try {
|
|
99
|
+
// Use allData() for a single RPC call instead of 4 separate calls
|
|
100
|
+
const result = await this.publicClient.readContract({
|
|
101
|
+
address: token,
|
|
102
|
+
abi: ClawnchTokenABI,
|
|
103
|
+
functionName: 'allData',
|
|
104
|
+
});
|
|
105
|
+
const [originalAdmin, admin, image, metadata, context] = result;
|
|
106
|
+
return {
|
|
107
|
+
tokenAdmin: admin,
|
|
108
|
+
originalAdmin,
|
|
109
|
+
image,
|
|
110
|
+
metadata,
|
|
111
|
+
context,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
// Fallback to individual calls if allData() is not available
|
|
116
|
+
const [admin, image, metadata, context] = await Promise.all([
|
|
117
|
+
this.publicClient.readContract({
|
|
118
|
+
address: token,
|
|
119
|
+
abi: ClawnchTokenABI,
|
|
120
|
+
functionName: 'admin',
|
|
121
|
+
}),
|
|
122
|
+
this.publicClient.readContract({
|
|
123
|
+
address: token,
|
|
124
|
+
abi: ClawnchTokenABI,
|
|
125
|
+
functionName: 'imageUrl',
|
|
126
|
+
}).catch(() => ''),
|
|
127
|
+
this.publicClient.readContract({
|
|
128
|
+
address: token,
|
|
129
|
+
abi: ClawnchTokenABI,
|
|
130
|
+
functionName: 'metadata',
|
|
131
|
+
}).catch(() => ''),
|
|
132
|
+
this.publicClient.readContract({
|
|
133
|
+
address: token,
|
|
134
|
+
abi: ClawnchTokenABI,
|
|
135
|
+
functionName: 'context',
|
|
136
|
+
}).catch(() => ''),
|
|
137
|
+
]);
|
|
138
|
+
return {
|
|
139
|
+
tokenAdmin: admin,
|
|
140
|
+
originalAdmin: admin, // fallback: assume same
|
|
141
|
+
image: image,
|
|
142
|
+
metadata: metadata,
|
|
143
|
+
context: context,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get token deployment info from factory
|
|
149
|
+
*/
|
|
150
|
+
async getDeploymentInfo(token) {
|
|
151
|
+
const addresses = this.getAddresses();
|
|
152
|
+
try {
|
|
153
|
+
const info = await this.publicClient.readContract({
|
|
154
|
+
address: addresses.clawnch.factory,
|
|
155
|
+
abi: ClawnchFactoryABI,
|
|
156
|
+
functionName: 'tokenDeploymentInfo',
|
|
157
|
+
args: [token],
|
|
158
|
+
});
|
|
159
|
+
const result = info;
|
|
160
|
+
// If token is zero address, it's not a Clawncher token
|
|
161
|
+
if (result.token === '0x0000000000000000000000000000000000000000') {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
token: result.token,
|
|
166
|
+
hook: result.hook,
|
|
167
|
+
locker: result.locker,
|
|
168
|
+
extensions: result.extensions,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// =========================================================================
|
|
176
|
+
// Vault
|
|
177
|
+
// =========================================================================
|
|
178
|
+
/**
|
|
179
|
+
* Get vault allocation for a token
|
|
180
|
+
*/
|
|
181
|
+
async getVaultAllocation(token) {
|
|
182
|
+
const addresses = this.getAddresses();
|
|
183
|
+
try {
|
|
184
|
+
const [allocation, amountAvailable] = await Promise.all([
|
|
185
|
+
this.publicClient.readContract({
|
|
186
|
+
address: addresses.clawnch.vault,
|
|
187
|
+
abi: ClawnchVaultABI,
|
|
188
|
+
functionName: 'allocation',
|
|
189
|
+
args: [token],
|
|
190
|
+
}),
|
|
191
|
+
this.publicClient.readContract({
|
|
192
|
+
address: addresses.clawnch.vault,
|
|
193
|
+
abi: ClawnchVaultABI,
|
|
194
|
+
functionName: 'amountAvailableToClaim',
|
|
195
|
+
args: [token],
|
|
196
|
+
}),
|
|
197
|
+
]);
|
|
198
|
+
const [tokenAddr, amountTotal, amountClaimed, lockupEndTime, vestingEndTime, admin] = allocation;
|
|
199
|
+
// If lockupEndTime is 0, no allocation exists
|
|
200
|
+
if (lockupEndTime === 0n) {
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
204
|
+
const isUnlocked = now >= lockupEndTime;
|
|
205
|
+
const isFullyVested = now >= vestingEndTime;
|
|
206
|
+
let percentVested = 0;
|
|
207
|
+
if (isFullyVested) {
|
|
208
|
+
percentVested = 100;
|
|
209
|
+
}
|
|
210
|
+
else if (isUnlocked && vestingEndTime > lockupEndTime) {
|
|
211
|
+
const elapsed = now - lockupEndTime;
|
|
212
|
+
const vestingDuration = vestingEndTime - lockupEndTime;
|
|
213
|
+
percentVested = Number((elapsed * 100n) / vestingDuration);
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
token: tokenAddr,
|
|
217
|
+
amountTotal,
|
|
218
|
+
amountClaimed,
|
|
219
|
+
lockupEndTime,
|
|
220
|
+
vestingEndTime,
|
|
221
|
+
admin,
|
|
222
|
+
amountAvailable: amountAvailable,
|
|
223
|
+
isUnlocked,
|
|
224
|
+
isFullyVested,
|
|
225
|
+
percentVested,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// =========================================================================
|
|
233
|
+
// Vested Dev Buy
|
|
234
|
+
// =========================================================================
|
|
235
|
+
/**
|
|
236
|
+
* Get vested dev buy allocation for a token
|
|
237
|
+
*/
|
|
238
|
+
async getVestedDevBuyAllocation(token) {
|
|
239
|
+
const addresses = this.getAddresses();
|
|
240
|
+
// Check if vestedDevBuy is deployed
|
|
241
|
+
if (addresses.clawnch.vestedDevBuy === '0x0000000000000000000000000000000000000000') {
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const [allocation, amountAvailable] = await Promise.all([
|
|
246
|
+
this.publicClient.readContract({
|
|
247
|
+
address: addresses.clawnch.vestedDevBuy,
|
|
248
|
+
abi: ClawncherVestedDevBuyABI,
|
|
249
|
+
functionName: 'allocation',
|
|
250
|
+
args: [token],
|
|
251
|
+
}),
|
|
252
|
+
this.publicClient.readContract({
|
|
253
|
+
address: addresses.clawnch.vestedDevBuy,
|
|
254
|
+
abi: ClawncherVestedDevBuyABI,
|
|
255
|
+
functionName: 'amountAvailableToClaim',
|
|
256
|
+
args: [token],
|
|
257
|
+
}),
|
|
258
|
+
]);
|
|
259
|
+
const [tokenAddr, amountTotal, amountClaimed, lockupEndTime, vestingEndTime, admin] = allocation;
|
|
260
|
+
// If lockupEndTime is 0, no allocation exists
|
|
261
|
+
if (lockupEndTime === 0n) {
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
264
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
265
|
+
const isUnlocked = now >= lockupEndTime;
|
|
266
|
+
const isFullyVested = now >= vestingEndTime;
|
|
267
|
+
let percentVested = 0;
|
|
268
|
+
if (isFullyVested) {
|
|
269
|
+
percentVested = 100;
|
|
270
|
+
}
|
|
271
|
+
else if (isUnlocked && vestingEndTime > lockupEndTime) {
|
|
272
|
+
const elapsed = now - lockupEndTime;
|
|
273
|
+
const vestingDuration = vestingEndTime - lockupEndTime;
|
|
274
|
+
percentVested = Number((elapsed * 100n) / vestingDuration);
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
token: tokenAddr,
|
|
278
|
+
amountTotal,
|
|
279
|
+
amountClaimed,
|
|
280
|
+
lockupEndTime,
|
|
281
|
+
vestingEndTime,
|
|
282
|
+
admin,
|
|
283
|
+
amountAvailable: amountAvailable,
|
|
284
|
+
isUnlocked,
|
|
285
|
+
isFullyVested,
|
|
286
|
+
percentVested,
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
catch {
|
|
290
|
+
return null;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// =========================================================================
|
|
294
|
+
// Rewards
|
|
295
|
+
// =========================================================================
|
|
296
|
+
/**
|
|
297
|
+
* Get token reward info (recipients, positions) from LP locker
|
|
298
|
+
*/
|
|
299
|
+
async getTokenRewards(token) {
|
|
300
|
+
const addresses = this.getAddresses();
|
|
301
|
+
try {
|
|
302
|
+
const rewards = await this.publicClient.readContract({
|
|
303
|
+
address: addresses.clawnch.locker,
|
|
304
|
+
abi: ClawnchLpLockerABI,
|
|
305
|
+
functionName: 'tokenRewards',
|
|
306
|
+
args: [token],
|
|
307
|
+
});
|
|
308
|
+
const result = rewards;
|
|
309
|
+
return {
|
|
310
|
+
token: result.token,
|
|
311
|
+
poolKey: result.poolKey,
|
|
312
|
+
positionId: result.positionId,
|
|
313
|
+
numPositions: result.numPositions,
|
|
314
|
+
rewardBps: result.rewardBps,
|
|
315
|
+
rewardAdmins: result.rewardAdmins,
|
|
316
|
+
rewardRecipients: result.rewardRecipients,
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
return null;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
/**
|
|
324
|
+
* Get available fees for a wallet on a specific token
|
|
325
|
+
*/
|
|
326
|
+
async getAvailableFees(wallet, token) {
|
|
327
|
+
const addresses = this.getAddresses();
|
|
328
|
+
try {
|
|
329
|
+
const fees = await this.publicClient.readContract({
|
|
330
|
+
address: addresses.clawnch.feeLocker,
|
|
331
|
+
abi: ClawnchFeeLockerABI,
|
|
332
|
+
functionName: 'availableFees',
|
|
333
|
+
args: [wallet, token],
|
|
334
|
+
});
|
|
335
|
+
return fees;
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
return 0n;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Get all available fees for a wallet across multiple tokens
|
|
343
|
+
*/
|
|
344
|
+
async getWalletFees(wallet, tokens) {
|
|
345
|
+
const addresses = this.getAddresses();
|
|
346
|
+
const results = await Promise.all(tokens.map(async (token) => {
|
|
347
|
+
const [fees, symbol] = await Promise.all([
|
|
348
|
+
this.getAvailableFees(wallet, token),
|
|
349
|
+
this.publicClient.readContract({
|
|
350
|
+
address: token,
|
|
351
|
+
abi: ERC20ABI,
|
|
352
|
+
functionName: 'symbol',
|
|
353
|
+
}).catch(() => 'UNKNOWN'),
|
|
354
|
+
]);
|
|
355
|
+
return {
|
|
356
|
+
token,
|
|
357
|
+
symbol: symbol,
|
|
358
|
+
availableFees: fees,
|
|
359
|
+
formattedFees: formatUnits(fees, 18),
|
|
360
|
+
};
|
|
361
|
+
}));
|
|
362
|
+
// For WETH total, check available WETH fees
|
|
363
|
+
const wethFees = await this.getAvailableFees(wallet, addresses.infrastructure.weth);
|
|
364
|
+
return {
|
|
365
|
+
wallet,
|
|
366
|
+
tokens: results,
|
|
367
|
+
totalWeth: wethFees,
|
|
368
|
+
formattedTotalWeth: formatUnits(wethFees, 18),
|
|
369
|
+
};
|
|
370
|
+
}
|
|
371
|
+
// =========================================================================
|
|
372
|
+
// MEV Protection
|
|
373
|
+
// =========================================================================
|
|
374
|
+
/**
|
|
375
|
+
* Get MEV protection config for a pool by its poolId (bytes32)
|
|
376
|
+
*
|
|
377
|
+
* Use `getMevConfigForToken()` if you have a token address instead of poolId.
|
|
378
|
+
*/
|
|
379
|
+
async getMevConfig(poolId) {
|
|
380
|
+
const addresses = this.getAddresses();
|
|
381
|
+
try {
|
|
382
|
+
const [config, startTime, currentFee] = await Promise.all([
|
|
383
|
+
this.publicClient.readContract({
|
|
384
|
+
address: addresses.clawnch.mevModule,
|
|
385
|
+
abi: ClawnchMevModuleABI,
|
|
386
|
+
functionName: 'feeConfig',
|
|
387
|
+
args: [poolId],
|
|
388
|
+
}),
|
|
389
|
+
this.publicClient.readContract({
|
|
390
|
+
address: addresses.clawnch.mevModule,
|
|
391
|
+
abi: ClawnchMevModuleABI,
|
|
392
|
+
functionName: 'poolStartTime',
|
|
393
|
+
args: [poolId],
|
|
394
|
+
}),
|
|
395
|
+
this.publicClient.readContract({
|
|
396
|
+
address: addresses.clawnch.mevModule,
|
|
397
|
+
abi: ClawnchMevModuleABI,
|
|
398
|
+
functionName: 'getFee',
|
|
399
|
+
args: [poolId],
|
|
400
|
+
}),
|
|
401
|
+
]);
|
|
402
|
+
const [startingFee, endingFee, secondsToDecay] = config;
|
|
403
|
+
const poolStartTime = startTime;
|
|
404
|
+
// If secondsToDecay is 0, MEV config doesn't exist for this pool
|
|
405
|
+
if (secondsToDecay === 0n) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
const decayEndTime = poolStartTime + secondsToDecay;
|
|
409
|
+
const now = BigInt(Math.floor(Date.now() / 1000));
|
|
410
|
+
return {
|
|
411
|
+
startingFee,
|
|
412
|
+
endingFee,
|
|
413
|
+
secondsToDecay,
|
|
414
|
+
poolStartTime,
|
|
415
|
+
decayEndTime,
|
|
416
|
+
currentFee: currentFee,
|
|
417
|
+
isDecayComplete: now >= decayEndTime,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
return null;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Get MEV protection config for a token (resolves poolId via LP locker first)
|
|
426
|
+
*/
|
|
427
|
+
async getMevConfigForToken(token) {
|
|
428
|
+
// Get the poolId from token rewards (which has the poolKey)
|
|
429
|
+
const rewards = await this.getTokenRewards(token);
|
|
430
|
+
if (!rewards)
|
|
431
|
+
return null;
|
|
432
|
+
// Compute poolId from poolKey: keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))
|
|
433
|
+
const { encodeAbiParameters, parseAbiParameters, keccak256 } = await import('viem');
|
|
434
|
+
const poolId = keccak256(encodeAbiParameters(parseAbiParameters('address, address, uint24, int24, address'), [
|
|
435
|
+
rewards.poolKey.currency0,
|
|
436
|
+
rewards.poolKey.currency1,
|
|
437
|
+
rewards.poolKey.fee,
|
|
438
|
+
rewards.poolKey.tickSpacing,
|
|
439
|
+
rewards.poolKey.hooks,
|
|
440
|
+
]));
|
|
441
|
+
return this.getMevConfig(poolId);
|
|
442
|
+
}
|
|
443
|
+
// =========================================================================
|
|
444
|
+
// Full Token Details
|
|
445
|
+
// =========================================================================
|
|
446
|
+
/**
|
|
447
|
+
* Get complete token details for UI display
|
|
448
|
+
*
|
|
449
|
+
* Combines basic token info, deployment info, vault, vested dev buy,
|
|
450
|
+
* reward recipients, and MEV config into a single response.
|
|
451
|
+
*/
|
|
452
|
+
async getTokenDetails(token) {
|
|
453
|
+
// First check if this is a Clawncher token
|
|
454
|
+
const deployment = await this.getDeploymentInfo(token);
|
|
455
|
+
if (!deployment) {
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
// Fetch all data in parallel (except MEV which needs poolId from rewards)
|
|
459
|
+
const [tokenInfo, tokenMetadata, rewards, vault, vestedDevBuy,] = await Promise.all([
|
|
460
|
+
this.getTokenInfo(token),
|
|
461
|
+
this.getTokenMetadata(token),
|
|
462
|
+
this.getTokenRewards(token),
|
|
463
|
+
this.getVaultAllocation(token),
|
|
464
|
+
this.getVestedDevBuyAllocation(token),
|
|
465
|
+
]);
|
|
466
|
+
// MEV config needs poolId from rewards, so fetch it after
|
|
467
|
+
const mev = await this.getMevConfigForToken(token);
|
|
468
|
+
return {
|
|
469
|
+
address: token,
|
|
470
|
+
...tokenInfo,
|
|
471
|
+
...tokenMetadata,
|
|
472
|
+
deployment,
|
|
473
|
+
rewards,
|
|
474
|
+
vault,
|
|
475
|
+
vestedDevBuy,
|
|
476
|
+
mev,
|
|
477
|
+
};
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Check if a token was deployed via Clawncher
|
|
481
|
+
*/
|
|
482
|
+
async isClawnchToken(token) {
|
|
483
|
+
const deployment = await this.getDeploymentInfo(token);
|
|
484
|
+
return deployment !== null;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"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"}
|