hedge-web3 0.1.46 → 0.2.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 (71) hide show
  1. package/declarations/Constants.d.ts +2 -1
  2. package/declarations/idl/vault.d.ts +109 -47
  3. package/declarations/instructions/claimLiquidationPoolPosition.d.ts +1 -1
  4. package/declarations/instructions/claimStakingPoolPosition.d.ts +1 -1
  5. package/declarations/instructions/closeLiquidationPoolPosition.d.ts +1 -1
  6. package/declarations/instructions/createStakingPool.d.ts +1 -1
  7. package/declarations/instructions/createVault.d.ts +1 -1
  8. package/declarations/instructions/depositLiquidationPool.d.ts +1 -1
  9. package/declarations/instructions/depositStakingPool.d.ts +1 -1
  10. package/declarations/instructions/depositVault.d.ts +1 -1
  11. package/declarations/instructions/initHedgeFoundation.d.ts +1 -1
  12. package/declarations/instructions/liquidateVault.d.ts +1 -1
  13. package/declarations/instructions/loanVault.d.ts +1 -1
  14. package/declarations/instructions/redeemVault.d.ts +1 -1
  15. package/declarations/instructions/refreshOraclePrice.d.ts +3 -3
  16. package/declarations/instructions/repayVault.d.ts +1 -1
  17. package/declarations/instructions/setHalted.d.ts +1 -1
  18. package/declarations/instructions/updateVaultType.d.ts +4 -1
  19. package/declarations/instructions/withdrawStakingPool.d.ts +1 -1
  20. package/declarations/instructions/withdrawVault.d.ts +1 -1
  21. package/declarations/state/VaultAccount.d.ts +4 -3
  22. package/declarations/utils/getLinkedListAccounts.d.ts +1 -1
  23. package/lib/Constants.js +3 -2
  24. package/lib/idl/vault.js +109 -47
  25. package/lib/instructions/claimLiquidationPoolPosition.js +5 -1
  26. package/lib/instructions/claimStakingPoolPosition.js +5 -1
  27. package/lib/instructions/closeLiquidationPoolPosition.js +5 -1
  28. package/lib/instructions/createStakingPool.js +5 -2
  29. package/lib/instructions/createVault.js +5 -1
  30. package/lib/instructions/depositLiquidationPool.js +5 -1
  31. package/lib/instructions/depositStakingPool.js +5 -1
  32. package/lib/instructions/depositVault.js +5 -1
  33. package/lib/instructions/initHedgeFoundation.js +5 -1
  34. package/lib/instructions/initHedgeFoundationTokens.js +5 -1
  35. package/lib/instructions/liquidateVault.js +5 -1
  36. package/lib/instructions/loanVault.js +5 -3
  37. package/lib/instructions/redeemVault.js +5 -1
  38. package/lib/instructions/refreshOraclePrice.js +6 -1
  39. package/lib/instructions/repayVault.js +5 -1
  40. package/lib/instructions/setHalted.js +5 -1
  41. package/lib/instructions/updateVaultType.js +9 -2
  42. package/lib/instructions/withdrawStakingPool.js +5 -1
  43. package/lib/instructions/withdrawVault.js +5 -1
  44. package/lib/state/VaultAccount.js +11 -9
  45. package/lib/utils/getLinkedListAccounts.js +48 -48
  46. package/package.json +1 -1
  47. package/src/Constants.ts +2 -1
  48. package/src/idl/vault.ts +218 -94
  49. package/src/instructions/claimLiquidationPoolPosition.ts +3 -2
  50. package/src/instructions/claimStakingPoolPosition.ts +3 -2
  51. package/src/instructions/closeLiquidationPoolPosition.ts +3 -2
  52. package/src/instructions/createStakingPool.ts +3 -3
  53. package/src/instructions/createVault.ts +3 -2
  54. package/src/instructions/depositLiquidationPool.ts +3 -2
  55. package/src/instructions/depositStakingPool.ts +3 -2
  56. package/src/instructions/depositVault.ts +3 -3
  57. package/src/instructions/initHedgeFoundation.ts +3 -2
  58. package/src/instructions/initHedgeFoundationTokens.ts +2 -1
  59. package/src/instructions/liquidateVault.ts +5 -3
  60. package/src/instructions/loanVault.ts +3 -4
  61. package/src/instructions/redeemVault.ts +3 -2
  62. package/src/instructions/refreshOraclePrice.ts +7 -4
  63. package/src/instructions/repayVault.ts +3 -2
  64. package/src/instructions/setHalted.ts +3 -2
  65. package/src/instructions/updateVaultType.ts +10 -2
  66. package/src/instructions/withdrawStakingPool.ts +3 -2
  67. package/src/instructions/withdrawVault.ts +3 -2
  68. package/src/state/VaultAccount.ts +17 -12
  69. package/src/state/VaultType.ts +62 -0
  70. package/src/utils/getLinkedListAccounts.ts +54 -49
  71. package/src/utils/sendAndConfirmWithDebug.ts +27 -0
