@floorlaunchpad/sdk 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,407 @@
1
+ /**
2
+ * The DEX adapter's pure mapping: FLOOR's indexed trades (the indexer's chain-wide `/events` rows) as GeckoTerminal's
3
+ * "Integration API Standards v0.1" events, which DEX Screener reads too. No network and no environment: every function is
4
+ * pure, so an indexer of its own can use the same pair model and answer the same numbers as FLOOR's `/api/dex`.
5
+ *
6
+ * - An invalid answer halts a screener's indexing, so nothing here guesses. Amounts are exact decimal strings of the raw
7
+ * units (`decimalize`), a price is an exact bigint ratio to `PRICE_SIG` significant digits (`ratioString`), never a
8
+ * float, and an event that cannot be stated exactly (a zero amount, a zero price) is dropped by `mapEvents` and
9
+ * counted, never served as a guess.
10
+ * - A pair is immutable: asset0 is always the launch token and asset1 always the quote (the native coin is the zero
11
+ * address, as in a v4 currency0). A swap is exactly `asset0In + asset1Out` (a sell) or `asset1In + asset0Out` (a buy).
12
+ * - Two pairs per launch: the sale (its id the FloorLaunch address; every sale fill) and, once graduated, the pool (its id
13
+ * the v4 pool id on EVM, the Carpenter pool account on Solana; every pool trade and liquidity change).
14
+ */
15
+ /** A price's significant digits: past a uint256 sqrt's own precision is noise; under it, a rounding a reader can see. */
16
+ export const PRICE_SIG = 18;
17
+ /** `raw / 10^decimals`, exact: `1500000` at 6 → `1.5`; no exponent, no trailing zeros, `0` for zero. */
18
+ export function decimalize(raw, decimals) {
19
+ if (!Number.isInteger(decimals) || decimals < 0 || decimals > 77)
20
+ throw new RangeError('decimals');
21
+ const neg = raw < 0n;
22
+ const s = (neg ? -raw : raw).toString().padStart(decimals + 1, '0');
23
+ const int = s.slice(0, s.length - decimals);
24
+ const frac = s.slice(s.length - decimals).replace(/0+$/, '');
25
+ return `${neg ? '-' : ''}${int}${frac ? `.${frac}` : ''}`;
26
+ }
27
+ /** `num / den` (both positive) to `sig` significant digits, truncated, as an exact decimal string; `null` when not positive. */
28
+ export function ratioString(num, den, sig = PRICE_SIG) {
29
+ if (num <= 0n || den <= 0n)
30
+ return null;
31
+ const intDigits = (num / den).toString();
32
+ /* Decimal places so the answer carries `sig` significant digits: past the integer part, or past the leading zeros of a
33
+ fraction (log10 of den / num, rounded up). */
34
+ let scale;
35
+ if (num >= den)
36
+ scale = Math.max(0, sig - intDigits.length);
37
+ else
38
+ scale = sig + (den / num).toString().length;
39
+ const q = (num * 10n ** BigInt(scale)) / den;
40
+ if (q === 0n)
41
+ return null;
42
+ return decimalize(q, scale);
43
+ }
44
+ /** The token's price in its quote, decimalized, from a square-root price (currency1 per currency0, raw units): a v4
45
+ * `sqrtPriceX96` (`bits` 96, the default) or a Carpenter `sqrtPriceX64` (`bits` 64 — Q64.64, never through the X96 scale). */
46
+ export function priceFromSqrt(sqrtPriceX96, quoteIsCurrency1, tokenDecimals, quoteDecimals, bits = 96) {
47
+ if (sqrtPriceX96 <= 0n)
48
+ return null;
49
+ const sq = sqrtPriceX96 * sqrtPriceX96;
50
+ const Q192 = 1n << BigInt(2 * bits);
51
+ /* raw quote per raw token: sq / Q192 when the quote is currency1, its inverse when it is currency0; then × 10^(td − qd). */
52
+ let num = quoteIsCurrency1 ? sq : Q192;
53
+ let den = quoteIsCurrency1 ? Q192 : sq;
54
+ const shift = tokenDecimals - quoteDecimals;
55
+ if (shift >= 0)
56
+ num *= 10n ** BigInt(shift);
57
+ else
58
+ den *= 10n ** BigInt(-shift);
59
+ return ratioString(num, den);
60
+ }
61
+ const POSITIVE = (v) => v !== undefined && /^[0-9]+(\.[0-9]+)?$/.test(v) && /[1-9]/.test(v);
62
+ const AMOUNT = (v) => v !== undefined && /^[0-9]+(\.[0-9]+)?$/.test(v);
63
+ /** Is `e` exactly one of the two swap shapes, every amount positive and the price positive? */
64
+ export function isSwapShape(e) {
65
+ if (e.eventType !== 'swap')
66
+ return false;
67
+ const sell = POSITIVE(e.asset0In) && POSITIVE(e.asset1Out) && e.asset1In === undefined && e.asset0Out === undefined;
68
+ const buy = POSITIVE(e.asset1In) && POSITIVE(e.asset0Out) && e.asset0In === undefined && e.asset1Out === undefined;
69
+ return (sell || buy) && POSITIVE(e.priceNative);
70
+ }
71
+ /** Is `e` a join / exit with both amounts stated and at least one positive (a fee-only poke moves no principal)? */
72
+ export function isJoinExitShape(e) {
73
+ if (e.eventType !== 'join' && e.eventType !== 'exit')
74
+ return false;
75
+ return AMOUNT(e.amount0) && AMOUNT(e.amount1) && (POSITIVE(e.amount0) || POSITIVE(e.amount1));
76
+ }
77
+ /**
78
+ * A v4 / Carpenter pool's IN-RANGE VIRTUAL reserves, currency order, raw: `L / √P` and `L · √P` with √P in
79
+ * Q64.96 (`bits` 96) or Q64.64 (`bits` 64), rounded down — the amounts a constant-product pool of the same liquidity would
80
+ * hold at this price (their ratio IS the price). `null` for a zero liquidity or price (nothing to state).
81
+ */
82
+ export function virtualReserves(liquidity, sqrtPrice, bits = 96) {
83
+ if (liquidity <= 0n || sqrtPrice <= 0n)
84
+ return null;
85
+ const Q = 1n << BigInt(bits);
86
+ return [(liquidity * Q) / sqrtPrice, (liquidity * sqrtPrice) / Q];
87
+ }
88
+ const amounts = (side, token, quote) => side === 'buy' ? { asset1In: quote, asset0Out: token } : { asset0In: token, asset1Out: quote };
89
+ /** Currency order → (token, quote): the token is currency0 when the quote is currency1. */
90
+ const orient = (v, q1) => (q1 ? [v[0], v[1]] : [v[1], v[0]]);
91
+ const reservesOf = (r, q1, p) => {
92
+ if (r === null || r === undefined || r[0] < 0n || r[1] < 0n)
93
+ return {};
94
+ const [t, q] = orient(r, q1);
95
+ return { reserves: { asset0: decimalize(t, p.tokenDecimals), asset1: decimalize(q, p.quoteDecimals) } };
96
+ };
97
+ /** The fee metadata, asset0 the token and asset1 the quote, each leg only where non-zero; `{}` where nothing is stated. */
98
+ function feeMetadata(f, q1, p) {
99
+ if (f === null || f === undefined)
100
+ return {};
101
+ const [tin, qin] = orient([f.in0, f.in1], q1);
102
+ const [tout, qout] = orient([f.out0, f.out1], q1);
103
+ const m = {};
104
+ if (tin > 0n)
105
+ m.fees0In = decimalize(tin, p.tokenDecimals);
106
+ if (qin > 0n)
107
+ m.fees1In = decimalize(qin, p.quoteDecimals);
108
+ if (tout > 0n)
109
+ m.fees0Out = decimalize(tout, p.tokenDecimals);
110
+ if (qout > 0n)
111
+ m.fees1Out = decimalize(qout, p.quoteDecimals);
112
+ return Object.keys(m).length > 0 ? { metadata: m } : {};
113
+ }
114
+ /**
115
+ * The events of one block range, sorted by (block, txnIndex, eventIndex). `info(token)` answers a SHOWN launch's pair info,
116
+ * `undefined` for one that is not shown — its events are left out (default-deny), as the grid leaves it out. An event
117
+ * that cannot be stated exactly is dropped and counted in `dropped`.
118
+ */
119
+ export function mapEvents(swaps, fills, info, key = (id) => id.toLowerCase(), liquidity = []) {
120
+ const events = [];
121
+ let dropped = 0;
122
+ for (const s of swaps) {
123
+ const p = info(key(s.token));
124
+ /* Every FLOOR pool trade the indexer serves is its launch's ONE pool (`swap.token`); the row's pool must be it. */
125
+ if (!p || p.poolPairId === null)
126
+ continue;
127
+ if (s.pool !== undefined && key(s.pool) !== key(p.poolPairId)) {
128
+ dropped++;
129
+ continue;
130
+ }
131
+ const q1 = p.quoteIsCurrency1 ?? s.quoteIsCurrency1;
132
+ const price = priceFromSqrt(s.sqrtPriceX96, q1, p.tokenDecimals, p.quoteDecimals, s.sqrtBits ?? 96);
133
+ const e = {
134
+ block: { blockNumber: s.blockNumber, blockTimestamp: s.timestamp }, eventType: 'swap',
135
+ txnId: s.txHash, txnIndex: s.txIndex, eventIndex: s.logIndex, maker: s.trader ?? s.txFrom, pairId: p.poolPairId,
136
+ ...amounts(s.side, decimalize(s.tokenAmount, p.tokenDecimals), decimalize(s.quoteAmount, p.quoteDecimals)),
137
+ priceNative: price ?? '0',
138
+ ...reservesOf(s.reserves01, q1, p),
139
+ ...feeMetadata(s.fees01, q1, p),
140
+ };
141
+ if (isSwapShape(e))
142
+ events.push(e);
143
+ else
144
+ dropped++;
145
+ }
146
+ for (const f of fills) {
147
+ const p = info(key(f.token));
148
+ if (!p || key(p.saleId) !== key(f.launch))
149
+ continue;
150
+ /* The fill's own price: quote over tokens, both decimalized — (q / 10^qd) / (t / 10^td). */
151
+ const price = ratioString(f.quoteAmount * 10n ** BigInt(p.tokenDecimals), f.tokenAmount * 10n ** BigInt(p.quoteDecimals));
152
+ const left = p.saleTokens - f.soldTotal;
153
+ /* the FLOOR Platform fee: on top of a buy (in), out of a sell-back's gross (out) — the quote leg. */
154
+ const fee = f.fee ?? 0n;
155
+ const e = {
156
+ block: { blockNumber: f.blockNumber, blockTimestamp: f.timestamp }, eventType: 'swap',
157
+ txnId: f.txHash, txnIndex: f.txIndex, eventIndex: f.logIndex, maker: f.trader, pairId: p.saleId,
158
+ ...amounts(f.side, decimalize(f.tokenAmount, p.tokenDecimals), decimalize(f.quoteAmount, p.quoteDecimals)),
159
+ priceNative: price ?? '0',
160
+ ...(left >= 0n && f.raisedTotal >= 0n ? { reserves: { asset0: decimalize(left, p.tokenDecimals), asset1: decimalize(f.raisedTotal, p.quoteDecimals) } } : {}),
161
+ ...(fee > 0n ? { metadata: f.side === 'buy' ? { fees1In: decimalize(fee, p.quoteDecimals) } : { fees1Out: decimalize(fee, p.quoteDecimals) } } : {}),
162
+ };
163
+ if (isSwapShape(e))
164
+ events.push(e);
165
+ else
166
+ dropped++;
167
+ }
168
+ for (const l of liquidity) {
169
+ const p = info(key(l.token));
170
+ if (!p || p.poolPairId === null)
171
+ continue;
172
+ if (key(l.pool) !== key(p.poolPairId) || l.amount01 === null) {
173
+ dropped++;
174
+ continue;
175
+ }
176
+ const q1 = p.quoteIsCurrency1 ?? l.quoteIsCurrency1;
177
+ if (q1 === undefined) {
178
+ dropped++;
179
+ continue;
180
+ }
181
+ const [t, q] = orient(l.amount01, q1);
182
+ const e = {
183
+ block: { blockNumber: l.blockNumber, blockTimestamp: l.timestamp }, eventType: l.kind,
184
+ txnId: l.txHash, txnIndex: l.txIndex, eventIndex: l.logIndex, maker: l.maker, pairId: p.poolPairId,
185
+ amount0: decimalize(t, p.tokenDecimals), amount1: decimalize(q, p.quoteDecimals),
186
+ ...reservesOf(l.reserves01, q1, p),
187
+ };
188
+ if (isJoinExitShape(e))
189
+ events.push(e);
190
+ else
191
+ dropped++;
192
+ }
193
+ events.sort((a, b) => a.block.blockNumber - b.block.blockNumber || a.txnIndex - b.txnIndex || a.eventIndex - b.eventIndex);
194
+ return { events, dropped };
195
+ }
196
+ /* ---------------------------------------------------------------- the indexer's `/events` body, strictly */
197
+ const INT = (v) => {
198
+ if (typeof v !== 'number' || !Number.isSafeInteger(v) || v < 0)
199
+ throw new TypeError('int');
200
+ return v;
201
+ };
202
+ const BIG = (v) => {
203
+ if (typeof v !== 'string' || !/^(0|[1-9][0-9]{0,77})$/.test(v))
204
+ throw new TypeError('uint');
205
+ return BigInt(v);
206
+ };
207
+ const HEX = (v, bytes) => {
208
+ if (typeof v !== 'string' || !new RegExp(`^0x[0-9a-fA-F]{${bytes * 2}}$`).test(v))
209
+ throw new TypeError('hex');
210
+ return v.toLowerCase();
211
+ };
212
+ const SIDE = (v) => {
213
+ if (v !== 'buy' && v !== 'sell')
214
+ throw new TypeError('side');
215
+ return v;
216
+ };
217
+ const BIG_OR_NULL = (v) => (v === null ? null : BIG(v));
218
+ const SIGNED = (v) => {
219
+ if (typeof v !== 'string' || !/^-?(0|[1-9][0-9]{0,77})$/.test(v))
220
+ throw new TypeError('int string');
221
+ return BigInt(v);
222
+ };
223
+ const BOOL_ = (v) => {
224
+ if (typeof v !== 'boolean')
225
+ throw new TypeError('bool');
226
+ return v;
227
+ };
228
+ /**
229
+ * An EVM trade's fees, currency order: the hook's whole take (`hookFee`, its paired `HookFee` log — always the
230
+ * QUOTE leg: a buy's off the quote IN, a sell's off the quote OUT). The pool's own LP fee is
231
+ * 0 on a FLOOR pool (the hook's dynamic-fee override); a `Swap` that logs a non-zero `fee` (pips) states no exact LP amount,
232
+ * so its fees are `null` (left out), never a guess.
233
+ */
234
+ export function evmFees(side, quoteIsCurrency1, hookFee, lpFeePips) {
235
+ if (lpFeePips !== 0)
236
+ return null;
237
+ const f = { in0: 0n, in1: 0n, out0: 0n, out1: 0n };
238
+ const leg = side === 'buy' ? 'in' : 'out';
239
+ f[`${leg}${quoteIsCurrency1 ? 1 : 0}`] = hookFee;
240
+ return f;
241
+ }
242
+ /** The indexer's `/events` body, decoded; a row that breaks the contract throws (the whole answer is refused, never part). */
243
+ export function decodeEventsBody(body) {
244
+ const b = body;
245
+ if (b === null || typeof b !== 'object' || !Array.isArray(b.swaps) || !Array.isArray(b.fills) || !Array.isArray(b.liquidity))
246
+ throw new TypeError('events body');
247
+ const swaps = b.swaps.map((r) => {
248
+ const side = SIDE(r.side);
249
+ const q1 = BOOL_(r.quoteIsCurrency1);
250
+ const sqrt = BIG(r.sqrtPriceX96);
251
+ return {
252
+ blockNumber: INT(r.blockNumber), logIndex: INT(r.logIndex), txIndex: INT(r.txIndex), txHash: HEX(r.txHash, 32), timestamp: INT(r.timestamp),
253
+ token: HEX(r.token, 20), side,
254
+ quoteAmount: BIG(r.quoteAmount), tokenAmount: BIG(r.tokenAmount),
255
+ quoteIsCurrency1: q1, sqrtPriceX96: sqrt,
256
+ trader: r.trader === null ? null : HEX(r.trader, 20), txFrom: HEX(r.txFrom, 20),
257
+ pool: HEX(r.poolId, 32),
258
+ /* the in-range VIRTUAL reserves off the log's own liquidity and price */
259
+ reserves01: virtualReserves(BIG(r.liquidity), sqrt, 96),
260
+ fees01: evmFees(side, q1, BIG(r.hookFee), INT(r.fee)),
261
+ };
262
+ });
263
+ const fills = b.fills.map((r) => ({
264
+ blockNumber: INT(r.blockNumber), logIndex: INT(r.logIndex), txIndex: INT(r.txIndex), txHash: HEX(r.txHash, 32), timestamp: INT(r.timestamp),
265
+ launch: HEX(r.launch, 20), token: HEX(r.token, 20), side: SIDE(r.side),
266
+ quoteAmount: BIG(r.quoteAmount), tokenAmount: BIG(r.tokenAmount), trader: HEX(r.trader, 20),
267
+ soldTotal: BIG(r.soldTotal), raisedTotal: BIG(r.raisedTotal),
268
+ fee: BIG(r.teamFee),
269
+ }));
270
+ /* every pool liquidity change: `add` / `donate` a join, `remove` an exit; the
271
+ maker the HOOK for its own positions, else the transaction's sender (the position manager is never the LP). */
272
+ const liquidity = b.liquidity.map((r) => {
273
+ const kind = r.kind;
274
+ if (kind !== 'add' && kind !== 'remove' && kind !== 'donate')
275
+ throw new TypeError('liquidity kind');
276
+ const a0 = BIG_OR_NULL(r.amount0);
277
+ const a1 = BIG_OR_NULL(r.amount1);
278
+ const sqrt = BIG_OR_NULL(r.sqrtPriceX96);
279
+ const liq = BIG_OR_NULL(r.liquidity);
280
+ return {
281
+ blockNumber: INT(r.blockNumber), logIndex: INT(r.logIndex), txIndex: INT(r.txIndex), txHash: HEX(r.txHash, 32), timestamp: INT(r.timestamp),
282
+ token: HEX(r.token, 20), pool: HEX(r.poolId, 32), kind: kind === 'remove' ? 'exit' : 'join',
283
+ amount01: a0 === null || a1 === null ? null : [a0, a1],
284
+ maker: BOOL_(r.isHook) ? HEX(r.sender, 20) : HEX(r.txFrom, 20),
285
+ reserves01: sqrt === null || liq === null ? null : virtualReserves(liq, sqrt, 96),
286
+ quoteIsCurrency1: BOOL_(r.quoteIsCurrency1),
287
+ };
288
+ });
289
+ return { swaps, fills, liquidity };
290
+ }
291
+ /** Split `[from, to]` into two halves (a busy range the indexer refused); `null` for a single block, which cannot split. */
292
+ export function halves(from, to) {
293
+ if (to <= from)
294
+ return null;
295
+ const mid = Math.floor((from + to) / 2);
296
+ return [[from, mid], [mid + 1, to]];
297
+ }
298
+ /* ---------------------------------------------------------------- the Carpenter indexer's `/events` body, strictly */
299
+ const B58 = (v) => {
300
+ if (typeof v !== 'string' || !/^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(v))
301
+ throw new TypeError('base58');
302
+ return v;
303
+ };
304
+ const SIG = (v) => {
305
+ if (typeof v !== 'string' || !/^[1-9A-HJ-NP-Za-km-z]{64,90}$/.test(v))
306
+ throw new TypeError('signature');
307
+ return v;
308
+ };
309
+ const BOOL = (v) => {
310
+ if (typeof v !== 'boolean')
311
+ throw new TypeError('bool');
312
+ return v;
313
+ };
314
+ const SPLIT = (v) => {
315
+ const o = v;
316
+ if (o === null || typeof o !== 'object')
317
+ throw new TypeError('fee split');
318
+ return BIG(o.skim) + BIG(o.creator) + BIG(o.holder) + BIG(o.platform) + BIG(o.team);
319
+ };
320
+ const U64_OR_NULL = (v) => (v === null ? null : BIG(v));
321
+ const pair01 = (a, b) => (a === null || b === null ? null : [a, b]);
322
+ /**
323
+ * A Carpenter trade's fees, currency order, every part the `Swapped` event carries: the hook's five-part split per
324
+ * currency (`feeSplit0` / `feeSplit1`: skim, creator, holder, platform, team), the Carpenter Platform fee
325
+ * (`protocolFeeTotal` in `protocolFeeCurrency`) and the LPs' fee (`lpFeeTotal`, in the INPUT currency). A fee in the trade's
326
+ * input currency is `in`, in its output currency `out`. `null` where the split is not known (`feeSplitKnown` false): never a
327
+ * partial figure.
328
+ */
329
+ export function solanaFees(r) {
330
+ if (!BOOL(r.feeSplitKnown))
331
+ return null;
332
+ const zeroForOne = BOOL(r.zeroForOne);
333
+ const c = [SPLIT(r.feeSplit0), SPLIT(r.feeSplit1)];
334
+ const pc = INT(r.protocolFeeCurrency);
335
+ if (pc !== 0 && pc !== 1)
336
+ throw new TypeError('protocol fee currency');
337
+ c[pc] += BIG(r.protocolFeeTotal);
338
+ const input = zeroForOne ? 0 : 1;
339
+ c[input] += BIG(r.lpFeeTotal);
340
+ return input === 0 ? { in0: c[0], in1: 0n, out0: 0n, out1: c[1] } : { in0: 0n, in1: c[1], out0: c[0], out1: 0n };
341
+ }
342
+ /**
343
+ * Carpenter's `GET /chains/:c/events?fromSlot&toSlot` into the
344
+ * SAME rows the EVM body decodes to, so one mapper states both: the slot is the block, `innerIxIndex` the event index, the
345
+ * signature the transaction id, every id BYTE-EXACT (base58 — never lower-cased); the swap's price is the TRADE's own,
346
+ * `walkSqrtPriceX64 ?? postSqrtPriceX64` (Q64.64, `sqrtBits` 64: where the trader's walk landed,
347
+ * before the hook's nudge moved the pool, as the EVM row's own `Swap` price is; `null` / absent walk = a swap before the
348
+ * upgrade, and only then `post`), its orientation the pool's own (`PairInfo.quoteIsCurrency1`, the row carries none). A range with
349
+ * `undecidedSwaps` above 0 is NOT final (a pool not read yet): the caller serves nothing, never a partial page.
350
+ * every swap carries the pool's two VAULTS after the transaction (`reserve0` /
351
+ * `reserve1`, `null` unknown) and its fees (`solanaFees`); `liquidity` (`LiquidityModified`: a positive delta a join, a
352
+ * negative an exit, a zero-delta poke left out; the principal `|amount − fees|` per currency — the event's caller delta less
353
+ * the fees it also paid) and `donations` (`Donated`, a join) ride beside, the maker the event's `owner` / `donor`.
354
+ */
355
+ export function decodeSolanaEventsBody(body) {
356
+ const b = body;
357
+ if (b === null || typeof b !== 'object' || !Array.isArray(b.swaps) || !Array.isArray(b.fills) || !Array.isArray(b.liquidity) || !Array.isArray(b.donations))
358
+ throw new TypeError('events body');
359
+ const undecided = INT(b.undecidedSwaps);
360
+ const swaps = b.swaps.map((r) => {
361
+ const trader = B58(r.trader);
362
+ return {
363
+ blockNumber: INT(r.slot), logIndex: INT(r.innerIxIndex), txIndex: INT(r.txIndex), txHash: SIG(r.signature), timestamp: INT(r.blockTime),
364
+ token: B58(r.mint), side: BOOL(r.isBuy) ? 'buy' : 'sell',
365
+ quoteAmount: BIG(r.quoteAmount), tokenAmount: BIG(r.tokenAmount),
366
+ quoteIsCurrency1: false, sqrtPriceX96: r.walkSqrtPriceX64 === null || r.walkSqrtPriceX64 === undefined ? BIG(r.postSqrtPriceX64) : BIG(r.walkSqrtPriceX64), sqrtBits: 64,
367
+ trader, txFrom: trader,
368
+ pool: B58(r.pool),
369
+ reserves01: pair01(U64_OR_NULL(r.reserve0), U64_OR_NULL(r.reserve1)),
370
+ fees01: solanaFees(r),
371
+ };
372
+ });
373
+ const fills = b.fills.map((r) => ({
374
+ blockNumber: INT(r.slot), logIndex: INT(r.innerIxIndex), txIndex: INT(r.txIndex), txHash: SIG(r.signature), timestamp: INT(r.blockTime),
375
+ launch: B58(r.launch), token: B58(r.mint), side: BOOL(r.isBuy) ? 'buy' : 'sell',
376
+ quoteAmount: BIG(r.quoteAmount), tokenAmount: BIG(r.tokenAmount), trader: B58(r.trader),
377
+ soldTotal: BIG(r.sold), raisedTotal: BIG(r.raised),
378
+ fee: r.teamFee === undefined ? null : U64_OR_NULL(r.teamFee),
379
+ }));
380
+ const liquidity = [];
381
+ for (const r of b.liquidity) {
382
+ const delta = SIGNED(r.liquidityDelta);
383
+ const at = { blockNumber: INT(r.slot), logIndex: INT(r.innerIxIndex), txIndex: INT(r.txIndex), txHash: SIG(r.signature), timestamp: INT(r.blockTime) };
384
+ const principal = (amount, fees) => { const v = amount - fees; return v < 0n ? -v : v; };
385
+ const row = {
386
+ ...at, token: B58(r.mint), pool: B58(r.pool), kind: delta > 0n ? 'join' : 'exit',
387
+ amount01: [principal(SIGNED(r.amount0), BIG(r.fees0)), principal(SIGNED(r.amount1), BIG(r.fees1))],
388
+ maker: B58(r.owner),
389
+ reserves01: pair01(U64_OR_NULL(r.reserve0), U64_OR_NULL(r.reserve1)),
390
+ };
391
+ if (delta !== 0n)
392
+ liquidity.push(row);
393
+ }
394
+ for (const r of b.donations) {
395
+ liquidity.push({
396
+ blockNumber: INT(r.slot), logIndex: INT(r.innerIxIndex), txIndex: INT(r.txIndex), txHash: SIG(r.signature), timestamp: INT(r.blockTime),
397
+ token: B58(r.mint), pool: B58(r.pool), kind: 'join',
398
+ amount01: [BIG(r.amount0), BIG(r.amount1)],
399
+ maker: B58(r.donor),
400
+ reserves01: pair01(U64_OR_NULL(r.reserve0), U64_OR_NULL(r.reserve1)),
401
+ });
402
+ }
403
+ return { swaps, fills, liquidity, undecided };
404
+ }
405
+ /** Carpenter's widest range (`span` past it is its 400): the Solana `/events` walk reads windows of this many slots. */
406
+ export const SOLANA_EVENTS_SPAN = 2_000;
407
+ //# sourceMappingURL=dex-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dex-adapter.js","sourceRoot":"","sources":["../src/dex-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export * from './chain.js';
2
+ export * from './types.js';
3
+ export * from './adapter.js';
4
+ export * from './client.js';
5
+ export * as dex from './dex-adapter.js';
6
+ export * from './quotes.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ export * from './chain.js';
2
+ export * from './types.js';
3
+ export * from './adapter.js';
4
+ export * from './client.js';
5
+ export * as dex from './dex-adapter.js';
6
+ export * from './quotes.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAC;AACxC,cAAc,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type ChainRef } from './chain.js';
2
+ import { APPROVED_QUOTE_TOKENS } from './quotes.gen.js';
3
+ export { APPROVED_QUOTE_TOKENS };
4
+ /**
5
+ * Whether FLOOR shows a launch quoted in `quote` on `chain`: the native coin (`null`, the zero address on EVM, wSOL on
6
+ * Solana) always, a token when it is on the chain's list. A chain with no list approves no token. Launches quoted in another
7
+ * FLOOR launch's token can also be shown by lineage, which this does not decide.
8
+ */
9
+ export declare function isApprovedQuote(chain: ChainRef, quote: string | null): boolean;
10
+ /** The symbol FLOOR lists an approved quote token under, or `undefined` for a token not on the chain's list. */
11
+ export declare function approvedQuoteSymbol(chain: ChainRef, quote: string): string | null | undefined;
12
+ //# sourceMappingURL=quotes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.d.ts","sourceRoot":"","sources":["../src/quotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,CAAC;AAWjC;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAI9E;AAED,gHAAgH;AAChH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAE7F"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The quote assets FLOOR shows launches in, per chain (generated; do not edit). A launch quoted in the chain's native
3
+ * coin is always shown; one quoted in a token is shown when the token is on its chain's list here. A launch quoted in
4
+ * another FLOOR launch's token can also be shown by lineage, a rule this list does not encode. EVM addresses are
5
+ * lower-case; Solana mints keep their case.
6
+ */
7
+ export declare const APPROVED_QUOTE_TOKENS: Readonly<Record<string, readonly (readonly [address: string, symbol: string | null])[]>>;
8
+ //# sourceMappingURL=quotes.gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotes.gen.d.ts","sourceRoot":"","sources":["../src/quotes.gen.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAmnE1H,CAAC"}