hedge-web3 0.2.28 → 0.2.33

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. package/declarations/Constants.d.ts +12 -0
  2. package/declarations/idl/vault.d.ts +842 -1
  3. package/declarations/index.d.ts +11 -0
  4. package/declarations/instructions/adminWithdrawCol.d.ts +5 -0
  5. package/declarations/instructions/adminWithdrawUsh.d.ts +5 -0
  6. package/declarations/instructions/compoundCreateReferralAccount.d.ts +17 -0
  7. package/declarations/instructions/compoundReferralClaimFees.d.ts +16 -0
  8. package/declarations/instructions/createCompoundStakingPool.d.ts +5 -0
  9. package/declarations/instructions/createCompoundStakingPoolPosition.d.ts +6 -0
  10. package/declarations/instructions/depositCompoundStakingPoolPosition.d.ts +6 -0
  11. package/declarations/instructions/depositRewardsToCompoundPool.d.ts +6 -0
  12. package/declarations/instructions/setCompoundPoolActive.d.ts +5 -0
  13. package/declarations/instructions/setDelegateWallet.d.ts +5 -0
  14. package/declarations/instructions/withdrawCompoundStakingPoolPosition.d.ts +6 -0
  15. package/lib/Constants.js +28 -1
  16. package/lib/idl/vault.js +842 -1
  17. package/lib/index.js +11 -0
  18. package/lib/instructions/adminWithdrawCol.js +60 -0
  19. package/lib/instructions/adminWithdrawUsh.js +57 -0
  20. package/lib/instructions/compoundCreateReferralAccount.js +83 -0
  21. package/lib/instructions/compoundReferralClaimFees.js +87 -0
  22. package/lib/instructions/createCompoundStakingPool.js +58 -0
  23. package/lib/instructions/createCompoundStakingPoolPosition.js +56 -0
  24. package/lib/instructions/depositCompoundStakingPoolPosition.js +55 -0
  25. package/lib/instructions/depositRewardsToCompoundPool.js +64 -0
  26. package/lib/instructions/liquidateVault.js +7 -1
  27. package/lib/instructions/loanVault.js +7 -1
  28. package/lib/instructions/setCompoundPoolActive.js +43 -0
  29. package/lib/instructions/setDelegateWallet.js +43 -0
  30. package/lib/instructions/withdrawCompoundStakingPoolPosition.js +64 -0
  31. package/package.json +5 -2
  32. package/src/Constants.ts +30 -0
  33. package/src/idl/vault.ts +3753 -2071
  34. package/src/index.ts +11 -2
  35. package/src/instructions/adminWithdrawCol.ts +87 -0
  36. package/src/instructions/adminWithdrawUsh.ts +78 -0
  37. package/src/instructions/compoundCreateReferralAccount.ts +119 -0
  38. package/src/instructions/compoundReferralClaimFees.ts +151 -0
  39. package/src/instructions/createCompoundStakingPool.ts +63 -0
  40. package/src/instructions/createCompoundStakingPoolPosition.ts +85 -0
  41. package/src/instructions/createReferralAccount.ts +6 -9
  42. package/src/instructions/createStakingPool.ts +2 -9
  43. package/src/instructions/depositCompoundStakingPoolPosition.ts +78 -0
  44. package/src/instructions/depositRewardsToCompoundPool.ts +110 -0
  45. package/src/instructions/liquidateVault.ts +37 -27
  46. package/src/instructions/loanVault.ts +34 -21
  47. package/src/instructions/referralClaimFees.ts +7 -9
  48. package/src/instructions/setCompoundPoolActive.ts +51 -0
  49. package/src/instructions/setDelegateWallet.ts +51 -0
  50. package/src/instructions/withdrawCompoundStakingPoolPosition.ts +100 -0
package/lib/index.js CHANGED
@@ -20,6 +20,8 @@ __exportStar(require("./instructions/closeLiquidationPoolPosition"), exports);
20
20
  __exportStar(require("./instructions/createReferralAccount"), exports);
