hedge-web3 0.1.1 → 0.1.2

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 (66) hide show
  1. package/lib/index.js +1790 -0
  2. package/lib/index.js.map +1 -0
  3. package/lib/types/src/Constants.d.ts +13 -0
  4. package/lib/types/src/Constants.d.ts.map +1 -0
  5. package/lib/types/src/HedgeDecimal.d.ts +15 -0
  6. package/lib/types/src/HedgeDecimal.d.ts.map +1 -0
  7. package/lib/types/src/idl/idl.d.ts +3 -0
  8. package/lib/types/src/idl/idl.d.ts.map +1 -0
  9. package/lib/types/src/index.d.ts +10 -0
  10. package/lib/types/src/index.d.ts.map +1 -0
  11. package/lib/types/src/instructions/createVault.d.ts +4 -0
  12. package/lib/types/src/instructions/createVault.d.ts.map +1 -0
  13. package/lib/types/src/instructions/depositVault.d.ts +4 -0
  14. package/lib/types/src/instructions/depositVault.d.ts.map +1 -0
  15. package/lib/types/src/instructions/loanVault.d.ts +4 -0
  16. package/lib/types/src/instructions/loanVault.d.ts.map +1 -0
  17. package/lib/types/src/instructions/redeemVault.d.ts +4 -0
  18. package/lib/types/src/instructions/redeemVault.d.ts.map +1 -0
  19. package/lib/types/src/instructions/repayVault.d.ts +4 -0
  20. package/lib/types/src/instructions/repayVault.d.ts.map +1 -0
  21. package/lib/types/src/instructions/withdrawVault.d.ts +4 -0
  22. package/lib/types/src/instructions/withdrawVault.d.ts.map +1 -0
  23. package/lib/types/src/state/LiquidationPoolEra.d.ts +15 -0
  24. package/lib/types/src/state/LiquidationPoolEra.d.ts.map +1 -0
  25. package/lib/types/src/state/LiquidationPoolState.d.ts +7 -0
  26. package/lib/types/src/state/LiquidationPoolState.d.ts.map +1 -0
  27. package/lib/types/src/state/LiquidationPosition.d.ts +24 -0
  28. package/lib/types/src/state/LiquidationPosition.d.ts.map +1 -0
  29. package/lib/types/src/state/StakingPool.d.ts +17 -0
  30. package/lib/types/src/state/StakingPool.d.ts.map +1 -0
  31. package/lib/types/src/state/StakingPoolPosition.d.ts +19 -0
  32. package/lib/types/src/state/StakingPoolPosition.d.ts.map +1 -0
  33. package/lib/types/src/state/VaultAccount.d.ts +48 -0
  34. package/lib/types/src/state/VaultAccount.d.ts.map +1 -0
  35. package/lib/types/src/state/VaultHistoryEvent.d.ts +40 -0
  36. package/lib/types/src/state/VaultHistoryEvent.d.ts.map +1 -0
  37. package/lib/types/tsconfig.base.tsbuildinfo +1 -0
  38. package/package.json +5 -4
  39. package/rollup.config.js +14 -8
  40. package/src/Constants.ts +56 -0
  41. package/src/HedgeDecimal.ts +15 -7
  42. package/src/idl/idl.ts +1474 -0
  43. package/src/index.ts +7 -1
  44. package/src/instructions/createVault.ts +66 -0
  45. package/src/instructions/depositVault.ts +61 -0
  46. package/src/instructions/loanVault.ts +79 -0
  47. package/src/instructions/redeemVault.ts +83 -0
  48. package/src/instructions/repayVault.ts +74 -0
  49. package/src/instructions/withdrawVault.ts +66 -0
  50. package/src/state/LiquidationPoolEra.ts +29 -0
  51. package/src/state/LiquidationPoolState.ts +10 -0
  52. package/src/state/LiquidationPosition.ts +69 -0
  53. package/src/state/StakingPool.ts +39 -0
  54. package/src/state/StakingPoolPosition.ts +40 -0
  55. package/src/{accounts → state}/VaultAccount.ts +5 -5
  56. package/src/state/VaultHistoryEvent.ts +61 -0
  57. package/tsconfig.base.json +3 -3
  58. package/tsconfig.d.json +3 -1
  59. package/tsconfig.json +1 -1
  60. package/typedoc.json +2 -1
  61. package/src/accounts/LiquidationPoolEra.ts +0 -16
  62. package/src/accounts/LiquidationPoolState.ts +0 -22
  63. package/src/accounts/LiquidationPosition.ts +0 -72
  64. package/src/accounts/StakingPool.ts +0 -31
  65. package/src/accounts/StakingPoolPosition.ts +0 -29
  66. package/src/accounts/VaultHistoryEvent.ts +0 -27
