hedge-web3 0.1.44 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/declarations/Constants.d.ts +2 -1
  2. package/declarations/idl/vault.d.ts +161 -35
  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 +161 -35
  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 +322 -70
  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
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.redeemVaultInstruction = exports.redeemVault = void 0;
13
16
  const anchor_1 = require("@project-serum/anchor");
@@ -16,6 +19,7 @@ const spl_token_1 = require("@solana/spl-token");
16
19
  const web3_js_1 = require("@solana/web3.js");
17
20
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
18
21
  const Constants_1 = require("../Constants");
22
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
19
23
  function redeemVault(program, provider, payer, vaultPublicKey, redeemAmount, transactionOverrideTime) {
20
24
  return __awaiter(this, void 0, void 0, function* () {
21
25
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -29,7 +33,7 @@ function redeemVault(program, provider, payer, vaultPublicKey, redeemAmount, tra
29
33
  const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, true, false);
30
34
  const history = web3_js_1.Keypair.generate();
31
35
  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
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
36
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
33
37
  return vaultPublicKey;
34
38
  });
35
39
  }
@@ -8,15 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.Cluster = exports.refreshOraclePriceInstruction = exports.refreshOraclePrice = void 0;
13
16
  const anchor_1 = require("@project-serum/anchor");
14
17
  const web3_js_1 = require("@solana/web3.js");
18
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
15
19
  const Constants_1 = require("../Constants");
16
20
  function refreshOraclePrice(program, provider, payer, collateralType, network, overridePrice, overrideTime) {
17
21
  return __awaiter(this, void 0, void 0, function* () {
18
22
  const transaction = new web3_js_1.Transaction().add(yield refreshOraclePriceInstruction(program, collateralType, network, overridePrice, overrideTime));
19
- return yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer]);
23
+ return yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
20
24
  });
21
25
  }
22
26
  exports.refreshOraclePrice = refreshOraclePrice;
@@ -36,6 +40,7 @@ function refreshOraclePriceInstruction(program, collateralType, network, overrid
36
40
  oraclePyth: pythAccounts[network],
37
41
  oracleSwitchboard: switchboardAccounts[network],
38
42
  systemProgram: web3_js_1.SystemProgram.programId,
43
+ chainlinkProgram: Constants_1.CHAINLINK_PROGRAM_ID,
39
44
  })
40
45
  .instruction();
41
46
  });
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.repayVaultInstruction = exports.repayVault = void 0;
13
16
  const anchor_1 = require("@project-serum/anchor");
@@ -15,6 +18,7 @@ const spl_token_1 = require("@solana/spl-token");
15
18
  const web3_js_1 = require("@solana/web3.js");
16
19
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
17
20
  const Constants_1 = require("../Constants");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
18
22
  function repayVault(program, provider, payer, vaultPublicKey, repayAmount, overrideTime) {
19
23
  return __awaiter(this, void 0, void 0, function* () {
20
24
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -27,7 +31,7 @@ function repayVault(program, provider, payer, vaultPublicKey, repayAmount, overr
27
31
  const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, repayAmount * -1, false, false);
28
32
  const history = web3_js_1.Keypair.generate();
29
33
  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
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
34
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
31
35
  return vaultPublicKey;
32
36
  });
33
37
  }
@@ -8,16 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.setHaltedInstruction = exports.setHalted = void 0;
13
16
  const web3_js_1 = require("@solana/web3.js");
14
17
  const Constants_1 = require("../Constants");
15
18
  const Errors_1 = require("../utils/Errors");
19
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
16
20
  function setHalted(program, provider, payer, halted) {
17
21
  return __awaiter(this, void 0, void 0, function* () {
18
22
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
19
23
  const transaction = new web3_js_1.Transaction().add(yield setHaltedInstruction(program, vaultSystemStatePublicKey, payer.publicKey, halted));
20
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
24
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
21
25
  return vaultSystemStatePublicKey;
22
26
  });
23
27
  }
@@ -8,21 +8,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.updateVaultTypeStatusInstruction = exports.updateVaultType = void 0;
13
16
  const web3_js_1 = require("@solana/web3.js");
