hedge-web3 0.2.20 → 0.2.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/declarations/Constants.d.ts +15 -0
  2. package/declarations/idl/pyth.d.ts +44 -24
  3. package/declarations/idl/switchboard.d.ts +47 -0
  4. package/declarations/idl/vault.d.ts +857 -157
  5. package/declarations/index.d.ts +26 -20
  6. package/declarations/instructions/closeLiquidationPoolPosition.d.ts +2 -2
  7. package/declarations/instructions/createReferralAccount.d.ts +17 -0
  8. package/declarations/instructions/createUserReferralAccount.d.ts +5 -0
  9. package/declarations/instructions/depositLiquidationPool.d.ts +2 -2
  10. package/declarations/instructions/loanVault.d.ts +2 -2
  11. package/declarations/instructions/psmEditAccount.d.ts +12 -0
  12. package/declarations/instructions/psmMintUsh.d.ts +2 -2
  13. package/declarations/instructions/psmRedeemUsh.d.ts +2 -2
  14. package/declarations/instructions/referralClaimFees.d.ts +16 -0
  15. package/declarations/instructions/transferVault.d.ts +3 -17
  16. package/declarations/instructions/updateReferralAccount.d.ts +13 -0
  17. package/declarations/instructions/updateReferralState.d.ts +20 -0
  18. package/declarations/instructions/updateVaultType.d.ts +1 -0
  19. package/declarations/state/VaultAccount.d.ts +2 -1
  20. package/lib/Constants.js +36 -1
  21. package/lib/idl/pyth.js +44 -24
  22. package/lib/idl/switchboard.js +49 -0
  23. package/lib/idl/vault.js +850 -150
  24. package/lib/index.js +26 -20
  25. package/lib/instructions/closeLiquidationPoolPosition.js +16 -3
  26. package/lib/instructions/createReferralAccount.js +80 -0
  27. package/lib/instructions/createUserReferralAccount.js +61 -0
  28. package/lib/instructions/depositLiquidationPool.js +16 -5
  29. package/lib/instructions/loanVault.js +16 -3
  30. package/lib/instructions/psmEditAccount.js +60 -0
  31. package/lib/instructions/psmMintUsh.js +14 -3
  32. package/lib/instructions/psmRedeemUsh.js +14 -3
  33. package/lib/instructions/referralClaimFees.js +84 -0
  34. package/lib/instructions/transferVault.js +10 -24
  35. package/lib/instructions/updateReferralAccount.js +50 -0
  36. package/lib/instructions/updateReferralState.js +57 -0
  37. package/lib/instructions/updateVaultType.js +10 -9
  38. package/package.json +1 -1
  39. package/src/Constants.ts +42 -0
  40. package/src/idl/pyth.ts +88 -48
  41. package/src/idl/switchboard.ts +93 -0
  42. package/src/idl/vault.ts +1762 -362
  43. package/src/index.ts +28 -24
  44. package/src/instructions/closeLiquidationPoolPosition.ts +25 -1
  45. package/src/instructions/createReferralAccount.ts +127 -0
  46. package/src/instructions/createUserReferralAccount.ts +86 -0
  47. package/src/instructions/depositLiquidationPool.ts +24 -4
  48. package/src/instructions/loanVault.ts +20 -1
  49. package/src/instructions/{psmEditAccount.rs → psmEditAccount.ts} +0 -0
  50. package/src/instructions/psmMintUsh.ts +20 -1
  51. package/src/instructions/psmRedeemUsh.ts +20 -1
  52. package/src/instructions/referralClaimFees.ts +159 -0
  53. package/src/instructions/transferVault.ts +21 -58
  54. package/src/instructions/updateReferralAccount.ts +77 -0
  55. package/src/instructions/updateReferralState.ts +93 -0
  56. package/src/instructions/updateVaultType.ts +3 -0
  57. package/src/state/VaultAccount.ts +1 -1
