@wireio/stake 0.0.6 → 0.1.1

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.
Files changed (48) hide show
  1. package/README.md +260 -13
  2. package/lib/stake.browser.js +4861 -4218
  3. package/lib/stake.browser.js.map +1 -1
  4. package/lib/stake.d.ts +434 -6484
  5. package/lib/stake.js +5059 -4371
  6. package/lib/stake.js.map +1 -1
  7. package/lib/stake.m.js +4861 -4218
  8. package/lib/stake.m.js.map +1 -1
  9. package/package.json +2 -2
  10. package/src/assets/solana/idl/liqsol_core.json +4239 -0
  11. package/src/assets/solana/idl/liqsol_token.json +183 -0
  12. package/src/assets/solana/idl/validator_leaderboard.json +296 -250
  13. package/src/assets/solana/types/liqsol_core.ts +4245 -0
  14. package/src/assets/solana/types/liqsol_token.ts +189 -0
  15. package/src/assets/solana/types/validator_leaderboard.ts +296 -250
  16. package/src/index.ts +2 -5
  17. package/src/networks/ethereum/contract.ts +138 -36
  18. package/src/networks/ethereum/ethereum.ts +167 -38
  19. package/src/networks/ethereum/types.ts +32 -1
  20. package/src/networks/solana/clients/deposit.client.ts +92 -139
  21. package/src/networks/solana/clients/distribution.client.ts +302 -178
  22. package/src/networks/solana/clients/leaderboard.client.ts +40 -160
  23. package/src/networks/solana/constants.ts +238 -69
  24. package/src/networks/solana/program.ts +27 -93
  25. package/src/networks/solana/solana.ts +181 -36
  26. package/src/networks/solana/types.ts +47 -0
  27. package/src/networks/solana/utils.ts +522 -93
  28. package/src/scripts/fetch-artifacts.sh +24 -0
  29. package/src/scripts/tsconfig.json +17 -0
  30. package/src/staker/staker.ts +35 -30
  31. package/src/staker/types.ts +25 -22
  32. package/src/assets/solana/idl/deposit.json +0 -260
  33. package/src/assets/solana/idl/distribution.json +0 -736
  34. package/src/assets/solana/idl/liq_sol_token.json +0 -275
  35. package/src/assets/solana/idl/stake_controller.json +0 -1788
  36. package/src/assets/solana/idl/stake_registry.json +0 -435
  37. package/src/assets/solana/idl/treasury.json +0 -336
  38. package/src/assets/solana/idl/validator_registry.json +0 -418
  39. package/src/assets/solana/idl/yield_oracle.json +0 -32
  40. package/src/assets/solana/types/deposit.ts +0 -266
  41. package/src/assets/solana/types/distribution.ts +0 -742
  42. package/src/assets/solana/types/liq_sol_token.ts +0 -281
  43. package/src/assets/solana/types/stake_controller.ts +0 -1794
  44. package/src/assets/solana/types/stake_registry.ts +0 -441
  45. package/src/assets/solana/types/treasury.ts +0 -342
  46. package/src/assets/solana/types/validator_registry.ts +0 -424
  47. package/src/assets/solana/types/yield_oracle.ts +0 -38
  48. package/src/utils.ts +0 -9
@@ -5,7 +5,7 @@
5
5
  * IDL can be found at `target/idl/validator_leaderboard.json`.
6
6
  */