package/lib/index.js ADDED
@@ -0,0 +1,1790 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var anchor = require('@project-serum/anchor');
6
+ var splToken = require('@solana/spl-token');
7
+ var web3_js = require('@solana/web3.js');
8
+ var Decimal = require('decimal.js');
9
+
10
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
+
12
+ var Decimal__default = /*#__PURE__*/_interopDefaultLegacy(Decimal);
13
+
14
+ const HEDGE_PROGRAM_ID = 'fff6FuPWrBPzFHeWwtBQaPjKvMvW27w8Jf4P7SSoueX';
15
+ const HEDGE_PROGRAM_PUBLICKEY = new web3_js.PublicKey(HEDGE_PROGRAM_ID);
16
+ const CHAINLINK_SOL_USD_ID = 'FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf';
17
+ const CHAINLINK_SOL_USD_PUBLICKEY = new web3_js.PublicKey(CHAINLINK_SOL_USD_ID);
18
+ async function getUsdhMintPublicKey() {
19
+ const enc = new TextEncoder();
20
+ const [findMintPublicKey, bump] = await web3_js.PublicKey.findProgramAddress([enc.encode('UsdhMintV1')], HEDGE_PROGRAM_PUBLICKEY);
21
+ return [findMintPublicKey, bump];
22
+ }
23
+ async function getVaultSystemStatePublicKey() {
24
+ const enc = new TextEncoder();
25
+ const [publicKey, bump] = await web3_js.PublicKey.findProgramAddress([enc.encode('VaultSystemStateV1')], HEDGE_PROGRAM_PUBLICKEY);
26
+ return [publicKey, bump];
27
+ }
28
+ async function getHedgeMintPublicKey() {
29
+ const enc = new TextEncoder();
30
+ const [publicKey, bump] = await web3_js.PublicKey.findProgramAddress([enc.encode('HEDGEMintV1')], HEDGE_PROGRAM_PUBLICKEY);
31
+ return [publicKey, bump];
32
+ }
33
+ async function getPoolPublicKeyForMint(mintPublicKey) {
34
+ const enc = new TextEncoder();
35
+ const strToEncode = (mintPublicKey.toString().substring(0, 12));
36
+ const [publicKey, bump] = await web3_js.PublicKey.findProgramAddress([enc.encode(strToEncode)], HEDGE_PROGRAM_PUBLICKEY);
37
+ return [publicKey, bump, strToEncode];
38
+ }
39
+ async function findAssociatedTokenAddress(walletAddress, tokenMintAddress) {
40
+ return (await web3_js.PublicKey.findProgramAddress([
41
+ walletAddress.toBuffer(),
42
+ splToken.TOKEN_PROGRAM_ID.toBuffer(),
43
+ tokenMintAddress.toBuffer()
44
+ ], splToken.ASSOCIATED_TOKEN_PROGRAM_ID))[0];
45
+ }
46
+
47
+ const vaultIdl = {
48
+ version: '0.1.0',
49
+ name: 'vault',
50
+ instructions: [
51
+ {
52
+ name: 'initHedgeFoundation',
53
+ accounts: [
54
+ {
55
+ name: 'vaultSystemState',
56
+ isMut: true,
57
+ isSigner: false
58
+ },
59
+ {
60
+ name: 'poolState',
61
+ isMut: true,
62
+ isSigner: false
63
+ },
64
+ {
65
+ name: 'poolEra',
66
+ isMut: true,
67
+ isSigner: true
68
+ },
69
+ {
70
+ name: 'poolUsdhAccount',
71
+ isMut: true,
72
+ isSigner: false
73
+ },
74
+ {
75
+ name: 'founder',
76
+ isMut: true,
77
+ isSigner: true
78
+ },
79
+ {
80
+ name: 'usdhMint',
81
+ isMut: true,
82
+ isSigner: false
83
+ },
84
+ {
85
+ name: 'hedgeMint',
86
+ isMut: true,
87
+ isSigner: false
88
+ },
89
+ {
90
+ name: 'founderAssociatedHedgeTokenAccount',
91
+ isMut: true,
92
+ isSigner: false
93
+ },
94
+ {
95
+ name: 'oracleChainlink',
96
+ isMut: false,
97
+ isSigner: false
98
+ },
99
+ {
100
+ name: 'oraclePyth',
101
+ isMut: false,
102
+ isSigner: false
103
+ },
104
+ {
105
+ name: 'oracleSwitchboard',
106
+ isMut: false,
107
+ isSigner: false
108
+ },
109
+ {
110
+ name: 'rent',
111
+ isMut: false,
112
+ isSigner: false
113
+ },
114
+ {
115
+ name: 'splTokenProgramInfo',
116
+ isMut: false,
117
+ isSigner: false
118
+ },
119
+ {
120
+ name: 'splAssociatedTokenProgramInfo',
121
+ isMut: false,
122
+ isSigner: false
123
+ },
124
+ {
125
+ name: 'systemProgram',
126
+ isMut: false,
127
+ isSigner: false
128
+ }
129
+ ],
130
+ args: [
131
+ {
132
+ name: 'bump1',
133
+ type: 'u8'
134
+ },
135
+ {
136
+ name: 'bump2',
137
+ type: 'u8'
138
+ }
139
+ ]
140
+ },
141
+ {
142
+ name: 'createStakingPool',
143
+ accounts: [
144
+ {
145
+ name: 'signer',
146
+ isMut: true,
147
+ isSigner: true
148
+ },
149
+ {
150
+ name: 'vaultSystemState',
151
+ isMut: true,
152
+ isSigner: false
153
+ },
154
+ {
155
+ name: 'pool',
156
+ isMut: true,
157
+ isSigner: false
158
+ },
159
+ {
160
+ name: 'stakedTokenMintInfo',
161
+ isMut: false,
162
+ isSigner: false
163
+ },
164
+ {
165
+ name: 'usdhMint',
166
+ isMut: false,
167
+ isSigner: false
168
+ },
169
+ {
170
+ name: 'poolAssociatedStakedTokenAccount',
171
+ isMut: true,
172
+ isSigner: false
173
+ },
174
+ {
175
+ name: 'poolAssociatedUsdhTokenAccount',
176
+ isMut: true,
177
+ isSigner: false
178
+ },
179
+ {
180
+ name: 'rent',
181
+ isMut: false,
182
+ isSigner: false
183
+ },
184
+ {
185
+ name: 'splTokenProgramInfo',
186
+ isMut: false,
187
+ isSigner: false
188
+ },
189
+ {
190
+ name: 'splAssociatedTokenProgramInfo',
191
+ isMut: false,
192
+ isSigner: false
193
+ },
194
+ {
195
+ name: 'systemProgram',
196
+ isMut: false,
197
+ isSigner: false
198
+ }
199
+ ],
200
+ args: [
201
+ {
202
+ name: 'bump1',
203
+ type: 'u8'
204
+ },
205
+ {
206
+ name: 'poolSeedPhraseInput',
207
+ type: 'string'
208
+ },
209
+ {
210
+ name: 'totalRewards',
211
+ type: 'u64'
212
+ },
213
+ {
214
+ name: 'overrideCurrentTime',
215
+ type: 'i64'
216
+ }
217
+ ]
218
+ },
219
+ {
220
+ name: 'depositStakingPool',
221
+ accounts: [
222
+ {
223
+ name: 'payer',
224
+ isMut: true,
225
+ isSigner: true
226
+ },
227
+ {
228
+ name: 'pool',
229
+ isMut: true,
230
+ isSigner: false
231
+ },
232
+ {
233
+ name: 'poolPosition',
234
+ isMut: true,
235
+ isSigner: true
236
+ },
237
+ {
238
+ name: 'payerAssociatedStakedTokenAccount',
239
+ isMut: true,
240
+ isSigner: false
241
+ },
242
+ {
243
+ name: 'poolAssociatedStakedTokenAccount',
244
+ isMut: true,
245
+ isSigner: false
246
+ },
247
+ {
248
+ name: 'splTokenProgramInfo',
249
+ isMut: false,
250
+ isSigner: false
251
+ },
252
+ {
253
+ name: 'systemProgram',
254
+ isMut: false,
255
+ isSigner: false
256
+ }
257
+ ],
258
+ args: [
259
+ {
260
+ name: 'stakeAmount',
261
+ type: 'u64'
262
+ },
263
+ {
264
+ name: 'overrideCurrentTime',
265
+ type: 'i64'
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ name: 'withdrawStakingPool',
271
+ accounts: [
272
+ {
273
+ name: 'payer',
274
+ isMut: true,
275
+ isSigner: true
276
+ },
277
+ {
278
+ name: 'vaultSystemState',
279
+ isMut: true,
280
+ isSigner: false
281
+ },
282
+ {
283
+ name: 'pool',
284
+ isMut: true,
285
+ isSigner: false
286
+ },
287
+ {
288
+ name: 'poolPosition',
289
+ isMut: true,
290
+ isSigner: false
291
+ },
292
+ {
293
+ name: 'hedgeMint',
294
+ isMut: true,
295
+ isSigner: false
296
+ },
297
+ {
298
+ name: 'stakedTokenMint',
299
+ isMut: true,
300
+ isSigner: false
301
+ },
302
+ {
303
+ name: 'usdhMint',
304
+ isMut: false,
305
+ isSigner: false
306
+ },
307
+ {
308
+ name: 'payerAssociatedStakedTokenAccount',
309
+ isMut: true,
310
+ isSigner: false
311
+ },
312
+ {
313
+ name: 'payerAssociatedHedgeAccount',
314
+ isMut: true,
315
+ isSigner: false
316
+ },
317
+ {
318
+ name: 'payerAssociatedUsdhAccount',
319
+ isMut: true,
320
+ isSigner: false
321
+ },
322
+ {
323
+ name: 'poolAssociatedStakedTokenAccount',
324
+ isMut: true,
325
+ isSigner: false
326
+ },
327
+ {
328
+ name: 'poolAssociatedUsdhTokenAccount',
329
+ isMut: true,
330
+ isSigner: false
331
+ },
332
+ {
333
+ name: 'splTokenProgramInfo',
334
+ isMut: false,
335
+ isSigner: false
336
+ },
337
+ {
338
+ name: 'systemProgram',
339
+ isMut: false,
340
+ isSigner: false
341
+ }
342
+ ],
343
+ args: [
344
+ {
345
+ name: 'overrideCurrentTime',
346
+ type: 'i64'
347
+ }
348
+ ]
349
+ },
350
+ {
351
+ name: 'createVault',
352
+ accounts: [
353
+ {
354
+ name: 'vaultSystemState',
355
+ isMut: true,
356
+ isSigner: false
357
+ },
358
+ {
359
+ name: 'vault',
360
+ isMut: true,
361
+ isSigner: true
362
+ },
363
+ {
364
+ name: 'history',
365
+ isMut: true,
366
+ isSigner: true
367
+ },
368
+ {
369
+ name: 'payer',
370
+ isMut: true,
371
+ isSigner: true
372
+ },
373
+ {
374
+ name: 'systemProgram',
375
+ isMut: false,
376
+ isSigner: false
377
+ }
378
+ ],
379
+ args: [
380
+ {
381
+ name: 'depositAmount',
382
+ type: 'u64'
383
+ },
384
+ {
385
+ name: 'minCollateralRatio',
386
+ type: 'u64'
387
+ }
388
+ ]
389
+ },
390
+ {
391
+ name: 'depositVault',
392
+ accounts: [
393
+ {
394
+ name: 'vaultSystemState',
395
+ isMut: true,
396
+ isSigner: false
397
+ },
398
+ {
399
+ name: 'vaultAccount',
400
+ isMut: true,
401
+ isSigner: false
402
+ },
403
+ {
404
+ name: 'history',
405
+ isMut: true,
406
+ isSigner: true
407
+ },
408
+ {
409
+ name: 'vaultOwner',
410
+ isMut: true,
411
+ isSigner: true
412
+ },
413
+ {
414
+ name: 'systemProgram',
415
+ isMut: false,
416
+ isSigner: false
417
+ }
418
+ ],
419
+ args: [
420
+ {
421
+ name: 'depositAmount',
422
+ type: 'u64'
423
+ }
424
+ ]
425
+ },
426
+ {
427
+ name: 'withdrawVault',
428
+ accounts: [
429
+ {
430
+ name: 'vaultSystemState',
431
+ isMut: true,
432
+ isSigner: false
433
+ },
434
+ {
435
+ name: 'vaultAccount',
436
+ isMut: true,
437
+ isSigner: false
438
+ },
439
+ {
440
+ name: 'history',
441
+ isMut: true,
442
+ isSigner: true
443
+ },
444
+ {
445
+ name: 'chainlinkFeedAccount',
446
+ isMut: false,
447
+ isSigner: false
448
+ },
449
+ {
450
+ name: 'vaultOwner',
451
+ isMut: true,
452
+ isSigner: true
453
+ },
454
+ {
455
+ name: 'systemProgram',
456
+ isMut: false,
457
+ isSigner: false
458
+ }
459
+ ],
460
+ args: [
461
+ {
462
+ name: 'withdrawAmount',
463
+ type: 'u64'
464
+ },
465
+ {
466
+ name: 'overrideSolPrice',
467
+ type: 'u64'
468
+ }
469
+ ]
470
+ },
471
+ {
472
+ name: 'loanVault',
473
+ accounts: [
474
+ {
475
+ name: 'vaultSystemState',
476
+ isMut: true,
477
+ isSigner: false
478
+ },
479
+ {
480
+ name: 'vaultAccount',
481
+ isMut: true,
482
+ isSigner: false
483
+ },
484
+ {
485
+ name: 'history',
486
+ isMut: true,
487
+ isSigner: true
488
+ },
489
+ {
490
+ name: 'feePool',
491
+ isMut: true,
492
+ isSigner: false
493
+ },
494
+ {
495
+ name: 'feePoolAssociatedUsdhTokenAccount',
496
+ isMut: true,
497
+ isSigner: false
498
+ },
499
+ {
500
+ name: 'usdhMint',
501
+ isMut: true,
502
+ isSigner: false
503
+ },
504
+ {
505
+ name: 'vaultOwner',
506
+ isMut: true,
507
+ isSigner: true
508
+ },
509
+ {
510
+ name: 'ownerUsdhAccount',
511
+ isMut: true,
512
+ isSigner: false
513
+ },
514
+ {
515
+ name: 'chainlinkFeedAccount',
516
+ isMut: false,
517
+ isSigner: false
518
+ },
519
+ {
520
+ name: 'splTokenProgramInfo',
521
+ isMut: false,
522
+ isSigner: false
523
+ },
524
+ {
525
+ name: 'systemProgram',
526
+ isMut: false,
527
+ isSigner: false
528
+ }
529
+ ],
530
+ args: [
531
+ {
532
+ name: 'loanAmount',
533
+ type: 'u64'
534
+ },
535
+ {
536
+ name: 'overrideSolPrice',
537
+ type: 'u64'
538
+ }
539
+ ]
540
+ },
541
+ {
542
+ name: 'repayVault',
543
+ accounts: [
544
+ {
545
+ name: 'vaultSystemState',
546
+ isMut: true,
547
+ isSigner: false
548
+ },
549
+ {
550
+ name: 'vaultAccount',
551
+ isMut: true,
552
+ isSigner: false
553
+ },
554
+ {
555
+ name: 'history',
556
+ isMut: true,
557
+ isSigner: true
558
+ },
559
+ {
560
+ name: 'usdhMint',
561
+ isMut: true,
562
+ isSigner: false
563
+ },
564
+ {
565
+ name: 'vaultOwner',
566
+ isMut: true,
567
+ isSigner: true
568
+ },
569
+ {
570
+ name: 'ownerUsdhAccount',
571
+ isMut: true,
572
+ isSigner: false
573
+ },
574
+ {
575
+ name: 'splTokenProgramInfo',
576
+ isMut: false,
577
+ isSigner: false
578
+ },
579
+ {
580
+ name: 'systemProgram',
581
+ isMut: false,
582
+ isSigner: false
583
+ }
584
+ ],
585
+ args: [
586
+ {
587
+ name: 'repayAmount',
588
+ type: 'u64'
589
+ }
590
+ ]
591
+ },
592
+ {
593
+ name: 'redeemVault',
594
+ accounts: [
595
+ {
596
+ name: 'vaultSystemState',
597
+ isMut: true,
598
+ isSigner: false
599
+ },
600
+ {
601
+ name: 'vaultAccount',
602
+ isMut: true,
603
+ isSigner: false
604
+ },
605
+ {
606
+ name: 'history',
607
+ isMut: true,
608
+ isSigner: true
609
+ },
610
+ {
611
+ name: 'usdhMint',
612
+ isMut: true,
613
+ isSigner: false
614
+ },
615
+ {
616
+ name: 'feePool',
617
+ isMut: true,
618
+ isSigner: false
619
+ },
620
+ {
621
+ name: 'feePoolAssociatedUsdhTokenAccount',
622
+ isMut: true,
623
+ isSigner: false
624
+ },
625
+ {
626
+ name: 'payer',
627
+ isMut: true,
628
+ isSigner: true
629
+ },
630
+ {
631
+ name: 'payerUsdhAccount',
632
+ isMut: true,
633
+ isSigner: false
634
+ },
635
+ {
636
+ name: 'chainlinkFeedAccount',
637
+ isMut: false,
638
+ isSigner: false
639
+ },
640
+ {
641
+ name: 'splTokenProgramInfo',
642
+ isMut: false,
643
+ isSigner: false
644
+ },
645
+ {
646
+ name: 'systemProgram',
647
+ isMut: false,
648
+ isSigner: false
649
+ }
650
+ ],
651
+ args: [
652
+ {
653
+ name: 'redeemPayUsdh',
654
+ type: 'u64'
655
+ },
656
+ {
657
+ name: 'overrideSolPrice',
658
+ type: 'u64'
659
+ },
660
+ {
661
+ name: 'overrideCurrentTime',
662
+ type: 'i64'
663
+ }
664
+ ]
665
+ },
666
+ {
667
+ name: 'depositLiquidityPool',
668
+ accounts: [
669
+ {
670
+ name: 'poolState',
671
+ isMut: true,
672
+ isSigner: false
673
+ },
674
+ {
675
+ name: 'poolUsdhAccount',
676
+ isMut: true,
677
+ isSigner: false
678
+ },
679
+ {
680
+ name: 'poolEra',
681
+ isMut: true,
682
+ isSigner: false
683
+ },
684
+ {
685
+ name: 'poolPosition',
686
+ isMut: true,
687
+ isSigner: true
688
+ },
689
+ {
690
+ name: 'payer',
691
+ isMut: true,
692
+ isSigner: true
693
+ },
694
+ {
695
+ name: 'ownerUsdhAccount',
696
+ isMut: true,
697
+ isSigner: false
698
+ },
699
+ {
700
+ name: 'splTokenProgramInfo',
701
+ isMut: false,
702
+ isSigner: false
703
+ },
704
+ {
705
+ name: 'systemProgram',
706
+ isMut: false,
707
+ isSigner: false
708
+ }
709
+ ],
710
+ args: [
711
+ {
712
+ name: 'depositAmount',
713
+ type: 'u64'
714
+ },
715
+ {
716
+ name: 'overrideCurrentTime',
717
+ type: 'i64'
718
+ }
719
+ ]
720
+ },
721
+ {
722
+ name: 'liquidateVault',
723
+ accounts: [
724
+ {
725
+ name: 'vaultSystemState',
726
+ isMut: true,
727
+ isSigner: false
728
+ },
729
+ {
730
+ name: 'vaultAccount',
731
+ isMut: true,
732
+ isSigner: false
733
+ },
734
+ {
735
+ name: 'poolState',
736
+ isMut: true,
737
+ isSigner: false
738
+ },
739
+ {
740
+ name: 'feePool',
741
+ isMut: true,
742
+ isSigner: false
743
+ },
744
+ {
745
+ name: 'poolUsdhAccount',
746
+ isMut: true,
747
+ isSigner: false
748
+ },
749
+ {
750
+ name: 'usdhMint',
751
+ isMut: true,
752
+ isSigner: false
753
+ },
754
+ {
755
+ name: 'poolEra',
756
+ isMut: true,
757
+ isSigner: false
758
+ },
759
+ {
760
+ name: 'newEra',
761
+ isMut: true,
762
+ isSigner: true
763
+ },
764
+ {
765
+ name: 'chainlinkFeedAccount',
766
+ isMut: false,
767
+ isSigner: false
768
+ },
769
+ {
770
+ name: 'history',
771
+ isMut: true,
772
+ isSigner: true
773
+ },
774
+ {
775
+ name: 'payer',
776
+ isMut: true,
777
+ isSigner: true
778
+ },
779
+ {
780
+ name: 'splTokenProgramInfo',
781
+ isMut: false,
782
+ isSigner: false
783
+ },
784
+ {
785
+ name: 'systemProgram',
786
+ isMut: false,
787
+ isSigner: false
788
+ }
789
+ ],
790
+ args: [
791
+ {
792
+ name: 'overrideSolPrice',
793
+ type: 'u64'
794
+ }
795
+ ]
796
+ },
797
+ {
798
+ name: 'withdrawLiquidity',
799
+ accounts: [
800
+ {
801
+ name: 'poolState',
802
+ isMut: true,
803
+ isSigner: false
804
+ },
805
+ {
806
+ name: 'poolEra',
807
+ isMut: true,
808
+ isSigner: false
809
+ },
810
+ {
811
+ name: 'poolPosition',
812
+ isMut: true,
813
+ isSigner: false
814
+ },
815
+ {
816
+ name: 'poolUsdhAccount',
817
+ isMut: true,
818
+ isSigner: false
819
+ },
820
+ {
821
+ name: 'payer',
822
+ isMut: true,
823
+ isSigner: true
824
+ },
825
+ {
826
+ name: 'ownerUsdhAccount',
827
+ isMut: true,
828
+ isSigner: false
829
+ },
830
+ {
831
+ name: 'hedgeMint',
832
+ isMut: true,
833
+ isSigner: false
834
+ },
835
+ {
836
+ name: 'payerAssociatedHedgeAccount',
837
+ isMut: true,
838
+ isSigner: false
839
+ },
840
+ {
841
+ name: 'rent',
842
+ isMut: false,
843
+ isSigner: false
844
+ },
845
+ {
846
+ name: 'splTokenProgramInfo',
847
+ isMut: false,
848
+ isSigner: false
849
+ },
850
+ {
851
+ name: 'splAssociatedTokenProgramInfo',
852
+ isMut: false,
853
+ isSigner: false
854
+ },
855
+ {
856
+ name: 'systemProgram',
857
+ isMut: false,
858
+ isSigner: false
859
+ }
860
+ ],
861
+ args: [
862
+ {
863
+ name: 'overrideCurrentTime',
864
+ type: 'i64'
865
+ }
866
+ ]
867
+ }
868
+ ],
869
+ accounts: [
870
+ {
871
+ name: 'StakingPool',
872
+ type: {
873
+ kind: 'struct',
874
+ fields: [
875
+ {
876
+ name: 'deposits',
877
+ type: 'u64'
878
+ },
879
+ {
880
+ name: 'bump',
881
+ type: 'u8'
882
+ },
883
+ {
884
+ name: 'seedPhrase',
885
+ type: 'string'
886
+ },
887
+ {
888
+ name: 'hedgeRewardAccumulator',
889
+ type: 'u128'
890
+ },
891
+ {
892
+ name: 'usdhFeeAccumulator',
893
+ type: 'u128'
894
+ },
895
+ {
896
+ name: 'solFeeAccumulator',
897
+ type: 'u128'
898
+ },
899
+ {
900
+ name: 'startTime',
901
+ type: 'i64'
902
+ },
903
+ {
904
+ name: 'lastTransactionTime',
905
+ type: 'i64'
906
+ },
907
+ {
908
+ name: 'halfLifeInDays',
909
+ type: 'u64'
910
+ },
911
+ {
912
+ name: 'totalHedgeReward',
913
+ type: 'u64'
914
+ },
915
+ {
916
+ name: 'stakedTokenMint',
917
+ type: 'publicKey'
918
+ }
919
+ ]
920
+ }
921
+ },
922
+ {
923
+ name: 'StakingPoolPosition',
924
+ type: {
925
+ kind: 'struct',
926
+ fields: [
927
+ {
928
+ name: 'state',
929
+ type: {
930
+ defined: 'PositionState'
931
+ }
932
+ },
933
+ {
934
+ name: 'owner',
935
+ type: 'publicKey'
936
+ },
937
+ {
938
+ name: 'pool',
939
+ type: 'publicKey'
940
+ },
941
+ {
942
+ name: 'deposited',
943
+ type: 'u64'
944
+ },
945
+ {
946
+ name: 'startHedgeRewardAccumulator',
947
+ type: 'u128'
948
+ },
949
+ {
950
+ name: 'startUsdhFeeAccumulator',
951
+ type: 'u128'
952
+ },
953
+ {
954
+ name: 'startSolFeeAccumulator',
955
+ type: 'u128'
956
+ },
957
+ {
958
+ name: 'timestampOpened',
959
+ type: 'i64'
960
+ },
961
+ {
962
+ name: 'timestampClosed',
963
+ type: 'i64'
964
+ },
965
+ {
966
+ name: 'closedRewardedTokens',
967
+ type: 'u64'
968
+ }
969
+ ]
970
+ }
971
+ },
972
+ {
973
+ name: 'VaultSystemState',
974
+ type: {
975
+ kind: 'struct',
976
+ fields: [
977
+ {
978
+ name: 'lastRedeemFeeBytes',
979
+ type: 'u128'
980
+ },
981
+ {
982
+ name: 'lastRedeemTimestamp',
983
+ type: 'i64'
984
+ },
985
+ {
986
+ name: 'totalCollateral',
987
+ type: 'u64'
988
+ },
989
+ {
990
+ name: 'totalUsdhSupply',
991
+ type: 'u64'
992
+ },
993
+ {
994
+ name: 'totalVaults',
995
+ type: 'u64'
996
+ },
997
+ {
998
+ name: 'totalVaultsClosed',
999
+ type: 'u64'
1000
+ },
1001
+ {
1002
+ name: 'debtRedistributionProduct',
1003
+ type: 'u128'
1004
+ },
1005
+ {
1006
+ name: 'collateralRedistributionAccumulator',
1007
+ type: 'u128'
1008
+ },
1009
+ {
1010
+ name: 'debtRedistributionError',
1011
+ type: 'u64'
1012
+ },
1013
+ {
1014
+ name: 'bumpVaultState',
1015
+ type: 'u8'
1016
+ },
1017
+ {
1018
+ name: 'bumpPoolState',
1019
+ type: 'u8'
1020
+ },
1021
+ {
1022
+ name: 'bumpMint',
1023
+ type: 'u8'
1024
+ },
1025
+ {
1026
+ name: 'bumpUsdhPoolAccount',
1027
+ type: 'u8'
1028
+ },
1029
+ {
1030
+ name: 'authority',
1031
+ type: 'publicKey'
1032
+ },
1033
+ {
1034
+ name: 'oracleChainlink',
1035
+ type: 'publicKey'
1036
+ },
1037
+ {
1038
+ name: 'oraclePyth',
1039
+ type: 'publicKey'
1040
+ },
1041
+ {
1042
+ name: 'oracleSwitchboard',
1043
+ type: 'publicKey'
1044
+ },
1045
+ {
1046
+ name: 'hedgeStakingPool',
1047
+ type: 'publicKey'
1048
+ }
1049
+ ]
1050
+ }
1051
+ },
1052
+ {
1053
+ name: 'Vault',
1054
+ type: {
1055
+ kind: 'struct',
1056
+ fields: [
1057
+ {
1058
+ name: 'vaultOwner',
1059
+ type: 'publicKey'
1060
+ },
1061
+ {
1062
+ name: 'deposited',
1063
+ type: 'u64'
1064
+ },
1065
+ {
1066
+ name: 'debt',
1067
+ type: 'u64'
1068
+ },
1069
+ {
1070
+ name: 'vaultVersion',
1071
+ type: 'u64'
1072
+ },
1073
+ {
1074
+ name: 'liquidationPrice',
1075
+ type: 'u64'
1076
+ },
1077
+ {
1078
+ name: 'minCollateralRatio',
1079
+ type: 'u128'
1080
+ },
1081
+ {
1082
+ name: 'debtProductSnapshotBytes',
1083
+ type: 'u128'
1084
+ },
1085
+ {
1086
+ name: 'collateralAccumulatorSnapshotBytes',
1087
+ type: 'u128'
1088
+ },
1089
+ {
1090
+ name: 'collateralType',
1091
+ type: {
1092
+ defined: 'CurrencyType'
1093
+ }
1094
+ },
1095
+ {
1096
+ name: 'debtType',
1097
+ type: {
1098
+ defined: 'CurrencyType'
1099
+ }
1100
+ },
1101
+ {
1102
+ name: 'vaultStatus',
1103
+ type: {
1104
+ defined: 'VaultStatus'
1105
+ }
1106
+ }
1107
+ ]
1108
+ }
1109
+ },
1110
+ {
1111
+ name: 'VaultHistoryEvent',
1112
+ type: {
1113
+ kind: 'struct',
1114
+ fields: [
1115
+ {
1116
+ name: 'vaultAccount',
1117
+ type: 'publicKey'
1118
+ },
1119
+ {
1120
+ name: 'actorAccount',
1121
+ type: 'publicKey'
1122
+ },
1123
+ {
1124
+ name: 'usdSolPrice',
1125
+ type: 'u128'
1126
+ },
1127
+ {
1128
+ name: 'usdhDebtBefore',
1129
+ type: 'u64'
1130
+ },
1131
+ {
1132
+ name: 'usdhDebtAfter',
1133
+ type: 'u64'
1134
+ },
1135
+ {
1136
+ name: 'solBalanceBefore',
1137
+ type: 'u64'
1138
+ },
1139
+ {
1140
+ name: 'solBalanceAfter',
1141
+ type: 'u64'
1142
+ },
1143
+ {
1144
+ name: 'minCollateralRatioBefore',
1145
+ type: 'u128'
1146
+ },
1147
+ {
1148
+ name: 'minCollateralRatioAfter',
1149
+ type: 'u128'
1150
+ },
1151
+ {
1152
+ name: 'vaultStateBefore',
1153
+ type: {
1154
+ defined: 'VaultStatus'
1155
+ }
1156
+ },
1157
+ {
1158
+ name: 'vaultStateAfter',
1159
+ type: {
1160
+ defined: 'VaultStatus'
1161
+ }
1162
+ },
1163
+ {
1164
+ name: 'timestamp',
1165
+ type: 'i64'
1166
+ },
1167
+ {
1168
+ name: 'action',
1169
+ type: {
1170
+ defined: 'VaultHistoryAction'
1171
+ }
1172
+ }
1173
+ ]
1174
+ }
1175
+ },
1176
+ {
1177
+ name: 'LiquidationPoolState',
1178
+ type: {
1179
+ kind: 'struct',
1180
+ fields: [
1181
+ {
1182
+ name: 'currentEra',
1183
+ type: 'publicKey'
1184
+ },
1185
+ {
1186
+ name: 'lifetimeDeposits',
1187
+ type: 'u64'
1188
+ },
1189
+ {
1190
+ name: 'lifetimeOpenedPositions',
1191
+ type: 'u64'
1192
+ },
1193
+ {
1194
+ name: 'lifetimeClosedPositions',
1195
+ type: 'u64'
1196
+ },
1197
+ {
1198
+ name: 'lifetimeVaultsLiquidated',
1199
+ type: 'u64'
1200
+ },
1201
+ {
1202
+ name: 'lifetimeVaultsRedistributed',
1203
+ type: 'u64'
1204
+ },
1205
+ {
1206
+ name: 'lifetimeSolPurchased',
1207
+ type: 'u64'
1208
+ },
1209
+ {
1210
+ name: 'lifetimeSolClaimed',
1211
+ type: 'u64'
1212
+ },
1213
+ {
1214
+ name: 'hedgeInitRewardsTimestamp',
1215
+ type: 'i64'
1216
+ }
1217
+ ]
1218
+ }
1219
+ },
1220
+ {
1221
+ name: 'LiquidationPoolEra',
1222
+ type: {
1223
+ kind: 'struct',
1224
+ fields: [
1225
+ {
1226
+ name: 'totalDeposits',
1227
+ type: 'u64'
1228
+ },
1229
+ {
1230
+ name: 'productBytes',
1231
+ type: 'u128'
1232
+ },
1233
+ {
1234
+ name: 'sumBytes',
1235
+ type: 'u128'
1236
+ },
1237
+ {
1238
+ name: 'hedgeRewardsAccumulatorBytes',
1239
+ type: 'u128'
1240
+ },
1241
+ {
1242
+ name: 'hedgeRewardsTimestamp',
1243
+ type: 'i64'
1244
+ }
1245
+ ]
1246
+ }
1247
+ },
1248
+ {
1249
+ name: 'LiquidationPosition',
1250
+ type: {
1251
+ kind: 'struct',
1252
+ fields: [
1253
+ {
1254
+ name: 'state',
1255
+ type: {
1256
+ defined: 'PositionState'
1257
+ }
1258
+ },
1259
+ {
1260
+ name: 'era',
1261
+ type: 'publicKey'
1262
+ },
1263
+ {
1264
+ name: 'ownerAccount',
1265
+ type: 'publicKey'
1266
+ },
1267
+ {
1268
+ name: 'deposit',
1269
+ type: 'u64'
1270
+ },
1271
+ {
1272
+ name: 'closedSol',
1273
+ type: 'u64'
1274
+ },
1275
+ {
1276
+ name: 'closedUsdh',
1277
+ type: 'u64'
1278
+ },
1279
+ {
1280
+ name: 'productSnapshotBytes',
1281
+ type: 'u128'
1282
+ },
1283
+ {
1284
+ name: 'sumSnapshotBytes',
1285
+ type: 'u128'
1286
+ },
1287
+ {
1288
+ name: 'hedgeRewardsSnapshotAccum',
1289
+ type: 'u128'
1290
+ },
1291
+ {
1292
+ name: 'timestampOpened',
1293
+ type: 'i64'
1294
+ },
1295
+ {
1296
+ name: 'timestampClosed',
1297
+ type: 'i64'
1298
+ }
1299
+ ]
1300
+ }
1301
+ },
1302
+ {
1303
+ name: 'Aggregator',
1304
+ type: {
1305
+ kind: 'struct',
1306
+ fields: [
1307
+ {
1308
+ name: 'isInitialized',
1309
+ type: 'bool'
1310
+ },
1311
+ {
1312
+ name: 'version',
1313
+ type: 'u32'
1314
+ },
1315
+ {
1316
+ name: 'config',
1317
+ type: {
1318
+ defined: 'Config'
1319
+ }
1320
+ },
1321
+ {
1322
+ name: 'updatedAt',
1323
+ type: 'i64'
1324
+ },
1325
+ {
1326
+ name: 'owner',
1327
+ type: 'publicKey'
1328
+ },
1329
+ {
1330
+ name: 'submissions',
1331
+ type: {
1332
+ array: [
1333
+ {
1334
+ defined: 'Submission'
1335
+ },
1336
+ 8
1337
+ ]
1338
+ }
1339
+ },
1340
+ {
1341
+ name: 'answer',
1342
+ type: {
1343
+ option: 'u128'
1344
+ }
1345
+ }
1346
+ ]
1347
+ }
1348
+ }
1349
+ ],
1350
+ types: [
1351
+ {
1352
+ name: 'Config',
1353
+ type: {
1354
+ kind: 'struct',
1355
+ fields: [
1356
+ {
1357
+ name: 'oracles',
1358
+ type: {
1359
+ vec: 'publicKey'
1360
+ }
1361
+ },
1362
+ {
1363
+ name: 'minAnswerThreshold',
1364
+ type: 'u8'
1365
+ },
1366
+ {
1367
+ name: 'stalenessThreshold',
1368
+ type: 'u8'
1369
+ },
1370
+ {
1371
+ name: 'decimals',
1372
+ type: 'u8'
1373
+ }
1374
+ ]
1375
+ }
1376
+ },
1377
+ {
1378
+ name: 'Submission',
1379
+ type: {
1380
+ kind: 'struct',
1381
+ fields: [
1382
+ {
1383
+ name: 'timestamp',
1384
+ type: 'i64'
1385
+ },
1386
+ {
1387
+ name: 'value',
1388
+ type: 'u128'
1389
+ }
1390
+ ]
1391
+ }
1392
+ },
1393
+ {
1394
+ name: 'PositionState',
1395
+ type: {
1396
+ kind: 'enum',
1397
+ variants: [
1398
+ {
1399
+ name: 'Open'
1400
+ },
1401
+ {
1402
+ name: 'Closed'
1403
+ }
1404
+ ]
1405
+ }
1406
+ },
1407
+ {
1408
+ name: 'CurrencyType',
1409
+ type: {
1410
+ kind: 'enum',
1411
+ variants: [
1412
+ {
1413
+ name: 'Solana'
1414
+ },
1415
+ {
1416
+ name: 'Usdh'
1417
+ }
1418
+ ]
1419
+ }
1420
+ },
1421
+ {
1422
+ name: 'VaultStatus',
1423
+ type: {
1424
+ kind: 'enum',
1425
+ variants: [
1426
+ {
1427
+ name: 'Open'
1428
+ },
1429
+ {
1430
+ name: 'Closed'
1431
+ },
1432
+ {
1433
+ name: 'Liquidated'
1434
+ },
1435
+ {
1436
+ name: 'Distributed'
1437
+ },
1438
+ {
1439
+ name: 'Redeemed'
1440
+ }
1441
+ ]
1442
+ }
1443
+ },
1444
+ {
1445
+ name: 'VaultHistoryAction',
1446
+ type: {
1447
+ kind: 'enum',
1448
+ variants: [
1449
+ {
1450
+ name: 'Create'
1451
+ },
1452
+ {
1453
+ name: 'Close'
1454
+ },
1455
+ {
1456
+ name: 'Liquidate'
1457
+ },
1458
+ {
1459
+ name: 'PartialLiquidate'
1460
+ },
1461
+ {
1462
+ name: 'Distributed'
1463
+ },
1464
+ {
1465
+ name: 'Redeem'
1466
+ },
1467
+ {
1468
+ name: 'TransferOwnership'
1469
+ },
1470
+ {
1471
+ name: 'Deposit'
1472
+ },
1473
+ {
1474
+ name: 'Withdraw'
1475
+ },
1476
+ {
1477
+ name: 'Loan'
1478
+ },
1479
+ {
1480
+ name: 'RepayCredit'
1481
+ }
1482
+ ]
1483
+ }
1484
+ }
1485
+ ],
1486
+ errors: [
1487
+ {
1488
+ code: 6000,
1489
+ name: 'AlreadyInitialized',
1490
+ msg: 'This vault was already initialized'
1491
+ },
1492
+ {
1493
+ code: 6001,
1494
+ name: 'NotInitialized',
1495
+ msg: 'This vault was not initialized'
1496
+ },
1497
+ {
1498
+ code: 6002,
1499
+ name: 'Overdraw',
1500
+ msg: 'Cannot withdraw more than deposited'
1501
+ },
1502
+ {
1503
+ code: 6003,
1504
+ name: 'Overpaid',
1505
+ msg: 'Cannot repay more than loaned'
1506
+ },
1507
+ {
1508
+ code: 6004,
1509
+ name: 'NotAuthorizedToCreateStakingPools',
1510
+ msg: 'Signer not authorized to create new staking pools'
1511
+ },
1512
+ {
1513
+ code: 6005,
1514
+ name: 'BadSeed',
1515
+ msg: 'Bad Seed'
1516
+ }
1517
+ ]
1518
+ };
1519
+
1520
+ async function createVault(connection, payer, depositAmount, collateralRatio, confirmOptions) {
1521
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1522
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1523
+ // Prep the user to get USDH back out at some point
1524
+ await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1525
+ const newVault = web3_js.Keypair.generate();
1526
+ const history = web3_js.Keypair.generate();
1527
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1528
+ const transaction = new web3_js.Transaction().add(createVaultInstruction(vaultSystemStatePublicKey, payer.publicKey, newVault.publicKey, history.publicKey, depositAmount, collateralRatio));
1529
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, newVault, history], confirmOptions);
1530
+ return newVault.publicKey;
1531
+ }
1532
+ function createVaultInstruction(vaultSystemStatePublicKey, payerPublicKey, vaultPublicKey, historyPublicKey, depositAmount, collateralRatio) {
1533
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1534
+ const ix = program.instruction.createVault(new anchor.BN(depositAmount), new anchor.BN(collateralRatio), {
1535
+ accounts: {
1536
+ vaultSystemState: vaultSystemStatePublicKey,
1537
+ vault: vaultPublicKey,
1538
+ history: historyPublicKey,
1539
+ payer: payerPublicKey,
1540
+ systemProgram: web3_js.SystemProgram.programId
1541
+ },
1542
+ signers: []
1543
+ });
1544
+ return ix;
1545
+ }
1546
+
1547
+ async function depositVault(connection, payer, vaultPublicKey, depositAmount, confirmOptions) {
1548
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1549
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1550
+ // Prep the user to get USDH back out at some point
1551
+ await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1552
+ const history = web3_js.Keypair.generate();
1553
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1554
+ const transaction = new web3_js.Transaction().add(depositVaultInstruction(vaultSystemStatePublicKey, payer.publicKey, vaultPublicKey, history.publicKey, depositAmount));
1555
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, history], confirmOptions);
1556
+ return vaultPublicKey;
1557
+ }
1558
+ function depositVaultInstruction(vaultSystemStatePublicKey, payerPublicKey, vaultPublicKey, historyPublicKey, depositAmount) {
1559
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1560
+ return program.instruction.depositVault(new anchor.BN(depositAmount), {
1561
+ accounts: {
1562
+ vaultSystemState: vaultSystemStatePublicKey,
1563
+ vaultAccount: vaultPublicKey,
1564
+ history: historyPublicKey,
1565
+ vaultOwner: payerPublicKey,
1566
+ systemProgram: web3_js.SystemProgram.programId
1567
+ },
1568
+ signers: []
1569
+ });
1570
+ }
1571
+
1572
+ async function withdrawVault(connection, payer, vaultPublicKey, withdrawAmount, chainlinkOverridePrice, confirmOptions) {
1573
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1574
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1575
+ // Prep the user to get USDH back out at some point
1576
+ await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1577
+ const history = web3_js.Keypair.generate();
1578
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1579
+ const transaction = new web3_js.Transaction().add(withdrawVaultInstruction(vaultSystemStatePublicKey, payer.publicKey, vaultPublicKey, history.publicKey, withdrawAmount, chainlinkOverridePrice));
1580
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, history], confirmOptions);
1581
+ return vaultPublicKey;
1582
+ }
1583
+ function withdrawVaultInstruction(vaultSystemStatePublicKey, payerPublicKey, vaultPublickey, historyPublicKey, withdrawAmount, chainlinkOverridePrice) {
1584
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1585
+ return program.instruction.withdrawVault(new anchor.BN(withdrawAmount), new anchor.BN(chainlinkOverridePrice !== null && chainlinkOverridePrice !== void 0 ? chainlinkOverridePrice : 200 * web3_js.LAMPORTS_PER_SOL), {
1586
+ accounts: {
1587
+ vaultSystemState: vaultSystemStatePublicKey,
1588
+ vaultAccount: vaultPublickey,
1589
+ history: historyPublicKey,
1590
+ vaultOwner: payerPublicKey,
1591
+ chainlinkFeedAccount: CHAINLINK_SOL_USD_PUBLICKEY,
1592
+ systemProgram: web3_js.SystemProgram.programId
1593
+ },
1594
+ signers: []
1595
+ });
1596
+ }
1597
+
1598
+ async function loanVault(connection, payer, vaultPublicKey, loanAmount, chainlinkOverridePrice, confirmOptions) {
1599
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1600
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1601
+ // Prep the user to get USDH back out at some point
1602
+ const payerUsdhAccount = await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1603
+ const history = web3_js.Keypair.generate();
1604
+ const transaction = new web3_js.Transaction().add(await loanVaultInstruction(payer.publicKey, payerUsdhAccount.address, vaultPublicKey, history.publicKey, loanAmount, chainlinkOverridePrice));
1605
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, history], confirmOptions);
1606
+ return vaultPublicKey;
1607
+ }
1608
+ async function loanVaultInstruction(payerPublicKey, ownerUsdhAccount, vaultPublickey, historyPublicKey, loanAmount, chainlinkOverridePrice) {
1609
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1610
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1611
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1612
+ const [hedgeMintPublickey] = await getHedgeMintPublicKey();
1613
+ const [hedgeStakingPoolPublicKey] = await getPoolPublicKeyForMint(hedgeMintPublickey);
1614
+ const hedgeStakingPoolAssociatedUsdhTokenAccount = await findAssociatedTokenAddress(hedgeStakingPoolPublicKey, usdhMintPublickey);
1615
+ return program.instruction.loanVault(new anchor.BN(loanAmount), new anchor.BN(chainlinkOverridePrice !== null && chainlinkOverridePrice !== void 0 ? chainlinkOverridePrice : web3_js.LAMPORTS_PER_SOL * 150), // override usd/sol price
1616
+ {
1617
+ accounts: {
1618
+ vaultSystemState: vaultSystemStatePublicKey,
1619
+ vaultAccount: vaultPublickey,
1620
+ history: historyPublicKey,
1621
+ feePool: hedgeStakingPoolPublicKey,
1622
+ feePoolAssociatedUsdhTokenAccount: hedgeStakingPoolAssociatedUsdhTokenAccount,
1623
+ usdhMint: usdhMintPublickey,
1624
+ vaultOwner: payerPublicKey,
1625
+ ownerUsdhAccount: ownerUsdhAccount,
1626
+ chainlinkFeedAccount: CHAINLINK_SOL_USD_PUBLICKEY,
1627
+ splTokenProgramInfo: splToken.TOKEN_PROGRAM_ID,
1628
+ systemProgram: web3_js.SystemProgram.programId
1629
+ },
1630
+ signers: []
1631
+ });
1632
+ }
1633
+
1634
+ async function repayVault(connection, payer, vaultPublicKey, repayAmount, confirmOptions) {
1635
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1636
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1637
+ // Prep the user to get USDH back out at some point
1638
+ const payerUsdhAccount = await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1639
+ const history = web3_js.Keypair.generate();
1640
+ const transaction = new web3_js.Transaction().add(await repayVaultInstruction(payer.publicKey, payerUsdhAccount.address, vaultPublicKey, history.publicKey, repayAmount));
1641
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, history], confirmOptions);
1642
+ return vaultPublicKey;
1643
+ }
1644
+ async function repayVaultInstruction(payerPublicKey, ownerUsdhAccount, vaultPublickey, historyPublicKey, repayAmount) {
1645
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1646
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1647
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1648
+ const [hedgeMintPublickey] = await getHedgeMintPublicKey();
1649
+ const [hedgeStakingPoolPublicKey] = await getPoolPublicKeyForMint(hedgeMintPublickey);
1650
+ const hedgeStakingPoolAssociatedUsdhTokenAccount = await findAssociatedTokenAddress(hedgeStakingPoolPublicKey, usdhMintPublickey);
1651
+ return program.instruction.repayVault(new anchor.BN(repayAmount), {
1652
+ accounts: {
1653
+ vaultSystemState: vaultSystemStatePublicKey,
1654
+ vaultAccount: vaultPublickey,
1655
+ history: historyPublicKey,
1656
+ feePool: hedgeStakingPoolPublicKey,
1657
+ feePoolAssociatedUsdhTokenAccount: hedgeStakingPoolAssociatedUsdhTokenAccount,
1658
+ usdhMint: usdhMintPublickey,
1659
+ vaultOwner: payerPublicKey,
1660
+ ownerUsdhAccount: ownerUsdhAccount,
1661
+ splTokenProgramInfo: splToken.TOKEN_PROGRAM_ID,
1662
+ systemProgram: web3_js.SystemProgram.programId
1663
+ },
1664
+ signers: []
1665
+ });
1666
+ }
1667
+
1668
+ async function redeemVault(connection, payer, vaultPublicKey, repayAmount, chainlinkOverridePrice, transactionOverrideTime, confirmOptions) {
1669
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1670
+ const USDH = new splToken.Token(connection, usdhMintPublickey, splToken.TOKEN_PROGRAM_ID, payer);
1671
+ // Prep the user to get USDH back out at some point
1672
+ const payerUsdhAccount = await USDH.getOrCreateAssociatedAccountInfo(payer.publicKey);
1673
+ const history = web3_js.Keypair.generate();
1674
+ const transaction = new web3_js.Transaction().add(await redeemVaultInstruction(payer.publicKey, payerUsdhAccount.address, vaultPublicKey, history.publicKey, repayAmount, chainlinkOverridePrice, transactionOverrideTime));
1675
+ await web3_js.sendAndConfirmTransaction(connection, transaction, [payer, history], confirmOptions);
1676
+ return vaultPublicKey;
1677
+ }
1678
+ async function redeemVaultInstruction(payerPublicKey, ownerUsdhAccount, vaultPublickey, historyPublicKey, repayAmount, chainlinkOverridePrice, transactionOverrideTime) {
1679
+ const program = new anchor.Program(vaultIdl, HEDGE_PROGRAM_ID);
1680
+ const [vaultSystemStatePublicKey] = await getVaultSystemStatePublicKey();
1681
+ const [usdhMintPublickey] = await getUsdhMintPublicKey();
1682
+ const [hedgeMintPublickey] = await getHedgeMintPublicKey();
1683
+ const [hedgeStakingPoolPublicKey] = await getPoolPublicKeyForMint(hedgeMintPublickey);
1684
+ const hedgeStakingPoolAssociatedUsdhTokenAccount = await findAssociatedTokenAddress(hedgeStakingPoolPublicKey, usdhMintPublickey);
1685
+ return program.instruction.redeemVault(new anchor.BN(repayAmount), new anchor.BN(chainlinkOverridePrice !== null && chainlinkOverridePrice !== void 0 ? chainlinkOverridePrice : 150 * web3_js.LAMPORTS_PER_SOL), // override usd/sol price
1686
+ new anchor.BN(transactionOverrideTime !== null && transactionOverrideTime !== void 0 ? transactionOverrideTime : (Date.now() / 1000)), // override start time
1687
+ {
1688
+ accounts: {
1689
+ vaultSystemState: vaultSystemStatePublicKey,
1690
+ vaultAccount: vaultPublickey,
1691
+ history: historyPublicKey,
1692
+ feePool: hedgeStakingPoolPublicKey,
1693
+ feePoolAssociatedUsdhTokenAccount: hedgeStakingPoolAssociatedUsdhTokenAccount,
1694
+ usdhMint: usdhMintPublickey,
1695
+ payer: payerPublicKey,
1696
+ payerUsdhAccount: ownerUsdhAccount,
1697
+ chainlinkFeedAccount: CHAINLINK_SOL_USD_PUBLICKEY,
1698
+ splTokenProgramInfo: splToken.TOKEN_PROGRAM_ID,
1699
+ systemProgram: web3_js.SystemProgram.programId
1700
+ },
1701
+ signers: []
1702
+ });
1703
+ }
1704
+
1705
+ /**
1706
+ * Convert a U128 to a Decimal
1707
+ *
1708
+ * On chain, u128s are used to store Decimal numbers. These values
1709
+ * are simply stored as u128 where the actual value is divided by
1710
+ * 1.0e+24. This gives 24 digits of percision on decimal numbers.
1711
+ *
1712
+ * Example: the number 1.5 is stored as a u128: 1.5 * 10^24
1713
+ *
1714
+ * @param value the value to be converted to Decimal
1715
+ * @returns the converted value as a decimal.js object
1716
+ */
1717
+ function DecimalFromU128(value) {
1718
+ const adjustedValue = new Decimal__default["default"](value.toString());
1719
+ return adjustedValue.div(new Decimal__default["default"]('1e+24'));
1720
+ }
1721
+
1722
+ /**
1723
+ * A class that represents an on-chian vault.
1724
+ */
1725
+ class VaultAccount {
1726
+ constructor(vault, publicKey) {
1727
+ this.publicKey = publicKey;
1728
+ this.vaultOwner = vault.vaultOwner;
1729
+ this.debt = vault.debt.toNumber();
1730
+ this.deposited = vault.deposited.toNumber();
1731
+ this.minCollateralRatio = DecimalFromU128(vault.minCollateralRatio);
1732
+ this.liquidationPrice = vault.liquidationPrice.toNumber();
1733
+ this.minCollateralRatio = vault.minCollateralRatio.toNumber();
1734
+ this.vaultStatus = Object.keys(vault.vaultStatus)[0];
1735
+ }
1736
+ /**
1737
+ * Check if some `PublicKey` is the owner
1738
+ *
1739
+ * @param publicKey the publicKey to check against the vault owner
1740
+ * @returns true if publicKey matches the owner publicKey
1741
+ */
1742
+ isOwnedBy(publicKey) {
1743
+ return publicKey.toString() === this.vaultOwner.toString();
1744
+ }
1745
+ /**
1746
+ * Get the collateral value in SOL
1747
+ *
1748
+ * @returns collateral value in SOL
1749
+ */
1750
+ inSol() {
1751
+ return this.deposited / web3_js.LAMPORTS_PER_SOL;
1752
+ }
1753
+ /**
1754
+ * Get the debt value in USDH
1755
+ *
1756
+ * @returns debt value in USDH
1757
+ */
1758
+ inUsd() {
1759
+ return this.debt / web3_js.LAMPORTS_PER_SOL;
1760
+ }
1761
+ /**
1762
+ * Pretty print the vault publickey for easy display
1763
+ *
1764
+ * @returns example: `1b6ca...azy71s`
1765
+ */
1766
+ toDisplayString() {
1767
+ return `${this.publicKey.toString().substring(0, 6)}...${this.publicKey.toString().substring(this.publicKey.toString().length - 6)}`;
1768
+ }
1769
+ }
1770
+
1771
+ function foo(input) {
1772
+ console.log('Input', input);
1773
+ }
1774
+
1775
+ exports.DecimalFromU128 = DecimalFromU128;
1776
+ exports.VaultAccount = VaultAccount;
1777
+ exports.createVault = createVault;
1778
+ exports.createVaultInstruction = createVaultInstruction;
1779
+ exports.depositVault = depositVault;
1780
+ exports.depositVaultInstruction = depositVaultInstruction;
1781
+ exports.foo = foo;
1782
+ exports.loanVault = loanVault;
1783
+ exports.loanVaultInstruction = loanVaultInstruction;
1784
+ exports.redeemVault = redeemVault;
1785
+ exports.redeemVaultInstruction = redeemVaultInstruction;
1786
+ exports.repayVault = repayVault;
1787
+ exports.repayVaultInstruction = repayVaultInstruction;
1788
+ exports.withdrawVault = withdrawVault;
1789
+ exports.withdrawVaultInstruction = withdrawVaultInstruction;
1790
+ //# sourceMappingURL=index.js.map