package/lib/index.js CHANGED
@@ -10,36 +10,42 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
10
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
11
  };
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./instructions/createStakingPool"), exports);
14
- __exportStar(require("./instructions/depositStakingPool"), exports);
15
- __exportStar(require("./instructions/withdrawStakingPool"), exports);
16
- __exportStar(require("./instructions/claimStakingPoolPosition"), exports);
17
- __exportStar(require("./instructions/depositLiquidationPool"), exports);
18
- __exportStar(require("./instructions/closeLiquidationPoolPosition"), exports);
13
+ __exportStar(require("./Constants"), exports);
14
+ __exportStar(require("./HedgeDecimal"), exports);
15
+ __exportStar(require("./idl/vault"), exports);
19
16
  __exportStar(require("./instructions/claimLiquidationPoolPosition"), exports);
17
+ __exportStar(require("./instructions/claimStakingPoolPosition"), exports);
20
18
  __exportStar(require("./instructions/closeClaimedLiquidationPoolPosition"), exports);
19
+ __exportStar(require("./instructions/closeLiquidationPoolPosition"), exports);
20
+ __exportStar(require("./instructions/createReferralAccount"), exports);
21
+ __exportStar(require("./instructions/createStakingPool"), exports);
22
+ __exportStar(require("./instructions/createUserReferralAccount"), exports);
21
23
  __exportStar(require("./instructions/createVault"), exports);
22
- __exportStar(require("./instructions/psmMintUsh"), exports);
23
- __exportStar(require("./instructions/psmRedeemUsh"), exports);
24
+ __exportStar(require("./instructions/depositLiquidationPool"), exports);
25
+ __exportStar(require("./instructions/depositStakingPool"), exports);
24
26
  __exportStar(require("./instructions/depositVault"), exports);
25
- __exportStar(require("./instructions/withdrawVault"), exports);
27
+ __exportStar(require("./instructions/initHedgeFoundation"), exports);
28
+ __exportStar(require("./instructions/initHedgeFoundationTokens"), exports);
29
+ __exportStar(require("./instructions/liquidateVault"), exports);
26
30
  __exportStar(require("./instructions/loanVault"), exports);
27
- __exportStar(require("./instructions/repayVault"), exports);
31
+ __exportStar(require("./instructions/psmMintUsh"), exports);
32
+ __exportStar(require("./instructions/psmRedeemUsh"), exports);
28
33
  __exportStar(require("./instructions/redeemVault"), exports);
29
- __exportStar(require("./instructions/liquidateVault"), exports);
34
+ __exportStar(require("./instructions/referralClaimFees"), exports);
30
35
  __exportStar(require("./instructions/refreshOraclePrice"), exports);
31
- __exportStar(require("./instructions/initHedgeFoundation"), exports);
32
- __exportStar(require("./instructions/initHedgeFoundationTokens"), exports);
36
+ __exportStar(require("./instructions/repayVault"), exports);
33
37
  __exportStar(require("./instructions/setHalted"), exports);
38
+ __exportStar(require("./instructions/transferVault"), exports);
39
+ __exportStar(require("./instructions/updateReferralAccount"), exports);
40
+ __exportStar(require("./instructions/updateReferralState"), exports);
34
41
  __exportStar(require("./instructions/updateVaultType"), exports);
35
- __exportStar(require("./HedgeDecimal"), exports);
36
- __exportStar(require("./Constants"), exports);
37
- __exportStar(require("./state/VaultAccount"), exports);
38
- __exportStar(require("./state/VaultHistoryEvent"), exports);
39
- __exportStar(require("./state/StakingPool"), exports);
40
- __exportStar(require("./state/StakingPoolPosition"), exports);
42
+ __exportStar(require("./instructions/withdrawStakingPool"), exports);
43
+ __exportStar(require("./instructions/withdrawVault"), exports);
41
44
  __exportStar(require("./state/LiquidationPoolEra"), exports);
42
45
  __exportStar(require("./state/LiquidationPoolState"), exports);
43
46
  __exportStar(require("./state/LiquidationPosition"), exports);
