@uniswap/client-data-api 0.0.224 → 0.0.226

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.
@@ -0,0 +1,1375 @@
1
+ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf";
2
+ import { Message, proto3 } from "@bufbuild/protobuf";
3
+ import { Launch, LaunchesOrderBy, LaunchHolder, LaunchListFilter, Launchpad, TimestampedValue, TokenTrade } from "./types_pb.js";
4
+ import { PageRequest, PageResponse } from "./common_pb.js";
5
+ /**
6
+ * @generated from enum launches.v1.ActivityStatsWindow
7
+ */
8
+ export declare enum ActivityStatsWindow {
9
+ /**
10
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_UNSPECIFIED = 0;
11
+ */
12
+ UNSPECIFIED = 0,
13
+ /**
14
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_LAST_5M = 1;
15
+ */
16
+ LAST_5M = 1,
17
+ /**
18
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_LAST_1H = 2;
19
+ */
20
+ LAST_1H = 2,
21
+ /**
22
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_LAST_6H = 3;
23
+ */
24
+ LAST_6H = 3,
25
+ /**
26
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_LAST_24H = 4;
27
+ */
28
+ LAST_24H = 4,
29
+ /**
30
+ * Anchored at launch creation; for graduated CCA launches, at graduation
31
+ * (the auction's migration into its pool).
32
+ *
33
+ * @generated from enum value: ACTIVITY_STATS_WINDOW_SINCE_LAUNCH = 5;
34
+ */
35
+ SINCE_LAUNCH = 5
36
+ }
37
+ /**
38
+ * @generated from message launches.v1.TokenIdentifier
39
+ */
40
+ export declare class TokenIdentifier extends Message<TokenIdentifier> {
41
+ /**
42
+ * @generated from field: uint32 chain_id = 1;
43
+ */
44
+ chainId: number;
45
+ /**
46
+ * @generated from field: string address = 2;
47
+ */
48
+ address: string;
49
+ constructor(data?: PartialMessage<TokenIdentifier>);
50
+ static readonly runtime: typeof proto3;
51
+ static readonly typeName = "launches.v1.TokenIdentifier";
52
+ static readonly fields: FieldList;
53
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TokenIdentifier;
54
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TokenIdentifier;
55
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TokenIdentifier;
56
+ static equals(a: TokenIdentifier | PlainMessage<TokenIdentifier> | undefined, b: TokenIdentifier | PlainMessage<TokenIdentifier> | undefined): boolean;
57
+ }
58
+ /**
59
+ * The launchpad registry, for building launchpad filters/labels client-side.
60
+ *
61
+ * @generated from message launches.v1.ListLaunchpadsRequest
62
+ */
63
+ export declare class ListLaunchpadsRequest extends Message<ListLaunchpadsRequest> {
64
+ constructor(data?: PartialMessage<ListLaunchpadsRequest>);
65
+ static readonly runtime: typeof proto3;
66
+ static readonly typeName = "launches.v1.ListLaunchpadsRequest";
67
+ static readonly fields: FieldList;
68
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListLaunchpadsRequest;
69
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListLaunchpadsRequest;
70
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListLaunchpadsRequest;
71
+ static equals(a: ListLaunchpadsRequest | PlainMessage<ListLaunchpadsRequest> | undefined, b: ListLaunchpadsRequest | PlainMessage<ListLaunchpadsRequest> | undefined): boolean;
72
+ }
73
+ /**
74
+ * @generated from message launches.v1.ListLaunchpadsResponse
75
+ */
76
+ export declare class ListLaunchpadsResponse extends Message<ListLaunchpadsResponse> {
77
+ /**
78
+ * @generated from field: repeated launches.v1.Launchpad launchpads = 1;
79
+ */
80
+ launchpads: Launchpad[];
81
+ constructor(data?: PartialMessage<ListLaunchpadsResponse>);
82
+ static readonly runtime: typeof proto3;
83
+ static readonly typeName = "launches.v1.ListLaunchpadsResponse";
84
+ static readonly fields: FieldList;
85
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListLaunchpadsResponse;
86
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListLaunchpadsResponse;
87
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListLaunchpadsResponse;
88
+ static equals(a: ListLaunchpadsResponse | PlainMessage<ListLaunchpadsResponse> | undefined, b: ListLaunchpadsResponse | PlainMessage<ListLaunchpadsResponse> | undefined): boolean;
89
+ }
90
+ /**
91
+ * Token launches aggregated across launchpads, newest first by default
92
+ * (searched requests default to FDV instead — see sort_by and query). One
93
+ * entry per (token, launchpad) — the earliest pool wins when a launchpad
94
+ * creates several pools for the same token.
95
+ *
96
+ * @generated from message launches.v1.ListLaunchesRequest
97
+ */
98
+ export declare class ListLaunchesRequest extends Message<ListLaunchesRequest> {
99
+ /**
100
+ * Deprecated: use launchpad_ids. When both are set they are unioned.
101
+ *
102
+ * @generated from field: optional string launchpad_id = 1 [deprecated = true];
103
+ * @deprecated
104
+ */
105
+ launchpadId?: string;
106
+ /**
107
+ * empty = all supported chains
108
+ *
109
+ * @generated from field: repeated uint32 chain_ids = 2;
110
+ */
111
+ chainIds: number[];
112
+ /**
113
+ * UNSPECIFIED resolves server-side: with a window -> VOLUME_1D, else with
114
+ * a query -> FDV descending (largest matches first, with the first page
115
+ * led by a small newest-first block of matches launched in the trailing
116
+ * hour so a just-launched token stays findable by its creator), else
117
+ * LAUNCHED_AT (newest first). An explicit value always wins.
118
+ *
119
+ * @generated from field: launches.v1.LaunchesOrderBy sort_by = 3;
120
+ */
121
+ sortBy: LaunchesOrderBy;
122
+ /**
123
+ * @generated from field: optional launches.v1.PageRequest page = 4;
124
+ */
125
+ page?: PageRequest;
126
+ /**
127
+ * Launchpads to serve. Empty = the server-side default scope (the
128
+ * listable set plus uniswap-cca), so clients don't have to pre-scope with
129
+ * ListLaunchpads. The Uniswap brand spans two ids behind one "Uniswap"
130
+ * filter — uniswap-bonding-curve (instant launches) and uniswap-cca (CCA
131
+ * crowd-launch auctions) — so an explicit filter naming either id expands
132
+ * to the full brand set (both ids); there is no mechanism-scoped opt-out.
133
+ * If a consumer ever needs one, the expansion moves client-side (the
134
+ * filter chip sends both ids itself).
135
+ *
136
+ * @generated from field: repeated string launchpad_ids = 5;
137
+ */
138
+ launchpadIds: string[];
139
+ /**
140
+ * launch-recency window
141
+ *
142
+ * @generated from field: optional launches.v1.LaunchListFilter filter = 6;
143
+ */
144
+ filter?: LaunchListFilter;
145
+ /**
146
+ * Sort direction for sort_by; false (default) = descending (highest first).
147
+ * Null/empty metric rows sort last in both directions.
148
+ *
149
+ * @generated from field: optional bool ascending = 7;
150
+ */
151
+ ascending?: boolean;
152
+ /**
153
+ * Launchpad search: keep only launches whose token name OR
154
+ * symbol starts with this string, compared case-insensitively (prefix
155
+ * match only — no fuzzy/substring matching). LIKE metacharacters in the
156
+ * query are treated literally. An EXPLICIT sort_by/ascending orders the
157
+ * filtered results exactly as it does the unfiltered list; with sort_by
158
+ * UNSPECIFIED a searched request ranks by FDV descending (see sort_by) so
159
+ * the launch a name is actually looking for outranks whatever launched
160
+ * since. Whitespace-only queries are treated as absent; input is trimmed,
161
+ * whitespace-collapsed, and capped at 100 characters server-side.
162
+ *
163
+ * @generated from field: optional string query = 8;
164
+ */
165
+ query?: string;
166
+ /**
167
+ * "My launches": keep only launches created by this wallet — the same
168
+ * address served as Launch.creator_address (launched_tokens.creator_wallet,
169
+ * the launch tx's from address). Any case is accepted; the server
170
+ * EIP-55-checksums it before comparing, and rejects a non-address with
171
+ * INVALID_ARGUMENT. Empty/absent applies no filter.
172
+ *
173
+ * Coverage is the Uniswap launchpads only (uniswap-cca crowd-launch
174
+ * auctions + uniswap-bonding-curve instant launches). Third-party-launchpad
175
+ * launches are served from a materialized table with no creator column and
176
+ * are dropped from a creator-filtered read — they carry no
177
+ * Launch.creator_address today either, so nothing filterable is lost.
178
+ *
179
+ * Not supported with sort_by = TRENDING: that ranking is built from a
180
+ * candidate scan with no creator column, so the combination is rejected
181
+ * rather than served unfiltered or silently re-sorted.
182
+ *
183
+ * @generated from field: optional string creator_address = 9;
184
+ */
185
+ creatorAddress?: string;
186
+ /**
187
+ * "Linked X": keep only launches that serve Launch.x_handle — i.e. whose
188
+ * creator-declared X handle passed its inline-at-ingest Ed25519
189
+ * verification (launched_tokens.x_handle_status = 'passed' with a
190
+ * non-empty handle). Exactly the rows the response decorates with
191
+ * x_handle, but filtered IN the ranked query before pagination, so the
192
+ * result is the top launches with a linked X across ALL launches — not a
193
+ * client-side pass over one pre-cut page. False/absent applies no filter.
194
+ *
195
+ * Coverage is the Uniswap launchpads only (uniswap-cca crowd-launch
196
+ * auctions + uniswap-bonding-curve instant launches): x_handle is only
197
+ * ever attested for factory launches, so third-party-launchpad launches —
198
+ * which never serve x_handle — are dropped from a filtered read and
199
+ * nothing filterable is lost.
200
+ *
201
+ * Not supported with sort_by = TRENDING: that ranking is built from a
202
+ * candidate scan with no X-handle column, so the combination is rejected
203
+ * with INVALID_ARGUMENT rather than served unfiltered or silently
204
+ * re-sorted. Composes with every other sort, VOLUME_1D included.
205
+ *
206
+ * @generated from field: optional bool linked_x_only = 10;
207
+ */
208
+ linkedXOnly?: boolean;
209
+ /**
210
+ * Launch lookup by token: keep only launches of these token addresses.
211
+ * Any casing is accepted (the server EIP-55-checksums and dedupes before
212
+ * comparing); a non-address entry fails the request with INVALID_ARGUMENT.
213
+ * Empty/absent applies no filter. At most 100 entries.
214
+ *
215
+ * Built for token pages resolving a launch by address — e.g. an instant
216
+ * launch that has aged off the newest-100 feed window — so it composes
217
+ * with launchpad_ids/chain_ids and serves the same row shape and stats
218
+ * sources as the unfiltered feed.
219
+ *
220
+ * Coverage is the Uniswap launchpads only (uniswap-cca crowd-launch
221
+ * auctions + uniswap-bonding-curve instant launches): neither
222
+ * third-party-launchpad read can express a token predicate, so that arm
223
+ * is dropped from a token-filtered read rather than served unfiltered.
224
+ * Not supported with sort_by = TRENDING (rejected), same contract as
225
+ * creator_address.
226
+ *
227
+ * CCA rows additionally inherit the crowd-launch feed's
228
+ * `is_quick_launch = true` gate; an unclassified or institutional
229
+ * auction will not match.
230
+ *
231
+ * @generated from field: repeated string token_addresses = 11;
232
+ */
233
+ tokenAddresses: string[];
234
+ constructor(data?: PartialMessage<ListLaunchesRequest>);
235
+ static readonly runtime: typeof proto3;
236
+ static readonly typeName = "launches.v1.ListLaunchesRequest";
237
+ static readonly fields: FieldList;
238
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListLaunchesRequest;
239
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListLaunchesRequest;
240
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListLaunchesRequest;
241
+ static equals(a: ListLaunchesRequest | PlainMessage<ListLaunchesRequest> | undefined, b: ListLaunchesRequest | PlainMessage<ListLaunchesRequest> | undefined): boolean;
242
+ }
243
+ /**
244
+ * @generated from message launches.v1.ListLaunchesResponse
245
+ */
246
+ export declare class ListLaunchesResponse extends Message<ListLaunchesResponse> {
247
+ /**
248
+ * @generated from field: repeated launches.v1.Launch launches = 1;
249
+ */
250
+ launches: Launch[];
251
+ /**
252
+ * @generated from field: launches.v1.PageResponse page = 2;
253
+ */
254
+ page?: PageResponse;
255
+ constructor(data?: PartialMessage<ListLaunchesResponse>);
256
+ static readonly runtime: typeof proto3;
257
+ static readonly typeName = "launches.v1.ListLaunchesResponse";
258
+ static readonly fields: FieldList;
259
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListLaunchesResponse;
260
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListLaunchesResponse;
261
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListLaunchesResponse;
262
+ static equals(a: ListLaunchesResponse | PlainMessage<ListLaunchesResponse> | undefined, b: ListLaunchesResponse | PlainMessage<ListLaunchesResponse> | undefined): boolean;
263
+ }
264
+ /**
265
+ * Holder data for ONE launch token (the TDP Holders module), computed at
266
+ * query time over the raw launch-transfers feed (ClickHouse,
267
+ * reorg-excluded) behind a short SWR cache. Only tokens created via the
268
+ * Uniswap token factory (CCA + bonding-curve launches) have transfer rows.
269
+ *
270
+ * @generated from message launches.v1.GetLaunchHoldersRequest
271
+ */
272
+ export declare class GetLaunchHoldersRequest extends Message<GetLaunchHoldersRequest> {
273
+ /**
274
+ * @generated from field: uint32 chain_id = 1;
275
+ */
276
+ chainId: number;
277
+ /**
278
+ * @generated from field: string token_address = 2;
279
+ */
280
+ tokenAddress: string;
281
+ constructor(data?: PartialMessage<GetLaunchHoldersRequest>);
282
+ static readonly runtime: typeof proto3;
283
+ static readonly typeName = "launches.v1.GetLaunchHoldersRequest";
284
+ static readonly fields: FieldList;
285
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchHoldersRequest;
286
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchHoldersRequest;
287
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchHoldersRequest;
288
+ static equals(a: GetLaunchHoldersRequest | PlainMessage<GetLaunchHoldersRequest> | undefined, b: GetLaunchHoldersRequest | PlainMessage<GetLaunchHoldersRequest> | undefined): boolean;
289
+ }
290
+ /**
291
+ * Absence contract mirrors the Launch holder fields: when the token has no
292
+ * ingested transfers (non-factory token, ingestion lag, or every row
293
+ * reorged out) holders is empty and every optional field is unset, never a
294
+ * fake 0, so clients can tell no-data from a real zero. Upstream failures
295
+ * fail the RPC instead of serving empty.
296
+ *
297
+ * @generated from message launches.v1.GetLaunchHoldersResponse
298
+ */
299
+ export declare class GetLaunchHoldersResponse extends Message<GetLaunchHoldersResponse> {
300
+ /**
301
+ * Top-100 holders by balance, descending. Raw Etherscan-style rows over
302
+ * net transfer balances, INCLUDING burned tokens: the 0x…dEaD burn sink
303
+ * appears while it holds a balance, and cumulative burns to the zero
304
+ * address appear as a synthetic zero-address row — so held + burned rows
305
+ * sum to minted_supply. Burn rows are flagged (is_burn_address); clients
306
+ * that want them out filter the flag.
307
+ *
308
+ * @generated from field: repeated launches.v1.LaunchHolder holders = 1;
309
+ */
310
+ holders: LaunchHolder[];
311
+ /**
312
+ * Exact holder count, same semantics as Launch.holder_count (addresses
313
+ * with a positive net balance; burn sinks like 0x…dEaD included while
314
+ * they hold a balance, the zero address never). The synthetic zero-address
315
+ * burn row is never counted.
316
+ *
317
+ * @generated from field: optional int32 holder_count = 2;
318
+ */
319
+ holderCount?: number;
320
+ /**
321
+ * holder_count minus the count as of 24h ago (signed).
322
+ *
323
+ * @generated from field: optional int32 holder_count_change_24h = 3;
324
+ */
325
+ holderCountChange24h?: number;
326
+ /**
327
+ * Trailing 7-day holder-count trend for the stat sparkline: one point per
328
+ * UTC-now-anchored 24h mark, oldest first, last point = holder_count now.
329
+ *
330
+ * @generated from field: repeated launches.v1.TimestampedValue holder_count_trend = 4;
331
+ */
332
+ holderCountTrend: TimestampedValue[];
333
+ /**
334
+ * Share of minted_supply held by the top 10 holder rows that are neither
335
+ * burn sinks nor the pool's custody row (LaunchHolder.is_pool_address),
336
+ * percent in [0, 100]. Burned tokens can never concentrate and the pool
337
+ * is the market itself, so both are excluded here (unlike the rows above).
338
+ *
339
+ * @generated from field: optional double top10_supply_pct = 5;
340
+ */
341
+ top10SupplyPct?: number;
342
+ /**
343
+ * Cumulative value ever minted, raw base units as a decimal string — the
344
+ * denominator of every supply_pct in this response. Burn-inclusive by
345
+ * construction: holder balances + burned rows sum to it. On-chain
346
+ * totalSupply-style circulating figures are client-derivable as
347
+ * minted_supply - burned_to_zero.
348
+ *
349
+ * @generated from field: optional string minted_supply = 6;
350
+ */
351
+ mintedSupply?: string;
352
+ /**
353
+ * Same definitions as Launch.burned_to_zero / burned_to_dead.
354
+ *
355
+ * @generated from field: optional string burned_to_zero = 7;
356
+ */
357
+ burnedToZero?: string;
358
+ /**
359
+ * @generated from field: optional string burned_to_dead = 8;
360
+ */
361
+ burnedToDead?: string;
362
+ constructor(data?: PartialMessage<GetLaunchHoldersResponse>);
363
+ static readonly runtime: typeof proto3;
364
+ static readonly typeName = "launches.v1.GetLaunchHoldersResponse";
365
+ static readonly fields: FieldList;
366
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchHoldersResponse;
367
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchHoldersResponse;
368
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchHoldersResponse;
369
+ static equals(a: GetLaunchHoldersResponse | PlainMessage<GetLaunchHoldersResponse> | undefined, b: GetLaunchHoldersResponse | PlainMessage<GetLaunchHoldersResponse> | undefined): boolean;
370
+ }
371
+ /**
372
+ * Server-computed per-window trade activity for a launch token (LP-1294):
373
+ * every window in one response, so the TDP Volume module's 5s poll is a
374
+ * single call instead of a client-side walk of GetTokenTrades. EVM-only.
375
+ * Served for tokens launched via the Uniswap token factory (CCA and
376
+ * bonding-curve launches); other tokens are a not_found error.
377
+ * CCA launches pre-graduation serve all-zero windows: bids are not trades,
378
+ * and the token does not swap until the auction migrates into its pool.
379
+ *
380
+ * @generated from message launches.v1.GetLaunchActivityStatsRequest
381
+ */
382
+ export declare class GetLaunchActivityStatsRequest extends Message<GetLaunchActivityStatsRequest> {
383
+ /**
384
+ * @generated from field: uint32 chain_id = 1;
385
+ */
386
+ chainId: number;
387
+ /**
388
+ * @generated from field: string token_address = 2;
389
+ */
390
+ tokenAddress: string;
391
+ constructor(data?: PartialMessage<GetLaunchActivityStatsRequest>);
392
+ static readonly runtime: typeof proto3;
393
+ static readonly typeName = "launches.v1.GetLaunchActivityStatsRequest";
394
+ static readonly fields: FieldList;
395
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchActivityStatsRequest;
396
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchActivityStatsRequest;
397
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchActivityStatsRequest;
398
+ static equals(a: GetLaunchActivityStatsRequest | PlainMessage<GetLaunchActivityStatsRequest> | undefined, b: GetLaunchActivityStatsRequest | PlainMessage<GetLaunchActivityStatsRequest> | undefined): boolean;
399
+ }
400
+ /**
401
+ * @generated from message launches.v1.GetLaunchActivityStatsResponse
402
+ */
403
+ export declare class GetLaunchActivityStatsResponse extends Message<GetLaunchActivityStatsResponse> {
404
+ /**
405
+ * One entry per window, always all five, in enum order.
406
+ *
407
+ * @generated from field: repeated launches.v1.LaunchActivityStatsWindow windows = 1;
408
+ */
409
+ windows: LaunchActivityStatsWindow[];
410
+ constructor(data?: PartialMessage<GetLaunchActivityStatsResponse>);
411
+ static readonly runtime: typeof proto3;
412
+ static readonly typeName = "launches.v1.GetLaunchActivityStatsResponse";
413
+ static readonly fields: FieldList;
414
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchActivityStatsResponse;
415
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchActivityStatsResponse;
416
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchActivityStatsResponse;
417
+ static equals(a: GetLaunchActivityStatsResponse | PlainMessage<GetLaunchActivityStatsResponse> | undefined, b: GetLaunchActivityStatsResponse | PlainMessage<GetLaunchActivityStatsResponse> | undefined): boolean;
418
+ }
419
+ /**
420
+ * Trade activity over one trailing window, split by direction from the
421
+ * trader's perspective. Unique counts are per trading wallet (the tx
422
+ * from-address, not the router) and are HLL-approximate (<1% error). USD
423
+ * volume values each swap at its ASOF token price; swaps with no known
424
+ * price contribute to counts but not to USD volume.
425
+ *
426
+ * @generated from message launches.v1.LaunchActivityStatsWindow
427
+ */
428
+ export declare class LaunchActivityStatsWindow extends Message<LaunchActivityStatsWindow> {
429
+ /**
430
+ * @generated from field: launches.v1.ActivityStatsWindow window = 1;
431
+ */
432
+ window: ActivityStatsWindow;
433
+ /**
434
+ * @generated from field: int32 buy_count = 2;
435
+ */
436
+ buyCount: number;
437
+ /**
438
+ * @generated from field: int32 sell_count = 3;
439
+ */
440
+ sellCount: number;
441
+ /**
442
+ * @generated from field: double buy_volume_usd = 4;
443
+ */
444
+ buyVolumeUsd: number;
445
+ /**
446
+ * @generated from field: double sell_volume_usd = 5;
447
+ */
448
+ sellVolumeUsd: number;
449
+ /**
450
+ * @generated from field: int32 unique_buyers = 6;
451
+ */
452
+ uniqueBuyers: number;
453
+ /**
454
+ * @generated from field: int32 unique_sellers = 7;
455
+ */
456
+ uniqueSellers: number;
457
+ constructor(data?: PartialMessage<LaunchActivityStatsWindow>);
458
+ static readonly runtime: typeof proto3;
459
+ static readonly typeName = "launches.v1.LaunchActivityStatsWindow";
460
+ static readonly fields: FieldList;
461
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): LaunchActivityStatsWindow;
462
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): LaunchActivityStatsWindow;
463
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): LaunchActivityStatsWindow;
464
+ static equals(a: LaunchActivityStatsWindow | PlainMessage<LaunchActivityStatsWindow> | undefined, b: LaunchActivityStatsWindow | PlainMessage<LaunchActivityStatsWindow> | undefined): boolean;
465
+ }
466
+ /**
467
+ * Per-wallet CCA auction claim aggregates for a launch token (LP-1296):
468
+ * the cost-basis seed for Top Traders PnL. Serves CCA launches ONLY —
469
+ * tokens launched via a Uniswap CCA auction; bonding-curve launches and
470
+ * non-factory tokens are a not_found error (curve tokens have no claims:
471
+ * their cost basis is the swap history alone). EVM-only.
472
+ *
473
+ * @generated from message launches.v1.GetLaunchClaimsRequest
474
+ */
475
+ export declare class GetLaunchClaimsRequest extends Message<GetLaunchClaimsRequest> {
476
+ /**
477
+ * @generated from field: uint32 chain_id = 1;
478
+ */
479
+ chainId: number;
480
+ /**
481
+ * @generated from field: string token_address = 2;
482
+ */
483
+ tokenAddress: string;
484
+ constructor(data?: PartialMessage<GetLaunchClaimsRequest>);
485
+ static readonly runtime: typeof proto3;
486
+ static readonly typeName = "launches.v1.GetLaunchClaimsRequest";
487
+ static readonly fields: FieldList;
488
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchClaimsRequest;
489
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchClaimsRequest;
490
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchClaimsRequest;
491
+ static equals(a: GetLaunchClaimsRequest | PlainMessage<GetLaunchClaimsRequest> | undefined, b: GetLaunchClaimsRequest | PlainMessage<GetLaunchClaimsRequest> | undefined): boolean;
492
+ }
493
+ /**
494
+ * One wallet's aggregate acquisition through the auction, folded across all
495
+ * of the wallet's bids (multiple bids per wallet are summed). Sourced from
496
+ * indexed bid terminal events, so bids exited post-auction with a partial
497
+ * fill are included — economically those tokens are auction acquisitions
498
+ * even when no explicit claim transaction exists.
499
+ *
500
+ * The client derives the wallet's TRUE unit cost as
501
+ * currency_spent / tokens_received. In a time-weighted CCA, bidders do NOT
502
+ * all pay the final clearing price (early accumulation is cheaper), so
503
+ * never seed cost basis from the auction-level clearing price when these
504
+ * rows are available.
505
+ *
506
+ * @generated from message launches.v1.LaunchClaim
507
+ */
508
+ export declare class LaunchClaim extends Message<LaunchClaim> {
509
+ /**
510
+ * EIP-55 checksummed wallet address.
511
+ *
512
+ * @generated from field: string wallet = 1;
513
+ */
514
+ wallet: string;
515
+ /**
516
+ * Total launch tokens the wallet received from the auction, raw uint256
517
+ * decimal string in token base units.
518
+ *
519
+ * @generated from field: string tokens_received = 2;
520
+ */
521
+ tokensReceived: string;
522
+ /**
523
+ * What the wallet actually spent, NET of refunds, as a raw uint256
524
+ * decimal string in the auction's raise-currency base units (see
525
+ * GetAuction for the currency): sum over the wallet's terminal bids of
526
+ * (bid amount - exit refund).
527
+ *
528
+ * @generated from field: string currency_spent = 3;
529
+ */
530
+ currencySpent: string;
531
+ /**
532
+ * Number of the wallet's bids folded into this row (bids claimed or
533
+ * exited with a nonzero fill).
534
+ *
535
+ * @generated from field: int32 claim_count = 4;
536
+ */
537
+ claimCount: number;
538
+ /**
539
+ * True when every bid the wallet placed on this auction has reached a
540
+ * terminal state (claimed or exited); false while any bid is still
541
+ * pending, i.e. tokens_received may still grow.
542
+ *
543
+ * @generated from field: bool fully_claimed = 5;
544
+ */
545
+ fullyClaimed: boolean;
546
+ constructor(data?: PartialMessage<LaunchClaim>);
547
+ static readonly runtime: typeof proto3;
548
+ static readonly typeName = "launches.v1.LaunchClaim";
549
+ static readonly fields: FieldList;
550
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): LaunchClaim;
551
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): LaunchClaim;
552
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): LaunchClaim;
553
+ static equals(a: LaunchClaim | PlainMessage<LaunchClaim> | undefined, b: LaunchClaim | PlainMessage<LaunchClaim> | undefined): boolean;
554
+ }
555
+ /**
556
+ * @generated from message launches.v1.GetLaunchClaimsResponse
557
+ */
558
+ export declare class GetLaunchClaimsResponse extends Message<GetLaunchClaimsResponse> {
559
+ /**
560
+ * One row per claiming wallet, ordered tokens_received DESC (wallet ASC
561
+ * tiebreak); empty when the auction has no terminal bids yet. Servers
562
+ * cap the list to the top wallets under that ordering (currently 1000),
563
+ * so the rows are the complete claimer set for any auction below the
564
+ * cap; total_claimed and unique_claimers ALWAYS cover every claimer,
565
+ * not just the returned rows.
566
+ *
567
+ * @generated from field: repeated launches.v1.LaunchClaim claims = 1;
568
+ */
569
+ claims: LaunchClaim[];
570
+ /**
571
+ * Total launch tokens received across ALL claiming wallets (the full
572
+ * population, even when claims is capped), raw uint256 decimal string
573
+ * in token base units.
574
+ *
575
+ * @generated from field: string total_claimed = 2;
576
+ */
577
+ totalClaimed: string;
578
+ /**
579
+ * Number of distinct claiming wallets in the full population (may
580
+ * exceed the number of rows in claims when the cap applies).
581
+ *
582
+ * @generated from field: int32 unique_claimers = 3;
583
+ */
584
+ uniqueClaimers: number;
585
+ constructor(data?: PartialMessage<GetLaunchClaimsResponse>);
586
+ static readonly runtime: typeof proto3;
587
+ static readonly typeName = "launches.v1.GetLaunchClaimsResponse";
588
+ static readonly fields: FieldList;
589
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchClaimsResponse;
590
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchClaimsResponse;
591
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchClaimsResponse;
592
+ static equals(a: GetLaunchClaimsResponse | PlainMessage<GetLaunchClaimsResponse> | undefined, b: GetLaunchClaimsResponse | PlainMessage<GetLaunchClaimsResponse> | undefined): boolean;
593
+ }
594
+ /**
595
+ * Creator-fee metrics for ONE Instant Launch token (LP-1332): the numbers
596
+ * behind the portfolio Fees panel — fees accumulated for the creator,
597
+ * claimable now, claimed to date, and auto-compounded back into the launch
598
+ * position. Computed from indexed FeeSplitter FeesCollected and claim
599
+ * recipient Claimed events with the launcher SDK's fee math, so the amounts
600
+ * match the on-chain per-position attribution exactly (per-collect
601
+ * multiply-before-divide flooring). Instant Launch tokens only: a token with
602
+ * neither indexed fee events nor a resolvable launch (CCA launches,
603
+ * non-factory tokens) is a not_found error. EVM-only.
604
+ *
605
+ * @generated from message launches.v1.GetLaunchCreatorFeesRequest
606
+ */
607
+ export declare class GetLaunchCreatorFeesRequest extends Message<GetLaunchCreatorFeesRequest> {
608
+ /**
609
+ * @generated from field: uint32 chain_id = 1;
610
+ */
611
+ chainId: number;
612
+ /**
613
+ * The launched token's address (any casing).
614
+ *
615
+ * @generated from field: string token_address = 2;
616
+ */
617
+ tokenAddress: string;
618
+ constructor(data?: PartialMessage<GetLaunchCreatorFeesRequest>);
619
+ static readonly runtime: typeof proto3;
620
+ static readonly typeName = "launches.v1.GetLaunchCreatorFeesRequest";
621
+ static readonly fields: FieldList;
622
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchCreatorFeesRequest;
623
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchCreatorFeesRequest;
624
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchCreatorFeesRequest;
625
+ static equals(a: GetLaunchCreatorFeesRequest | PlainMessage<GetLaunchCreatorFeesRequest> | undefined, b: GetLaunchCreatorFeesRequest | PlainMessage<GetLaunchCreatorFeesRequest> | undefined): boolean;
626
+ }
627
+ /**
628
+ * A native + launch-token amount pair, raw uint256 base units as decimal
629
+ * strings: native_amount in wei (the launch pool's currency0),
630
+ * token_amount in launch-token base units (currency1).
631
+ *
632
+ * @generated from message launches.v1.LaunchCreatorFeeAmounts
633
+ */
634
+ export declare class LaunchCreatorFeeAmounts extends Message<LaunchCreatorFeeAmounts> {
635
+ /**
636
+ * @generated from field: string native_amount = 1;
637
+ */
638
+ nativeAmount: string;
639
+ /**
640
+ * @generated from field: string token_amount = 2;
641
+ */
642
+ tokenAmount: string;
643
+ constructor(data?: PartialMessage<LaunchCreatorFeeAmounts>);
644
+ static readonly runtime: typeof proto3;
645
+ static readonly typeName = "launches.v1.LaunchCreatorFeeAmounts";
646
+ static readonly fields: FieldList;
647
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): LaunchCreatorFeeAmounts;
648
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): LaunchCreatorFeeAmounts;
649
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): LaunchCreatorFeeAmounts;
650
+ static equals(a: LaunchCreatorFeeAmounts | PlainMessage<LaunchCreatorFeeAmounts> | undefined, b: LaunchCreatorFeeAmounts | PlainMessage<LaunchCreatorFeeAmounts> | undefined): boolean;
651
+ }
652
+ /**
653
+ * The creator's own fee position — the ONLY amounts that belong to the
654
+ * creator. Grouped in their own message so no caller can read a
655
+ * protocol-custodied figure as part of the creator's total (see
656
+ * auto_compounded below). All three are POSITION-lifetime: the vault NFT is
657
+ * transferable, so they span every holder the position has had, not just the
658
+ * current beneficiary. When the launch settled into SEVERAL LP positions (a
659
+ * CCA/crowd-launch migration can mint more than one), all three aggregate
660
+ * across every position — claimable is clamped per position before summing.
661
+ *
662
+ * @generated from message launches.v1.CreatorFeeTotals
663
+ */
664
+ export declare class CreatorFeeTotals extends Message<CreatorFeeTotals> {
665
+ /**
666
+ * The creator's share of all fees collected so far, floored per collect
667
+ * exactly as the FeeSplitter forwards it — equal to the beneficiary
668
+ * vault's cumulative on-chain attribution for the position.
669
+ *
670
+ * @generated from field: launches.v1.LaunchCreatorFeeAmounts accumulated = 1;
671
+ */
672
+ accumulated?: LaunchCreatorFeeAmounts;
673
+ /**
674
+ * Paid out by the beneficiary vault to date — across all holders of the
675
+ * transferable vault NFT (past holders' payouts are included).
676
+ *
677
+ * @generated from field: launches.v1.LaunchCreatorFeeAmounts claimed = 2;
678
+ */
679
+ claimed?: LaunchCreatorFeeAmounts;
680
+ /**
681
+ * accumulated − claimed, floored at zero per side: what a vault claim
682
+ * would pay right now (donations aside). Settles per-tokenId (the launch
683
+ * LP position), NOT per-beneficiary — whoever holds the vault NFT at
684
+ * claim time receives it.
685
+ *
686
+ * SETTLED-ONLY. Fees reach the beneficiary vault only when somebody calls
687
+ * the permissionless FeeSplitter.collectFees(tokenIds), so this
688
+ * UNDERSTATES the creator's earnings by everything the launch's Uniswap
689
+ * v4 position has accrued since the last collect. Its meaning is
690
+ * unchanged and will not change — see claimable_including_uncollected for
691
+ * the figure to show a creator as "your earnings".
692
+ *
693
+ * @generated from field: launches.v1.LaunchCreatorFeeAmounts claimable = 3;
694
+ */
695
+ claimable?: LaunchCreatorFeeAmounts;
696
+ /**
697
+ * `claimable` PLUS the creator's share of the fees still sitting
698
+ * uncollected in the launch's Uniswap v4 position: what a
699
+ * collectFees + claim sent right now would actually pay out.
700
+ *
701
+ * Computed by simulating FeeSplitter.collectFees(tokenIds) against the
702
+ * chain head (eth_simulateV1) and reading the beneficiary vault's
703
+ * amounts(tokenId) inside that same simulated state — no transaction is
704
+ * sent and no state is written. Aggregated across every LP position of
705
+ * the launch, exactly like `claimable`.
706
+ *
707
+ * Always populated: when the simulation cannot run (RPC error, or a
708
+ * collect that reverts) this degrades to the vault's settled on-chain
709
+ * balance, and finally to `claimable` itself, so a creator sees a
710
+ * slightly stale number rather than an error.
711
+ *
712
+ * Read claimable_includes_uncollected before deciding how to treat this.
713
+ *
714
+ * WHEN IT IS TRUE this is the post-collect figure: normally >=
715
+ * `claimable`, but it comes from chain state rather than indexed events,
716
+ * so it can also come in LOWER when the indexer is behind a claim that
717
+ * already landed. It is the authoritative figure in that case — do not
718
+ * max() the two.
719
+ *
720
+ * WHEN IT IS FALSE the collect could not be simulated and this degraded
721
+ * to a settled balance (or to `claimable` itself). It then carries no
722
+ * uncollected remainder and can only UNDERSTATE the creator's earnings,
723
+ * so max() with `claimable` is the right defence and the number must not
724
+ * be labelled "your earnings".
725
+ *
726
+ * @generated from field: launches.v1.LaunchCreatorFeeAmounts claimable_including_uncollected = 4;
727
+ */
728
+ claimableIncludingUncollected?: LaunchCreatorFeeAmounts;
729
+ constructor(data?: PartialMessage<CreatorFeeTotals>);
730
+ static readonly runtime: typeof proto3;
731
+ static readonly typeName = "launches.v1.CreatorFeeTotals";
732
+ static readonly fields: FieldList;
733
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreatorFeeTotals;
734
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreatorFeeTotals;
735
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreatorFeeTotals;
736
+ static equals(a: CreatorFeeTotals | PlainMessage<CreatorFeeTotals> | undefined, b: CreatorFeeTotals | PlainMessage<CreatorFeeTotals> | undefined): boolean;
737
+ }
738
+ /**
739
+ * @generated from message launches.v1.GetLaunchCreatorFeesResponse
740
+ */
741
+ export declare class GetLaunchCreatorFeesResponse extends Message<GetLaunchCreatorFeesResponse> {
742
+ /**
743
+ * False for launches created through the fees-off strategy variant: every
744
+ * collected fee auto-compounds, so `creator` is all zeros and
745
+ * fee_beneficiary is never set. Distinguish this from "earned nothing
746
+ * yet" when rendering — they are different states.
747
+ *
748
+ * @generated from field: bool creator_fees_enabled = 1;
749
+ */
750
+ creatorFeesEnabled: boolean;
751
+ /**
752
+ * Everything the creator has earned, been paid, and can still claim.
753
+ *
754
+ * @generated from field: launches.v1.CreatorFeeTotals creator = 2;
755
+ */
756
+ creator?: CreatorFeeTotals;
757
+ /**
758
+ * NOT the creator's money, and NEVER additive with `creator`. Released to
759
+ * the CompoundingClaimRecipient, whose claims are enforced on-chain to
760
+ * increase the launch position's own liquidity in the same transaction, so
761
+ * it is protocol-custodied and the creator can never claim it.
762
+ *
763
+ * It is the COMPLEMENTARY leg of the very same collects that produced
764
+ * creator.accumulated — on the chain-4663 fees-on splitter the split is
765
+ * 40% creator / 60% compounded, verified exact against on-chain Claimed
766
+ * payouts. So creator.accumulated + auto_compounded is the position's whole
767
+ * fee revenue, i.e. 2.5x what the creator actually earned. Render it as
768
+ * pool growth if at all, never inside a creator earnings total.
769
+ *
770
+ * @generated from field: launches.v1.LaunchCreatorFeeAmounts auto_compounded = 3;
771
+ */
772
+ autoCompounded?: LaunchCreatorFeeAmounts;
773
+ /**
774
+ * The launch's v4 LP position id (uint256 decimal string) — the key the
775
+ * beneficiary vault settles claims on, so a client building a claim
776
+ * transaction needs it (it is not derivable client-side). Unset when the
777
+ * launch has neither a collect nor a vault mint yet, in which case there
778
+ * is nothing to claim. When a CCA/crowd-launch migration minted several
779
+ * positions, this is the EARLIEST-collecting one while the amounts
780
+ * aggregate all of them — a claim on it pays that position's share, not
781
+ * the whole claimable.
782
+ *
783
+ * @generated from field: optional string position_token_id = 4;
784
+ */
785
+ positionTokenId?: string;
786
+ /**
787
+ * Current beneficiary: the CREATOR'S WALLET (EIP-55) — the holder of the
788
+ * beneficiary ERC721 for the position_token_id position, who may claim
789
+ * and re-point the fee stream by transferring the NFT. This is NOT the
790
+ * vault contract; that is beneficiary_vault. Unset when creator fees are
791
+ * off, while vault ingestion lags (for a CCA launch: until the creator's
792
+ * graffiti claim mints the vault NFT), or transiently mid re-registration
793
+ * (NFT burned).
794
+ *
795
+ * @generated from field: optional string fee_beneficiary = 5;
796
+ */
797
+ feeBeneficiary?: string;
798
+ /**
799
+ * Freshness marker: unix seconds of the newest ingested event this
800
+ * response was computed from, across every feed read (fee collections,
801
+ * vault transfers, claims). 0 when no event has been ingested yet. A
802
+ * stalled sink freezes this value while on-chain fees keep accruing, so
803
+ * clients gating actions on creator.claimable (e.g. enabling a Claim
804
+ * button) should treat a stale marker as stale data.
805
+ *
806
+ * @generated from field: int64 as_of_timestamp = 6;
807
+ */
808
+ asOfTimestamp: bigint;
809
+ /**
810
+ * The launch's own FeeSplitter (EIP-55) — the contract to send the
811
+ * permissionless collectFees([position_token_id]) to, which sweeps the v4
812
+ * position's fees into the beneficiary vault and is what makes
813
+ * creator.claimable_including_uncollected actually claimable.
814
+ *
815
+ * PER LAUNCH, NOT A CHAIN CONSTANT: several FeeSplitter generations are
816
+ * deployed and live on the same chain (Robinhood Chain runs two), and a
817
+ * launch's fees only ever flow through the one its strategy was wired to.
818
+ * Clients MUST call the address in this field — a hardcoded per-chain
819
+ * splitter silently targets the wrong generation.
820
+ *
821
+ * Set for every launch this endpoint serves: where the indexed launch row
822
+ * carries no position recipient (a crowd launch, which never gets a row,
823
+ * or a row predating the column) the server falls back to the resolved
824
+ * strategy's own immutable FeeSplitter. Clients no longer need to gate the
825
+ * displayed figure down to the settled balance on an unset splitter.
826
+ *
827
+ * @generated from field: optional string fee_splitter = 7;
828
+ */
829
+ feeSplitter?: string;
830
+ /**
831
+ * The launch's own UERC20BeneficiaryVault (EIP-55) — the contract that
832
+ * custodies the creator's share and that claim(position_token_id, 0, 0)
833
+ * is sent to. Per launch for the same reason fee_splitter is.
834
+ *
835
+ * Read from fee_splitter's OWN on-chain splits, so this vault and that
836
+ * splitter are a matched pair by construction rather than two independent
837
+ * lookups that can name contracts from different generations. Falls back
838
+ * to the indexed beneficiary NFT when that read is unavailable. Unset only
839
+ * when creator fees are off (no vault exists) or neither source has one
840
+ * yet.
841
+ *
842
+ * @generated from field: optional string beneficiary_vault = 8;
843
+ */
844
+ beneficiaryVault?: string;
845
+ /**
846
+ * False when the collect could not be simulated and
847
+ * creator.claimable_including_uncollected is a settled balance (or the
848
+ * event-derived claimable) rather than the post-collect figure. Clients
849
+ * should not present it as "your earnings" when false.
850
+ *
851
+ * as_of_timestamp does NOT cover for this: that marker is computed from
852
+ * indexed events only, so it reads perfectly fresh during an RPC outage
853
+ * while the amount beside it has silently gone stale. This is the only
854
+ * signal that distinguishes the two.
855
+ *
856
+ * `optional` is load-bearing. A bare proto3 bool reads as false when
857
+ * absent, so a client built against <= 0.0.180 would see "degraded" on
858
+ * every response; the presence bit separates "this server does not send
859
+ * it" from "this response is degraded".
860
+ *
861
+ * @generated from field: optional bool claimable_includes_uncollected = 9;
862
+ */
863
+ claimableIncludesUncollected?: boolean;
864
+ constructor(data?: PartialMessage<GetLaunchCreatorFeesResponse>);
865
+ static readonly runtime: typeof proto3;
866
+ static readonly typeName = "launches.v1.GetLaunchCreatorFeesResponse";
867
+ static readonly fields: FieldList;
868
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLaunchCreatorFeesResponse;
869
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLaunchCreatorFeesResponse;
870
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLaunchCreatorFeesResponse;
871
+ static equals(a: GetLaunchCreatorFeesResponse | PlainMessage<GetLaunchCreatorFeesResponse> | undefined, b: GetLaunchCreatorFeesResponse | PlainMessage<GetLaunchCreatorFeesResponse> | undefined): boolean;
872
+ }
873
+ /**
874
+ * Anti-vamp create-flow check (LP-1311): has a token with this name + ticker
875
+ * combination launched on the chain within the trailing 8 hours? Matching is
876
+ * case-insensitive on both fields and covers every Uniswap token-factory
877
+ * launch (Crowd Launch and Instant Launch, created through our flow or
878
+ * directly against the contracts). The FE renders a soft warning ("this
879
+ * name + ticker launched X hours ago — here's that token") linking the
880
+ * original's token page; nothing is blocked server-side. Backed by the same
881
+ * table and predicate the indexer uses to vamp-flag copycat launches out of
882
+ * ListLaunches, so the warning and the listing filter cannot drift. EVM-only.
883
+ *
884
+ * @generated from message launches.v1.CheckLaunchNameTickerRequest
885
+ */
886
+ export declare class CheckLaunchNameTickerRequest extends Message<CheckLaunchNameTickerRequest> {
887
+ /**
888
+ * @generated from field: uint32 chain_id = 1;
889
+ */
890
+ chainId: number;
891
+ /**
892
+ * Token name as entered in the create form (compared case-insensitively).
893
+ *
894
+ * @generated from field: string name = 2;
895
+ */
896
+ name: string;
897
+ /**
898
+ * Token ticker/symbol as entered in the create form (compared
899
+ * case-insensitively).
900
+ *
901
+ * @generated from field: string symbol = 3;
902
+ */
903
+ symbol: string;
904
+ constructor(data?: PartialMessage<CheckLaunchNameTickerRequest>);
905
+ static readonly runtime: typeof proto3;
906
+ static readonly typeName = "launches.v1.CheckLaunchNameTickerRequest";
907
+ static readonly fields: FieldList;
908
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CheckLaunchNameTickerRequest;
909
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CheckLaunchNameTickerRequest;
910
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CheckLaunchNameTickerRequest;
911
+ static equals(a: CheckLaunchNameTickerRequest | PlainMessage<CheckLaunchNameTickerRequest> | undefined, b: CheckLaunchNameTickerRequest | PlainMessage<CheckLaunchNameTickerRequest> | undefined): boolean;
912
+ }
913
+ /**
914
+ * @generated from message launches.v1.CheckLaunchNameTickerResponse
915
+ */
916
+ export declare class CheckLaunchNameTickerResponse extends Message<CheckLaunchNameTickerResponse> {
917
+ /**
918
+ * True when a matching token launched within the trailing 8h window —
919
+ * launching this name + ticker now would be vamp-flagged at ingest.
920
+ *
921
+ * @generated from field: bool recently_launched = 1;
922
+ */
923
+ recentlyLaunched: boolean;
924
+ /**
925
+ * The launch the warning should link to. Set iff recently_launched. When
926
+ * several launches match in the window (chained copycats), this is the
927
+ * earliest match that is not itself vamp-flagged, falling back to the
928
+ * earliest match.
929
+ *
930
+ * @generated from field: launches.v1.RecentlyLaunchedToken original_token = 2;
931
+ */
932
+ originalToken?: RecentlyLaunchedToken;
933
+ constructor(data?: PartialMessage<CheckLaunchNameTickerResponse>);
934
+ static readonly runtime: typeof proto3;
935
+ static readonly typeName = "launches.v1.CheckLaunchNameTickerResponse";
936
+ static readonly fields: FieldList;
937
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CheckLaunchNameTickerResponse;
938
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CheckLaunchNameTickerResponse;
939
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CheckLaunchNameTickerResponse;
940
+ static equals(a: CheckLaunchNameTickerResponse | PlainMessage<CheckLaunchNameTickerResponse> | undefined, b: CheckLaunchNameTickerResponse | PlainMessage<CheckLaunchNameTickerResponse> | undefined): boolean;
941
+ }
942
+ /**
943
+ * The already-launched token a CheckLaunchNameTicker warning points at.
944
+ *
945
+ * @generated from message launches.v1.RecentlyLaunchedToken
946
+ */
947
+ export declare class RecentlyLaunchedToken extends Message<RecentlyLaunchedToken> {
948
+ /**
949
+ * @generated from field: uint32 chain_id = 1;
950
+ */
951
+ chainId: number;
952
+ /**
953
+ * EIP-55 checksummed token address; with chain_id, enough to build the
954
+ * token-page link.
955
+ *
956
+ * @generated from field: string token_address = 2;
957
+ */
958
+ tokenAddress: string;
959
+ /**
960
+ * Stored name/symbol casing (the launched token's on-chain metadata).
961
+ *
962
+ * @generated from field: string name = 3;
963
+ */
964
+ name: string;
965
+ /**
966
+ * @generated from field: string symbol = 4;
967
+ */
968
+ symbol: string;
969
+ /**
970
+ * Unix seconds of the token's launch — the "launched X hours ago" the
971
+ * warning renders.
972
+ *
973
+ * @generated from field: int64 launched_at = 5;
974
+ */
975
+ launchedAt: bigint;
976
+ constructor(data?: PartialMessage<RecentlyLaunchedToken>);
977
+ static readonly runtime: typeof proto3;
978
+ static readonly typeName = "launches.v1.RecentlyLaunchedToken";
979
+ static readonly fields: FieldList;
980
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RecentlyLaunchedToken;
981
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RecentlyLaunchedToken;
982
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RecentlyLaunchedToken;
983
+ static equals(a: RecentlyLaunchedToken | PlainMessage<RecentlyLaunchedToken> | undefined, b: RecentlyLaunchedToken | PlainMessage<RecentlyLaunchedToken> | undefined): boolean;
984
+ }
985
+ /**
986
+ * Total USD liquidity per token — the sum of the FULL (two-sided) TVL of every
987
+ * v2/v3/v4 pool the token sits in, which is the figure aggregators publish as a
988
+ * token's "liquidity". Batched on purpose: callers rendering a liquidity column
989
+ * must send the whole visible token set in one request rather than one request
990
+ * per row.
991
+ *
992
+ * @generated from message launches.v1.GetLiquidityForTokensRequest
993
+ */
994
+ export declare class GetLiquidityForTokensRequest extends Message<GetLiquidityForTokensRequest> {
995
+ /**
996
+ * max 100
997
+ *
998
+ * @generated from field: repeated launches.v1.TokenIdentifier tokens = 1;
999
+ */
1000
+ tokens: TokenIdentifier[];
1001
+ constructor(data?: PartialMessage<GetLiquidityForTokensRequest>);
1002
+ static readonly runtime: typeof proto3;
1003
+ static readonly typeName = "launches.v1.GetLiquidityForTokensRequest";
1004
+ static readonly fields: FieldList;
1005
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLiquidityForTokensRequest;
1006
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLiquidityForTokensRequest;
1007
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLiquidityForTokensRequest;
1008
+ static equals(a: GetLiquidityForTokensRequest | PlainMessage<GetLiquidityForTokensRequest> | undefined, b: GetLiquidityForTokensRequest | PlainMessage<GetLiquidityForTokensRequest> | undefined): boolean;
1009
+ }
1010
+ /**
1011
+ * Best-effort response: one entry per requested token whose liquidity is known.
1012
+ * A token with no pools, or whose pools have no computed TVL yet, is OMITTED
1013
+ * rather than returned as 0 — so a caller can fall back to its own figure
1014
+ * instead of rendering a wrong zero. Match entries back to the request by
1015
+ * (chain_id, address).
1016
+ *
1017
+ * @generated from message launches.v1.GetLiquidityForTokensResponse
1018
+ */
1019
+ export declare class GetLiquidityForTokensResponse extends Message<GetLiquidityForTokensResponse> {
1020
+ /**
1021
+ * @generated from field: repeated launches.v1.TokenLiquidity liquidity = 1;
1022
+ */
1023
+ liquidity: TokenLiquidity[];
1024
+ constructor(data?: PartialMessage<GetLiquidityForTokensResponse>);
1025
+ static readonly runtime: typeof proto3;
1026
+ static readonly typeName = "launches.v1.GetLiquidityForTokensResponse";
1027
+ static readonly fields: FieldList;
1028
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetLiquidityForTokensResponse;
1029
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetLiquidityForTokensResponse;
1030
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetLiquidityForTokensResponse;
1031
+ static equals(a: GetLiquidityForTokensResponse | PlainMessage<GetLiquidityForTokensResponse> | undefined, b: GetLiquidityForTokensResponse | PlainMessage<GetLiquidityForTokensResponse> | undefined): boolean;
1032
+ }
1033
+ /**
1034
+ * @generated from message launches.v1.TokenLiquidity
1035
+ */
1036
+ export declare class TokenLiquidity extends Message<TokenLiquidity> {
1037
+ /**
1038
+ * @generated from field: uint32 chain_id = 1;
1039
+ */
1040
+ chainId: number;
1041
+ /**
1042
+ * EIP-55 checksummed token address, echoing the requested token.
1043
+ *
1044
+ * @generated from field: string address = 2;
1045
+ */
1046
+ address: string;
1047
+ /**
1048
+ * Summed pool TVL in USD. Always > 0 — see the omission rule above.
1049
+ *
1050
+ * @generated from field: double liquidity_usd = 3;
1051
+ */
1052
+ liquidityUsd: number;
1053
+ constructor(data?: PartialMessage<TokenLiquidity>);
1054
+ static readonly runtime: typeof proto3;
1055
+ static readonly typeName = "launches.v1.TokenLiquidity";
1056
+ static readonly fields: FieldList;
1057
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TokenLiquidity;
1058
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TokenLiquidity;
1059
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TokenLiquidity;
1060
+ static equals(a: TokenLiquidity | PlainMessage<TokenLiquidity> | undefined, b: TokenLiquidity | PlainMessage<TokenLiquidity> | undefined): boolean;
1061
+ }
1062
+ /**
1063
+ * Newest-first swap feed for a token, aggregated across ALL its pools
1064
+ * (v2/v3/v4) on the chain. Non-swap events (mints/burns/liquidity) are
1065
+ * excluded. Lookback is capped at 3 months. EVM-only.
1066
+ *
1067
+ * @generated from message launches.v1.GetTokenTradesRequest
1068
+ */
1069
+ export declare class GetTokenTradesRequest extends Message<GetTokenTradesRequest> {
1070
+ /**
1071
+ * @generated from field: launches.v1.TokenIdentifier token = 1;
1072
+ */
1073
+ token?: TokenIdentifier;
1074
+ /**
1075
+ * page_size (default 25, max 100) + page_token
1076
+ *
1077
+ * @generated from field: optional launches.v1.PageRequest page = 2;
1078
+ */
1079
+ page?: PageRequest;
1080
+ /**
1081
+ * Restrict the feed to one trader: matches the trade's wallet (the tx
1082
+ * sender, not the router). Any casing accepted. Omitted = all traders.
1083
+ * page_token carries only a keyset position, not this filter — the client
1084
+ * must resend the same wallet on every page; omitting or changing it
1085
+ * resumes from that position under different filter semantics.
1086
+ *
1087
+ * @generated from field: optional string wallet = 3;
1088
+ */
1089
+ wallet?: string;
1090
+ /**
1091
+ * Minimum trade size: keep only trades whose amount_usd is >= this
1092
+ * threshold. Trades with no known USD amount are excluded when set (they
1093
+ * cannot be proven to clear the bar). Omitted or 0 = no filtering; negative
1094
+ * or non-finite values are rejected. Applied before the page cut, so a page
1095
+ * holds up to page_size MATCHING trades — but the server bounds how far it
1096
+ * scans per request, so a page may come back short of page_size while
1097
+ * next_page_token is still set; presence of next_page_token, not page
1098
+ * fullness, signals more data under this filter. Deep scans also terminate
1099
+ * after a bounded total: once a walk has scanned a server-defined number of
1100
+ * rows (currently 5,000) the server stops issuing next_page_token and the
1101
+ * feed ends early. Like wallet, page_token carries only the walk position —
1102
+ * the client must resend the same min_amount_usd on every page.
1103
+ *
1104
+ * @generated from field: optional double min_amount_usd = 4;
1105
+ */
1106
+ minAmountUsd?: number;
1107
+ constructor(data?: PartialMessage<GetTokenTradesRequest>);
1108
+ static readonly runtime: typeof proto3;
1109
+ static readonly typeName = "launches.v1.GetTokenTradesRequest";
1110
+ static readonly fields: FieldList;
1111
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetTokenTradesRequest;
1112
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetTokenTradesRequest;
1113
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetTokenTradesRequest;
1114
+ static equals(a: GetTokenTradesRequest | PlainMessage<GetTokenTradesRequest> | undefined, b: GetTokenTradesRequest | PlainMessage<GetTokenTradesRequest> | undefined): boolean;
1115
+ }
1116
+ /**
1117
+ * @generated from message launches.v1.GetTokenTradesResponse
1118
+ */
1119
+ export declare class GetTokenTradesResponse extends Message<GetTokenTradesResponse> {
1120
+ /**
1121
+ * @generated from field: repeated launches.v1.TokenTrade trades = 1;
1122
+ */
1123
+ trades: TokenTrade[];
1124
+ /**
1125
+ * next_page_token absent on last page
1126
+ *
1127
+ * @generated from field: launches.v1.PageResponse page = 2;
1128
+ */
1129
+ page?: PageResponse;
1130
+ constructor(data?: PartialMessage<GetTokenTradesResponse>);
1131
+ static readonly runtime: typeof proto3;
1132
+ static readonly typeName = "launches.v1.GetTokenTradesResponse";
1133
+ static readonly fields: FieldList;
1134
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetTokenTradesResponse;
1135
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetTokenTradesResponse;
1136
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetTokenTradesResponse;
1137
+ static equals(a: GetTokenTradesResponse | PlainMessage<GetTokenTradesResponse> | undefined, b: GetTokenTradesResponse | PlainMessage<GetTokenTradesResponse> | undefined): boolean;
1138
+ }
1139
+ /**
1140
+ * Server-computed Top Traders leaderboard for a launch token: the token's
1141
+ * FULL swap history (no page cap) folded into per-wallet cost-basis PnL,
1142
+ * with CCA auction claims counted as buy-side acquisitions at what each
1143
+ * wallet actually spent (the GetLaunchClaims aggregates). Replaces the
1144
+ * client-side capped GetTokenTrades walk, whose 1,500-trade window
1145
+ * fabricated zero-basis top rows for pre-window buyers. Non-launch tokens
1146
+ * (no CCA auction) are served from their trade history alone — never an
1147
+ * error; a token with no swaps and no claims serves an empty list. EVM-only.
1148
+ *
1149
+ * @generated from message launches.v1.GetTokenTopTradersRequest
1150
+ */
1151
+ export declare class GetTokenTopTradersRequest extends Message<GetTokenTopTradersRequest> {
1152
+ /**
1153
+ * @generated from field: uint32 chain_id = 1;
1154
+ */
1155
+ chainId: number;
1156
+ /**
1157
+ * @generated from field: string token_address = 2;
1158
+ */
1159
+ tokenAddress: string;
1160
+ /**
1161
+ * Rows to return, best-ranked first. 0/unset defaults to 100; servers cap
1162
+ * the limit (currently 1000).
1163
+ *
1164
+ * @generated from field: optional int32 limit = 3;
1165
+ */
1166
+ limit?: number;
1167
+ /**
1168
+ * Per-wallet lookup (LP-1558): serve only this wallet's row, covering ANY
1169
+ * wallet in the token's history — the full cached ranking first, and past
1170
+ * its cap the row comes from the same uncapped fold the ranking is cut
1171
+ * from (server-cached per wallet). Unset/empty serves the ranked
1172
+ * leaderboard as before. A wallet with no row (never traded or claimed
1173
+ * the token) serves an empty list, never an error.
1174
+ *
1175
+ * @generated from field: optional string wallet_address = 4;
1176
+ */
1177
+ walletAddress?: string;
1178
+ constructor(data?: PartialMessage<GetTokenTopTradersRequest>);
1179
+ static readonly runtime: typeof proto3;
1180
+ static readonly typeName = "launches.v1.GetTokenTopTradersRequest";
1181
+ static readonly fields: FieldList;
1182
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetTokenTopTradersRequest;
1183
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetTokenTopTradersRequest;
1184
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetTokenTopTradersRequest;
1185
+ static equals(a: GetTokenTopTradersRequest | PlainMessage<GetTokenTopTradersRequest> | undefined, b: GetTokenTopTradersRequest | PlainMessage<GetTokenTopTradersRequest> | undefined): boolean;
1186
+ }
1187
+ /**
1188
+ * One wallet's aggregate position on the token, derived from a
1189
+ * moving-average cost-basis walk of its chronological trades: buys (and
1190
+ * claim seeds) add to the position's basis; each sell realizes
1191
+ * proceeds − average cost × amount AND consumes basis at the average cost,
1192
+ * so re-entering wallets are accounted correctly. Auction claims are seeded
1193
+ * before the trade walk as buys at the wallet's true auction cost, so
1194
+ * bidders never show zero buys. Tokens sold beyond tracked inventory
1195
+ * (transfers in) entered the wallet outside the swap tape — with the full
1196
+ * history and explicit claims in hand, an unexplained inflow is a transfer,
1197
+ * not a hidden buy — so the wallet's basis is UNKNOWN (not $0) and the row
1198
+ * flags transferred_in.
1199
+ *
1200
+ * UNKNOWN-BASIS ROWS: when the server cannot compute a wallet's basis — the
1201
+ * wallet transferred tokens in (transferred_in), its auction spend was not
1202
+ * USD-convertible, or its attributed inventory contradicts its observed
1203
+ * balance — basis_unknown is true and the four basis-derived
1204
+ * money fields (cost_basis_usd, avg_cost_usd, realized_pnl_usd,
1205
+ * unrealized_pnl_usd) are served as 0 and MUST be read as "unknown", never
1206
+ * as a real $0.00. Such wallets rank strictly after every computable-PnL
1207
+ * row — including loss-makers: an unknown 0 never outranks a real figure —
1208
+ * so a transfer-in whale's raw proceeds can never crowd real traders out
1209
+ * of the request limit. Observed figures (buys/sells/proceeds/tokens) are
1210
+ * always set and always truthful. unrealized_pnl_unknown additionally
1211
+ * covers the basis-known wallet whose unrealized leg alone is uncomputable
1212
+ * (token has no spot price). (These are flags rather than proto3 `optional`
1213
+ * on the money fields because changing an existing field's presence is a
1214
+ * breaking gencode change for published clients.)
1215
+ *
1216
+ * @generated from message launches.v1.TokenTopTrader
1217
+ */
1218
+ export declare class TokenTopTrader extends Message<TokenTopTrader> {
1219
+ /**
1220
+ * EIP-55 checksummed trading wallet (the tx from-address, not the router).
1221
+ *
1222
+ * @generated from field: string wallet_address = 1;
1223
+ */
1224
+ walletAddress: string;
1225
+ /**
1226
+ * Buy-side figures INCLUDE auction acquisitions: claims add one buy per
1227
+ * terminal bid, their token amount, and their USD spend.
1228
+ *
1229
+ * @generated from field: int32 buy_count = 2;
1230
+ */
1231
+ buyCount: number;
1232
+ /**
1233
+ * @generated from field: int32 sell_count = 3;
1234
+ */
1235
+ sellCount: number;
1236
+ /**
1237
+ * @generated from field: double bought_usd = 4;
1238
+ */
1239
+ boughtUsd: number;
1240
+ /**
1241
+ * @generated from field: double sold_usd = 5;
1242
+ */
1243
+ soldUsd: number;
1244
+ /**
1245
+ * Token amounts are whole (decimal-adjusted) tokens.
1246
+ *
1247
+ * @generated from field: double bought_tokens = 6;
1248
+ */
1249
+ boughtTokens: number;
1250
+ /**
1251
+ * @generated from field: double sold_tokens = 7;
1252
+ */
1253
+ soldTokens: number;
1254
+ /**
1255
+ * Tokens still held. For launch tokens this is the wallet's OBSERVED net
1256
+ * balance — the same sum over transfer logs GetLaunchHolders serves, so
1257
+ * the two agree and Σ over wallets cannot exceed supply. Tokens outside
1258
+ * that feed fall back to the swap walk (acquired minus sold, floored at
1259
+ * 0), an attribution that can overstate a wallet signing swaps it does
1260
+ * not receive (relayers, bundlers, smart-account signers).
1261
+ *
1262
+ * @generated from field: double remaining_tokens = 8;
1263
+ */
1264
+ remainingTokens: number;
1265
+ /**
1266
+ * USD cost basis of the REMAINING position: grows with buys/claims,
1267
+ * shrinks by average cost × amount on every sell. Meaningless (served 0)
1268
+ * when basis_unknown — read that as "unknown", not a zero basis.
1269
+ *
1270
+ * @generated from field: double cost_basis_usd = 9;
1271
+ */
1272
+ costBasisUsd: number;
1273
+ /**
1274
+ * cost_basis_usd ÷ the TRACKED quantity the basis was accumulated over
1275
+ * (bought + claimed − sold), which is not necessarily remaining_tokens; 0
1276
+ * when nothing is tracked. Meaningless (served 0) when basis_unknown.
1277
+ *
1278
+ * @generated from field: double avg_cost_usd = 10;
1279
+ */
1280
+ avgCostUsd: number;
1281
+ /**
1282
+ * Meaningless (served 0) when basis_unknown — proceeds booked against an
1283
+ * unknowable basis are not a PnL; such rows rank as realized 0.
1284
+ *
1285
+ * @generated from field: double realized_pnl_usd = 11;
1286
+ */
1287
+ realizedPnlUsd: number;
1288
+ /**
1289
+ * USD the wallet spent in the launch auction (net of exit refunds),
1290
+ * converted at the auction currency's USD rate. 0 when the wallet has no
1291
+ * claims (always 0 for non-CCA tokens).
1292
+ *
1293
+ * @generated from field: double auction_spent_usd = 12;
1294
+ */
1295
+ auctionSpentUsd: number;
1296
+ /**
1297
+ * True when any of the wallet's auction bids reached a terminal state
1298
+ * (claimed, or exited with a nonzero fill).
1299
+ *
1300
+ * @generated from field: bool has_claims = 13;
1301
+ */
1302
+ hasClaims: boolean;
1303
+ /**
1304
+ * Mark-to-market PnL of the remaining position at the token's latest
1305
+ * known price: remaining_tokens × spot − cost_basis_usd. The documented
1306
+ * ranking tiebreak, served so clients can render it. Meaningless (served
1307
+ * 0) when unrealized_pnl_unknown — basis unknown, or no known spot price.
1308
+ *
1309
+ * @generated from field: double unrealized_pnl_usd = 14;
1310
+ */
1311
+ unrealizedPnlUsd: number;
1312
+ /**
1313
+ * True when the wallet sold beyond its tracked inventory at least once —
1314
+ * the excess entered the wallet outside the swap tape (a transfer in),
1315
+ * so its basis is unknown. Always implies basis_unknown.
1316
+ *
1317
+ * @generated from field: bool transferred_in = 15;
1318
+ */
1319
+ transferredIn: boolean;
1320
+ /**
1321
+ * True when the wallet's basis could not be computed — it transferred
1322
+ * tokens in (transferred_in), its auction spend was not USD-convertible,
1323
+ * or its attributed inventory contradicts its observed balance (the
1324
+ * acquisitions were booked to the wrong address, so the basis they
1325
+ * produced is not this wallet's). Clients should render the four
1326
+ * basis-derived money
1327
+ * fields as unknown ("–"), not $0.00; the row ranks after every
1328
+ * computable-PnL row (see message doc). Implies unrealized_pnl_unknown.
1329
+ *
1330
+ * @generated from field: bool basis_unknown = 16;
1331
+ */
1332
+ basisUnknown: boolean;
1333
+ /**
1334
+ * True when unrealized_pnl_usd alone is not computable: basis_unknown, or
1335
+ * the token has no known spot price (a missing spot must not read as a
1336
+ * total loss). Served 0 then — render unknown ("–"), not $0.00. The other
1337
+ * money fields stay real when basis_unknown is false.
1338
+ *
1339
+ * @generated from field: bool unrealized_pnl_unknown = 17;
1340
+ */
1341
+ unrealizedPnlUnknown: boolean;
1342
+ constructor(data?: PartialMessage<TokenTopTrader>);
1343
+ static readonly runtime: typeof proto3;
1344
+ static readonly typeName = "launches.v1.TokenTopTrader";
1345
+ static readonly fields: FieldList;
1346
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TokenTopTrader;
1347
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TokenTopTrader;
1348
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TokenTopTrader;
1349
+ static equals(a: TokenTopTrader | PlainMessage<TokenTopTrader> | undefined, b: TokenTopTrader | PlainMessage<TokenTopTrader> | undefined): boolean;
1350
+ }
1351
+ /**
1352
+ * @generated from message launches.v1.GetTokenTopTradersResponse
1353
+ */
1354
+ export declare class GetTokenTopTradersResponse extends Message<GetTokenTopTradersResponse> {
1355
+ /**
1356
+ * Ranked realized PnL desc, unrealized PnL desc as the tiebreak (orders
1357
+ * never-sold claimers sensibly — all realized 0), wallet address asc as
1358
+ * the final key, capped at the request limit. Unknown-basis rows
1359
+ * (transferred_in, or an inconvertible auction spend) partition strictly
1360
+ * after every computable-PnL row, including losses — so they cannot
1361
+ * consume top slots on raw proceeds or displace losing traders. Only
1362
+ * wallets with at least one trade or claim appear.
1363
+ *
1364
+ * @generated from field: repeated launches.v1.TokenTopTrader traders = 1;
1365
+ */
1366
+ traders: TokenTopTrader[];
1367
+ constructor(data?: PartialMessage<GetTokenTopTradersResponse>);
1368
+ static readonly runtime: typeof proto3;
1369
+ static readonly typeName = "launches.v1.GetTokenTopTradersResponse";
1370
+ static readonly fields: FieldList;
1371
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetTokenTopTradersResponse;
1372
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetTokenTopTradersResponse;
1373
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetTokenTopTradersResponse;
1374
+ static equals(a: GetTokenTopTradersResponse | PlainMessage<GetTokenTopTradersResponse> | undefined, b: GetTokenTopTradersResponse | PlainMessage<GetTokenTopTradersResponse> | undefined): boolean;
1375
+ }