multistake 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,796 @@
1
+ /**
2
+ * Program IDL in camelCase format in order to be used in JS/TS.
3
+ *
4
+ * Note that this is only a type helper and is not the actual IDL. The original
5
+ * IDL can be found at `target/idl/multistake.json`.
6
+ */
7
+ export type Multistake = {
8
+ "address": "2mgSDKAjDo8fQN6oms6YzczHhyeYEJunTzxjQgegYADf";
9
+ "metadata": {
10
+ "name": "multistake";
11
+ "version": "0.1.0";
12
+ "spec": "0.1.0";
13
+ "description": "Created with Anchor";
14
+ };
15
+ "instructions": [
16
+ {
17
+ "name": "addTokenToPool";
18
+ "docs": [
19
+ "添加质押类型到 Pool",
20
+ "自动创建 LP mint,使用 increment_count 作为 seed",
21
+ "权重默认 10^8"
22
+ ];
23
+ "discriminator": [
24
+ 35,
25
+ 121,
26
+ 233,
27
+ 111,
28
+ 213,
29
+ 155,
30
+ 197,
31
+ 192
32
+ ];
33
+ "accounts": [
34
+ {
35
+ "name": "pool";
36
+ "writable": true;
37
+ },
38
+ {
39
+ "name": "poolAuthority";
40
+ "docs": [
41
+ "Pool authority PDA - LP mint 的 authority"
42
+ ];
43
+ "pda": {
44
+ "seeds": [
45
+ {
46
+ "kind": "const";
47
+ "value": [
48
+ 97,
49
+ 110,
50
+ 121,
51
+ 115,
52
+ 119,
53
+ 97,
54
+ 112,
55
+ 95,
56
+ 97,
57
+ 117,
58
+ 116,
59
+ 104,
60
+ 111,
61
+ 114,
62
+ 105,
63
+ 116,
64
+ 121
65
+ ];
66
+ },
67
+ {
68
+ "kind": "account";
69
+ "path": "pool";
70
+ }
71
+ ];
72
+ };
73
+ },
74
+ {
75
+ "name": "lpMint";
76
+ "docs": [
77
+ "LP mint - 自动创建,权限归属于 pool_authority",
78
+ "使用 increment_count 作为 seed 确保唯一性(只增不减)"
79
+ ];
80
+ "writable": true;
81
+ "signer": true;
82
+ },
83
+ {
84
+ "name": "admin";
85
+ "docs": [
86
+ "Pool 管理员 - 必须签名"
87
+ ];
88
+ "signer": true;
89
+ },
90
+ {
91
+ "name": "payer";
92
+ "docs": [
93
+ "支付创建 LP mint 的费用"
94
+ ];
95
+ "writable": true;
96
+ "signer": true;
97
+ },
98
+ {
99
+ "name": "tokenProgram";
100
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
101
+ },
102
+ {
103
+ "name": "systemProgram";
104
+ "address": "11111111111111111111111111111111";
105
+ },
106
+ {
107
+ "name": "rent";
108
+ "address": "SysvarRent111111111111111111111111111111111";
109
+ }
110
+ ];
111
+ "args": [];
112
+ },
113
+ {
114
+ "name": "createPool";
115
+ "docs": [
116
+ "创建 Pool(PDA)"
117
+ ];
118
+ "discriminator": [
119
+ 233,
120
+ 146,
121
+ 209,
122
+ 142,
123
+ 207,
124
+ 104,
125
+ 64,
126
+ 188
127
+ ];
128
+ "accounts": [
129
+ {
130
+ "name": "pool";
131
+ "writable": true;
132
+ },
133
+ {
134
+ "name": "poolAuthority";
135
+ "docs": [
136
+ "Pool authority PDA - 用于管理 pool vault"
137
+ ];
138
+ "pda": {
139
+ "seeds": [
140
+ {
141
+ "kind": "const";
142
+ "value": [
143
+ 97,
144
+ 110,
145
+ 121,
146
+ 115,
147
+ 119,
148
+ 97,
149
+ 112,
150
+ 95,
151
+ 97,
152
+ 117,
153
+ 116,
154
+ 104,
155
+ 111,
156
+ 114,
157
+ 105,
158
+ 116,
159
+ 121
160
+ ];
161
+ },
162
+ {
163
+ "kind": "account";
164
+ "path": "pool";
165
+ }
166
+ ];
167
+ };
168
+ },
169
+ {
170
+ "name": "mainTokenMint";
171
+ "docs": [
172
+ "主币的 Mint 账户 - Pool 对应的币种"
173
+ ];
174
+ },
175
+ {
176
+ "name": "poolVault";
177
+ "docs": [
178
+ "Pool 的主币 Vault - 存储所有质押的主币"
179
+ ];
180
+ "writable": true;
181
+ "pda": {
182
+ "seeds": [
183
+ {
184
+ "kind": "const";
185
+ "value": [
186
+ 112,
187
+ 111,
188
+ 111,
189
+ 108,
190
+ 95,
191
+ 118,
192
+ 97,
193
+ 117,
194
+ 108,
195
+ 116
196
+ ];
197
+ },
198
+ {
199
+ "kind": "account";
200
+ "path": "pool";
201
+ }
202
+ ];
203
+ };
204
+ },
205
+ {
206
+ "name": "admin";
207
+ "docs": [
208
+ "Pool 管理员 - 用于所有操作的权限控制"
209
+ ];
210
+ "signer": true;
211
+ },
212
+ {
213
+ "name": "payer";
214
+ "writable": true;
215
+ "signer": true;
216
+ },
217
+ {
218
+ "name": "systemProgram";
219
+ "address": "11111111111111111111111111111111";
220
+ },
221
+ {
222
+ "name": "tokenProgram";
223
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
224
+ },
225
+ {
226
+ "name": "rent";
227
+ "address": "SysvarRent111111111111111111111111111111111";
228
+ }
229
+ ];
230
+ "args": [
231
+ {
232
+ "name": "feeNumerator";
233
+ "type": "u64";
234
+ },
235
+ {
236
+ "name": "feeDenominator";
237
+ "type": "u64";
238
+ }
239
+ ];
240
+ },
241
+ {
242
+ "name": "modifyTokenWeight";
243
+ "docs": [
244
+ "修改 token 的 weight"
245
+ ];
246
+ "discriminator": [
247
+ 239,
248
+ 78,
249
+ 110,
250
+ 20,
251
+ 65,
252
+ 97,
253
+ 193,
254
+ 233
255
+ ];
256
+ "accounts": [
257
+ {
258
+ "name": "pool";
259
+ "writable": true;
260
+ },
261
+ {
262
+ "name": "admin";
263
+ "docs": [
264
+ "Pool 管理员 - 必须签名所有操作"
265
+ ];
266
+ "signer": true;
267
+ }
268
+ ];
269
+ "args": [
270
+ {
271
+ "name": "newWeights";
272
+ "type": {
273
+ "vec": "u64";
274
+ };
275
+ }
276
+ ];
277
+ },
278
+ {
279
+ "name": "removeTokenFromPool";
280
+ "docs": [
281
+ "从 MultiStake Pool 移除 token"
282
+ ];
283
+ "discriminator": [
284
+ 104,
285
+ 117,
286
+ 82,
287
+ 78,
288
+ 25,
289
+ 2,
290
+ 55,
291
+ 49
292
+ ];
293
+ "accounts": [
294
+ {
295
+ "name": "pool";
296
+ "writable": true;
297
+ },
298
+ {
299
+ "name": "lpMint";
300
+ "docs": [
301
+ "要移除的 LP mint 账户"
302
+ ];
303
+ },
304
+ {
305
+ "name": "admin";
306
+ "docs": [
307
+ "Pool 管理员 - 必须签名"
308
+ ];
309
+ "signer": true;
310
+ }
311
+ ];
312
+ "args": [];
313
+ },
314
+ {
315
+ "name": "stake";
316
+ "docs": [
317
+ "质押主币,铸造 LP 凭证"
318
+ ];
319
+ "discriminator": [
320
+ 206,
321
+ 176,
322
+ 202,
323
+ 18,
324
+ 200,
325
+ 209,
326
+ 179,
327
+ 108
328
+ ];
329
+ "accounts": [
330
+ {
331
+ "name": "pool";
332
+ "writable": true;
333
+ },
334
+ {
335
+ "name": "poolAuthority";
336
+ "docs": [
337
+ "Pool authority PDA - LP mint 的 authority"
338
+ ];
339
+ "pda": {
340
+ "seeds": [
341
+ {
342
+ "kind": "const";
343
+ "value": [
344
+ 97,
345
+ 110,
346
+ 121,
347
+ 115,
348
+ 119,
349
+ 97,
350
+ 112,
351
+ 95,
352
+ 97,
353
+ 117,
354
+ 116,
355
+ 104,
356
+ 111,
357
+ 114,
358
+ 105,
359
+ 116,
360
+ 121
361
+ ];
362
+ },
363
+ {
364
+ "kind": "account";
365
+ "path": "pool";
366
+ }
367
+ ];
368
+ };
369
+ },
370
+ {
371
+ "name": "poolVault";
372
+ "docs": [
373
+ "Pool 的主币 Vault"
374
+ ];
375
+ "writable": true;
376
+ "pda": {
377
+ "seeds": [
378
+ {
379
+ "kind": "const";
380
+ "value": [
381
+ 112,
382
+ 111,
383
+ 111,
384
+ 108,
385
+ 95,
386
+ 118,
387
+ 97,
388
+ 117,
389
+ 108,
390
+ 116
391
+ ];
392
+ },
393
+ {
394
+ "kind": "account";
395
+ "path": "pool";
396
+ }
397
+ ];
398
+ };
399
+ },
400
+ {
401
+ "name": "lpMint";
402
+ "docs": [
403
+ "LP mint - 对应的质押类型",
404
+ "通过 pool.get_token() 验证地址是否匹配"
405
+ ];
406
+ "writable": true;
407
+ },
408
+ {
409
+ "name": "userMainToken";
410
+ "docs": [
411
+ "用户的主币账户(质押来源)"
412
+ ];
413
+ "writable": true;
414
+ },
415
+ {
416
+ "name": "userLpToken";
417
+ "docs": [
418
+ "用户的 LP 凭证账户(铸造目标)"
419
+ ];
420
+ "writable": true;
421
+ },
422
+ {
423
+ "name": "user";
424
+ "docs": [
425
+ "用户签名"
426
+ ];
427
+ "signer": true;
428
+ },
429
+ {
430
+ "name": "tokenProgram";
431
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
432
+ }
433
+ ];
434
+ "args": [
435
+ {
436
+ "name": "itemIndex";
437
+ "type": "u16";
438
+ },
439
+ {
440
+ "name": "stakeAmount";
441
+ "type": "u64";
442
+ }
443
+ ];
444
+ },
445
+ {
446
+ "name": "unstake";
447
+ "docs": [
448
+ "销毁 LP 凭证,赎回主币"
449
+ ];
450
+ "discriminator": [
451
+ 90,
452
+ 95,
453
+ 107,
454
+ 42,
455
+ 205,
456
+ 124,
457
+ 50,
458
+ 225
459
+ ];
460
+ "accounts": [
461
+ {
462
+ "name": "pool";
463
+ "writable": true;
464
+ },
465
+ {
466
+ "name": "poolAuthority";
467
+ "docs": [
468
+ "Pool authority PDA"
469
+ ];
470
+ "pda": {
471
+ "seeds": [
472
+ {
473
+ "kind": "const";
474
+ "value": [
475
+ 97,
476
+ 110,
477
+ 121,
478
+ 115,
479
+ 119,
480
+ 97,
481
+ 112,
482
+ 95,
483
+ 97,
484
+ 117,
485
+ 116,
486
+ 104,
487
+ 111,
488
+ 114,
489
+ 105,
490
+ 116,
491
+ 121
492
+ ];
493
+ },
494
+ {
495
+ "kind": "account";
496
+ "path": "pool";
497
+ }
498
+ ];
499
+ };
500
+ },
501
+ {
502
+ "name": "poolVault";
503
+ "docs": [
504
+ "Pool 的主币 Vault"
505
+ ];
506
+ "writable": true;
507
+ "pda": {
508
+ "seeds": [
509
+ {
510
+ "kind": "const";
511
+ "value": [
512
+ 112,
513
+ 111,
514
+ 111,
515
+ 108,
516
+ 95,
517
+ 118,
518
+ 97,
519
+ 117,
520
+ 108,
521
+ 116
522
+ ];
523
+ },
524
+ {
525
+ "kind": "account";
526
+ "path": "pool";
527
+ }
528
+ ];
529
+ };
530
+ },
531
+ {
532
+ "name": "lpMint";
533
+ "docs": [
534
+ "LP mint - 对应的质押类型",
535
+ "通过 pool.get_token() 验证地址是否匹配"
536
+ ];
537
+ "writable": true;
538
+ },
539
+ {
540
+ "name": "userLpToken";
541
+ "docs": [
542
+ "用户的 LP 凭证账户(销毁来源)"
543
+ ];
544
+ "writable": true;
545
+ },
546
+ {
547
+ "name": "userMainToken";
548
+ "docs": [
549
+ "用户的主币账户(赎回目标)"
550
+ ];
551
+ "writable": true;
552
+ },
553
+ {
554
+ "name": "user";
555
+ "docs": [
556
+ "用户签名"
557
+ ];
558
+ "signer": true;
559
+ },
560
+ {
561
+ "name": "tokenProgram";
562
+ "address": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
563
+ }
564
+ ];
565
+ "args": [
566
+ {
567
+ "name": "itemIndex";
568
+ "type": "u16";
569
+ },
570
+ {
571
+ "name": "lpAmount";
572
+ "type": "u64";
573
+ }
574
+ ];
575
+ }
576
+ ];
577
+ "accounts": [
578
+ {
579
+ "name": "pool";
580
+ "discriminator": [
581
+ 241,
582
+ 154,
583
+ 109,
584
+ 4,
585
+ 17,
586
+ 177,
587
+ 109,
588
+ 188
589
+ ];
590
+ }
591
+ ];
592
+ "errors": [
593
+ {
594
+ "code": 6000;
595
+ "name": "invalidTokenOrder";
596
+ "msg": "代币顺序无效:token_0 的地址必须小于 token_1";
597
+ },
598
+ {
599
+ "code": 6001;
600
+ "name": "invalidLpMint";
601
+ "msg": "LP Mint 地址不匹配";
602
+ },
603
+ {
604
+ "code": 6002;
605
+ "name": "mathOverflow";
606
+ "msg": "";
607
+ },
608
+ {
609
+ "code": 6003;
610
+ "name": "insufficientLiquidity";
611
+ "msg": "";
612
+ },
613
+ {
614
+ "code": 6004;
615
+ "name": "insufficientTokenAmount";
616
+ "msg": "";
617
+ },
618
+ {
619
+ "code": 6005;
620
+ "name": "insufficientReserves";
621
+ "msg": "";
622
+ },
623
+ {
624
+ "code": 6006;
625
+ "name": "insufficientOutputAmount";
626
+ "msg": "输出数量不足(滑点过大)";
627
+ },
628
+ {
629
+ "code": 6007;
630
+ "name": "invalidTokenMint";
631
+ "msg": "无效的代币 mint 地址";
632
+ },
633
+ {
634
+ "code": 6008;
635
+ "name": "invalidTokenCount";
636
+ "msg": "无效的 token 数量";
637
+ },
638
+ {
639
+ "code": 6009;
640
+ "name": "maxTokensReached";
641
+ "msg": "已达到最大 token 数量限制";
642
+ },
643
+ {
644
+ "code": 6010;
645
+ "name": "invalidTokenIndex";
646
+ "msg": "无效的 token 索引";
647
+ },
648
+ {
649
+ "code": 6011;
650
+ "name": "sameTokenSwap";
651
+ "msg": "不能交换相同的 token";
652
+ },
653
+ {
654
+ "code": 6012;
655
+ "name": "invalidAdmin";
656
+ "msg": "";
657
+ }
658
+ ];
659
+ "types": [
660
+ {
661
+ "name": "pool";
662
+ "docs": [
663
+ "单币质押池结构",
664
+ "",
665
+ "一个 Pool 对应一种主币,支持多种质押类型(items)",
666
+ "使用 zero_copy 以避免栈溢出(大数组需要)"
667
+ ];
668
+ "serialization": "bytemuck";
669
+ "repr": {
670
+ "kind": "c";
671
+ };
672
+ "type": {
673
+ "kind": "struct";
674
+ "fields": [
675
+ {
676
+ "name": "tokenCount";
677
+ "docs": [
678
+ "实际使用的质押类型数量"
679
+ ];
680
+ "type": "u16";
681
+ },
682
+ {
683
+ "name": "incrementCount";
684
+ "docs": [
685
+ "创建计数器 - 用于生成唯一的 LP mint seed,只增不减"
686
+ ];
687
+ "type": "u16";
688
+ },
689
+ {
690
+ "name": "padding";
691
+ "docs": [
692
+ "填充字节(确保 8 字节对齐)"
693
+ ];
694
+ "type": {
695
+ "array": [
696
+ "u8",
697
+ 4
698
+ ];
699
+ };
700
+ },
701
+ {
702
+ "name": "admin";
703
+ "docs": [
704
+ "Pool 管理员 - 用于所有操作的权限控制"
705
+ ];
706
+ "type": "pubkey";
707
+ },
708
+ {
709
+ "name": "poolVault";
710
+ "docs": [
711
+ "Pool 的主币 Vault 账户 - 存储所有质押的主币"
712
+ ];
713
+ "type": "pubkey";
714
+ },
715
+ {
716
+ "name": "poolMint";
717
+ "docs": [
718
+ "Pool 的主币 Mint 地址 - 该 Pool 对应的币种"
719
+ ];
720
+ "type": "pubkey";
721
+ },
722
+ {
723
+ "name": "feeNumerator";
724
+ "docs": [
725
+ "手续费分子"
726
+ ];
727
+ "type": "u64";
728
+ },
729
+ {
730
+ "name": "feeDenominator";
731
+ "docs": [
732
+ "手续费分母"
733
+ ];
734
+ "type": "u64";
735
+ },
736
+ {
737
+ "name": "tokens";
738
+ "docs": [
739
+ "质押类型配置数组,最多支持 1024 种质押类型(固定大小)",
740
+ "每个 item 记录一种质押类型的 LP mint、已发行量和权重"
741
+ ];
742
+ "type": {
743
+ "array": [
744
+ {
745
+ "defined": {
746
+ "name": "poolItem";
747
+ };
748
+ },
749
+ 512
750
+ ];
751
+ };
752
+ }
753
+ ];
754
+ };
755
+ },
756
+ {
757
+ "name": "poolItem";
758
+ "docs": [
759
+ "质押类型配置项",
760
+ "每个 item 记录一种质押类型的 LP mint、已发行量和权重",
761
+ "用于单币质押系统,不同质押类型有不同的收益权重"
762
+ ];
763
+ "serialization": "bytemuck";
764
+ "repr": {
765
+ "kind": "c";
766
+ };
767
+ "type": {
768
+ "kind": "struct";
769
+ "fields": [
770
+ {
771
+ "name": "mintAccount";
772
+ "docs": [
773
+ "LP 凭证 Mint account 地址 - 用户质押后获得的凭证 token (32 bytes)"
774
+ ];
775
+ "type": "pubkey";
776
+ },
777
+ {
778
+ "name": "mintAmount";
779
+ "docs": [
780
+ "已铸造的 LP 凭证数量 - 该质押类型的总发行量 (8 bytes)"
781
+ ];
782
+ "type": "u64";
783
+ },
784
+ {
785
+ "name": "weight";
786
+ "docs": [
787
+ "权重 (weight) - 动态权重,由 admin 通过 oracle 修改 (8 bytes)",
788
+ "影响 LP 凭证兑换主币的比率,weight 越高收益越好"
789
+ ];
790
+ "type": "u64";
791
+ }
792
+ ];
793
+ };
794
+ }
795
+ ];
796
+ };