47
+ __exportStar(require("./state/StakingPool"), exports);
48
+ __exportStar(require("./state/StakingPoolPosition"), exports);
49
+ __exportStar(require("./state/VaultAccount"), exports);
50
+ __exportStar(require("./state/VaultHistoryEvent"), exports);
44
51
  __exportStar(require("./utils/getLinkedListAccounts"), exports);
45
- __exportStar(require("./idl/vault"), exports);
@@ -19,23 +19,33 @@ const web3_js_1 = require("@solana/web3.js");
19
19
  const Errors_1 = require("../utils/Errors");
20
20
  const Constants_1 = require("../Constants");
21
21
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
- function closeLiquidationPoolPosition(program, provider, poolPosition, payer, overrideStartTime) {
22
+ function closeLiquidationPoolPosition(program, provider, poolPosition, payer, overrideStartTime, referrer) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
25
25
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
26
26
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
27
+ const referralStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
27
28
  const liquidationPositionAccount = yield program.account.liquidationPosition.fetch(poolPosition);
28
29
  const poolEra = liquidationPositionAccount.era;
29
30
  const hedgeMint = yield (0, Constants_1.getHedgeMintPublicKey)();
30
31
  const payerAssociatedHedgeAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMint, payer.publicKey);
31
32
  const communityAssociatedHedgeTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMint, vaultSystemStatePublicKey, true);
32
- const transaction = new web3_js_1.Transaction().add(yield closeLiquidationPoolPositionInstruction(program, poolEra, poolPosition, payer.publicKey, payerUshAccount.address, payerAssociatedHedgeAccount.address, communityAssociatedHedgeTokenAccount.address, overrideStartTime));
33
+ let referralAccountPublicKey = null;
34
+ if (typeof referrer === 'undefined') {
35
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
36
+ }
37
+ else {
38
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
39
+ }
40
+ // Derive the user referral account public key
41
+ const userReferralAccountPublicKey = yield (0, Constants_1.getUserReferralAccountPublicKey)(payer.publicKey);
42
+ const transaction = new web3_js_1.Transaction().add(yield closeLiquidationPoolPositionInstruction(program, poolEra, poolPosition, payer.publicKey, payerUshAccount.address, payerAssociatedHedgeAccount.address, communityAssociatedHedgeTokenAccount.address, userReferralAccountPublicKey, referralAccountPublicKey, referralStatePublicKey, overrideStartTime));
33
43
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
34
44
  return poolPosition;
35
45
  });
36
46
  }
37
47
  exports.closeLiquidationPoolPosition = closeLiquidationPoolPosition;
