hedge-web3 0.1.44 → 0.1.50

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.
@@ -1,5 +1,5 @@
1
1
  import { PublicKey } from '@solana/web3.js';
2
- export declare const HEDGE_PROGRAM_ID = "zooJaircVAoQ4e7EXRDocnsbB7UPYQ6J7bKyZEMh784";
2
+ export declare const HEDGE_PROGRAM_ID = "HDG4FDos8fyrB79qMCe98gaFjNEy5kpxGNjMc5V8M6TJ";
3
3
  export declare const HEDGE_PROGRAM_PUBLICKEY: PublicKey;
4
4
  export declare const CHAINLINK_SOL_USD_ID = "FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf";
5
5
  export declare const CHAINLINK_SOL_USD_PUBLICKEY: PublicKey;
@@ -1844,7 +1844,7 @@ export declare type Vault = {
1844
1844
  "kind": "struct";
1845
1845
  "fields": [
1846
1846
  {
1847
- "name": "vaultTypeName";
1847
+ "name": "collateralType";
1848
1848
  "type": "string";
1849
1849
  },
1850
1850
  {
@@ -1858,10 +1858,6 @@ export declare type Vault = {
1858
1858
  {
1859
1859
  "name": "oracleSwitchboard";
1860
1860
  "type": "publicKey";
1861
- },
1862
- {
1863
- "name": "vaultType";
1864
- "type": "publicKey";
1865
1861
  }
1866
1862
  ];
1867
1863
  };
@@ -2106,7 +2102,7 @@ export declare type Vault = {
2106
2102
  "kind": "struct";
2107
2103
  "fields": [
2108
2104
  {
2109
- "name": "vaultTypeName";
2105
+ "name": "collateralType";
2110
2106
  "type": "string";
2111
2107
  },
2112
2108
  {
@@ -2190,14 +2186,6 @@ export declare type Vault = {
2190
2186
  {
2191
2187
  "name": "deprecated";
2192
2188
  "type": "bool";
2193
- },
2194
- {
2195
- "name": "totalFeesAccumulatedUsh";
2196
- "type": "u128";
2197
- },
2198
- {
2199
- "name": "totalFeesAccumulatedCollateral";
2200
- "type": "u128";
2201
2189
  }
2202
2190
  ];
2203
2191
  };
@@ -2224,7 +2212,7 @@ export declare type Vault = {
2224
2212
  "type": "u64";
2225
2213
  },
2226
2214
  {
2227
- "name": "vaultTypeName";
2215
+ "name": "collateralType";
2228
2216
  "type": "string";
2229
2217
  },
2230
2218
  {
@@ -2272,10 +2260,6 @@ export declare type Vault = {
2272
2260
  "type": {
2273
2261
  "option": "publicKey";
2274
2262
  };
2275
- },
2276
- {
2277
- "name": "vaultType";
2278
- "type": "publicKey";
2279
2263
  }
2280
2264
  ];
2281
2265
  };
@@ -2689,8 +2673,8 @@ export declare type Vault = {
2689
2673
  },
2690
2674
  {
2691
2675
  "code": 6020;
2692
- "name": "NotRedeemingLowestCollateralRatioVault";
2693
- "msg": "Can only redeem lowest collateral ratio vault in system.";
2676
+ "name": "RedeemingNonHighestCollateralRatioVault";
2677
+ "msg": "Can only redeem highest collateral ratio vault in system.";
2694
2678
  },
2695
2679
  {
2696
2680
  "code": 6021;
@@ -2704,11 +2688,6 @@ export declare type Vault = {
2704
2688
  },
2705
2689
  {
2706
2690
  "code": 6023;
2707
- "name": "InvalidSaltLength";
2708
- "msg": "Salt for new vaults must be of length 8";
2709
- },
2710
- {
2711
- "code": 6024;
2712
2691
  "name": "UpdateVaultTypeBadMaxDebtExtended";
2713
2692
  "msg": "New Max debt extended value is less than the current debt!";
2714
2693
  }
@@ -2,4 +2,4 @@ import { Program, Provider } from '@project-serum/anchor';
2
2
  import { PublicKey, Signer, TransactionInstruction } from '@solana/web3.js';
3
3
  import { Vault } from 'idl/vault';
4
4
  export declare function liquidateVault(program: Program<Vault>, provider: Provider, payer: Signer, vaultPublicKey: PublicKey, overrideTime?: number): Promise<PublicKey>;
5
- export declare function liquidateVaultInstruction(program: Program<Vault>, payerPublicKey: PublicKey, payerAssociatedTokenAccount: PublicKey, vaultPublickey: PublicKey, vaultAssociatedTokenAccount: PublicKey, poolState: PublicKey, poolEra: PublicKey, poolAssociatedTokenAccount: PublicKey, historyPublicKey: PublicKey, newEraPublicKey: PublicKey, feePool: PublicKey, feePoolAssociatedTokenAccount: PublicKey, hedgeStakingPoolAssociatedUshTokenAccount: PublicKey, collateralMint: PublicKey, vaultTypeAssociatedTokenAccount: PublicKey, oldSmallerPublicKey: PublicKey, newSmallerPublicKey: PublicKey, newLargerPublicKey: PublicKey, vaultTypeAccount: PublicKey, overrideTime?: number): Promise<TransactionInstruction>;
5
+ export declare function liquidateVaultInstruction(program: Program<Vault>, payerPublicKey: PublicKey, payerAssociatedTokenAccount: PublicKey, vaultPublickey: PublicKey, vaultAssociatedTokenAccount: PublicKey, poolState: PublicKey, poolEra: PublicKey, poolAssociatedTokenAccount: PublicKey, historyPublicKey: PublicKey, newEraPublicKey: PublicKey, feePool: PublicKey, feePoolAssociatedTokenAccount: PublicKey, hedgeStakingPoolAssociatedUshTokenAccount: PublicKey, collateralMint: PublicKey, vaultTypeAssociatedTokenAccount: PublicKey, oldSmallerPublicKey: PublicKey, newSmallerPublicKey: PublicKey, newLargerPublicKey: PublicKey, collateralType: string, overrideTime?: number): Promise<TransactionInstruction>;
@@ -12,23 +12,21 @@ export declare class VaultAccount {
12
12
  /** The public key of the vault owner. */
13
13
  pdaSalt: string;
14
14
  /** The deposited collateral of the vault (in SOL Lamports). */
15
- deposited: number;
15
+ deposited: Decimal;
16
16
  /** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
17
- denormalizedDebt: number;
17
+ denormalizedDebt: Decimal;
18
18
  /** The ordered number of when this vault was created. */
19
19
  vaultNumber: number;
20
20
  /** Debt redistribution snapshot */
21
21
  debtProductSnapshotBytes: Decimal;
22
22
  /** Collateral redistribution snapshot' */
23
23
  collateralAccumulatorSnapshotBytes: Decimal;
24
- /** The vault type eg '2-SOL-150-0' */
25
- vaultTypeName: string;
24
+ /** The vault type eg 'SOL-150' */
25
+ collateralType: string;
26
26
  /** Current State of the vault ("Open", "Closed", "Liquidated") */
27
27
  vaultStatus: string;
28
28
  /** The public key of the next vault to redeem. */
29
29
  nextVaultToRedeem: PublicKey;
30
- /** The public key of the vault type. */
31
- vaultType: PublicKey;
32
30
  constructor(vault: any, publicKey: PublicKey);
33
31
  /**
34
32
  * Check if some `PublicKey` is the owner
@@ -59,7 +57,7 @@ export declare class VaultAccount {
59
57
  addDeposit(depositAmount: number): void;
60
58
  redeem(): void;
61
59
  liquidate(): void;
62
- updateDebtAndCollateral(vaultTypeAccountData: any): void;
60
+ updateDebtAndCollateral(vaultTypeAccuntData: any): void;
63
61
  toString(highlight: PublicKey): string;
64
62
  /**
65
63
  * Creates a VaultAccount from a slice of data
package/lib/Constants.js CHANGED
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.findAssociatedTokenAddress = exports.findVaultAddress = exports.getVaultTypeOracleAccountPublicKey = exports.getVaultTypeAccountPublicKey = exports.getPoolPublicKeyForMint = exports.getHedgeMintPublicKey = exports.getVaultSystemStatePublicKey = exports.getUshMintPublicKey = exports.getLiquidationPoolUshAccountPublicKey = exports.getLiquidationPoolStatePublicKey = exports.CHAINLINK_SOL_USD_PUBLICKEY = exports.CHAINLINK_SOL_USD_ID = exports.HEDGE_PROGRAM_PUBLICKEY = exports.HEDGE_PROGRAM_ID = void 0;
13
13
  const spl_token_1 = require("@solana/spl-token");
14
14
  const web3_js_1 = require("@solana/web3.js");
15
- exports.HEDGE_PROGRAM_ID = 'zooJaircVAoQ4e7EXRDocnsbB7UPYQ6J7bKyZEMh784';
15
+ exports.HEDGE_PROGRAM_ID = 'HDG4FDos8fyrB79qMCe98gaFjNEy5kpxGNjMc5V8M6TJ';
16
16
  exports.HEDGE_PROGRAM_PUBLICKEY = new web3_js_1.PublicKey(exports.HEDGE_PROGRAM_ID);
17
17
  exports.CHAINLINK_SOL_USD_ID = 'FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf';
18
18
  exports.CHAINLINK_SOL_USD_PUBLICKEY = new web3_js_1.PublicKey(exports.CHAINLINK_SOL_USD_ID);
package/lib/idl/vault.js CHANGED
@@ -1847,7 +1847,7 @@ exports.IDL = {
1847
1847
  "kind": "struct",
1848
1848
  "fields": [
1849
1849
  {
1850
- "name": "vaultTypeName",
1850
+ "name": "collateralType",
1851
1851
  "type": "string"
1852
1852
  },
1853
1853
  {
@@ -1861,10 +1861,6 @@ exports.IDL = {
1861
1861
  {
1862
1862
  "name": "oracleSwitchboard",
1863
1863
  "type": "publicKey"
1864
- },
1865
- {
1866
- "name": "vaultType",
1867
- "type": "publicKey"
1868
1864
  }
1869
1865
  ]
1870
1866
  }
@@ -2109,7 +2105,7 @@ exports.IDL = {
2109
2105
  "kind": "struct",
2110
2106
  "fields": [
2111
2107
  {
2112
- "name": "vaultTypeName",
2108
+ "name": "collateralType",
2113
2109
  "type": "string"
2114
2110
  },
2115
2111
  {
@@ -2193,14 +2189,6 @@ exports.IDL = {
2193
2189
  {
2194
2190
  "name": "deprecated",
2195
2191
  "type": "bool"
2196
- },
2197
- {
2198
- "name": "totalFeesAccumulatedUsh",
2199
- "type": "u128"
2200
- },
2201
- {
2202
- "name": "totalFeesAccumulatedCollateral",
2203
- "type": "u128"
2204
2192
  }
2205
2193
  ]
2206
2194
  }
@@ -2227,7 +2215,7 @@ exports.IDL = {
2227
2215
  "type": "u64"
2228
2216
  },
2229
2217
  {
2230
- "name": "vaultTypeName",
2218
+ "name": "collateralType",
2231
2219
  "type": "string"
2232
2220
  },
2233
2221
  {
@@ -2275,10 +2263,6 @@ exports.IDL = {
2275
2263
  "type": {
2276
2264
  "option": "publicKey"
2277
2265
  }
2278
- },
2279
- {
2280
- "name": "vaultType",
2281
- "type": "publicKey"
2282
2266
  }
2283
2267
  ]
2284
2268
  }
@@ -2692,8 +2676,8 @@ exports.IDL = {
2692
2676
  },
2693
2677
  {
2694
2678
  "code": 6020,
2695
- "name": "NotRedeemingLowestCollateralRatioVault",
2696
- "msg": "Can only redeem lowest collateral ratio vault in system."
2679
+ "name": "RedeemingNonHighestCollateralRatioVault",
2680
+ "msg": "Can only redeem highest collateral ratio vault in system."
2697
2681
  },
2698
2682
  {
2699
2683
  "code": 6021,
@@ -2707,11 +2691,6 @@ exports.IDL = {
2707
2691
  },
2708
2692
  {
2709
2693
  "code": 6023,
2710
- "name": "InvalidSaltLength",
2711
- "msg": "Salt for new vaults must be of length 8"
2712
- },
2713
- {
2714
- "code": 6024,
2715
2694
  "name": "UpdateVaultTypeBadMaxDebtExtended",
2716
2695
  "msg": "New Max debt extended value is less than the current debt!"
2717
2696
  }
@@ -26,7 +26,6 @@ function createStakingPool(program, provider, payer, mintPublicKey, hedgeTokensT
26
26
  exports.createStakingPool = createStakingPool;
27
27
  function createStakingPoolInstruction(program, payerPublicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime) {
28
28
  return __awaiter(this, void 0, void 0, function* () {
29
- console.log("new createStakingPoolInstruction");
30
29
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
31
30
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
32
31
  const [poolPublickey, poolBump] = yield (0, Constants_1.getPoolPublicKeyForMint)(mintPublicKey);
@@ -16,15 +16,15 @@ const spl_token_1 = require("@solana/spl-token");
16
16
  const web3_js_1 = require("@solana/web3.js");
17
17
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
18
18
  const Constants_1 = require("../Constants");
19
- const token_instructions_1 = require("@project-serum/serum/lib/token-instructions");
20
19
  function depositVault(program, provider, payer, vaultPublicKey, depositAmount, overrideTime) {
21
20
  return __awaiter(this, void 0, void 0, function* () {
22
21
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
23
22
  // Prep the user to get USH back out at some point
24
23
  yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
25
24
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
26
- const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
27
- const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
25
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
26
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
27
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
28
28
  const payerTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payer.publicKey, vaultTypeAccountInfo.collateralMint);
29
29
  const vaultAssociatedCollateralAccountPublicKey = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccountInfo.collateralMint);
30
30
  const history = web3_js_1.Keypair.generate();
@@ -34,8 +34,8 @@ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, o
34
34
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
35
35
  const transaction = new web3_js_1.Transaction();
36
36
  const signers = [payer, history];
37
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, depositAmount, 0, false, false);
38
- if (vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString()) {
37
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, depositAmount, 0, false, false);
38
+ if (vaultAccount.collateralType === 'SOL') {
39
39
  transaction.add(web3_js_1.SystemProgram.createAccount({
40
40
  fromPubkey: payer.publicKey,
41
41
  lamports: depositAmount + 2.04e6,
@@ -49,8 +49,8 @@ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, o
49
49
  }));
50
50
  signers.push(wrappedSolAccount);
51
51
  }
52
- transaction.add(yield depositVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString() ? wrappedSolAccount.publicKey : payerTokenAccount, vaultPublicKey, vaultAssociatedCollateralAccountPublicKey, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, vaultTypeAccountInfo.collateralMint, ushMintPublickey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, depositAmount, overrideTime));
53
- if (vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString()) {
52
+ transaction.add(yield depositVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultAccount.collateralType === 'SOL' ? wrappedSolAccount.publicKey : payerTokenAccount, vaultPublicKey, vaultAssociatedCollateralAccountPublicKey, history.publicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, vaultTypeAccountInfo.collateralMint, ushMintPublickey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, depositAmount, overrideTime));
53
+ if (vaultAccount.collateralType === 'SOL') {
54
54
  transaction.add(serum_1.TokenInstructions.closeAccount({
55
55
  source: wrappedSolAccount.publicKey,
56
56
  destination: payer.publicKey,
@@ -18,7 +18,8 @@ const Constants_1 = require("../Constants");
18
18
  function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime) {
19
19
  return __awaiter(this, void 0, void 0, function* () {
20
20
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
21
- const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
21
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
22
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
22
23
  const collateralMint = vaultTypeAccountInfo.collateralMint;
23
24
  const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
24
25
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -29,23 +30,24 @@ function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime)
29
30
  const feePoolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, hedgeStakingPoolPublicKey, true);
30
31
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultPublicKey, true);
31
32
  const poolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, liquidationPoolStatePublicKey, true);
32
- const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultAccount.vaultType, true);
33
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultTypeAccountPublicKey, true);
33
34
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, hedgeStakingPoolPublicKey, true);
34
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, false, true);
35
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, 0, 0, false, true);
35
36
  const history = web3_js_1.Keypair.generate();
36
37
  const newEra = web3_js_1.Keypair.generate();
37
38
  const transaction = new web3_js_1.Transaction();
38
- transaction.add(yield liquidateVaultInstruction(program, payer.publicKey, payerAssociatedTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, liquidationPoolStatePublicKey, poolStateInfo.currentEra, poolAssociatedTokenAccount.address, history.publicKey, newEra.publicKey, hedgeStakingPoolPublicKey, feePoolAssociatedTokenAccount.address, hedgeStakingPoolAssociatedUshTokenAccount.address, collateralMint, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultAccount.vaultType, overrideTime));
39
+ transaction.add(yield liquidateVaultInstruction(program, payer.publicKey, payerAssociatedTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, liquidationPoolStatePublicKey, poolStateInfo.currentEra, poolAssociatedTokenAccount.address, history.publicKey, newEra.publicKey, hedgeStakingPoolPublicKey, feePoolAssociatedTokenAccount.address, hedgeStakingPoolAssociatedUshTokenAccount.address, collateralMint, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultAccount.collateralType, overrideTime));
39
40
  yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history, newEra]);
40
41
  return vaultPublicKey;
41
42
  });
42
43
  }
43
44
  exports.liquidateVault = liquidateVault;
44
- function liquidateVaultInstruction(program, payerPublicKey, payerAssociatedTokenAccount, vaultPublickey, vaultAssociatedTokenAccount, poolState, poolEra, poolAssociatedTokenAccount, historyPublicKey, newEraPublicKey, feePool, feePoolAssociatedTokenAccount, hedgeStakingPoolAssociatedUshTokenAccount, collateralMint, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultTypeAccount, overrideTime) {
45
+ function liquidateVaultInstruction(program, payerPublicKey, payerAssociatedTokenAccount, vaultPublickey, vaultAssociatedTokenAccount, poolState, poolEra, poolAssociatedTokenAccount, historyPublicKey, newEraPublicKey, feePool, feePoolAssociatedTokenAccount, hedgeStakingPoolAssociatedUshTokenAccount, collateralMint, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, collateralType, overrideTime) {
45
46
  return __awaiter(this, void 0, void 0, function* () {
46
47
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
47
48
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
48
49
  const liquidationPoolUshAccountPublickey = yield (0, Constants_1.getLiquidationPoolUshAccountPublicKey)();
50
+ const vaultTypeAccount = yield (0, Constants_1.getVaultTypeAccountPublicKey)(collateralType);
49
51
  return yield program.methods
50
52
  .liquidateVault(new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override time
51
53
  )
@@ -15,20 +15,19 @@ const spl_token_1 = require("@solana/spl-token");
15
15
  const web3_js_1 = require("@solana/web3.js");
16
16
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
17
17
  const Constants_1 = require("../Constants");
18
- const Errors_1 = require("../utils/Errors");
19
- const fs = require('fs');
20
18
  function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrideTime) {
21
19
  return __awaiter(this, void 0, void 0, function* () {
22
20
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
23
21
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
24
22
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
25
- const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
26
- const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultAccount.vaultType, true);
23
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
24
+ const vaultTypeAccount = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
25
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultTypeAccountPublicKey, true);
27
26
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultPublicKey, true);
28
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, loanAmount, false, false);
27
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, 0, loanAmount, false, false);
29
28
  const history = web3_js_1.Keypair.generate();
30
- const transaction = new web3_js_1.Transaction().add(yield loanVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, loanAmount, overrideTime));
31
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]).catch(Errors_1.parseAnchorErrors);
29
+ const transaction = new web3_js_1.Transaction().add(yield loanVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, loanAmount, overrideTime));
30
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
32
31
  return vaultPublicKey;
33
32
  });
34
33
  }
@@ -22,13 +22,14 @@ function redeemVault(program, provider, payer, vaultPublicKey, redeemAmount, tra
22
22
  // Prep the user to get USH back out at some point
23
23
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
24
24
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
25
- const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
26
- const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
25
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
26
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
27
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
27
28
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultPublicKey, true);
28
29
  const payerTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
29
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, true, false);
30
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, 0, 0, true, false);
30
31
  const history = web3_js_1.Keypair.generate();
31
- const transaction = new web3_js_1.Transaction().add(yield redeemVaultInstruction(program, payer.publicKey, payerUshAccount.address, payerTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, redeemAmount, transactionOverrideTime));
32
+ const transaction = new web3_js_1.Transaction().add(yield redeemVaultInstruction(program, payer.publicKey, payerUshAccount.address, payerTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, redeemAmount, transactionOverrideTime));
32
33
  yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
33
34
  return vaultPublicKey;
34
35
  });
@@ -32,7 +32,7 @@ function refreshOraclePriceInstruction(program, collateralType, network, overrid
32
32
  .accounts({
33
33
  oracleInfoAccount: oracleInfoAccount,
34
34
  vaultTypeAccount: vaultTypeAccount,
35
- oracleChainlink: chainlinkAccounts[network],
35
+ oracleChainlink: chainlinkAccunts[network],
36
36
  oraclePyth: pythAccounts[network],
37
37
  oracleSwitchboard: switchboardAccounts[network],
38
38
  systemProgram: web3_js_1.SystemProgram.programId,
@@ -52,7 +52,7 @@ const pythAccounts = {
52
52
  Devnet: new web3_js_1.PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
53
53
  MainnetBeta: new web3_js_1.PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'),
54
54
  };
55
- const chainlinkAccounts = {
55
+ const chainlinkAccunts = {
56
56
  Testing: web3_js_1.SystemProgram.programId,
57
57
  Devnet: new web3_js_1.PublicKey('FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'),
58
58
  MainnetBeta: web3_js_1.SystemProgram.programId, // CHAINLINK NOT ON MAINNET YET
@@ -21,12 +21,13 @@ function repayVault(program, provider, payer, vaultPublicKey, repayAmount, overr
21
21
  // Prep the user to get USH back out at some point
22
22
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
23
23
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
24
- const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
25
- const vaultTypeAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultAccount.vaultType, vaultTypeAccount.collateralMint);
24
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
25
+ const vaultTypeAccount = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
26
+ const vaultTypeAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultTypeAccountPublicKey, vaultTypeAccount.collateralMint);
26
27
  const vaultAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccount.collateralMint);
27
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, repayAmount * -1, false, false);
28
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, 0, repayAmount * -1, false, false);
28
29
  const history = web3_js_1.Keypair.generate();
29
- const transaction = new web3_js_1.Transaction().add(yield repayVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, repayAmount, overrideTime));
30
+ const transaction = new web3_js_1.Transaction().add(yield repayVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount, history.publicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, repayAmount, overrideTime));
30
31
  yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
31
32
  return vaultPublicKey;
32
33
  });
@@ -24,14 +24,15 @@ function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount,
24
24
  const history = web3_js_1.Keypair.generate();
25
25
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
26
26
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
27
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
27
28
  const vaultAssociatedCollateralAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, serum_1.TokenInstructions.WRAPPED_SOL_MINT, vaultPublicKey, true);
28
- const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
29
- const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
29
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
30
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
30
31
  const destinationTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
31
32
  const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(yield (0, Constants_1.getHedgeMintPublicKey)());
32
33
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
33
- const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, withdrawAmount * -1, 0, false, false);
34
- const transaction = new web3_js_1.Transaction().add(yield withdrawVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, destinationTokenAccount.address, vaultPublicKey, vaultAssociatedCollateralAccount.address, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, ushMintPublickey, history.publicKey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, withdrawAmount, overrideTime));
34
+ const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, withdrawAmount * -1, 0, false, false);
35
+ const transaction = new web3_js_1.Transaction().add(yield withdrawVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, destinationTokenAccount.address, vaultPublicKey, vaultAssociatedCollateralAccount.address, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, ushMintPublickey, history.publicKey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, withdrawAmount, overrideTime));
35
36
  yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
36
37
  return vaultPublicKey;
37
38
  });
@@ -32,7 +32,11 @@ const borsh = __importStar(require("@project-serum/borsh"));
32
32
  */
33
33
  class VaultAccount {
34
34
  constructor(vault, publicKey) {
35
- var _a, _b, _c;
35
+ var _a;
36
+ /** The deposited collateral of the vault (in SOL Lamports). */
37
+ this.deposited = new decimal_js_1.default(0);
38
+ /** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
39
+ this.denormalizedDebt = new decimal_js_1.default(0);
36
40
  /** Debt redistribution snapshot */
37
41
  this.debtProductSnapshotBytes = new decimal_js_1.default(0);
38
42
  /** Collateral redistribution snapshot' */
@@ -43,20 +47,23 @@ class VaultAccount {
43
47
  this.vaultOwner = vault.vaultOwner;
44
48
  this.vaultNumber = (_a = vault.vaultNumber) === null || _a === void 0 ? void 0 : _a.toNumber();
45
49
  this.pdaSalt = vault.pdaSalt;
46
- this.deposited = (_b = vault.deposited) === null || _b === void 0 ? void 0 : _b.toNumber();
47
- this.denormalizedDebt = (_c = vault.denormalizedDebt) === null || _c === void 0 ? void 0 : _c.toNumber();
50
+ if (vault.deposited) {
51
+ this.deposited = new decimal_js_1.default(vault.deposited.toString());
52
+ }
53
+ if (vault.denormalizedDebt) {
54
+ this.denormalizedDebt = new decimal_js_1.default(vault.denormalizedDebt.toString());
55
+ }
48
56
  if (vault.debtProductSnapshotBytes) {
49
57
  this.debtProductSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.debtProductSnapshotBytes.toString());
50
58
  }
51
59
  if (vault.collateralAccumulatorSnapshotBytes) {
52
60
  this.collateralAccumulatorSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.collateralAccumulatorSnapshotBytes.toString());
53
61
  }
54
- this.vaultTypeName = vault.vaultTypeName;
62
+ this.collateralType = vault.collateralType;
55
63
  this.nextVaultToRedeem = vault.nextVaultToRedeem;
56
64
  if (vault.vaultStatus) {
57
65
  this.vaultStatus = Object.keys(vault.vaultStatus)[0];
58
66
  }
59
- this.vaultType = vault.vaultType;
60
67
  }
61
68
  /**
62
69
  * Check if some `PublicKey` is the owner
@@ -73,7 +80,7 @@ class VaultAccount {
73
80
  * @returns collateral value in SOL
74
81
  */
75
82
  inSol() {
76
- return this.deposited / web3_js_1.LAMPORTS_PER_SOL;
83
+ return this.deposited.div(web3_js_1.LAMPORTS_PER_SOL).toNumber();
77
84
  }
78
85
  /**
79
86
  * Get the debt value in USH
@@ -81,7 +88,7 @@ class VaultAccount {
81
88
  * @returns debt value in USH
82
89
  */
83
90
  inUsd() {
84
- return this.denormalizedDebt / web3_js_1.LAMPORTS_PER_SOL;
91
+ return this.denormalizedDebt.div(web3_js_1.LAMPORTS_PER_SOL).toNumber();
85
92
  }
86
93
  /**
87
94
  * Pretty print the vault publickey for easy display
@@ -95,31 +102,30 @@ class VaultAccount {
95
102
  }
96
103
  addDebt(newNormalizedDebt, vaultTypeCompoundedInterest) {
97
104
  const denormalizedNewDebt = newNormalizedDebt.div(vaultTypeCompoundedInterest);
98
- this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor().toNumber();
105
+ this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor();
99
106
  // this.denormalizedDebt = parseFloat(this.denormalizedDebt.toFixed(0))
100
107
  }
101
108
  addDeposit(depositAmount) {
102
- this.deposited += depositAmount;
109
+ this.deposited = this.deposited.add(depositAmount);
103
110
  }
104
111
  redeem() {
105
112
  // TODO - Calculate actual redeem amount and adust correctly
106
- this.denormalizedDebt = 0;
113
+ this.denormalizedDebt = new decimal_js_1.default(0);
107
114
  this.vaultStatus = 'initialized';
108
115
  }
109
116
  liquidate() {
110
117
  // TODO - Calculate actual liquidate amount and adust correctly
111
- this.denormalizedDebt = 0;
118
+ this.denormalizedDebt = new decimal_js_1.default(0);
112
119
  this.vaultStatus = 'liquidated';
113
120
  }
114
- updateDebtAndCollateral(vaultTypeAccountData) {
115
- const debtProductCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccountData.debtRedistributionProduct);
116
- const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccountData.collateralRedistributionAccumulator);
121
+ updateDebtAndCollateral(vaultTypeAccuntData) {
122
+ const debtProductCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccuntData.debtRedistributionProduct);
123
+ const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccuntData.collateralRedistributionAccumulator);
117
124
  this.denormalizedDebt = debtProductCurrent
118
125
  .div(this.debtProductSnapshotBytes)
119
- .mul(new decimal_js_1.default(this.denormalizedDebt))
120
- .toNumber();
121
- const extraCollateralDeposited = this.denormalizedDebt * collateralAccumulatorCurrent.sub(this.collateralAccumulatorSnapshotBytes).toNumber();
122
- this.deposited += extraCollateralDeposited;
126
+ .mul(new decimal_js_1.default(this.denormalizedDebt));
127
+ const extraCollateralDeposited = this.denormalizedDebt.mul(collateralAccumulatorCurrent.sub(this.collateralAccumulatorSnapshotBytes));
128
+ this.deposited = this.deposited.add(extraCollateralDeposited);
123
129
  this.collateralAccumulatorSnapshotBytes = collateralAccumulatorCurrent;
124
130
  this.debtProductSnapshotBytes = debtProductCurrent;
125
131
  }
@@ -129,14 +135,14 @@ class VaultAccount {
129
135
  arrow = ' <----!!';
130
136
  }
131
137
  let collateralRatio = 'Infinite';
132
- if (this.denormalizedDebt > 0) {
138
+ if (this.denormalizedDebt.greaterThan(0)) {
133
139
  collateralRatio = new decimal_js_1.default(this.deposited).div(new decimal_js_1.default(this.denormalizedDebt)).toString();
134
140
  }
135
141
  let nextVault = 'None';
136
142
  if (this.nextVaultToRedeem) {
137
143
  nextVault = this.nextVaultToRedeem.toString().substring(0, 6);
138
144
  }
139
- return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} ${arrow} `;
145
+ return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} NextVault: ${nextVault} ${arrow} `;
140
146
  }
141
147
  /**
142
148
  * Creates a VaultAccount from a slice of data