@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.
- package/dist/data/v2/categories_pb.d.ts +0 -4
- package/dist/data/v2/categories_pb.js +0 -5
- package/dist/launches/v1/api-LaunchService_connectquery.d.ts +132 -0
- package/dist/launches/v1/api-LaunchService_connectquery.js +136 -0
- package/dist/launches/v1/api_connect.d.ts +107 -0
- package/dist/launches/v1/api_connect.js +111 -0
- package/dist/launches/v1/api_pb.d.ts +1375 -0
- package/dist/launches/v1/api_pb.js +1464 -0
- package/dist/launches/v1/common_pb.d.ts +47 -0
- package/dist/launches/v1/common_pb.js +65 -0
- package/dist/launches/v1/token_factory-TokenFactoryService_connectquery.d.ts +54 -0
- package/dist/launches/v1/token_factory-TokenFactoryService_connectquery.js +58 -0
- package/dist/launches/v1/token_factory_connect.d.ts +52 -0
- package/dist/launches/v1/token_factory_connect.js +56 -0
- package/dist/launches/v1/token_factory_pb.d.ts +205 -0
- package/dist/launches/v1/token_factory_pb.js +319 -0
- package/dist/launches/v1/types_pb.d.ts +694 -0
- package/dist/launches/v1/types_pb.js +617 -0
- package/dist/launches/v1/worker_service-WorkerService_connectquery.d.ts +28 -0
- package/dist/launches/v1/worker_service-WorkerService_connectquery.js +32 -0
- package/dist/launches/v1/worker_service_connect.d.ts +34 -0
- package/dist/launches/v1/worker_service_connect.js +38 -0
- package/dist/launches/v1/worker_service_pb.d.ts +54 -0
- package/dist/launches/v1/worker_service_pb.js +101 -0
- package/package.json +1 -1
|
@@ -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
|
+
]);
|