@@ -16,7 +16,8 @@ import {
16
16
  getUshMintPublicKey,
17
17
  getVaultSystemStatePublicKey,
18
18
  } from '../Constants'
19
- import { Vault } from 'idl/vault'
19
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
20
+ import { Vault } from '../idl/vault'
20
21
 
21
22
  export async function createStakingPool(
22
23
  program: Program<Vault>,
@@ -29,7 +30,7 @@ export async function createStakingPool(
29
30
  const transaction = new Transaction().add(
30
31
  await createStakingPoolInstruction(program, payer.publicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime)
31
32
  )
32
- await sendAndConfirmTransaction(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
33
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
33
34
  const [poolPublickey] = await getPoolPublicKeyForMint(mintPublicKey)
34
35
  return poolPublickey
35
36
  }
@@ -41,7 +42,6 @@ export async function createStakingPoolInstruction(
41
42
  hedgeTokensToBeMinted: number,
42
43
  overrideStartTime?: number
43
44
  ): Promise<TransactionInstruction> {
44
- console.log("new createStakingPoolInstruction")
45
45
  const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
46
46
  const ushMintPublickey = await getUshMintPublicKey()
47
47
  const [poolPublickey, poolBump] = await getPoolPublicKeyForMint(mintPublicKey)
@@ -23,7 +23,8 @@ import {
23
23
 
24
24
  import { v4 as uuidv4 } from 'uuid'
25
25
  import { parseAnchorErrors } from '../utils/Errors'
26
- import { Vault } from 'idl/vault'
26
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
27
+ import { Vault } from '../idl/vault'
27
28
 
28
29
  export async function createVault(
29
30
  program: Program<Vault>,
@@ -106,7 +107,7 @@ export async function createVault(
106
107
  )
107
108
  }
108
109
 
109
- await sendAndConfirmTransaction(provider.connection, transaction, signers).catch(parseAnchorErrors)
110
+ await sendAndConfirmWithDebug(provider.connection, transaction, signers).catch(parseAnchorErrors)
110
111
  return newVaultPublicKey
111
112
  }
112
113
 
@@ -17,7 +17,8 @@ import {
17
17
  getUshMintPublicKey,
18
18
  getVaultSystemStatePublicKey,
19
19
  } from '../Constants'
20
- import { Vault } from 'idl/vault'
20
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
21
+ import { Vault } from '../idl/vault'
21
22
 
22
23
  export async function depositLiquidationPool(
23
24
  program: Program<Vault>,
@@ -45,7 +46,7 @@ export async function depositLiquidationPool(
45
46
  overrideStartTime
46
47
  )
47
48
  )
48
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
49
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
49
50
  return poolPosition.publicKey
50
51
  }
51
52
 
@@ -12,7 +12,8 @@ import {
12
12
  } from '@solana/web3.js'
13
13
  import { parseAnchorErrors } from '../utils/Errors'
14
14
  import { findAssociatedTokenAddress, getPoolPublicKeyForMint, getVaultSystemStatePublicKey } from '../Constants'
15
- import { Vault } from 'idl/vault'
15
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
16
+ import { Vault } from '../idl/vault'
16
17
 
17
18
  export async function depositStakingPool(
18
19
  program: Program<Vault>,
@@ -33,7 +34,7 @@ export async function depositStakingPool(
33
34
  overrideStartTime
34
35
  )
35
36
  )
36
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
37
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolPosition]).catch(parseAnchorErrors)
37
38
  return poolPosition.publicKey
38
39
  }
39
40
 
@@ -19,7 +19,8 @@ import {
19
19
  getPoolPublicKeyForMint,
20
20
  getHedgeMintPublicKey,
21
21
  } from '../Constants'
22
- import { Vault } from 'idl/vault'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
23
+ import { Vault } from '../idl/vault'
23
24
  import { WRAPPED_SOL_MINT } from '@project-serum/serum/lib/token-instructions'
24
25
 