21
21
  __exportStar(require("./instructions/createStakingPool"), exports);
22
22
  __exportStar(require("./instructions/createUserReferralAccount"), exports);
23
+ __exportStar(require("./instructions/compoundCreateReferralAccount"), exports);
24
+ __exportStar(require("./instructions/compoundReferralClaimFees"), exports);
23
25
  __exportStar(require("./instructions/createVault"), exports);
24
26
  __exportStar(require("./instructions/depositLiquidationPool"), exports);
25
27
  __exportStar(require("./instructions/depositStakingPool"), exports);
@@ -36,6 +38,15 @@ __exportStar(require("./instructions/refreshOraclePrice"), exports);
36
38
  __exportStar(require("./instructions/repayVault"), exports);
37
39
  __exportStar(require("./instructions/setHalted"), exports);
38
40
  __exportStar(require("./instructions/transferVault"), exports);
41
+ __exportStar(require("./instructions/createCompoundStakingPool"), exports);
42
+ __exportStar(require("./instructions/createCompoundStakingPoolPosition"), exports);
43
+ __exportStar(require("./instructions/depositCompoundStakingPoolPosition"), exports);
44
+ __exportStar(require("./instructions/withdrawCompoundStakingPoolPosition"), exports);
45
+ __exportStar(require("./instructions/setDelegateWallet"), exports);
46
+ __exportStar(require("./instructions/setCompoundPoolActive"), exports);
47
+ __exportStar(require("./instructions/adminWithdrawCol"), exports);
48
+ __exportStar(require("./instructions/adminWithdrawUsh"), exports);
49
+ __exportStar(require("./instructions/depositRewardsToCompoundPool"), exports);
39
50
  __exportStar(require("./instructions/updateReferralAccount"), exports);
40
51
  __exportStar(require("./instructions/updateReferralState"), exports);
