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