25
26
  export async function depositVault(
@@ -64,7 +65,6 @@ export async function depositVault(
64
65
 
65
66
  const transaction = new Transaction()
66
67
  const signers = [payer, history]
67
-
68
68
  const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
69
69
  program,
70
70
  provider,
@@ -125,7 +125,7 @@ export async function depositVault(
125
125
  )
126
126
  }
127
127
 
128
- await sendAndConfirmTransaction(provider.connection, transaction, signers)
128
+ await sendAndConfirmWithDebug(provider.connection, transaction, signers)
129
129
  return vaultPublicKey
130
130
  }
131
131
 
@@ -19,7 +19,8 @@ import {
19
19
  getUshMintPublicKey,
20
20
  getVaultSystemStatePublicKey,
21
21
  } from '../Constants'
22
- import { Vault } from 'idl/vault'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
23
+ import { Vault } from '../idl/vault'
23
24
 
24
25
  export async function initHedgeFoundation(program: Program<Vault>, provider: Provider, payer: Signer): Promise<PublicKey> {
25
26
  const poolEra = Keypair.generate()
@@ -27,7 +28,7 @@ export async function initHedgeFoundation(program: Program<Vault>, provider: Pro
27
28
  await initHedgeFoundationInstruction(program, poolEra.publicKey, payer.publicKey)
28
29
  )
29
30
 
30
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, poolEra]).catch(parseAnchorErrors)
31
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, poolEra]).catch(parseAnchorErrors)
31
32
  return payer.publicKey
32
33
  }
33
34
 
@@ -19,12 +19,13 @@ import {
19
19
  getUshMintPublicKey,
20
20
  getVaultSystemStatePublicKey,
21
21
  } from '../Constants'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
22
23
 
23
24
  export async function initHedgeFoundationTokens(program: Program, provider: Provider, payer: Signer): Promise<PublicKey> {
24
25
  const poolEra = Keypair.generate()
25
26
  const transaction = new Transaction().add(await initHedgeFoundationTokensInstruction(program, payer.publicKey))
26
27
 
27
- await sendAndConfirmTransaction(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
28
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
28
29
  return payer.publicKey
29
30
  }
30
31
 
@@ -1,6 +1,7 @@
1
- import { BN, Program, Provider } from '@project-serum/anchor'
1
+ import { BN, Program, Provider, translateAddress } from '@project-serum/anchor'
2
2
  import { ASSOCIATED_TOKEN_PROGRAM_ID, TOKEN_PROGRAM_ID, getOrCreateAssociatedTokenAccount } from '@solana/spl-token'
3
3
  import {
4
+ Connection,
4
5
  Keypair,
5
6
  PublicKey,
6
7
  sendAndConfirmTransaction,
@@ -20,7 +21,8 @@ import {
20
21
  getUshMintPublicKey,
21
22
  getVaultSystemStatePublicKey,
22
23
  } from '../Constants'
23
- import { Vault } from 'idl/vault'
24
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
25
+ import { Vault } from '../idl/vault'
24
26
 
25
27
  export async function liquidateVault(
26
28
  program: Program<Vault>,
@@ -122,7 +124,7 @@ export async function liquidateVault(
122
124
  overrideTime
123
125
  )
124
126
  )
125
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, history, newEra])
127
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history, newEra])
126
128
  return vaultPublicKey
127
129
  }
128
130
 
@@ -19,12 +19,11 @@ import {
19
19
  getVaultSystemStatePublicKey,
20
20
  HEDGE_PROGRAM_PUBLICKEY,
21
21
  } from '../Constants'
22
- import { Vault } from 'idl/vault'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
23
+ import { Vault } from '../idl/vault'
23
24
  import { parseAnchorErrors } from '../utils/Errors'
24
25
  import { VaultAccount } from '../state/VaultAccount'
25
26
 
26
- const fs = require('fs');
27
-
28
27
  export async function loanVault(
29
28
  program: Program<Vault>,
30
29
  provider: Provider,
@@ -87,7 +86,7 @@ export async function loanVault(
87
86
  overrideTime
88
87
  )
89
88
  )
90
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, history]).catch(parseAnchorErrors)
89
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
91
90
  return vaultPublicKey
92
91
  }
93
92
 
@@ -19,7 +19,8 @@ import {
19
19
  getUshMintPublicKey,
20
20
  getVaultSystemStatePublicKey,
21
21
  } from '../Constants'
22
- import { Vault } from 'idl/vault'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
23
+ import { Vault } from '../idl/vault'
23
24
 