38
- function closeLiquidationPoolPositionInstruction(program, poolEra, poolPosition, payerPublicKey, payerUshAccount, payerAssociatedHedgeAccount, communityAssociatedHedgeTokenAccount, overrideStartTime) {
48
+ function closeLiquidationPoolPositionInstruction(program, poolEra, poolPosition, payerPublicKey, payerUshAccount, payerAssociatedHedgeAccount, communityAssociatedHedgeTokenAccount, userReferralAccountPublicKey, referralAccountPublicKey, referralStatePublicKey, overrideStartTime) {
39
49
  return __awaiter(this, void 0, void 0, function* () {
40
50
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
41
51
  const ushMint = yield (0, Constants_1.getUshMintPublicKey)();
@@ -57,6 +67,9 @@ function closeLiquidationPoolPositionInstruction(program, poolEra, poolPosition,
57
67
  ushMint: ushMint,
58
68
  payerAssociatedHedgeAccount: payerAssociatedHedgeAccount,
59
69
  communityAssociatedHedgeTokenAccount: communityAssociatedHedgeTokenAccount,
70
+ userReferralAccount: userReferralAccountPublicKey,
71
+ referralAccount: referralAccountPublicKey,
72
+ referralState: referralStatePublicKey,
60
73
  associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
61
74
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
62
75
  systemProgram: web3_js_1.SystemProgram.programId,
@@ -0,0 +1,80 @@
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.createReferralAccountInstruction = exports.createReferralAccount = 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 createReferralAccount(program, provider, payer, poolPosition, 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)();
42
+ // Find referral account
43
+ let referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
44
+ // Get the referral state PDA
45
+ const referallStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
46
+ // Get HDG mint public key
47
+ const hedgeMintPublicKey = yield (0, Constants_1.getHedgeMintPublicKey)();
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)(payer.publicKey);
52
+ transaction.add(yield createReferralAccountInstruction(program, payer.publicKey, poolPosition, 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.createReferralAccount = createReferralAccount;
58
+ function createReferralAccountInstruction(program, payerPublicKey, poolPositionPublicKey, referralAccountPublicKey, referralStatePublicKey, hedgeMintPublicKey, hdgAssociatedTokenAccountPublicKey, userReferralAccountPublicKey, overrideTime) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
61
+ return yield program.methods
62
+ .createReferralAccount(new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override times
63
+ )
64
+ .accounts({
65
+ signer: payerPublicKey,
66
+ vaultSystemState: vaultSystemStatePublicKey,
67
+ referralState: referralStatePublicKey,
68
+ referralAccount: referralAccountPublicKey,
69
+ userReferralAccount: userReferralAccountPublicKey,
70
+ poolPosition: poolPositionPublicKey,
71
+ hedgeMint: hedgeMintPublicKey,
72
+ hdgAta: hdgAssociatedTokenAccountPublicKey,
73
+ systemProgram: web3_js_1.SystemProgram.programId,
74
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
75
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
76
+ })
77
+ .instruction();
78
+ });
79
+ }
80
+ exports.createReferralAccountInstruction = createReferralAccountInstruction;
@@ -0,0 +1,61 @@
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.createUserReferralAccountInstruction = exports.createUserReferralAccount = 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 createUserReferralAccount(program, provider, payer, referrer, overrideTime) {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ // setup transaction
25
+ const transaction = new web3_js_1.Transaction();
26
+ const signers = [payer];
27
+ // Find referrer account
28
+ let referralAccountPublicKey = null;
29
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
30
+ if (typeof referrer === 'undefined') {
31
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
32
+ }
33
+ else {
34
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
35
+ }
36
+ // Derive the user referral account public key
37
+ const userReferralAccountPublicKey = yield (0, Constants_1.getUserReferralAccountPublicKey)(payer.publicKey);
38
+ transaction.add(yield createUserReferralAccountInstruction(program, payer.publicKey, referralAccountPublicKey, userReferralAccountPublicKey, overrideTime));
39
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, signers).catch(Errors_1.parseAnchorErrors);
40
+ return userReferralAccountPublicKey;
41
+ });
42
+ }
43
+ exports.createUserReferralAccount = createUserReferralAccount;
44
+ function createUserReferralAccountInstruction(program, payerPublicKey, referralAccount, userReferralAccount, overrideTime) {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
47
+ return yield program.methods
48
+ .createUserReferralAccount(new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override time
49
+ )
50
+ .accounts({
51
+ signer: payerPublicKey,
52
+ userReferralAccount: userReferralAccount,
53
+ referralAccount: referralAccount,
54
+ systemProgram: web3_js_1.SystemProgram.programId,
55
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
56
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
57
+ })
58
+ .instruction();
59
+ });
60
+ }
61
+ exports.createUserReferralAccountInstruction = createUserReferralAccountInstruction;
@@ -19,29 +19,38 @@ const web3_js_1 = require("@solana/web3.js");
19
19
  const Errors_1 = require("../utils/Errors");
20
20
  const Constants_1 = require("../Constants");