7
7
  export type ValidatorLeaderboard = {
8
- "address": "4tY1rN1EX7SfyhjwgRh8nEFp9AwCGwXrcUXnWDMac35e",
8
+ "address": "5Nf6jL5B2qkMbnLoN3RTT1sKcBKrrsRnovTBDZXcQnfo",
9
9
  "metadata": {
10
10
  "name": "validatorLeaderboard",
11
11
  "version": "0.1.0",
@@ -14,167 +14,118 @@ export type ValidatorLeaderboard = {
14
14
  },
15
15
  "instructions": [
16
16
  {
17
- "name": "getCachedTop10",
17
+ "name": "initializeLeaderboard",
18
18
  "discriminator": [
19
- 28,
20
- 77,
21
- 207,
22
- 225,
23
- 217,
24
- 150,
25
- 249,
26
- 51
19
+ 47,
20
+ 23,
21
+ 34,
22
+ 39,
23
+ 46,
24
+ 108,
25
+ 91,
26
+ 176
27
27
  ],
28
28
  "accounts": [
29
29
  {
30
- "name": "cache",
31
- "pda": {
32
- "seeds": [
33
- {
34
- "kind": "const",
35
- "value": [
36
- 116,
37
- 111,
38
- 112,
39
- 95,
40
- 49,
41
- 48,
42
- 95,
43
- 99,
44
- 97,
45
- 99,
46
- 104,
47
- 101
48
- ]
49
- }
50
- ]
51
- }
30
+ "name": "authority",
31
+ "writable": true,
32
+ "signer": true
33
+ },
34
+ {
35
+ "name": "leaderboardState",
36
+ "writable": true
37
+ },
38
+ {
39
+ "name": "systemProgram"
52
40
  }
53
41
  ],
54
- "args": [],
55
- "returns": {
56
- "array": [
57
- "pubkey",
58
- 10
59
- ]
60
- }
42
+ "args": []
61
43
  },
62
44
  {
63
- "name": "initialize",
45
+ "name": "reallocLeaderboard",
64
46
  "discriminator": [
65
- 175,
66
- 175,
67
- 109,
68
- 31,
69
- 13,
70
- 152,
71
- 155,
72
- 237
47
+ 2,
48
+ 70,
49
+ 106,
50
+ 94,
51
+ 81,
52
+ 225,
53
+ 113,
54
+ 152
73
55
  ],
74
56
  "accounts": [
75
57
  {
76
- "name": "authority",
77
- "writable": true,
78
- "signer": true
58
+ "name": "leaderboardState",
59
+ "writable": true
79
60
  },
80
61
  {
81
- "name": "leaderboardHead",
82
- "docs": [
83
- "HEAD node - points to the highest VPP validator"
84
- ],
62
+ "name": "payer",
85
63
  "writable": true,
86
- "pda": {
87
- "seeds": [
88
- {
89
- "kind": "const",
90
- "value": [
91
- 108,
92
- 101,
93
- 97,
94
- 100,
95
- 101,
96
- 114,
97
- 98,
98
- 111,
99
- 97,
100
- 114,
101
- 100,
102
- 95,
103
- 104,
104
- 101,
105
- 97,
106
- 100
107
- ]
108
- }
109
- ]
110
- }
64
+ "signer": true
111
65
  },
112
66
  {
113
- "name": "systemProgram",
114
- "address": "11111111111111111111111111111111"
67
+ "name": "systemProgram"
115
68
  }
116
69
  ],
117
70
  "args": []
118
71
  },
119
72
  {
120
- "name": "updateTop10Cache",
73
+ "name": "updateCommission",
121
74
  "discriminator": [
122
- 0,
123
- 35,
124
- 58,
125
- 64,
126
- 74,
127
- 12,
128
- 249,
129
- 209
75
+ 2,
76
+ 202,
77
+ 72,
78
+ 156,
79
+ 19,
80
+ 253,
81
+ 91,
82
+ 174
130
83
  ],
131
84
  "accounts": [
132
85
  {
133
- "name": "payer",
86
+ "name": "registrant",
134
87
  "writable": true,
135
88
  "signer": true
136
89
  },
137
90
  {
138
- "name": "cache",
139
- "writable": true,
140
- "pda": {
141
- "seeds": [
142
- {
143
- "kind": "const",
144
- "value": [
145
- 116,
146
- 111,
147
- 112,
148
- 95,
149
- 49,
150
- 48,
151
- 95,
152
- 99,
153
- 97,
154
- 99,
155
- 104,
156
- 101
157
- ]
158
- }
159
- ]
160
- }
91
+ "name": "voteAccount"
92
+ },
93
+ {
94
+ "name": "validatorRecord",
95
+ "writable": true
161
96
  },
162
97
  {
163
- "name": "systemProgram",
164
- "address": "11111111111111111111111111111111"
98
+ "name": "systemProgram"
165
99
  }
166
100
  ],
167
- "args": [
101
+ "args": []
102
+ },
103
+ {
104
+ "name": "updateMevCommission",
105
+ "discriminator": [
106
+ 107,
107
+ 65,
108
+ 238,
109
+ 108,
110
+ 183,
111
+ 47,
112
+ 236,
113
+ 203
114
+ ],
115
+ "accounts": [
168
116
  {
169
- "name": "top10",
170
- "type": {
171
- "array": [
172
- "pubkey",
173
- 10
174
- ]
175
- }
117
+ "name": "signer",
118
+ "signer": true
119
+ },
120
+ {
121
+ "name": "validatorRecord",
122
+ "writable": true
123
+ },
124
+ {
125
+ "name": "tipDistributionAccount"
176
126
  }
177
- ]
127
+ ],
128
+ "args": []
178
129
  },
179
130
  {
180
131
  "name": "updateValidator",
@@ -199,117 +150,40 @@ export type ValidatorLeaderboard = {
199
150
  },
200
151
  {
201
152
  "name": "validatorRecord",
202
- "writable": true,
203
- "pda": {
204
- "seeds": [
205
- {
206
- "kind": "const",
207
- "value": [
208
- 118,
209
- 97,
210
- 108,
211
- 105,
212
- 100,
213
- 97,
214
- 116,
215
- 111,
216
- 114
217
- ]
218
- },
219
- {
220
- "kind": "account",
221
- "path": "voteAccount"
222
- }
223
- ]
224
- }
225
- },
226
- {
227
- "name": "leaderboardHead",
228
- "writable": true,
229
- "pda": {
230
- "seeds": [
231
- {
232
- "kind": "const",
233
- "value": [
234
- 108,
235
- 101,
236
- 97,
237
- 100,
238
- 101,
239
- 114,
240
- 98,
241
- 111,
242
- 97,
243
- 114,
244
- 100,
245
- 95,
246
- 104,
247
- 101,
248
- 97,
249
- 100
250
- ]
251
- }
252
- ]
253
- }
254
- },
255
- {
256
- "name": "insertAfter",
257
- "writable": true,
258
- "optional": true
153
+ "writable": true
259
154
  },
260
155
  {
261
- "name": "insertBefore",
262
- "writable": true,
263
- "optional": true
264
- },
265
- {
266
- "name": "currentPrev",
267
- "writable": true,
268
- "optional": true
269
- },
270
- {
271
- "name": "currentNext",
272
- "writable": true,
273
- "optional": true
156
+ "name": "leaderboardState",
157
+ "writable": true
274
158
  },
275
159
  {
276
- "name": "systemProgram",
277
- "address": "11111111111111111111111111111111"
160
+ "name": "systemProgram"
278
161
  }
279
162
  ],
280
163
  "args": [
281
164
  {
282
165
  "name": "vpp",
283
166
  "type": "u64"
167
+ },
168
+ {
169
+ "name": "proposedRank",
170
+ "type": "u16"
284
171
  }
285
172
  ]
286
173
  }
287
174
  ],
288
175
  "accounts": [
289
176
  {
290
- "name": "leaderboardHead",
177
+ "name": "leaderboardState",
291
178
  "discriminator": [
292
- 159,
293
- 158,
294
- 16,
295
- 9,
296
- 41,
297
- 114,
298
- 23,
299
- 157
300
- ]
301
- },
302
- {
303
- "name": "top10Cache",
304
- "discriminator": [
305
- 112,
306
- 78,
179
+ 211,
180
+ 181,
181
+ 29,
182
+ 120,
307
183
  189,
308
- 26,
309
- 143,
310
- 41,
311
- 15,
312
- 81
184
+ 4,
185
+ 106,
186
+ 111
313
187
  ]
314
188
  },
315
189
  {
@@ -411,71 +285,212 @@ export type ValidatorLeaderboard = {
411
285
  "code": 6016,
412
286
  "name": "brokenLinkage",
413
287
  "msg": "Broken linked list continuity"
288
+ },
289
+ {
290
+ "code": 6017,
291
+ "name": "commissionNotUpdated",
292
+ "msg": "Commission must be updated for current epoch before updating validator"
293
+ },
294
+ {
295
+ "code": 6018,
296
+ "name": "mevCommissionNotUpdated",
297
+ "msg": "MEV commission must be updated for current epoch before updating validator"
298
+ },
299
+ {
300
+ "code": 6019,
301
+ "name": "invalidCurrentNeighbor",
302
+ "msg": "Current neighbor account doesn't match validator's stored links"
303
+ },
304
+ {
305
+ "code": 6020,
306
+ "name": "nonAdjacentInsertionPosition",
307
+ "msg": "Insertion position accounts are not actually adjacent in leaderboard"
308
+ },
309
+ {
310
+ "code": 6021,
311
+ "name": "staleAccountReference",
312
+ "msg": "Account reference is outdated due to concurrent update"
313
+ },
314
+ {
315
+ "code": 6022,
316
+ "name": "invalidStakeAmount",
317
+ "msg": "Invalid stake amount - exceeds maximum allowed"
318
+ },
319
+ {
320
+ "code": 6023,
321
+ "name": "invalidTipDistributionAccount",
322
+ "msg": "Invalid Tip Distribution Account provided"
323
+ },
324
+ {
325
+ "code": 6024,
326
+ "name": "invalidRankPosition",
327
+ "msg": "Proposed rank position violates sorted ordering"
328
+ },
329
+ {
330
+ "code": 6025,
331
+ "name": "leaderboardFull",
332
+ "msg": "Leaderboard is full - cannot add more validators"
333
+ },
334
+ {
335
+ "code": 6026,
336
+ "name": "validatorNotInRankings",
337
+ "msg": "Validator not found in rankings"
338
+ },
339
+ {
340
+ "code": 6027,
341
+ "name": "arithmeticOverflow",
342
+ "msg": "Arithmetic overflow"
414
343
  }
415
344
  ],
416
345
  "types": [
417
346
  {
418
- "name": "leaderboardHead",
347
+ "name": "leaderboardState",
419
348
  "docs": [
420
- "Special HEAD node for the linked list"
349
+ "Central leaderboard state using parallel arrays for efficient ranking and CPI access",
350
+ "Stores VPP scores and sorted rankings for up to 1024 validators",
351
+ "Uses zero-copy for efficient access from other programs via CPI"
421
352
  ],
353
+ "serialization": "bytemuck",
354
+ "repr": {
355
+ "kind": "c"
356
+ },
422
357
  "type": {
423
358
  "kind": "struct",
424
359
  "fields": [
425
360
  {
426
- "name": "nextValidator",
427
- "type": "pubkey"
361
+ "name": "scores",
362
+ "docs": [
363
+ "VPP scores indexed by registry_index",
364
+ "registry_index is assigned on first validator registration and never changes"
365
+ ],
366
+ "type": {
367
+ "array": [
368
+ "u64",
369
+ 1024
370
+ ]
371
+ }
372
+ },
373
+ {
374
+ "name": "sortedIndices",
375
+ "docs": [
376
+ "Validator indices sorted by VPP score descending",
377
+ "sorted_indices[0] = registry_index of highest VPP validator",
378
+ "sorted_indices[1] = registry_index of 2nd highest VPP validator, etc."
379
+ ],
380
+ "type": {
381
+ "array": [
382
+ "u16",
383
+ 1024
384
+ ]
385
+ }
386
+ },
387
+ {
388
+ "name": "voteAccounts",
389
+ "docs": [
390
+ "Vote account pubkeys indexed by registry_index",
391
+ "Allows CPI callers to get vote accounts for top N validators"
392
+ ],
393
+ "type": {
394
+ "array": [
395
+ {
396
+ "defined": {
397
+ "name": "pubkeyBytes"
398
+ }
399
+ },
400
+ 1024
401
+ ]
402
+ }
403
+ },
404
+ {
405
+ "name": "numValidators",
406
+ "docs": [
407
+ "Number of active validators currently in the leaderboard"
408
+ ],
409
+ "type": "u16"
428
410
  },
429
411
  {
430
412
  "name": "bump",
413
+ "docs": [
414
+ "PDA bump seed"
415
+ ],
431
416
  "type": "u8"
417
+ },
418
+ {
419
+ "name": "padding",
420
+ "docs": [
421
+ "Reserved space for future upgrades"
422
+ ],
423
+ "type": {
424
+ "array": [
425
+ "u8",
426
+ 5
427
+ ]
428
+ }
432
429
  }
433
430
  ]
434
431
  }
435
432
  },
436
433
  {
437
- "name": "top10Cache",
434
+ "name": "pubkeyBytes",
438
435
  "docs": [
439
- "Cache for the top 10 validators for fast CPI access"
436
+ "Fixed-size representation of a `Pubkey` that satisfies Anchor's zero-copy rules.",
437
+ "Stores the raw 32-byte array and offers helpers to convert to/from `Pubkey`."
440
438
  ],
439
+ "serialization": "bytemuck",
440
+ "repr": {
441
+ "kind": "transparent"
442
+ },
441
443
  "type": {
442
444
  "kind": "struct",
443
445
  "fields": [
444
446
  {
445
- "name": "validators",
447
+ "name": "bytes",
446
448
  "type": {
447
449
  "array": [
448
- "pubkey",
449
- 10
450
+ "u8",
451
+ 32
450
452
  ]
451
453
  }
452
- },
453
- {
454
- "name": "lastUpdatedSlot",
455
- "type": "u64"
456
- },
457
- {
458
- "name": "bump",
459
- "type": "u8"
460
454
  }
461
455
  ]
462
456
  }
463
457
  },
464
458
  {
465
459
  "name": "validatorRecord",
460
+ "docs": [
461
+ "Per-validator record account storing commission data and metadata"
462
+ ],
466
463
  "type": {
467
464
  "kind": "struct",
468
465
  "fields": [
469
466
  {
470
467
  "name": "voteAccount",
468
+ "docs": [
469
+ "The validator's vote account pubkey"
470
+ ],
471
471
  "type": "pubkey"
472
472
  },
473
+ {
474
+ "name": "registryIndex",
475
+ "docs": [
476
+ "Immutable index into LeaderboardState arrays",
477
+ "Assigned on first registration, never changes"
478
+ ],
479
+ "type": "u16"
480
+ },
473
481
  {
474
482
  "name": "creditsObserved",
483
+ "docs": [
484
+ "Current cumulative credits from vote account"
485
+ ],
475
486
  "type": "u64"
476
487
  },
477
488
  {
478
489
  "name": "commissionHistory",
490
+ "docs": [
491
+ "Circular buffer of past 10 commission values (0-100)",
492
+ "Used to penalize validators who increase commission"
493
+ ],
479
494
  "type": {
480
495
  "array": [
481
496
  "u8",
@@ -485,46 +500,77 @@ export type ValidatorLeaderboard = {
485
500
  },
486
501
  {
487
502
  "name": "commissionIndex",
503
+ "docs": [
504
+ "Current index in commission_history circular buffer (0-9)"
505
+ ],
488
506
  "type": "u8"
489
507
  },
490
508
  {
491
509
  "name": "lastCommissionUpdate",
510
+ "docs": [
511
+ "Last epoch when commission was updated"
512
+ ],
492
513
  "type": "u64"
493
514
  },
494
515
  {
495
516
  "name": "epoch",
517
+ "docs": [
518
+ "Last epoch this validator was updated"
519
+ ],
496
520
  "type": "u64"
497
521
  },
498
522
  {
499
523
  "name": "slot",
524
+ "docs": [
525
+ "Last slot this validator was updated"
526
+ ],
500
527
  "type": "u64"
501
528
  },
502
529
  {
503
- "name": "performance",
504
- "type": "u64"
505
- },
506
- {
507
- "name": "stake",
508
- "type": "u64"
530
+ "name": "wireOperator",
531
+ "docs": [
532
+ "Whether this validator is a Wire operator (5% bonus)"
533
+ ],
534
+ "type": "bool"
509
535
  },
510
536
  {
511
- "name": "registrant",
512
- "type": "pubkey"
537
+ "name": "mevCommission",
538
+ "docs": [
539
+ "Current MEV commission in basis points"
540
+ ],
541
+ "type": "u16"
513
542
  },
514
543
  {
515
- "name": "wireOperator",
516
- "type": "bool"
544
+ "name": "mevCommissionHistory",
545
+ "docs": [
546
+ "Circular buffer of past 10 MEV commission values"
547
+ ],
548
+ "type": {
549
+ "array": [
550
+ "u16",
551
+ 10
552
+ ]
553
+ }
517
554
  },
518
555
  {
519
- "name": "nextValidator",
520
- "type": "pubkey"
556
+ "name": "mevCommissionIndex",
557
+ "docs": [
558
+ "Current index in mev_commission_history circular buffer (0-9)"
559
+ ],
560
+ "type": "u8"
521
561
  },
522
562
  {
523
- "name": "prevValidator",
524
- "type": "pubkey"
563
+ "name": "lastMevCommissionUpdate",
564
+ "docs": [
565
+ "Last epoch when MEV commission was updated"
566
+ ],
567
+ "type": "u64"
525
568
  },
526
569
  {
527
570
  "name": "bump",
571
+ "docs": [
572
+ "PDA bump seed"
573
+ ],
528
574
  "type": "u8"
529
575
  }
530
576
  ]