24
25
  export async function redeemVault(
25
26
  program: Program<Vault>,
@@ -94,7 +95,7 @@ export async function redeemVault(
94
95
  transactionOverrideTime
95
96
  )
96
97
  )
97
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, history])
98
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
98
99
  return vaultPublicKey
99
100
  }
100
101
 
@@ -7,9 +7,11 @@ import {
7
7
  SystemProgram,
8
8
  Transaction,
9
9
  TransactionInstruction,
10
+ TransactionSignature,
10
11
  } from '@solana/web3.js'
11
- import { Vault } from 'idl/vault'
12
- import { HEDGE_PROGRAM_PUBLICKEY } from '../Constants'
12
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
13
+ import { Vault } from '../idl/vault'
14
+ import { HEDGE_PROGRAM_PUBLICKEY, CHAINLINK_PROGRAM_ID } from '../Constants'
13
15
 
14
16
  export async function refreshOraclePrice(
15
17
  program: Program<Vault>,
@@ -19,11 +21,11 @@ export async function refreshOraclePrice(
19
21
  network: Cluster,
20
22
  overridePrice?: number,
21
23
  overrideTime?: number
22
- ): Promise<string> {
24
+ ): Promise<TransactionSignature | void> {
23
25
  const transaction = new Transaction().add(
24
26
  await refreshOraclePriceInstruction(program, collateralType, network, overridePrice, overrideTime)
25
27
  )
26
- return await sendAndConfirmTransaction(provider.connection, transaction, [payer])
28
+ return await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
27
29
  }
28
30
 
29
31
  export async function refreshOraclePriceInstruction(
@@ -55,6 +57,7 @@ export async function refreshOraclePriceInstruction(
55
57
  oraclePyth: pythAccounts[network],
56
58
  oracleSwitchboard: switchboardAccounts[network],
57
59
  systemProgram: SystemProgram.programId,
60
+ chainlinkProgram: CHAINLINK_PROGRAM_ID,
58
61
  })
59
62
  .instruction()
60
63
  }
@@ -18,7 +18,8 @@ import {
18
18
  getUshMintPublicKey,
19
19
  getVaultSystemStatePublicKey,
20
20
  } from '../Constants'
21
- import { Vault } from 'idl/vault'
21
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
22
+ import { Vault } from '../idl/vault'
22
23
 
23
24
  export async function repayVault(
24
25
  program: Program<Vault>,
@@ -75,7 +76,7 @@ export async function repayVault(
75
76
  overrideTime
76
77
  )
77
78
  )
78
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, history])
79
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
79
80
  return vaultPublicKey
80
81
  }
81
82
 
@@ -22,7 +22,8 @@ import {
22
22
  } from '../Constants'
23
23
 
24
24
  import { parseAnchorErrors } from '../utils/Errors'
25
- import { Vault } from 'idl/vault'
25
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
26
+ import { Vault } from '../idl/vault'
26
27
 
27
28
  export async function setHalted(
28
29
  program: Program<Vault>,
@@ -36,7 +37,7 @@ export async function setHalted(
36
37
  await setHaltedInstruction(program, vaultSystemStatePublicKey, payer.publicKey, halted)
37
38
  )
38
39
 
39
- await sendAndConfirmTransaction(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
40
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
40
41
  return vaultSystemStatePublicKey
41
42
  }
42
43
 
@@ -21,7 +21,8 @@ import {
21
21
 
22
22
  import { v4 as uuidv4 } from 'uuid'
23
23
  import { parseAnchorErrors } from '../utils/Errors'
24
- import { Vault } from 'idl/vault'
24
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
25
+ import { Vault } from '../idl/vault'
25
26
 
26
27
  export interface VaultTypeConfig {
27
28
  maxDebtExtended?: BN
@@ -32,6 +33,10 @@ export interface VaultTypeConfig {
32
33
  oraclePyth?: PublicKey
33
34
  oracleSwitchboard?: PublicKey
34
35
 
36
+ priorityPyth?: number,
37
+ priorityChainlink?: number,
38
+ prioritySwitchboard?: number,
39
+
35
40
  deprecated?: boolean
36
41
  }
37
42
 
@@ -55,7 +60,7 @@ export async function updateVaultType(
55
60
  )
56
61
  )
57
62
 
58
- await sendAndConfirmTransaction(provider.connection, transaction, [payer])
63
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
59
64
  return vaultSystemStatePublicKey
60
65
  }
61
66
 
@@ -75,6 +80,9 @@ export async function updateVaultTypeStatusInstruction(
75
80
  oraclePyth: vaultTypeConfig.oraclePyth ?? null,
76
81
  oracleSwitchboard: vaultTypeConfig.oracleSwitchboard ?? null,
77
82
  deprecated: vaultTypeConfig.deprecated ?? null,
83
+ priorityPyth: vaultTypeConfig.priorityPyth ?? null,
84
+ priorityChainlink: vaultTypeConfig.priorityChainlink ?? null,
85
+ prioritySwitchboard: vaultTypeConfig.prioritySwitchboard ?? null,
78
86
  }
79
87
 
80
88
  return await program.methods
@@ -18,7 +18,8 @@ import {
18
18
  getUshMintPublicKey,
19
19
  getVaultSystemStatePublicKey,
20
20
  } from '../Constants'
21
- import { Vault } from 'idl/vault'
21
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
22
+ import { Vault } from '../idl/vault'
22
23
 
23
24
  export async function withdrawStakingPool(
24
25
  program: Program<Vault>,
@@ -38,7 +39,7 @@ export async function withdrawStakingPool(
38
39
  overrideStartTime
39
40
  )
40
41
  )
41
- await sendAndConfirmTransaction(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
42
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer]).catch(parseAnchorErrors)
42
43
  return poolPosition.publicKey