21
21
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
- function depositLiquidationPool(program, provider, payer, depositAmount, overrideStartTime) {
22
+ function depositLiquidationPool(program, provider, payer, depositAmount, overrideStartTime, referrer) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
25
25
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
26
+ let referralAccountPublicKey = null;
27
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
28
+ if (typeof referrer === 'undefined') {
29
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
30
+ }
31
+ else {
32
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
33
+ }
34
+ // Derive the user referral account public key
35
+ const userReferralAccountPublicKey = yield (0, Constants_1.getUserReferralAccountPublicKey)(payer.publicKey);
26
36
  const poolPosition = web3_js_1.Keypair.generate();
27
- const transaction = new web3_js_1.Transaction().add(yield depositLiquidationPoolInstruction(program, payer.publicKey, payerUshAccount.address, poolPosition.publicKey, new anchor_1.BN(depositAmount), overrideStartTime));
37
+ const transaction = new web3_js_1.Transaction().add(yield depositLiquidationPoolInstruction(program, payer.publicKey, vaultSystemStatePublicKey, payerUshAccount.address, poolPosition.publicKey, new anchor_1.BN(depositAmount), userReferralAccountPublicKey, referralAccountPublicKey, overrideStartTime));
28
38
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, poolPosition]).catch(Errors_1.parseAnchorErrors);
29
39
  return poolPosition.publicKey;
30
40
  });
31
41
  }
32
42
  exports.depositLiquidationPool = depositLiquidationPool;
33
- function depositLiquidationPoolInstruction(program, payerPublicKey, payerUshAccount, poolPositionPublicKey, depositAmount, overrideStartTime) {
43
+ function depositLiquidationPoolInstruction(program, payerPublicKey, vaultSystemStatePublicKey, payerUshAccount, poolPositionPublicKey, depositAmount, userReferralAccountPublicKey, referralAccountPublicKey, overrideStartTime) {
34
44
  return __awaiter(this, void 0, void 0, function* () {
35
45
  const liquidationPoolStatePublicKey = yield (0, Constants_1.getLiquidationPoolStatePublicKey)();
36
46
  const liquidationPoolState = yield program.account.liquidationPoolState.fetch(liquidationPoolStatePublicKey);
37
47
  const poolUSHAccount = yield (0, Constants_1.getLiquidationPoolUshAccountPublicKey)();
38
48
  const ushMint = yield (0, Constants_1.getUshMintPublicKey)();
39
- const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)();
40
49
  return yield program.methods
41
50
  .depositLiquidationPool(depositAmount, new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Math.floor(Date.now() / 1000)) // override current time
42
51
  )
43
52
  .accounts({
44
- vaultSystemState: vaultSystemState,
53
+ vaultSystemState: vaultSystemStatePublicKey,
45
54
  poolState: liquidationPoolStatePublicKey,
46
55
  poolUshAccount: poolUSHAccount,
47
56
  poolEra: liquidationPoolState.currentEra,
@@ -49,6 +58,8 @@ function depositLiquidationPoolInstruction(program, payerPublicKey, payerUshAcco
49
58
  ushMint: ushMint,
50
59
  payer: payerPublicKey,
51
60
  ownerUshAccount: payerUshAccount,
61
+ userReferralAccount: userReferralAccountPublicKey,
62
+ referralAccount: referralAccountPublicKey,
52
63
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
53
64
  systemProgram: web3_js_1.SystemProgram.programId,
54
65
  })
@@ -19,7 +19,7 @@ const web3_js_1 = require("@solana/web3.js");
19
19
  const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
20
20
  const Constants_1 = require("../Constants");
21
21
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
22
- function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrideTime) {
22
+ function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrideTime, referrer) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
25
25
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
@@ -28,20 +28,30 @@ function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrid
28
28
  const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultAccount.vaultType, true);
29
29
  const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultPublicKey, true);
30
30
  const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, vaultAccount.vaultType, vaultPublicKey, new anchor_1.BN(0), new anchor_1.BN(0), new anchor_1.BN(loanAmount), new anchor_1.BN(0), false, false);
31
+ let referralAccountPublicKey = null;
32
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
33
+ if (typeof referrer === 'undefined') {
34
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
35
+ }
36
+ else {
37
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
38
+ }
31
39
  const history = web3_js_1.Keypair.generate();
32
- 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), overrideTime));
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));
33
41
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
34
42
  return vaultPublicKey;
35
43
  });
36
44
  }
37
45
  exports.loanVault = loanVault;