41
52
  __exportStar(require("./instructions/updateVaultType"), exports);
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.adminWithdrawCollateralInstruction = exports.adminWithdrawCollateral = void 0;
16
+ const spl_token_1 = require("@solana/spl-token");
17
+ const web3_js_1 = require("@solana/web3.js");
18
+ const Constants_1 = require("../Constants");
19
+ const Errors_1 = require("../utils/Errors");
20
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
+ function adminWithdrawCollateral(program, provider, payer, mintPublicKey, collateralType) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const [poolPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, mintPublicKey);
24
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(program.programId, collateralType);
25
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
26
+ const stakingPoolAccountObject = yield program.account.stakingPool.fetch(poolPublickey);
27
+ const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, stakingPoolAccountObject.compoundPoolDelegateWallet);
28
+ const poolAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, vaultTypeAccountInfo.collateralMint);
29
+ const transaction = new web3_js_1.Transaction().add(yield adminWithdrawCollateralInstruction(program, payer.publicKey, mintPublicKey, vaultTypeAccountPublicKey));
30
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
31
+ return poolPublickey;
32
+ });
33
+ }
34
+ exports.adminWithdrawCollateral = adminWithdrawCollateral;
35
+ function adminWithdrawCollateralInstruction(program, payerPublicKey, stakedTokenMintPublicKey, vaultTypeAccountPublicKey) {
36
+ return __awaiter(this, void 0, void 0, function* () {
37
+ const [poolPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, stakedTokenMintPublicKey);
38
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
39
+ const stakingPoolAccountObject = yield program.account.stakingPool.fetch(poolPublickey);
40
+ const poolAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, vaultTypeAccountInfo.collateralMint);
41
+ const delegateAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, stakingPoolAccountObject.compoundPoolDelegateWallet, vaultTypeAccountInfo.collateralMint);
42
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
43
+ return yield program.methods
44
+ .adminWithdrawColAta()
45
+ .accounts({
46
+ payer: payerPublicKey,
47
+ vaultSystemState: vaultSystemState,
48
+ pool: poolPublickey,
49
+ vaultTypeAccount: vaultTypeAccountPublicKey,
50
+ stakedTokenMint: stakedTokenMintPublicKey,
51
+ poolAssociatedTokenAccount: poolAssociatedTokenAccount,
52
+ delegateAssociatedColAccount: delegateAssociatedTokenAccount,
53
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
54
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
55
+ systemProgram: web3_js_1.SystemProgram.programId,
56
+ })
57
+ .instruction();
58
+ });
59
+ }
60
+ exports.adminWithdrawCollateralInstruction = adminWithdrawCollateralInstruction;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.adminWithdrawUshInstruction = exports.adminWithdrawUsh = void 0;
16
+ const spl_token_1 = require("@solana/spl-token");
17
+ const web3_js_1 = require("@solana/web3.js");
18
+ const Constants_1 = require("../Constants");
19
+ const Errors_1 = require("../utils/Errors");
20
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
+ function adminWithdrawUsh(program, provider, payer, mintPublicKey) {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ const [poolPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, mintPublicKey);
24
+ const stakingPoolAccountObject = yield program.account.stakingPool.fetch(poolPublickey);
25
+ const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)(program.programId);
26
+ const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, stakingPoolAccountObject.compoundPoolDelegateWallet);
27
+ const transaction = new web3_js_1.Transaction().add(yield adminWithdrawUshInstruction(program, payer.publicKey, mintPublicKey, poolPublickey));
28
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
29
+ return poolPublickey;
30
+ });
31
+ }
32
+ exports.adminWithdrawUsh = adminWithdrawUsh;
33
+ function adminWithdrawUshInstruction(program, payerPublicKey, stakedTokenMintPublicKey, poolPublickey) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)(program.programId);
36
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
37
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, ushMintPublickey);
38
+ const stakingPoolAccountObject = yield program.account.stakingPool.fetch(poolPublickey);
39
+ const delegateWalletAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, stakingPoolAccountObject.compoundPoolDelegateWallet, ushMintPublickey);
40
+ return yield program.methods
41
+ .adminWithdrawUshAta()
42
+ .accounts({
43
+ payer: payerPublicKey,
44
+ vaultSystemState: vaultSystemState,
45
+ pool: poolPublickey,
46
+ ushMint: ushMintPublickey,
47
+ stakedTokenMint: stakedTokenMintPublicKey,
48
+ poolAssociatedTokenAccount: poolAssociatedStakedTokenAccount,
49
+ delegateAssociatedUshAccount: delegateWalletAssociatedStakedTokenAccount,
50
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
51
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
52
+ systemProgram: web3_js_1.SystemProgram.programId,
53
+ })
54
+ .instruction();
55
+ });
56
+ }
57
+ exports.adminWithdrawUshInstruction = adminWithdrawUshInstruction;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.compoundCreateReferralAccountInstruction = exports.compoundCreateReferralAccount = void 0;
16
+ const anchor_1 = require("@project-serum/anchor");
17
+ const spl_token_1 = require("@solana/spl-token");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const Constants_1 = require("../Constants");
20
+ const Errors_1 = require("../utils/Errors");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
+ /** @type {Function} - Creates a new referral account.
23
+ * This checks the user has enough HDG in their wallet or staked and
24
+ * then allows them to create a referral account. If they meet the PSM referral threshold,
25
+ * they will be eligible for PSM cut.
26
+ * Params:
27
+ * - program: Program<Vault> : The program instance of Hedge Vault program
28
+ * - provider: Provider : Current connection
29
+ * - payer: Signer : who we are creating the referral account for
30
+ * - poolPublicKey: PublicKey : a key to a pool position. If the position is closed or does not belong to the signer it will be ignored
31
+ * - referrer: PublicKey
32
+ * - overrideTime?: number
33
+ */
34
+ function compoundCreateReferralAccount(program, provider, payer, poolPosition, stakedTokenMintPublicKey, overrideTime) {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ // setup transaction
37
+ const transaction = new web3_js_1.Transaction();
38
+ const signers = [payer];
39
+ const referrer = payer.publicKey;
40
+ // Setup public keys
41
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
42
+ // Find referral account
43
+ let referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(program.programId, referrer);
44
+ // Get the referral state PDA
45
+ const referallStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)(program.programId);
46
+ // Get HDG mint public key
47
+ const hedgeMintPublicKey = yield (0, Constants_1.getHedgeMintPublicKey)(program.programId);
48
+ // Get HDG account of signer
49
+ const payerHdgAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMintPublicKey, payer.publicKey);
50
+ // Derive the user referral account public key
51
+ const userReferralAccountPublicKey = yield (0, Constants_1.getUserReferralAccountPublicKey)(program.programId, payer.publicKey);
52
+ transaction.add(yield compoundCreateReferralAccountInstruction(program, payer.publicKey, poolPosition, stakedTokenMintPublicKey, referralAccountPublicKey, referallStatePublicKey, hedgeMintPublicKey, payerHdgAssociatedTokenAccount.address, userReferralAccountPublicKey, overrideTime));
53
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, signers).catch(Errors_1.parseAnchorErrors);
54
+ return referralAccountPublicKey;
55
+ });
56
+ }
57
+ exports.compoundCreateReferralAccount = compoundCreateReferralAccount;
58
+ function compoundCreateReferralAccountInstruction(program, payerPublicKey, poolPositionPublicKey, stakedTokenMintPublicKey, referralAccountPublicKey, referralStatePublicKey, hedgeMintPublicKey, hdgAssociatedTokenAccountPublicKey, userReferralAccountPublicKey, overrideTime) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
61
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, stakedTokenMintPublicKey);
62
+ return yield program.methods
63
+ .compoundCreateReferralAccount(new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override times
64
+ )
65
+ .accounts({
66
+ signer: payerPublicKey,
67
+ vaultSystemState: vaultSystemStatePublicKey,
68
+ referralState: referralStatePublicKey,
69
+ referralAccount: referralAccountPublicKey,
70
+ userReferralAccount: userReferralAccountPublicKey,
71
+ poolPosition: poolPositionPublicKey,
72
+ pool: poolPublickey,
73
+ stakedTokenMint: stakedTokenMintPublicKey,
74
+ hedgeMint: hedgeMintPublicKey,
75
+ hdgAta: hdgAssociatedTokenAccountPublicKey,
76
+ systemProgram: web3_js_1.SystemProgram.programId,
77
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
78
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
79
+ })
80
+ .instruction();
81
+ });
82
+ }
83
+ exports.compoundCreateReferralAccountInstruction = compoundCreateReferralAccountInstruction;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.compoundReferralClaimFeesInstruction = exports.compoundReferralClaimFees = void 0;
16
+ const spl_token_1 = require("@solana/spl-token");
17
+ const web3_js_1 = require("@solana/web3.js");
18
+ const Constants_1 = require("../Constants");
19
+ const Errors_1 = require("../utils/Errors");
20
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
+ /** @type {Function} - Allows a referrer to claims their fees.
22
+ * This checks the user has enough HDG in their wallet or staked and
23
+ * then allows them to claim earned fees. If they meet the PSM referral threshold,
24
+ * they will be eligible for PSM cut.
25
+ * Params:
26
+ * - program: Program<Vault> : The program instance of Hedge Vault program
27
+ * - provider: Provider : Current connection
28
+ * - payer: Signer : who we are creating the referral account for
29
+ * - poolPublicKey: PublicKey : a key to a pool position. If the position is closed or does not belong to the signer it will be ignored
30
+ * - referrer: PublicKey
31
+ */
32
+ function compoundReferralClaimFees(program, provider, payer, poolPosition, stakedTokenMintPublicKey) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ // setup transaction
35
+ const transaction = new web3_js_1.Transaction();
36
+ const signers = [payer];
37
+ // General variables
38
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
39
+ // Find referrer account
40
+ const referrer = yield payer.publicKey;
41
+ const referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(program.programId, referrer);
42
+ // Derive the user referral account public key
43
+ const referallStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)(program.programId);
44
+ const hedgeMintPublicKey = yield (0, Constants_1.getHedgeMintPublicKey)(program.programId);
45
+ // Get HDG account of signer
46
+ const payerHdgAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMintPublicKey, payer.publicKey);
47
+ const ushMintPublicKey = yield (0, Constants_1.getUshMintPublicKey)(program.programId);
48
+ // Get USH account of signer
49
+ const payerUshAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublicKey, payer.publicKey);
50
+ // Get community_associated_hedge_token_account
51
+ const communityAssociatedHedgeTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMintPublicKey, vaultSystemStatePublicKey, true);
52
+ const [feePoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, hedgeMintPublicKey);
53
+ const feePoolAssociatedUshTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublicKey, feePoolPublicKey, true);
54
+ transaction.add(yield compoundReferralClaimFeesInstruction(program, payer.publicKey, vaultSystemStatePublicKey, poolPosition, stakedTokenMintPublicKey, referralAccountPublicKey, referallStatePublicKey, hedgeMintPublicKey, payerHdgAssociatedTokenAccount.address, ushMintPublicKey, payerUshAssociatedTokenAccount.address, communityAssociatedHedgeTokenAccount.address, feePoolPublicKey, feePoolAssociatedUshTokenAccount.address));
55
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, signers).catch(Errors_1.parseAnchorErrors);
56
+ return referralAccountPublicKey;
57
+ });
58
+ }
59
+ exports.compoundReferralClaimFees = compoundReferralClaimFees;
60
+ function compoundReferralClaimFeesInstruction(program, payerPublicKey, vaultSystemStatePublicKey, poolPositionPublicKey, stakedTokenMintPublicKey, referralAccountPublicKey, referralStatePublicKey, hedgeMintPublicKey, hdgAssociatedTokenAccountPublicKey, ushMintPublicKey, ushAssociatedTokenAccountPublicKey, communityAssociatedHedgeTokenAccountPublicKey, feePoolPublicKey, feePoolAssociatedUshTokenAccountPublicKey) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, stakedTokenMintPublicKey);
63
+ return yield program.methods
64
+ .compoundReferralClaimFees()
65
+ .accounts({
66
+ signer: payerPublicKey,
67
+ vaultSystemState: vaultSystemStatePublicKey,
68
+ referralState: referralStatePublicKey,
69
+ referralAccount: referralAccountPublicKey,
70
+ poolPosition: poolPositionPublicKey,
71
+ hedgeMint: hedgeMintPublicKey,
72
+ signerHdgAta: hdgAssociatedTokenAccountPublicKey,
73
+ ushMint: ushMintPublicKey,
74
+ signerUshAta: ushAssociatedTokenAccountPublicKey,
75
+ communityAssociatedHedgeTokenAccount: communityAssociatedHedgeTokenAccountPublicKey,
76
+ pool: poolPublickey,
77
+ stakedTokenMint: stakedTokenMintPublicKey,
78
+ feePool: feePoolPublicKey,
79
+ feePoolAssociatedUshTokenAccount: feePoolAssociatedUshTokenAccountPublicKey,
80
+ systemProgram: web3_js_1.SystemProgram.programId,
81
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
82
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
83
+ })
84
+ .instruction();
85
+ });
86
+ }
87
+ exports.compoundReferralClaimFeesInstruction = compoundReferralClaimFeesInstruction;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createCompoundStakingPoolInstruction = exports.createCompoundStakingPool = void 0;
16
+ const anchor_1 = require("@project-serum/anchor");
17
+ const spl_token_1 = require("@solana/spl-token");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const Constants_1 = require("../Constants");
20
+ const Errors_1 = require("../utils/Errors");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
+ function createCompoundStakingPool(program, provider, payer, mintPublicKey, overrideStartTime) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const transaction = new web3_js_1.Transaction().add(yield createCompoundStakingPoolInstruction(program, payer.publicKey, mintPublicKey, overrideStartTime));
25
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
26
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
27
+ return poolPublickey;
28
+ });
29
+ }
30
+ exports.createCompoundStakingPool = createCompoundStakingPool;
31
+ function createCompoundStakingPoolInstruction(program, payerPublicKey, mintPublicKey, overrideStartTime) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
34
+ const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)(program.programId);
35
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)(program.programId);
36
+ const [poolPublickey, poolBump] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
37
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, mintPublicKey);
38
+ const poolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, ushMintPublickey);
39
+ return yield program.methods
40
+ .createCompoundStakingPool(new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Math.floor(Date.now() / 1000)))
41
+ .accounts({
42
+ signer: payerPublicKey,
43
+ vaultSystemState: vaultSystemStatePublicKey,
44
+ pool: poolPublickey,
45
+ stakedTokenMint: mintPublicKey,
46
+ ushMint: ushMintPublickey,
47
+ hedgeMint: hedgeMintPublickey,
48
+ poolAssociatedStakedTokenAccount: poolAssociatedStakedTokenAccount,
49
+ poolAssociatedUshTokenAccount: poolAssociatedUshTokenAccount,
50
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
51
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
52
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
53
+ systemProgram: web3_js_1.SystemProgram.programId,
54
+ })
55
+ .instruction();
56
+ });
57
+ }
58
+ exports.createCompoundStakingPoolInstruction = createCompoundStakingPoolInstruction;
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.createCompoundStakingPoolPositionInstruction = exports.createCompoundStakingPoolPosition = void 0;
16
+ const anchor_1 = require("@project-serum/anchor");
17
+ const spl_token_1 = require("@solana/spl-token");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const Constants_1 = require("../Constants");
20
+ const Errors_1 = require("../utils/Errors");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
+ function createCompoundStakingPoolPosition(program, provider, payer, mintPublicKey, depositAmount, overrideStartTime) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const [poolPublickey, poolBump] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
25
+ const poolPosition = yield (0, Constants_1.getCompoundPoolPositionAddress)(program.programId, poolPublickey, payer.publicKey);
26
+ const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, mintPublicKey, payer.publicKey);
27
+ const transaction = new web3_js_1.Transaction().add(yield createCompoundStakingPoolPositionInstruction(program, payer.publicKey, poolPosition, mintPublicKey, new anchor_1.BN(depositAmount), overrideStartTime));
28
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
29
+ return poolPosition;
30
+ });
31
+ }
32
+ exports.createCompoundStakingPoolPosition = createCompoundStakingPoolPosition;
33
+ function createCompoundStakingPoolPositionInstruction(program, payerPublicKey, poolPositionPublicKey, stakedTokenMintPublicKey, depositAmount, overrideStartTime) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, stakedTokenMintPublicKey);
36
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, stakedTokenMintPublicKey);
37
+ const payersArbitraryTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, payerPublicKey, stakedTokenMintPublicKey);
38
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
39
+ return yield program.methods
40
+ .createCompoundStakingPoolPosition(depositAmount, new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Math.floor(Date.now() / 1000)) // override current time
41
+ )
42
+ .accounts({
43
+ payer: payerPublicKey,
44
+ vaultSystemState: vaultSystemState,
45
+ pool: poolPublickey,
46
+ poolPosition: poolPositionPublicKey,
47
+ stakedTokenMint: stakedTokenMintPublicKey,
48
+ poolAssociatedStakedTokenAccount: poolAssociatedStakedTokenAccount,
49
+ payerAssociatedStakedTokenAccount: payersArbitraryTokenAccount,
50
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
51
+ systemProgram: web3_js_1.SystemProgram.programId,
52
+ })
53
+ .instruction();
54
+ });
55
+ }
56
+ exports.createCompoundStakingPoolPositionInstruction = createCompoundStakingPoolPositionInstruction;
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.depositCompoundStakingPoolPositionInstruction = exports.depositCompoundStakingPoolPosition = void 0;
16
+ const anchor_1 = require("@project-serum/anchor");
17
+ const spl_token_1 = require("@solana/spl-token");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const Constants_1 = require("../Constants");
20
+ const Errors_1 = require("../utils/Errors");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
+ function depositCompoundStakingPoolPosition(program, provider, payer, mintPublicKey, depositAmount, overrideStartTime) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const [poolPublickey, poolBump] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
25
+ const poolPosition = yield (0, Constants_1.getCompoundPoolPositionAddress)(program.programId, poolPublickey, payer.publicKey);
26
+ const transaction = new web3_js_1.Transaction().add(yield depositCompoundStakingPoolPositionInstruction(program, payer.publicKey, poolPosition, mintPublicKey, new anchor_1.BN(depositAmount), overrideStartTime));
27
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
28
+ return poolPosition;
29
+ });
30
+ }
31
+ exports.depositCompoundStakingPoolPosition = depositCompoundStakingPoolPosition;
32
+ function depositCompoundStakingPoolPositionInstruction(program, payerPublicKey, poolPositionPublicKey, stakedTokenMintPublicKey, depositAmount, overrideStartTime) {
33
+ return __awaiter(this, void 0, void 0, function* () {
34
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, stakedTokenMintPublicKey);
35
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, stakedTokenMintPublicKey);
36
+ const payersArbitraryTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, payerPublicKey, stakedTokenMintPublicKey);
37
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
38
+ return yield program.methods
39
+ .depositCompoundStakingPoolPosition(depositAmount, new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Math.floor(Date.now() / 1000)) // override current time
40
+ )
41
+ .accounts({
42
+ payer: payerPublicKey,
43
+ vaultSystemState: vaultSystemState,
44
+ pool: poolPublickey,
45
+ poolPosition: poolPositionPublicKey,
46
+ stakedTokenMint: stakedTokenMintPublicKey,
47
+ poolAssociatedStakedTokenAccount: poolAssociatedStakedTokenAccount,
48
+ payerAssociatedStakedTokenAccount: payersArbitraryTokenAccount,
49
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
50
+ systemProgram: web3_js_1.SystemProgram.programId,
51
+ })
52
+ .instruction();
53
+ });
54
+ }
55
+ exports.depositCompoundStakingPoolPositionInstruction = depositCompoundStakingPoolPositionInstruction;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.depositRewardsToCompoundStakingPoolInstruction = exports.depositRewardsToCompoundStakingPool = void 0;
16
+ const anchor_1 = require("@project-serum/anchor");
17
+ const spl_token_1 = require("@solana/spl-token");
18
+ const web3_js_1 = require("@solana/web3.js");
19
+ const Constants_1 = require("../Constants");
20
+ const Errors_1 = require("../utils/Errors");
21
+ const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
+ function depositRewardsToCompoundStakingPool(program, provider, payer, mintPublicKey, depositAmount, overrideStartTime) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ const history = web3_js_1.Keypair.generate();
25
+ const [poolPublickey] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
26
+ const [poolStakingPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, mintPublicKey);
27
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)(program.programId);
28
+ const stakingPoolAccountObject = yield program.account.stakingPool.fetch(poolStakingPublickey);
29
+ const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMintPublickey, stakingPoolAccountObject.compoundPoolDelegateWallet);
30
+ const transaction = new web3_js_1.Transaction().add(yield depositRewardsToCompoundStakingPoolInstruction(program, payer.publicKey, mintPublicKey, history.publicKey, new anchor_1.BN(depositAmount), overrideStartTime));
31
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]).catch(Errors_1.parseAnchorErrors);
32
+ return poolPublickey;
33
+ });
34
+ }
35
+ exports.depositRewardsToCompoundStakingPool = depositRewardsToCompoundStakingPool;
36
+ function depositRewardsToCompoundStakingPoolInstruction(program, payerPublicKey, mintPublicKey, historyPublicKey, amount, overrideStartTime) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)(program.programId);
39
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)(program.programId);
40
+ const [poolPublickey, poolBump] = yield (0, Constants_1.getCompoundPoolPublicKeyForMint)(program.programId, mintPublicKey);
41
+ const [poolStakingPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, mintPublicKey);
42
+ const poolAssociatedHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, poolPublickey, hedgeMintPublickey);
43
+ const payerAssociatedHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(program.programId, payerPublicKey, hedgeMintPublickey);
44
+ return yield program.methods
45
+ .depositRewardsToCompoundPool(amount, new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Math.floor(Date.now() / 1000)) // override current time
46
+ )
47
+ .accounts({
48
+ payer: payerPublicKey,
49
+ vaultSystemState: vaultSystemStatePublicKey,
50
+ history: historyPublicKey,
51
+ compoundPool: poolPublickey,
52
+ pool: poolStakingPublickey,
53
+ stakedTokenMint: mintPublicKey,
54
+ hedgeMint: hedgeMintPublickey,
55
+ poolAssociatedHedgeAccount: poolAssociatedHedgeTokenAccount,
56
+ payerAssociatedHedgeAccount: payerAssociatedHedgeTokenAccount,
57
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
58
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
59
+ systemProgram: web3_js_1.SystemProgram.programId,
60
+ })
61
+ .instruction();
62
+ });
63
+ }
64
+ exports.depositRewardsToCompoundStakingPoolInstruction = depositRewardsToCompoundStakingPoolInstruction;
@@ -29,6 +29,10 @@ function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime)
29
29
  const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(program.programId, hedgeMintPublickey);