43
44
  }
44
45
 
@@ -19,7 +19,8 @@ import {
19
19
  getHedgeMintPublicKey,
20
20
  } from '../Constants'
21
21
  import { getLinkedListAccounts } from '../utils/getLinkedListAccounts'
22
- import { Vault } from 'idl/vault'
22
+ import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
23
+ import { Vault } from '../idl/vault'
23
24
 
24
25
  export async function withdrawVault(
25
26
  program: Program<Vault>,
@@ -98,7 +99,7 @@ export async function withdrawVault(
98
99
  overrideTime
99
100
  )
100
101
  )
101
- await sendAndConfirmTransaction(provider.connection, transaction, [payer, history])
102
+ await sendAndConfirmWithDebug(provider.connection, transaction, [payer, history])
102
103
  return vaultPublicKey
103
104
  }
104
105
 
@@ -3,6 +3,8 @@ import Decimal from 'decimal.js'
3
3
  import { DecimalFromU128 } from '../HedgeDecimal'
4
4
 
5
5
  import * as borsh from '@project-serum/borsh'
6
+ import BN from 'bn.js'
7
+ import VaultType from './VaultType'
6
8
 
7
9
  /**
8
10
  * A class that represents an on-chian vault.
@@ -32,7 +34,7 @@ export class VaultAccount {
32
34
  /** Collateral redistribution snapshot' */
33
35
  collateralAccumulatorSnapshotBytes = new Decimal(0)
34
36
 
35
- /** The vault type eg '2-SOL-150-0' */
37
+ /** The vault type eg '2-SOL-150-0-----' */
36
38
  vaultTypeName: string
37
39
 
38
40
  /** Current State of the vault ("Open", "Closed", "Liquidated") */