38
- function loanVaultInstruction(program, payerPublicKey, ownerUshAccount, vaultPublickey, vaultAssociatedTokenAccount, historyPublicKey, vaultTypeAccount, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, loanAmount, overrideTime) {
46
+ function loanVaultInstruction(program, payerPublicKey, ownerUshAccount, vaultPublickey, vaultAssociatedTokenAccount, historyPublicKey, vaultTypeAccount, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, loanAmount, referralAccountPublicKey, overrideTime) {
39
47
  return __awaiter(this, void 0, void 0, function* () {
40
48
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
41
49
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
42
50
  const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
43
51
  const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(hedgeMintPublickey);
44
52
  const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
53
+ const referralStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
54
+ const userReferralAccountPublicKey = yield (0, Constants_1.getUserReferralAccountPublicKey)(payerPublicKey);
45
55
  return yield program.methods
46
56
  .loanVault(loanAmount, new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override time
47
57
  )
@@ -60,6 +70,9 @@ function loanVaultInstruction(program, payerPublicKey, ownerUshAccount, vaultPub
60
70
  oldSmallerVaultInfo: oldSmallerPublicKey,
61
71
  newSmallerVaultInfo: newSmallerPublicKey,
62
72
  newLargerVaultInfo: newLargerPublicKey,
73
+ referralState: referralStatePublicKey,
74
+ referralAccount: referralAccountPublicKey,
75
+ userReferralAccount: userReferralAccountPublicKey,
63
76
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
64
77
  systemProgram: web3_js_1.SystemProgram.programId,
65
78
  })
@@ -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.psmEditAccountInstruction = exports.psmEditAccount = exports.psmStatus = 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 sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
+ var psmStatus;
22
+ (function (psmStatus) {
23
+ psmStatus[psmStatus["PsmEnabled"] = 0] = "PsmEnabled";
24
+ psmStatus[psmStatus["PsmDisabled"] = 1] = "PsmDisabled";
25
+ psmStatus[psmStatus["MintOnly"] = 2] = "MintOnly";
26
+ psmStatus[psmStatus["RedeemOnly"] = 3] = "RedeemOnly";
27
+ })(psmStatus = exports.psmStatus || (exports.psmStatus = {}));
28
+ function psmEditAccount(program, provider, payer, collateralMint, mintFee, redeemFee, debtLimit, minSwap, overrideTime) {
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
31
+ const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
32
+ const payerCollateralAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, payer.publicKey);
33
+ const enc = new TextEncoder();
34
+ const [psmAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralMint.toString().slice(0, 12)), enc.encode('PSM')], Constants_1.HEDGE_PROGRAM_PUBLICKEY);
35
+ const psmAccountAta = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, psmAccount, true);
36
+ const transaction = new web3_js_1.Transaction().add(yield psmEditAccountInstruction(program, payer.publicKey, psmAccount, collateralMint, new anchor_1.BN(mintFee), new anchor_1.BN(redeemFee), new anchor_1.BN(debtLimit), new anchor_1.BN(minSwap), overrideTime));
37
+ yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
38
+ return payer.publicKey;
39
+ });
40
+ }
41
+ exports.psmEditAccount = psmEditAccount;
42
+ function psmEditAccountInstruction(program, payerPublicKey, psmAccount, collateralMint, mintFee, redeemFee, debtLimit, minSwap, overrideTime) {
43
+ return __awaiter(this, void 0, void 0, function* () {
44
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
45
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
46
+ const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(hedgeMintPublickey);
47
+ return yield program.methods
48
+ .psmEditAccount(mintFee, redeemFee, debtLimit, minSwap, new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override time
49
+ )
50
+ .accounts({
51
+ payer: payerPublicKey,
52
+ vaultSystemState: vaultSystemStatePublicKey,
53
+ psmAccount: psmAccount,
54
+ collateralMint: collateralMint,
55
+ systemProgram: web3_js_1.SystemProgram.programId,
56
+ })
57
+ .instruction();
58
+ });
59
+ }
60
+ exports.psmEditAccountInstruction = psmEditAccountInstruction;
@@ -18,7 +18,7 @@ const spl_token_1 = require("@solana/spl-token");
18
18
  const web3_js_1 = require("@solana/web3.js");
