auctionflow-sdk 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -11
- package/dist/index.d.mts +82 -4
- package/dist/index.d.ts +82 -4
- package/dist/index.js +623 -62
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +617 -62
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -24,9 +24,15 @@ __export(index_exports, {
|
|
|
24
24
|
AuctionBuilder: () => AuctionBuilder,
|
|
25
25
|
AuctionFlowSDK: () => AuctionFlowSDK,
|
|
26
26
|
AuctionState: () => AuctionState,
|
|
27
|
+
DEFAULT_LIQUIDITY_BPS: () => DEFAULT_LIQUIDITY_BPS,
|
|
28
|
+
DEFAULT_SLIPPAGE_BPS: () => DEFAULT_SLIPPAGE_BPS,
|
|
29
|
+
MIN_LIQUIDITY_BPS: () => MIN_LIQUIDITY_BPS,
|
|
27
30
|
USDC_ADDRESSES: () => USDC_ADDRESSES,
|
|
31
|
+
applySlippage: () => applySlippage,
|
|
28
32
|
calculateBuyCost: () => calculateBuyCost,
|
|
29
33
|
calculateBuyQuote: () => calculateBuyQuote,
|
|
34
|
+
fillPurchase: () => fillPurchase,
|
|
35
|
+
maxBuyable: () => maxBuyable,
|
|
30
36
|
spotPrice: () => spotPrice
|
|
31
37
|
});
|
|
32
38
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -34,6 +40,10 @@ module.exports = __toCommonJS(index_exports);
|
|
|
34
40
|
// src/client.ts
|
|
35
41
|
var import_viem = require("viem");
|
|
36
42
|
|
|
43
|
+
// src/constants/protocol.ts
|
|
44
|
+
var MIN_LIQUIDITY_BPS = 2e3;
|
|
45
|
+
var DEFAULT_LIQUIDITY_BPS = 5e3;
|
|
46
|
+
|
|
37
47
|
// src/builders/auction-builder.ts
|
|
38
48
|
var AuctionBuilder = class {
|
|
39
49
|
config = {};
|
|
@@ -56,6 +66,16 @@ var AuctionBuilder = class {
|
|
|
56
66
|
this.config.maxRaise = maxRaise;
|
|
57
67
|
return this;
|
|
58
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Share of the raise, in basis points, seeded into a Uniswap pool when the
|
|
71
|
+
* auction migrates (5000 = 50%). The rest goes to the creator. Defaults to
|
|
72
|
+
* 50%; must be between 20% and 100%.
|
|
73
|
+
*/
|
|
74
|
+
withLiquidity(liquidityBps) {
|
|
75
|
+
if (!Number.isInteger(liquidityBps)) throw new Error("liquidityBps must be an integer");
|
|
76
|
+
this.config.liquidityBps = BigInt(liquidityBps);
|
|
77
|
+
return this;
|
|
78
|
+
}
|
|
59
79
|
withSchedule(startTime, endTime) {
|
|
60
80
|
this.config.startTime = startTime;
|
|
61
81
|
this.config.endTime = endTime;
|
|
@@ -78,11 +98,15 @@ var AuctionBuilder = class {
|
|
|
78
98
|
throw new Error(`Missing required field: ${key}`);
|
|
79
99
|
}
|
|
80
100
|
}
|
|
81
|
-
const config = this.config;
|
|
101
|
+
const config = { liquidityBps: BigInt(DEFAULT_LIQUIDITY_BPS), ...this.config };
|
|
82
102
|
if (config.maxSupply <= 0n) throw new Error("maxSupply must be greater than 0");
|
|
83
103
|
if (config.basePrice <= 0n) throw new Error("basePrice must be greater than 0");
|
|
84
104
|
if (config.slope < 0n) throw new Error("slope must not be negative");
|
|
85
105
|
if (config.maxRaise <= 0n) throw new Error("maxRaise must be greater than 0");
|
|
106
|
+
const liquidityBps = config.liquidityBps;
|
|
107
|
+
if (liquidityBps < BigInt(MIN_LIQUIDITY_BPS) || liquidityBps > 10000n) {
|
|
108
|
+
throw new Error(`liquidityBps must be between ${MIN_LIQUIDITY_BPS} and 10000`);
|
|
109
|
+
}
|
|
86
110
|
if (config.startTime >= config.endTime) {
|
|
87
111
|
throw new Error("startTime must be before endTime");
|
|
88
112
|
}
|
|
@@ -92,7 +116,7 @@ var AuctionBuilder = class {
|
|
|
92
116
|
|
|
93
117
|
// src/constants/addresses.ts
|
|
94
118
|
var AUCTION_ADDRESSES = {
|
|
95
|
-
84532: "
|
|
119
|
+
84532: "0x722f4521b96aca1df7c65a1dbe3b1713803ccea9",
|
|
96
120
|
8453: "0x0000000000000000000000000000000000000000"
|
|
97
121
|
// not yet deployed
|
|
98
122
|
};
|
|
@@ -115,10 +139,67 @@ var tokenAuctionAbi = [
|
|
|
115
139
|
"name": "defaultFeeBps_",
|
|
116
140
|
"type": "uint256",
|
|
117
141
|
"internalType": "uint256"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "positionManager_",
|
|
145
|
+
"type": "address",
|
|
146
|
+
"internalType": "contract INonfungiblePositionManager"
|
|
118
147
|
}
|
|
119
148
|
],
|
|
120
149
|
"stateMutability": "nonpayable"
|
|
121
150
|
},
|
|
151
|
+
{
|
|
152
|
+
"type": "function",
|
|
153
|
+
"name": "MAX_FEE_BPS",
|
|
154
|
+
"inputs": [],
|
|
155
|
+
"outputs": [
|
|
156
|
+
{
|
|
157
|
+
"name": "",
|
|
158
|
+
"type": "uint256",
|
|
159
|
+
"internalType": "uint256"
|
|
160
|
+
}
|
|
161
|
+
],
|
|
162
|
+
"stateMutability": "view"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"type": "function",
|
|
166
|
+
"name": "MAX_LP_FEE_SHARE_BPS",
|
|
167
|
+
"inputs": [],
|
|
168
|
+
"outputs": [
|
|
169
|
+
{
|
|
170
|
+
"name": "",
|
|
171
|
+
"type": "uint256",
|
|
172
|
+
"internalType": "uint256"
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
"stateMutability": "view"
|
|
176
|
+
},
|
|
177
|
+
{
|
|
178
|
+
"type": "function",
|
|
179
|
+
"name": "MIN_LIQUIDITY_BPS",
|
|
180
|
+
"inputs": [],
|
|
181
|
+
"outputs": [
|
|
182
|
+
{
|
|
183
|
+
"name": "",
|
|
184
|
+
"type": "uint256",
|
|
185
|
+
"internalType": "uint256"
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"stateMutability": "view"
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"type": "function",
|
|
192
|
+
"name": "POOL_FEE",
|
|
193
|
+
"inputs": [],
|
|
194
|
+
"outputs": [
|
|
195
|
+
{
|
|
196
|
+
"name": "",
|
|
197
|
+
"type": "uint24",
|
|
198
|
+
"internalType": "uint24"
|
|
199
|
+
}
|
|
200
|
+
],
|
|
201
|
+
"stateMutability": "view"
|
|
202
|
+
},
|
|
122
203
|
{
|
|
123
204
|
"type": "function",
|
|
124
205
|
"name": "auctionCount",
|
|
@@ -192,6 +273,16 @@ var tokenAuctionAbi = [
|
|
|
192
273
|
"name": "protocolFeeBps",
|
|
193
274
|
"type": "uint256",
|
|
194
275
|
"internalType": "uint256"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"name": "liquidityBps",
|
|
279
|
+
"type": "uint256",
|
|
280
|
+
"internalType": "uint256"
|
|
281
|
+
},
|
|
282
|
+
{
|
|
283
|
+
"name": "lpFeeShareBps",
|
|
284
|
+
"type": "uint256",
|
|
285
|
+
"internalType": "uint256"
|
|
195
286
|
}
|
|
196
287
|
]
|
|
197
288
|
},
|
|
@@ -226,11 +317,40 @@ var tokenAuctionAbi = [
|
|
|
226
317
|
"name": "amount",
|
|
227
318
|
"type": "uint256",
|
|
228
319
|
"internalType": "uint256"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"name": "maxCost",
|
|
323
|
+
"type": "uint256",
|
|
324
|
+
"internalType": "uint256"
|
|
229
325
|
}
|
|
230
326
|
],
|
|
231
327
|
"outputs": [],
|
|
232
328
|
"stateMutability": "nonpayable"
|
|
233
329
|
},
|
|
330
|
+
{
|
|
331
|
+
"type": "function",
|
|
332
|
+
"name": "collectFees",
|
|
333
|
+
"inputs": [
|
|
334
|
+
{
|
|
335
|
+
"name": "auctionId",
|
|
336
|
+
"type": "uint256",
|
|
337
|
+
"internalType": "uint256"
|
|
338
|
+
}
|
|
339
|
+
],
|
|
340
|
+
"outputs": [
|
|
341
|
+
{
|
|
342
|
+
"name": "tokenFees",
|
|
343
|
+
"type": "uint256",
|
|
344
|
+
"internalType": "uint256"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"name": "paymentFees",
|
|
348
|
+
"type": "uint256",
|
|
349
|
+
"internalType": "uint256"
|
|
350
|
+
}
|
|
351
|
+
],
|
|
352
|
+
"stateMutability": "nonpayable"
|
|
353
|
+
},
|
|
234
354
|
{
|
|
235
355
|
"type": "function",
|
|
236
356
|
"name": "completeAuction",
|
|
@@ -249,63 +369,107 @@ var tokenAuctionAbi = [
|
|
|
249
369
|
"name": "createAuction",
|
|
250
370
|
"inputs": [
|
|
251
371
|
{
|
|
252
|
-
"name": "
|
|
253
|
-
"type": "
|
|
254
|
-
"internalType": "
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
372
|
+
"name": "p",
|
|
373
|
+
"type": "tuple",
|
|
374
|
+
"internalType": "struct TokenAuction.AuctionParams",
|
|
375
|
+
"components": [
|
|
376
|
+
{
|
|
377
|
+
"name": "name",
|
|
378
|
+
"type": "string",
|
|
379
|
+
"internalType": "string"
|
|
380
|
+
},
|
|
381
|
+
{
|
|
382
|
+
"name": "symbol",
|
|
383
|
+
"type": "string",
|
|
384
|
+
"internalType": "string"
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
"name": "maxSupply",
|
|
388
|
+
"type": "uint256",
|
|
389
|
+
"internalType": "uint256"
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"name": "paymentToken",
|
|
393
|
+
"type": "address",
|
|
394
|
+
"internalType": "address"
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
"name": "basePrice",
|
|
398
|
+
"type": "uint256",
|
|
399
|
+
"internalType": "uint256"
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"name": "slope",
|
|
403
|
+
"type": "uint256",
|
|
404
|
+
"internalType": "uint256"
|
|
405
|
+
},
|
|
406
|
+
{
|
|
407
|
+
"name": "maxRaise",
|
|
408
|
+
"type": "uint256",
|
|
409
|
+
"internalType": "uint256"
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"name": "startTime",
|
|
413
|
+
"type": "uint256",
|
|
414
|
+
"internalType": "uint256"
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"name": "endTime",
|
|
418
|
+
"type": "uint256",
|
|
419
|
+
"internalType": "uint256"
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"name": "liquidityBps",
|
|
423
|
+
"type": "uint256",
|
|
424
|
+
"internalType": "uint256"
|
|
425
|
+
}
|
|
426
|
+
]
|
|
427
|
+
}
|
|
428
|
+
],
|
|
429
|
+
"outputs": [
|
|
261
430
|
{
|
|
262
|
-
"name": "
|
|
431
|
+
"name": "auctionId",
|
|
263
432
|
"type": "uint256",
|
|
264
433
|
"internalType": "uint256"
|
|
265
|
-
}
|
|
434
|
+
}
|
|
435
|
+
],
|
|
436
|
+
"stateMutability": "nonpayable"
|
|
437
|
+
},
|
|
438
|
+
{
|
|
439
|
+
"type": "function",
|
|
440
|
+
"name": "custodied",
|
|
441
|
+
"inputs": [
|
|
266
442
|
{
|
|
267
|
-
"name": "
|
|
443
|
+
"name": "",
|
|
268
444
|
"type": "address",
|
|
269
445
|
"internalType": "address"
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
"type": "uint256",
|
|
274
|
-
"internalType": "uint256"
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
"name": "slope",
|
|
278
|
-
"type": "uint256",
|
|
279
|
-
"internalType": "uint256"
|
|
280
|
-
},
|
|
281
|
-
{
|
|
282
|
-
"name": "maxRaise",
|
|
283
|
-
"type": "uint256",
|
|
284
|
-
"internalType": "uint256"
|
|
285
|
-
},
|
|
286
|
-
{
|
|
287
|
-
"name": "startTime",
|
|
288
|
-
"type": "uint256",
|
|
289
|
-
"internalType": "uint256"
|
|
290
|
-
},
|
|
446
|
+
}
|
|
447
|
+
],
|
|
448
|
+
"outputs": [
|
|
291
449
|
{
|
|
292
|
-
"name": "
|
|
450
|
+
"name": "",
|
|
293
451
|
"type": "uint256",
|
|
294
452
|
"internalType": "uint256"
|
|
295
453
|
}
|
|
296
454
|
],
|
|
455
|
+
"stateMutability": "view"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"type": "function",
|
|
459
|
+
"name": "defaultFeeBps",
|
|
460
|
+
"inputs": [],
|
|
297
461
|
"outputs": [
|
|
298
462
|
{
|
|
299
|
-
"name": "
|
|
463
|
+
"name": "",
|
|
300
464
|
"type": "uint256",
|
|
301
465
|
"internalType": "uint256"
|
|
302
466
|
}
|
|
303
467
|
],
|
|
304
|
-
"stateMutability": "
|
|
468
|
+
"stateMutability": "view"
|
|
305
469
|
},
|
|
306
470
|
{
|
|
307
471
|
"type": "function",
|
|
308
|
-
"name": "
|
|
472
|
+
"name": "defaultLpFeeShareBps",
|
|
309
473
|
"inputs": [],
|
|
310
474
|
"outputs": [
|
|
311
475
|
{
|
|
@@ -364,6 +528,19 @@ var tokenAuctionAbi = [
|
|
|
364
528
|
],
|
|
365
529
|
"stateMutability": "view"
|
|
366
530
|
},
|
|
531
|
+
{
|
|
532
|
+
"type": "function",
|
|
533
|
+
"name": "migrate",
|
|
534
|
+
"inputs": [
|
|
535
|
+
{
|
|
536
|
+
"name": "auctionId",
|
|
537
|
+
"type": "uint256",
|
|
538
|
+
"internalType": "uint256"
|
|
539
|
+
}
|
|
540
|
+
],
|
|
541
|
+
"outputs": [],
|
|
542
|
+
"stateMutability": "nonpayable"
|
|
543
|
+
},
|
|
367
544
|
{
|
|
368
545
|
"type": "function",
|
|
369
546
|
"name": "owner",
|
|
@@ -377,6 +554,57 @@ var tokenAuctionAbi = [
|
|
|
377
554
|
],
|
|
378
555
|
"stateMutability": "view"
|
|
379
556
|
},
|
|
557
|
+
{
|
|
558
|
+
"type": "function",
|
|
559
|
+
"name": "poolOf",
|
|
560
|
+
"inputs": [
|
|
561
|
+
{
|
|
562
|
+
"name": "",
|
|
563
|
+
"type": "uint256",
|
|
564
|
+
"internalType": "uint256"
|
|
565
|
+
}
|
|
566
|
+
],
|
|
567
|
+
"outputs": [
|
|
568
|
+
{
|
|
569
|
+
"name": "",
|
|
570
|
+
"type": "address",
|
|
571
|
+
"internalType": "address"
|
|
572
|
+
}
|
|
573
|
+
],
|
|
574
|
+
"stateMutability": "view"
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
"type": "function",
|
|
578
|
+
"name": "positionId",
|
|
579
|
+
"inputs": [
|
|
580
|
+
{
|
|
581
|
+
"name": "",
|
|
582
|
+
"type": "uint256",
|
|
583
|
+
"internalType": "uint256"
|
|
584
|
+
}
|
|
585
|
+
],
|
|
586
|
+
"outputs": [
|
|
587
|
+
{
|
|
588
|
+
"name": "",
|
|
589
|
+
"type": "uint256",
|
|
590
|
+
"internalType": "uint256"
|
|
591
|
+
}
|
|
592
|
+
],
|
|
593
|
+
"stateMutability": "view"
|
|
594
|
+
},
|
|
595
|
+
{
|
|
596
|
+
"type": "function",
|
|
597
|
+
"name": "positionManager",
|
|
598
|
+
"inputs": [],
|
|
599
|
+
"outputs": [
|
|
600
|
+
{
|
|
601
|
+
"name": "",
|
|
602
|
+
"type": "address",
|
|
603
|
+
"internalType": "contract INonfungiblePositionManager"
|
|
604
|
+
}
|
|
605
|
+
],
|
|
606
|
+
"stateMutability": "view"
|
|
607
|
+
},
|
|
380
608
|
{
|
|
381
609
|
"type": "function",
|
|
382
610
|
"name": "proceedsWithdrawn",
|
|
@@ -416,6 +644,63 @@ var tokenAuctionAbi = [
|
|
|
416
644
|
"outputs": [],
|
|
417
645
|
"stateMutability": "nonpayable"
|
|
418
646
|
},
|
|
647
|
+
{
|
|
648
|
+
"type": "function",
|
|
649
|
+
"name": "setDefaultFeeBps",
|
|
650
|
+
"inputs": [
|
|
651
|
+
{
|
|
652
|
+
"name": "feeBps",
|
|
653
|
+
"type": "uint256",
|
|
654
|
+
"internalType": "uint256"
|
|
655
|
+
}
|
|
656
|
+
],
|
|
657
|
+
"outputs": [],
|
|
658
|
+
"stateMutability": "nonpayable"
|
|
659
|
+
},
|
|
660
|
+
{
|
|
661
|
+
"type": "function",
|
|
662
|
+
"name": "setDefaultLpFeeShareBps",
|
|
663
|
+
"inputs": [
|
|
664
|
+
{
|
|
665
|
+
"name": "shareBps",
|
|
666
|
+
"type": "uint256",
|
|
667
|
+
"internalType": "uint256"
|
|
668
|
+
}
|
|
669
|
+
],
|
|
670
|
+
"outputs": [],
|
|
671
|
+
"stateMutability": "nonpayable"
|
|
672
|
+
},
|
|
673
|
+
{
|
|
674
|
+
"type": "function",
|
|
675
|
+
"name": "setProtocolFeeRecipient",
|
|
676
|
+
"inputs": [
|
|
677
|
+
{
|
|
678
|
+
"name": "recipient",
|
|
679
|
+
"type": "address",
|
|
680
|
+
"internalType": "address"
|
|
681
|
+
}
|
|
682
|
+
],
|
|
683
|
+
"outputs": [],
|
|
684
|
+
"stateMutability": "nonpayable"
|
|
685
|
+
},
|
|
686
|
+
{
|
|
687
|
+
"type": "function",
|
|
688
|
+
"name": "sweep",
|
|
689
|
+
"inputs": [
|
|
690
|
+
{
|
|
691
|
+
"name": "token",
|
|
692
|
+
"type": "address",
|
|
693
|
+
"internalType": "contract IERC20"
|
|
694
|
+
},
|
|
695
|
+
{
|
|
696
|
+
"name": "to",
|
|
697
|
+
"type": "address",
|
|
698
|
+
"internalType": "address"
|
|
699
|
+
}
|
|
700
|
+
],
|
|
701
|
+
"outputs": [],
|
|
702
|
+
"stateMutability": "nonpayable"
|
|
703
|
+
},
|
|
419
704
|
{
|
|
420
705
|
"type": "function",
|
|
421
706
|
"name": "transferOwnership",
|
|
@@ -429,6 +714,29 @@ var tokenAuctionAbi = [
|
|
|
429
714
|
"outputs": [],
|
|
430
715
|
"stateMutability": "nonpayable"
|
|
431
716
|
},
|
|
717
|
+
{
|
|
718
|
+
"type": "function",
|
|
719
|
+
"name": "uniswapV3SwapCallback",
|
|
720
|
+
"inputs": [
|
|
721
|
+
{
|
|
722
|
+
"name": "amount0Delta",
|
|
723
|
+
"type": "int256",
|
|
724
|
+
"internalType": "int256"
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
"name": "amount1Delta",
|
|
728
|
+
"type": "int256",
|
|
729
|
+
"internalType": "int256"
|
|
730
|
+
},
|
|
731
|
+
{
|
|
732
|
+
"name": "data",
|
|
733
|
+
"type": "bytes",
|
|
734
|
+
"internalType": "bytes"
|
|
735
|
+
}
|
|
736
|
+
],
|
|
737
|
+
"outputs": [],
|
|
738
|
+
"stateMutability": "nonpayable"
|
|
739
|
+
},
|
|
432
740
|
{
|
|
433
741
|
"type": "function",
|
|
434
742
|
"name": "userPurchases",
|
|
@@ -548,6 +856,12 @@ var tokenAuctionAbi = [
|
|
|
548
856
|
"type": "uint256",
|
|
549
857
|
"indexed": false,
|
|
550
858
|
"internalType": "uint256"
|
|
859
|
+
},
|
|
860
|
+
{
|
|
861
|
+
"name": "liquidityBps",
|
|
862
|
+
"type": "uint256",
|
|
863
|
+
"indexed": false,
|
|
864
|
+
"internalType": "uint256"
|
|
551
865
|
}
|
|
552
866
|
],
|
|
553
867
|
"anonymous": false
|
|
@@ -563,10 +877,103 @@ var tokenAuctionAbi = [
|
|
|
563
877
|
"internalType": "uint256"
|
|
564
878
|
},
|
|
565
879
|
{
|
|
566
|
-
"name": "
|
|
880
|
+
"name": "pool",
|
|
567
881
|
"type": "address",
|
|
568
882
|
"indexed": false,
|
|
569
883
|
"internalType": "address"
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
"name": "positionId",
|
|
887
|
+
"type": "uint256",
|
|
888
|
+
"indexed": false,
|
|
889
|
+
"internalType": "uint256"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"name": "tokenLiquidity",
|
|
893
|
+
"type": "uint256",
|
|
894
|
+
"indexed": false,
|
|
895
|
+
"internalType": "uint256"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"name": "paymentLiquidity",
|
|
899
|
+
"type": "uint256",
|
|
900
|
+
"indexed": false,
|
|
901
|
+
"internalType": "uint256"
|
|
902
|
+
}
|
|
903
|
+
],
|
|
904
|
+
"anonymous": false
|
|
905
|
+
},
|
|
906
|
+
{
|
|
907
|
+
"type": "event",
|
|
908
|
+
"name": "DefaultFeeBpsUpdated",
|
|
909
|
+
"inputs": [
|
|
910
|
+
{
|
|
911
|
+
"name": "previous",
|
|
912
|
+
"type": "uint256",
|
|
913
|
+
"indexed": false,
|
|
914
|
+
"internalType": "uint256"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"name": "current",
|
|
918
|
+
"type": "uint256",
|
|
919
|
+
"indexed": false,
|
|
920
|
+
"internalType": "uint256"
|
|
921
|
+
}
|
|
922
|
+
],
|
|
923
|
+
"anonymous": false
|
|
924
|
+
},
|
|
925
|
+
{
|
|
926
|
+
"type": "event",
|
|
927
|
+
"name": "DefaultLpFeeShareBpsUpdated",
|
|
928
|
+
"inputs": [
|
|
929
|
+
{
|
|
930
|
+
"name": "previous",
|
|
931
|
+
"type": "uint256",
|
|
932
|
+
"indexed": false,
|
|
933
|
+
"internalType": "uint256"
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
"name": "current",
|
|
937
|
+
"type": "uint256",
|
|
938
|
+
"indexed": false,
|
|
939
|
+
"internalType": "uint256"
|
|
940
|
+
}
|
|
941
|
+
],
|
|
942
|
+
"anonymous": false
|
|
943
|
+
},
|
|
944
|
+
{
|
|
945
|
+
"type": "event",
|
|
946
|
+
"name": "LpFeesCollected",
|
|
947
|
+
"inputs": [
|
|
948
|
+
{
|
|
949
|
+
"name": "auctionId",
|
|
950
|
+
"type": "uint256",
|
|
951
|
+
"indexed": true,
|
|
952
|
+
"internalType": "uint256"
|
|
953
|
+
},
|
|
954
|
+
{
|
|
955
|
+
"name": "creatorTokenFees",
|
|
956
|
+
"type": "uint256",
|
|
957
|
+
"indexed": false,
|
|
958
|
+
"internalType": "uint256"
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
"name": "creatorPaymentFees",
|
|
962
|
+
"type": "uint256",
|
|
963
|
+
"indexed": false,
|
|
964
|
+
"internalType": "uint256"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"name": "protocolTokenFees",
|
|
968
|
+
"type": "uint256",
|
|
969
|
+
"indexed": false,
|
|
970
|
+
"internalType": "uint256"
|
|
971
|
+
},
|
|
972
|
+
{
|
|
973
|
+
"name": "protocolPaymentFees",
|
|
974
|
+
"type": "uint256",
|
|
975
|
+
"indexed": false,
|
|
976
|
+
"internalType": "uint256"
|
|
570
977
|
}
|
|
571
978
|
],
|
|
572
979
|
"anonymous": false
|
|
@@ -615,6 +1022,50 @@ var tokenAuctionAbi = [
|
|
|
615
1022
|
],
|
|
616
1023
|
"anonymous": false
|
|
617
1024
|
},
|
|
1025
|
+
{
|
|
1026
|
+
"type": "event",
|
|
1027
|
+
"name": "ProtocolFeeRecipientUpdated",
|
|
1028
|
+
"inputs": [
|
|
1029
|
+
{
|
|
1030
|
+
"name": "previous",
|
|
1031
|
+
"type": "address",
|
|
1032
|
+
"indexed": true,
|
|
1033
|
+
"internalType": "address"
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"name": "current",
|
|
1037
|
+
"type": "address",
|
|
1038
|
+
"indexed": true,
|
|
1039
|
+
"internalType": "address"
|
|
1040
|
+
}
|
|
1041
|
+
],
|
|
1042
|
+
"anonymous": false
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"type": "event",
|
|
1046
|
+
"name": "Swept",
|
|
1047
|
+
"inputs": [
|
|
1048
|
+
{
|
|
1049
|
+
"name": "token",
|
|
1050
|
+
"type": "address",
|
|
1051
|
+
"indexed": true,
|
|
1052
|
+
"internalType": "address"
|
|
1053
|
+
},
|
|
1054
|
+
{
|
|
1055
|
+
"name": "to",
|
|
1056
|
+
"type": "address",
|
|
1057
|
+
"indexed": true,
|
|
1058
|
+
"internalType": "address"
|
|
1059
|
+
},
|
|
1060
|
+
{
|
|
1061
|
+
"name": "amount",
|
|
1062
|
+
"type": "uint256",
|
|
1063
|
+
"indexed": false,
|
|
1064
|
+
"internalType": "uint256"
|
|
1065
|
+
}
|
|
1066
|
+
],
|
|
1067
|
+
"anonymous": false
|
|
1068
|
+
},
|
|
618
1069
|
{
|
|
619
1070
|
"type": "event",
|
|
620
1071
|
"name": "TokensPurchased",
|
|
@@ -706,9 +1157,13 @@ var tokenAuctionAbi = [
|
|
|
706
1157
|
|
|
707
1158
|
// src/utils/bonding-curve.ts
|
|
708
1159
|
var TOKEN_SCALE = 10n ** 18n;
|
|
1160
|
+
var ceilDiv = (a, b) => (a + b - 1n) / b;
|
|
709
1161
|
function calculateBuyCost(currentSupply, amount, basePrice, slope) {
|
|
710
|
-
const linearCost = basePrice * amount
|
|
711
|
-
const curveCost =
|
|
1162
|
+
const linearCost = ceilDiv(basePrice * amount, TOKEN_SCALE);
|
|
1163
|
+
const curveCost = ceilDiv(
|
|
1164
|
+
slope * amount * (2n * currentSupply + amount),
|
|
1165
|
+
2n * TOKEN_SCALE * TOKEN_SCALE
|
|
1166
|
+
);
|
|
712
1167
|
return linearCost + curveCost;
|
|
713
1168
|
}
|
|
714
1169
|
function spotPrice(currentSupply, basePrice, slope) {
|
|
@@ -724,6 +1179,37 @@ function calculateBuyQuote(currentSupply, amount, basePrice, slope, feeBps) {
|
|
|
724
1179
|
spotPriceAfter: spotPrice(currentSupply + amount, basePrice, slope)
|
|
725
1180
|
};
|
|
726
1181
|
}
|
|
1182
|
+
var DEFAULT_SLIPPAGE_BPS = 100;
|
|
1183
|
+
function applySlippage(total, slippageBps) {
|
|
1184
|
+
if (!Number.isInteger(slippageBps) || slippageBps < 0 || slippageBps > 1e4) {
|
|
1185
|
+
throw new Error("slippageBps must be an integer between 0 and 10000");
|
|
1186
|
+
}
|
|
1187
|
+
return (total * BigInt(1e4 + slippageBps) + 9999n) / 10000n;
|
|
1188
|
+
}
|
|
1189
|
+
function maxBuyable(currentSupply, budget, basePrice, slope, upperBound) {
|
|
1190
|
+
let hi = budget * TOKEN_SCALE / basePrice + 1n;
|
|
1191
|
+
if (hi > upperBound) hi = upperBound;
|
|
1192
|
+
let lo = 0n;
|
|
1193
|
+
while (lo < hi) {
|
|
1194
|
+
const mid = (lo + hi + 1n) / 2n;
|
|
1195
|
+
if (calculateBuyCost(currentSupply, mid, basePrice, slope) <= budget) lo = mid;
|
|
1196
|
+
else hi = mid - 1n;
|
|
1197
|
+
}
|
|
1198
|
+
return lo;
|
|
1199
|
+
}
|
|
1200
|
+
function fillPurchase(currentSupply, requested, basePrice, slope, totalRaised, maxRaise) {
|
|
1201
|
+
const remaining = maxRaise - totalRaised;
|
|
1202
|
+
const cost = calculateBuyCost(currentSupply, requested, basePrice, slope);
|
|
1203
|
+
if (cost < remaining) return { amount: requested, cost, fillsAuction: false };
|
|
1204
|
+
if (cost === remaining) return { amount: requested, cost, fillsAuction: true };
|
|
1205
|
+
const amount = maxBuyable(currentSupply, remaining, basePrice, slope, requested);
|
|
1206
|
+
if (amount === 0n) throw new Error("Auction is sold out");
|
|
1207
|
+
return {
|
|
1208
|
+
amount,
|
|
1209
|
+
cost: calculateBuyCost(currentSupply, amount, basePrice, slope),
|
|
1210
|
+
fillsAuction: true
|
|
1211
|
+
};
|
|
1212
|
+
}
|
|
727
1213
|
|
|
728
1214
|
// src/utils/chains.ts
|
|
729
1215
|
var import_chains = require("viem/chains");
|
|
@@ -772,34 +1258,50 @@ var AuctionFlowSDK = class {
|
|
|
772
1258
|
abi: tokenAuctionAbi,
|
|
773
1259
|
functionName: "createAuction",
|
|
774
1260
|
args: [
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
1261
|
+
{
|
|
1262
|
+
name: config.name,
|
|
1263
|
+
symbol: config.symbol,
|
|
1264
|
+
maxSupply: config.maxSupply,
|
|
1265
|
+
paymentToken: config.paymentToken,
|
|
1266
|
+
basePrice: config.basePrice,
|
|
1267
|
+
slope: config.slope,
|
|
1268
|
+
maxRaise: config.maxRaise,
|
|
1269
|
+
startTime: config.startTime,
|
|
1270
|
+
endTime: config.endTime,
|
|
1271
|
+
liquidityBps: config.liquidityBps ?? BigInt(DEFAULT_LIQUIDITY_BPS)
|
|
1272
|
+
}
|
|
784
1273
|
]
|
|
785
1274
|
});
|
|
786
1275
|
return hash;
|
|
787
1276
|
}
|
|
788
|
-
|
|
1277
|
+
/**
|
|
1278
|
+
* Buy `amount` tokens (in token wei). The price rises with every purchase, so
|
|
1279
|
+
* the contract takes a maximum total cost and reverts if the price moved past
|
|
1280
|
+
* it before the transaction landed.
|
|
1281
|
+
*
|
|
1282
|
+
* Pass `maxCost` to set that bound exactly, or `slippageBps` to derive it
|
|
1283
|
+
* from a fresh quote (default 100 = 1% above the quoted total).
|
|
1284
|
+
*/
|
|
1285
|
+
async buyTokens(auctionId, amount, options = {}) {
|
|
789
1286
|
if (!this.walletClient) throw new Error("Wallet client required");
|
|
1287
|
+
const maxCost = options.maxCost ?? applySlippage(
|
|
1288
|
+
(await this.getQuote(auctionId, amount)).totalCost,
|
|
1289
|
+
options.slippageBps ?? DEFAULT_SLIPPAGE_BPS
|
|
1290
|
+
);
|
|
790
1291
|
const hash = await this.walletClient.writeContract({
|
|
791
1292
|
chain: this.chain,
|
|
792
1293
|
account: this.walletClient.account,
|
|
793
1294
|
address: this.auctionAddress,
|
|
794
1295
|
abi: tokenAuctionAbi,
|
|
795
1296
|
functionName: "buyTokens",
|
|
796
|
-
args: [auctionId, amount]
|
|
1297
|
+
args: [auctionId, amount, maxCost]
|
|
797
1298
|
});
|
|
798
1299
|
return hash;
|
|
799
1300
|
}
|
|
800
1301
|
/**
|
|
801
|
-
*
|
|
802
|
-
*
|
|
1302
|
+
* Pay a completed auction's creator their share of the raise: everything
|
|
1303
|
+
* not reserved for Uniswap liquidity. Creator only, once, before or after
|
|
1304
|
+
* migration.
|
|
803
1305
|
*/
|
|
804
1306
|
async withdrawProceeds(auctionId) {
|
|
805
1307
|
if (!this.walletClient) throw new Error("Wallet client required");
|
|
@@ -813,6 +1315,53 @@ var AuctionFlowSDK = class {
|
|
|
813
1315
|
});
|
|
814
1316
|
return hash;
|
|
815
1317
|
}
|
|
1318
|
+
/**
|
|
1319
|
+
* Move a completed auction's liquidity into a Uniswap v3 pool at the
|
|
1320
|
+
* auction's final price, lock it, and unlock the token for trading. Anyone
|
|
1321
|
+
* may call it.
|
|
1322
|
+
*/
|
|
1323
|
+
async migrate(auctionId) {
|
|
1324
|
+
return this.write("migrate", [auctionId]);
|
|
1325
|
+
}
|
|
1326
|
+
/**
|
|
1327
|
+
* Collect the migrated pool's trading fees. The protocol takes its share and
|
|
1328
|
+
* the creator receives the rest. Anyone may call it.
|
|
1329
|
+
*/
|
|
1330
|
+
async collectFees(auctionId) {
|
|
1331
|
+
return this.write("collectFees", [auctionId]);
|
|
1332
|
+
}
|
|
1333
|
+
/** The Uniswap pool and position for a migrated auction. */
|
|
1334
|
+
async getMigration(auctionId) {
|
|
1335
|
+
const [pool, positionId] = await Promise.all([
|
|
1336
|
+
this.publicClient.readContract({
|
|
1337
|
+
address: this.auctionAddress,
|
|
1338
|
+
abi: tokenAuctionAbi,
|
|
1339
|
+
functionName: "poolOf",
|
|
1340
|
+
args: [auctionId]
|
|
1341
|
+
}),
|
|
1342
|
+
this.publicClient.readContract({
|
|
1343
|
+
address: this.auctionAddress,
|
|
1344
|
+
abi: tokenAuctionAbi,
|
|
1345
|
+
functionName: "positionId",
|
|
1346
|
+
args: [auctionId]
|
|
1347
|
+
})
|
|
1348
|
+
]);
|
|
1349
|
+
return {
|
|
1350
|
+
pool: pool === import_viem.zeroAddress ? null : pool,
|
|
1351
|
+
positionId: positionId === 0n ? null : positionId
|
|
1352
|
+
};
|
|
1353
|
+
}
|
|
1354
|
+
async write(functionName, args) {
|
|
1355
|
+
if (!this.walletClient) throw new Error("Wallet client required");
|
|
1356
|
+
return this.walletClient.writeContract({
|
|
1357
|
+
chain: this.chain,
|
|
1358
|
+
account: this.walletClient.account,
|
|
1359
|
+
address: this.auctionAddress,
|
|
1360
|
+
abi: tokenAuctionAbi,
|
|
1361
|
+
functionName,
|
|
1362
|
+
args
|
|
1363
|
+
});
|
|
1364
|
+
}
|
|
816
1365
|
// Read: Has an auction's creator already withdrawn its proceeds?
|
|
817
1366
|
async hasWithdrawnProceeds(auctionId) {
|
|
818
1367
|
return this.publicClient.readContract({
|
|
@@ -835,18 +1384,22 @@ var AuctionFlowSDK = class {
|
|
|
835
1384
|
// Read: Get buy quote (off-chain calculation)
|
|
836
1385
|
async getQuote(auctionId, amount) {
|
|
837
1386
|
const auction = await this.getAuction(auctionId);
|
|
838
|
-
const
|
|
1387
|
+
const fill = fillPurchase(
|
|
839
1388
|
auction.totalSold,
|
|
840
1389
|
amount,
|
|
841
1390
|
auction.basePrice,
|
|
842
1391
|
auction.slope,
|
|
843
|
-
auction.
|
|
1392
|
+
auction.totalRaised,
|
|
1393
|
+
auction.maxRaise
|
|
844
1394
|
);
|
|
1395
|
+
const fee = fill.cost * auction.protocolFeeBps / 10000n;
|
|
845
1396
|
return {
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
1397
|
+
amount: fill.amount,
|
|
1398
|
+
cost: fill.cost,
|
|
1399
|
+
fee,
|
|
1400
|
+
totalCost: fill.cost + fee,
|
|
1401
|
+
spotPriceAfter: spotPrice(auction.totalSold + fill.amount, auction.basePrice, auction.slope),
|
|
1402
|
+
fillsAuction: fill.fillsAuction
|
|
850
1403
|
};
|
|
851
1404
|
}
|
|
852
1405
|
// Read: Get spot price
|
|
@@ -872,7 +1425,9 @@ var AuctionFlowSDK = class {
|
|
|
872
1425
|
state: raw.state,
|
|
873
1426
|
totalRaised: raw.totalRaised,
|
|
874
1427
|
totalSold: raw.totalSold,
|
|
875
|
-
protocolFeeBps: raw.config.protocolFeeBps
|
|
1428
|
+
protocolFeeBps: raw.config.protocolFeeBps,
|
|
1429
|
+
liquidityBps: raw.config.liquidityBps,
|
|
1430
|
+
lpFeeShareBps: raw.config.lpFeeShareBps
|
|
876
1431
|
};
|
|
877
1432
|
}
|
|
878
1433
|
};
|
|
@@ -891,9 +1446,15 @@ var AuctionState = /* @__PURE__ */ ((AuctionState2) => {
|
|
|
891
1446
|
AuctionBuilder,
|
|
892
1447
|
AuctionFlowSDK,
|
|
893
1448
|
AuctionState,
|
|
1449
|
+
DEFAULT_LIQUIDITY_BPS,
|
|
1450
|
+
DEFAULT_SLIPPAGE_BPS,
|
|
1451
|
+
MIN_LIQUIDITY_BPS,
|
|
894
1452
|
USDC_ADDRESSES,
|
|
1453
|
+
applySlippage,
|
|
895
1454
|
calculateBuyCost,
|
|
896
1455
|
calculateBuyQuote,
|
|
1456
|
+
fillPurchase,
|
|
1457
|
+
maxBuyable,
|
|
897
1458
|
spotPrice
|
|
898
1459
|
});
|
|
899
1460
|
//# sourceMappingURL=index.js.map
|