@@ -105,11 +107,17 @@ export class VaultAccount {
105
107
  .substring(this.publicKey.toString().length - 6)}`
106
108
  }
107
109
 
108
- public addDebt(newNormalizedDebt: Decimal, vaultTypeCompoundedInterest: Decimal) {
109
- const denormalizedNewDebt = newNormalizedDebt.div(vaultTypeCompoundedInterest)
110
+ public addDebt(additionalDebt: Decimal, vaultTypeAccount: VaultType) {
111
+ let loanFee = new Decimal(0)
112
+ if (additionalDebt.isPositive()){
113
+ loanFee = vaultTypeAccount.loanInitFee.mul(additionalDebt)
114
+ }
115
+
116
+ const totalNormalizedLoan = additionalDebt.add(loanFee)
117
+ const denormalizedNewDebt = totalNormalizedLoan.div(new Decimal(vaultTypeAccount.cumulativeRate.toString()))
110
118
  this.denormalizedDebt = denormalizedNewDebt.add(new Decimal(this.denormalizedDebt)).floor().toNumber()
111
- // this.denormalizedDebt = parseFloat(this.denormalizedDebt.toFixed(0))
112
119
  }
120
+
113
121
  public addDeposit(depositAmount: number) {
114
122
  this.deposited += depositAmount
115
123
  }
@@ -125,22 +133,19 @@ export class VaultAccount {
125
133
  this.vaultStatus = 'liquidated'
126
134
  }
127
135
 
128
- public updateDebtAndCollateral(vaultTypeAccountData: any) {
129
- const debtProductCurrent = DecimalFromU128(vaultTypeAccountData.debtRedistributionProduct)
130
-
131
- const collateralAccumulatorCurrent = DecimalFromU128(vaultTypeAccountData.collateralRedistributionAccumulator)
136
+ public updateDebtAndCollateral(vaultTypeAccountData: VaultType) {
132
137
 
133
- this.denormalizedDebt = debtProductCurrent
138
+ this.denormalizedDebt = vaultTypeAccountData.debtRedistributionProduct
134
139
  .div(this.debtProductSnapshotBytes)
135
140
  .mul(new Decimal(this.denormalizedDebt))
136
141
  .toNumber()
137
142
 
138
143
  const extraCollateralDeposited =
139
- this.denormalizedDebt * collateralAccumulatorCurrent.sub(this.collateralAccumulatorSnapshotBytes).toNumber()
144
+ this.denormalizedDebt * vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber()
140
145
  this.deposited += extraCollateralDeposited
141
146
 
142
- this.collateralAccumulatorSnapshotBytes = collateralAccumulatorCurrent
143
- this.debtProductSnapshotBytes = debtProductCurrent
147
+ this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator
148
+ this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct
144
149
  }
145
150
 
146
151
  public toString(highlight: PublicKey): string {
@@ -0,0 +1,62 @@
1
+ import { PublicKey } from '@solana/web3.js'
2
+ import Decimal from 'decimal.js'
3
+ import { DecimalFromU128 } from '../HedgeDecimal'
4
+
5
+
6
+ export default class VaultType {
7
+ publicKey?: PublicKey
8
+
9
+ // On Chain Data
10
+ name: string
11
+ collateralMint: PublicKey
12
+ collateralIndex: number
13
+ recentPrice: Decimal
14
+ priceLastUpdatedTimestamp: Decimal
15
+ collateralHeld: Decimal
16
+ denormalizedDebtExtended: Decimal
17
+ debtRedistributionProduct: Decimal
18
+ collateralRedistributionAccumulator: Decimal
19
+ minCollateralRatio: Decimal
20
+ loanInitFee: Decimal
21
+ minDebtPerVault: Decimal
22
+ maxDebtExtended: Decimal
23
+ canBeRedeemed: boolean
24
+ cumulativeRate: Decimal
25
+ cumulativeRateLastUpdated: Decimal
26
+ interestRatePerSecond: Decimal
27
+ firstVaultToRedeem: PublicKey
28
+
29
+ constructor(config: any, publicKey?: PublicKey) {
30
+ this.publicKey = publicKey
31
+ this.name = config.collateralType
32
+ this.loanInitFee = DecimalFromU128(config.loanInitFee)
33
+ this.minCollateralRatio = DecimalFromU128(config.minCollateralRatio)
34
+ this.interestRatePerSecond = DecimalFromU128(config.interestRatePerSecond)
35
+ this.minDebtPerVault = DecimalFromU128(config.minDebtPerVault)
36
+ this.maxDebtExtended = DecimalFromU128(config.maxDebtExtended)
37
+ this.canBeRedeemed = config.canBeRedeemed
38
+ this.collateralMint = config.collateralMint
39
+ this.firstVaultToRedeem = config.firstVaultToRedeem
40
+
41
+ this.recentPrice = DecimalFromU128(config.recentPrice?.toString())
42
+ this.priceLastUpdatedTimestamp = new Decimal(
43
+ config.priceLastUpdatedTimestamp.toString()
44
+ )
45
+ this.collateralHeld = new Decimal(config.collateralHeld.toString())
46
+ this.denormalizedDebtExtended = new Decimal(
47
+ config.denormalizedDebtExtended.toString()
48
+ )
49
+ this.debtRedistributionProduct = DecimalFromU128(
50
+ config.debtRedistributionProduct.toString()
51
+ )
52
+ this.collateralRedistributionAccumulator = DecimalFromU128(
53
+ config.collateralRedistributionAccumulator.toString()
54
+ )
55
+ this.cumulativeRate = DecimalFromU128(config.cumulativeRate.toString())
56
+ this.cumulativeRateLastUpdated = new Decimal(
57
+ config.cumulativeRateLastUpdated.toString()
58
+ )
59
+ this.collateralIndex = config.collateralIndex.toNumber()
60
+
61
+ }
62
+ }