19
19
  const Constants_1 = require("../Constants");
20
20
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
- function psmMintUsh(program, provider, payer, collateralMint, collateralAmount, overrideTime) {
21
+ function psmMintUsh(program, provider, payer, collateralMint, collateralAmount, overrideTime, referrer) {
22
22
  return __awaiter(this, void 0, void 0, function* () {
23
23
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
24
24
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
@@ -26,13 +26,22 @@ function psmMintUsh(program, provider, payer, collateralMint, collateralAmount,
26
26
  const enc = new TextEncoder();
27
27
  const [psmAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralMint.toString().slice(0, 12)), enc.encode('PSM')], Constants_1.HEDGE_PROGRAM_PUBLICKEY);
28
28
  const psmAccountAta = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, psmAccount, true);
29
- const transaction = new web3_js_1.Transaction().add(yield psmMintUshInstruction(program, payer.publicKey, psmAccount, collateralMint, new anchor_1.BN(collateralAmount), overrideTime));
29
+ let referralAccountPublicKey;
30
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
31
+ if (!referrer) {
32
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
33
+ }
34
+ else {
35
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
36
+ }
37
+ const referralStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
38
+ const transaction = new web3_js_1.Transaction().add(yield psmMintUshInstruction(program, payer.publicKey, psmAccount, collateralMint, new anchor_1.BN(collateralAmount), referralStatePublicKey, referralAccountPublicKey, overrideTime));
30
39
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
31
40
  return payer.publicKey;
32
41
  });
33
42
  }
34
43
  exports.psmMintUsh = psmMintUsh;