14
17
  const Constants_1 = require("../Constants");
18
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
15
19
  function updateVaultType(program, provider, payer, vaultTypeAccount, oracleInfoAccount, config) {
16
20
  return __awaiter(this, void 0, void 0, function* () {
17
21
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
18
22
  const transaction = new web3_js_1.Transaction().add(yield updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccount, oracleInfoAccount, config));
19
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer]);
23
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
20
24
  return vaultSystemStatePublicKey;
21
25
  });
22
26
  }
23
27
  exports.updateVaultType = updateVaultType;
24
28
  function updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, payerPublicKey, vaultTypeAccount, oracleInfoAccount, vaultTypeConfig) {
25
- var _a, _b, _c, _d, _e, _f, _g;
29
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
26
30
  return __awaiter(this, void 0, void 0, function* () {
27
31
  const config = {
28
32
  maxDebtExtended: (_a = vaultTypeConfig.maxDebtExtended) !== null && _a !== void 0 ? _a : null,
@@ -32,6 +36,9 @@ function updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, pa
32
36
  oraclePyth: (_e = vaultTypeConfig.oraclePyth) !== null && _e !== void 0 ? _e : null,
33
37
  oracleSwitchboard: (_f = vaultTypeConfig.oracleSwitchboard) !== null && _f !== void 0 ? _f : null,
34
38
  deprecated: (_g = vaultTypeConfig.deprecated) !== null && _g !== void 0 ? _g : null,
39
+ priorityPyth: (_h = vaultTypeConfig.priorityPyth) !== null && _h !== void 0 ? _h : null,
40
+ priorityChainlink: (_j = vaultTypeConfig.priorityChainlink) !== null && _j !== void 0 ? _j : null,
41
+ prioritySwitchboard: (_k = vaultTypeConfig.prioritySwitchboard) !== null && _k !== void 0 ? _k : null,
35
42
  };
36
43
  return yield program.methods
37
44
  .updateVaultType(config)
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.withdrawStakingPoolInstruction = exports.withdrawStakingPool = void 0;
13
16
  const anchor_1 = require("@project-serum/anchor");
@@ -15,11 +18,12 @@ const spl_token_1 = require("@solana/spl-token");
15
18
  const web3_js_1 = require("@solana/web3.js");
16
19
  const Errors_1 = require("../utils/Errors");
17
20
  const Constants_1 = require("../Constants");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
18
22
  function withdrawStakingPool(program, provider, payer, poolPositionPublicKey, stakedTokenMintPublicKey, overrideStartTime) {
19
23
  return __awaiter(this, void 0, void 0, function* () {
20
24
  const poolPosition = web3_js_1.Keypair.generate();
21
25
  const transaction = new web3_js_1.Transaction().add(yield withdrawStakingPoolInstruction(program, payer.publicKey, poolPositionPublicKey, stakedTokenMintPublicKey, overrideStartTime));
22
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
26
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
23
27
  return poolPosition.publicKey;
24
28
  });
25
29
  }
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
11
14
  Object.defineProperty(exports, "__esModule", { value: true });
12
15
  exports.withdrawVaultInstruction = exports.withdrawVault = void 0;
13
16
  const anchor_1 = require("@project-serum/anchor");
@@ -16,6 +19,7 @@ const serum_1 = require("@project-serum/serum");
16
19
  const web3_js_1 = require("@solana/web3.js");
17
20
  const Constants_1 = require("../Constants");
18
21
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
22
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
19
23
  function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount, overrideTime) {
20
24
  return __awaiter(this, void 0, void 0, function* () {
21
25
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -32,7 +36,7 @@ function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount,
32
36
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
33
37
  const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, withdrawAmount * -1, 0, false, false);
34
38
  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));
35
- yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, history]);
39
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
36
40
  return vaultPublicKey;
37
41
  });
38
42
  }