30
30
  const liquidationPoolStatePublicKey = yield (0, Constants_1.getLiquidationPoolStatePublicKey)(program.programId);
31
31
  const poolStateInfo = yield program.account.liquidationPoolState.fetch(liquidationPoolStatePublicKey);
32
+ const additionalComputationBudget = web3_js_1.ComputeBudgetProgram.requestUnits({
33
+ units: 300000,
34
+ additionalFee: 0,
35
+ });
32
36
  const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, payer.publicKey, true);
33
37
  const feePoolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, hedgeStakingPoolPublicKey, true);
34
38
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultPublicKey, true);
@@ -39,7 +43,9 @@ function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime)
39
43
  const history = web3_js_1.Keypair.generate();
40
44
  const newEra = web3_js_1.Keypair.generate();
41
45
  const transaction = new web3_js_1.Transaction();
42
- 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));
46
+ transaction
47
+ .add(additionalComputationBudget)
48
+ .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));
43
49
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history, newEra]);
44
50
  return vaultPublicKey;
45
51
  });
@@ -21,6 +21,10 @@ const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
21
21
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
22
  function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrideTime, referrer) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
+ const additionalComputationBudget = web3_js_1.ComputeBudgetProgram.requestUnits({
25
+ units: 300000,
26
+ additionalFee: 0,
27
+ });
24
28
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)(program.programId);
25
29
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
26
30
  const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
@@ -37,7 +41,9 @@ function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrid
37
41
  referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(program.programId, referrer);
38
42
  }
39
43
  const history = web3_js_1.Keypair.generate();
40
- 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, new anchor_1.BN(loanAmount), referralAccountPublicKey, overrideTime));
44
+ const transaction = new web3_js_1.Transaction()
45
+ .add(additionalComputationBudget)
46
+ .add(yield loanVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, new anchor_1.BN(loanAmount), referralAccountPublicKey, overrideTime));
41
47
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
42
48
  return vaultPublicKey;
43
49
  });