35
- function psmMintUshInstruction(program, payerPublicKey, psmAccount, collateralMint, collateralAmount, overrideTime) {
44
+ function psmMintUshInstruction(program, payerPublicKey, psmAccount, collateralMint, collateralAmount, referralStatePublicKey, referralAccountPublicKey, overrideTime) {
36
45
  return __awaiter(this, void 0, void 0, function* () {
37
46
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
38
47
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -56,6 +65,8 @@ function psmMintUshInstruction(program, payerPublicKey, psmAccount, collateralMi
56
65
  ownerCollateralAccount: ownerCollateralAccount,
57
66
  collateralMint: collateralMint,
58
67
  ushMint: ushMintPublickey,
68
+ referralState: referralStatePublicKey,
69
+ referralAccount: referralAccountPublicKey,
59
70
  systemProgram: web3_js_1.SystemProgram.programId,
60
71
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
61
72
  })
@@ -18,7 +18,7 @@ const spl_token_1 = require("@solana/spl-token");
18
18
  const web3_js_1 = require("@solana/web3.js");
19
19
  const Constants_1 = require("../Constants");
20
20
  const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
21
- function psmRedeemUsh(program, provider, payer, collateralMint, ushAmount, overrideTime) {
21
+ function psmRedeemUsh(program, provider, payer, collateralMint, ushAmount, overrideTime, referrer) {
22
22
  return __awaiter(this, void 0, void 0, function* () {
23
23
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
24
24
  const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
@@ -26,13 +26,22 @@ function psmRedeemUsh(program, provider, payer, collateralMint, ushAmount, overr
26
26
  const enc = new TextEncoder();
27
27
  const [psmAccount] = yield web3_js_1.PublicKey.findProgramAddress([enc.encode(collateralMint.toString().slice(0, 12)), enc.encode('PSM')], Constants_1.HEDGE_PROGRAM_PUBLICKEY);
28
28
  const psmAccountAta = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, psmAccount, true);
29
- const transaction = new web3_js_1.Transaction().add(yield psmRedeemUshInstruction(program, payer.publicKey, psmAccount, collateralMint, new anchor_1.BN(ushAmount), overrideTime));
29
+ let referralAccountPublicKey;
30
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
31
+ if (!referrer) {
32
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(vaultSystemStatePublicKey);
33
+ }
34
+ else {
35
+ referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
36
+ }
37
+ const referralStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
38
+ const transaction = new web3_js_1.Transaction().add(yield psmRedeemUshInstruction(program, payer.publicKey, psmAccount, collateralMint, new anchor_1.BN(ushAmount), referralStatePublicKey, referralAccountPublicKey, overrideTime));
30
39
  yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
31
40
  return payer.publicKey;
32
41
  });
33
42
  }
34
43
  exports.psmRedeemUsh = psmRedeemUsh;
35
- function psmRedeemUshInstruction(program, payerPublicKey, psmAccount, collateralMint, ushAmount, overrideTime) {
44
+ function psmRedeemUshInstruction(program, payerPublicKey, psmAccount, collateralMint, ushAmount, referralStatePublicKey, referralAccountPublicKey, overrideTime) {
36
45
  return __awaiter(this, void 0, void 0, function* () {
37
46
  const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
38
47
  const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
@@ -56,6 +65,8 @@ function psmRedeemUshInstruction(program, payerPublicKey, psmAccount, collateral
56
65
  ownerCollateralAccount: ownerCollateralAccount,
57
66
  collateralMint: collateralMint,
58
67
  ushMint: ushMintPublickey,
68
+ referralState: referralStatePublicKey,
69
+ referralAccount: referralAccountPublicKey,
59
70
  systemProgram: web3_js_1.SystemProgram.programId,
60
71
  tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
61
72
  })
@@ -0,0 +1,84 @@
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.referralClaimFeesInstruction = exports.referralClaimFees = 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 referralClaimFees(program, provider, payer, poolPosition) {
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)();
39
+ // Find referrer account
40
+ const referrer = yield payer.publicKey;
41
+ const referralAccountPublicKey = yield (0, Constants_1.getReferralAccountPublicKey)(referrer);
42
+ // Derive the user referral account public key
43
+ const referallStatePublicKey = yield (0, Constants_1.getReferralStatePublicKey)();
44
+ const hedgeMintPublicKey = yield (0, Constants_1.getHedgeMintPublicKey)();
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)();
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)(hedgeMintPublicKey);
53
+ const feePoolAssociatedUshTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublicKey, feePoolPublicKey, true);
54
+ transaction.add(yield referralClaimFeesInstruction(program, payer.publicKey, vaultSystemStatePublicKey, poolPosition, 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.referralClaimFees = referralClaimFees;
60
+ function referralClaimFeesInstruction(program, payerPublicKey, vaultSystemStatePublicKey, poolPositionPublicKey, referralAccountPublicKey, referralStatePublicKey, hedgeMintPublicKey, hdgAssociatedTokenAccountPublicKey, ushMintPublicKey, ushAssociatedTokenAccountPublicKey, communityAssociatedHedgeTokenAccountPublicKey, feePoolPublicKey, feePoolAssociatedUshTokenAccountPublicKey) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ return yield program.methods
63
+ .referralClaimFees()
64
+ .accounts({
65
+ signer: payerPublicKey,
66
+ vaultSystemState: vaultSystemStatePublicKey,
67
+ referralState: referralStatePublicKey,
68
+ referralAccount: referralAccountPublicKey,
69
+ poolPosition: poolPositionPublicKey,
70
+ hedgeMint: hedgeMintPublicKey,
71
+ signerHdgAta: hdgAssociatedTokenAccountPublicKey,
72
+ ushMint: ushMintPublicKey,
73
+ signerUshAta: ushAssociatedTokenAccountPublicKey,
74
+ communityAssociatedHedgeTokenAccount: communityAssociatedHedgeTokenAccountPublicKey,
75
+ feePool: feePoolPublicKey,
76
+ feePoolAssociatedUshTokenAccount: feePoolAssociatedUshTokenAccountPublicKey,
77
+ systemProgram: web3_js_1.SystemProgram.programId,
78
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
79
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
80
+ })
81
+ .instruction();
82
+ });
83
+ }
84
+ exports.referralClaimFeesInstruction = referralClaimFeesInstruction;