@@ -93,10 +93,14 @@ class VaultAccount {
93
93
  .toString()
94
94
  .substring(this.publicKey.toString().length - 6)}`;
95
95
  }
96
- addDebt(newNormalizedDebt, vaultTypeCompoundedInterest) {
97
- const denormalizedNewDebt = newNormalizedDebt.div(vaultTypeCompoundedInterest);
96
+ addDebt(additionalDebt, vaultTypeAccount) {
97
+ let loanFee = new decimal_js_1.default(0);
98
+ if (additionalDebt.isPositive()) {
99
+ loanFee = vaultTypeAccount.loanInitFee.mul(additionalDebt);
100
+ }
101
+ const totalNormalizedLoan = additionalDebt.add(loanFee);
102
+ const denormalizedNewDebt = totalNormalizedLoan.div(new decimal_js_1.default(vaultTypeAccount.cumulativeRate.toString()));
98
103
  this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor().toNumber();
99
- // this.denormalizedDebt = parseFloat(this.denormalizedDebt.toFixed(0))
100
104
  }
101
105
  addDeposit(depositAmount) {
102
106
  this.deposited += depositAmount;
@@ -112,16 +116,14 @@ class VaultAccount {
112
116
  this.vaultStatus = 'liquidated';
113
117
  }
114
118
  updateDebtAndCollateral(vaultTypeAccountData) {
115
- const debtProductCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccountData.debtRedistributionProduct);
116
- const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccountData.collateralRedistributionAccumulator);
117
- this.denormalizedDebt = debtProductCurrent
119
+ this.denormalizedDebt = vaultTypeAccountData.debtRedistributionProduct
118
120
  .div(this.debtProductSnapshotBytes)
119
121
  .mul(new decimal_js_1.default(this.denormalizedDebt))
120
122
  .toNumber();
121
- const extraCollateralDeposited = this.denormalizedDebt * collateralAccumulatorCurrent.sub(this.collateralAccumulatorSnapshotBytes).toNumber();
123
+ const extraCollateralDeposited = this.denormalizedDebt * vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber();
122
124
  this.deposited += extraCollateralDeposited;
123
- this.collateralAccumulatorSnapshotBytes = collateralAccumulatorCurrent;
124
- this.debtProductSnapshotBytes = debtProductCurrent;
125
+ this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator;
126
+ this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct;
125
127
  }
126
128
  toString(highlight) {
127
129
  let arrow = '';
@@ -15,20 +15,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.getLinkedListAccounts = void 0;
16
16
  const underscore_1 = __importDefault(require("underscore"));
17
17
  const Constants_1 = require("../Constants");
18
- const HedgeDecimal_1 = require("../HedgeDecimal");
19
18
  const VaultAccount_1 = require("../state/VaultAccount");
20
19
  const decimal_js_1 = __importDefault(require("decimal.js"));
21
20
  const bs58_1 = __importDefault(require("bs58"));
21
+ const VaultType_1 = __importDefault(require("../state/VaultType"));
22
22
  function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, depositAmount, loanAmount, redeem, liquidate, cachedVaults) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
- // console.log('Getting getLinkedListAccounts')
25
- const vaultTypeAccount = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
24
+ const vaultTypeRaw = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
25
+ const vaultType = new VaultType_1.default(vaultTypeRaw, vaultTypeAccountPublicKey);
26
+ const DEBUG = false;
26
27
  // Default for null is the vault itself, so set them all to this vault
27
28
  let oldSmallerPublicKey = vaultPublicKey;
28
29
  let newSmallerPublicKey = vaultPublicKey;
29
30
  let newLargerPublicKey = vaultPublicKey;
30
31
  const thisVaultData = yield program.account.vault.fetch(vaultPublicKey);
31
- const accountInfo = yield program.provider.connection.getAccountInfo(vaultPublicKey);
32
+ // const accountInfo = await program.provider.connection.getAccountInfo(vaultPublicKey)
32
33
  const thisVault = new VaultAccount_1.VaultAccount(thisVaultData, vaultPublicKey);
33
34
  // Load all the vaults
34
35
  let vaults;
@@ -36,27 +37,14 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
36
37
  vaults = cachedVaults;
37
38
  }
38
39
  else {
39
- // let allVaults = cachedVaults
40
- // ? cachedVaults
41
- // : (await program.account.vault
42
- // .all([
43
- // {
44
- // memcmp: { bytes: vaultTypeAccount.collateralType, offset: 8 + 32 + 8 },
45
- // },
46
- // ])
47
- // .catch((error) => {
48
- // console.log('error', error)
49
- // })) || []
50
- // // Load them into our account objects
51
- // vaults = allVaults.map((vault) => {
52
- // return new VaultAccount(vault.account, vault.publicKey)
53
- // })
54
- vaults = yield getMiniVaults(program, vaultTypeAccount.vaultTypeName);
40
+ vaults = yield getMiniVaults(program, vaultTypeAccountPublicKey);
41
+ }
42
+ if (DEBUG) {
43
+ console.log('Vault count found:', vaults.length);
44
+ console.log('First Vault', vaults[0]);
55
45
  }
56
- // console.log('Vault count found:', vaults.length)
57
- // console.log('First Vault', vaults[0])
58
46
  // Filter out the accounts that are not open
59
- // TODO filter on vault status. Or we enable people to "close out" empty vaults
47
+ // TODO filter on vault status. Or we enable people to "close out" empty vaults
60
48
  // vaults = _.filter(vaults, (vault) => {
61
49
  // return vault.vaultStatus === 'open'
62
50
  // })
@@ -77,11 +65,13 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
77
65
  if (indexBefore > 0) {
78
66
  oldSmallerPublicKey = vaults[indexBefore - 1].publicKey;
79
67
  }
80
- // Pretty print the list again
81
- // console.log('Sorted open vaults. Index Before: ', indexBefore)
82
- // console.log(vaults.map((vault) => {
83
- // return vault.toString(vaultPublicKey)
84
- // }))
68
+ if (DEBUG) {
69
+ // Pretty print the list again
70
+ console.log('Sorted open vaults. Index Before: ', indexBefore);
71
+ console.log(vaults.map((vault) => {
72
+ return vault.toString(vaultPublicKey);
73
+ }));
74
+ }
85
75
  // Pretty print all the vaults before the operation
86
76
  // console.log('Sorted open vaults BEFORE at index:', indexBefore)
87
77
  // let correctOrderBefore = true
@@ -112,9 +102,8 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
112
102
  // Now that we know it's def in the list, iterate the list and update
113
103
  // this vault with the operation we're going to apply
114
104
  const newNormalizedDebt = new decimal_js_1.default(loanAmount);
115
- const vaultTypeCompoundedInterest = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccount.cumulativeRate.toString());
116
- vaults[indexBefore].updateDebtAndCollateral(vaultTypeAccount);
117
- vaults[indexBefore].addDebt(newNormalizedDebt, vaultTypeCompoundedInterest);
105
+ vaults[indexBefore].updateDebtAndCollateral(vaultType);
106
+ vaults[indexBefore].addDebt(newNormalizedDebt, vaultType);
118
107
  vaults[indexBefore].addDeposit(depositAmount);
119
108
  if (liquidate) {
120
109
  vaults[indexBefore].liquidate();
@@ -134,15 +123,17 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
134
123
  indexAfter = index;
135
124
  }
136
125
  });
137
- // New list with vault
138
- // console.log('New list with vault now at index:', indexAfter)
139
- // console.log(
140
- // vaults.map((vault) => {
141
- // return vault.toString(vaultPublicKey)
142
- // })
143
- // )
144
- // Print where it moved from / to
145
- // console.log('Index After', indexAfter)
126
+ if (DEBUG) {
127
+ // New list with vault
128
+ console.log('New list with vault now at index:', indexAfter);
129
+ console.log(vaults.map((vault) => {
130
+ return vault.toString(vaultPublicKey);
131
+ }));
132
+ }
133
+ if (DEBUG) {
134
+ // Print where it moved from / to
135
+ console.log('Index After', indexAfter);
136
+ }
146
137
  // Save references to the new left and right
147
138
  if (indexAfter > 0) {
148
139
  newSmallerPublicKey = vaults[indexAfter - 1].publicKey;
@@ -150,10 +141,12 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
150
141
  if (indexAfter < vaults.length - 1 && indexAfter >= 0) {
151
142
  newLargerPublicKey = vaults[indexAfter + 1].publicKey;
152
143
  }
153
- // Print out the new left/right
154
- // console.log('oldSmallerPublicKey', oldSmallerPublicKey.toString())
155
- // console.log('newSmallerPublicKey', newSmallerPublicKey.toString())
156
- // console.log('newLargerPublicKey', newLargerPublicKey.toString())
144
+ if (DEBUG) {
145
+ // Print out the new left/right
146
+ console.log('oldSmallerPublicKey', oldSmallerPublicKey.toString());
147
+ console.log('newSmallerPublicKey', newSmallerPublicKey.toString());
148
+ console.log('newLargerPublicKey', newLargerPublicKey.toString());
149
+ }
157
150
  return [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaults];
158
151
  });
159
152
  }
@@ -168,7 +161,7 @@ function sortVaults(a, b) {
168
161
  }
169
162
  return aRatio - bRatio;
170
163
  }
171
- function getMiniVaults(program, vaultTypeName) {
164
+ function getMiniVaults(program, vaultTypePublicKey) {
172
165
  return __awaiter(this, void 0, void 0, function* () {
173
166
  const filters = [
174
167
  // Filter for Vault Accounts
@@ -176,13 +169,20 @@ function getMiniVaults(program, vaultTypeName) {
176
169
  // @ts-ignore
177
170
  memcmp: program.account.vault.coder.accounts.memcmp(program.account.vault._idlAccount.name),
178
171
  },
179
- // Filter for Vaults with this collateral type
172
+ // Filter for Vaults that are open
180
173
  {
181
174
  memcmp: {
182
- bytes: bs58_1.default.encode(VaultAccount_1.VaultAccount.getBufferForString(vaultTypeName)),
175
+ bytes: bs58_1.default.encode(Buffer.from([1])),
183
176
  offset: 8 + 32 + 24,
184
177
  },
185
178
  },
179
+ // Filter for Vaults with this collateral type
180
+ {
181
+ memcmp: {
182
+ bytes: vaultTypePublicKey.toString(),
183
+ offset: 8 + 32 + 24 + 1,
184
+ },
185
+ },
186
186
  ];
187
187
  const allAccounts = yield program.provider.connection.getProgramAccounts(Constants_1.HEDGE_PROGRAM_PUBLICKEY, {
188
188
  filters: filters,
@@ -193,7 +193,7 @@ function getMiniVaults(program, vaultTypeName) {
193
193
  length: 24,
194
194
  },
195
195
  });
196
- return allAccounts.map(vaultData => {
196
+ return allAccounts.map((vaultData) => {
197
197
  return VaultAccount_1.VaultAccount.FromMiniSlice(vaultData.account.data, vaultData.pubkey);
198
198
  });
199
199
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hedge-web3",
3
- "version": "0.1.44",
3
+ "version": "0.2.0",
4
4
  "description": "Hedge Javascript Web3 API",
5
5
  "main": "lib/index.js",
6
6
  "types": "declarations/index.d.ts",
package/src/Constants.ts CHANGED
@@ -4,12 +4,13 @@ import {
4
4
  } from '@solana/spl-token'
5
5
  import { PublicKey } from '@solana/web3.js'
6
6
 
7
- export const HEDGE_PROGRAM_ID = 'zooJaircVAoQ4e7EXRDocnsbB7UPYQ6J7bKyZEMh784'
7
+ export const HEDGE_PROGRAM_ID = 'HedgeiSAoDWrgfyJ9z8XVsxhcCY2D9aHq1o3kTEbG1C1'
8
8
  export const HEDGE_PROGRAM_PUBLICKEY = new PublicKey(HEDGE_PROGRAM_ID)
9
9
 
10
10
  export const CHAINLINK_SOL_USD_ID =
11
11
  'FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'
12
12
  export const CHAINLINK_SOL_USD_PUBLICKEY = new PublicKey(CHAINLINK_SOL_USD_ID)
13
+ export const CHAINLINK_PROGRAM_ID = "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny";
13
14
 
14
15
  const enc = new TextEncoder()
15
16