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