hedge-web3 0.1.13 → 0.1.16

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 (126) hide show
  1. package/{lib/types/src → declarations}/Constants.d.ts +8 -8
  2. package/{lib/types/src → declarations}/HedgeDecimal.d.ts +2 -3
  3. package/{lib/types/src → declarations}/StakingPools.d.ts +0 -1
  4. package/{lib/types/src → declarations}/Vaults.d.ts +0 -1
  5. package/{lib/types/src → declarations}/idl/idl.d.ts +0 -1
  6. package/declarations/idl/vault.d.ts +2283 -0
  7. package/{lib/types/src → declarations}/index.d.ts +6 -1
  8. package/declarations/instructions/claimLiquidationPoolPosition.d.ts +4 -0
  9. package/declarations/instructions/closeLiquidationPoolPosition.d.ts +4 -0
  10. package/{lib/types/src → declarations}/instructions/createStakingPool.d.ts +0 -1
  11. package/declarations/instructions/createVault.d.ts +4 -0
  12. package/declarations/instructions/depositLiquidationPool.d.ts +4 -0
  13. package/{lib/types/src → declarations}/instructions/depositStakingPool.d.ts +0 -1
  14. package/declarations/instructions/depositVault.d.ts +4 -0
  15. package/declarations/instructions/initHedgeFoundation.d.ts +4 -0
  16. package/declarations/instructions/initHedgeFoundationTokens.d.ts +4 -0
  17. package/declarations/instructions/liquidateVault.d.ts +4 -0
  18. package/{lib/types/src → declarations}/instructions/loanVault.d.ts +2 -3
  19. package/declarations/instructions/redeemVault.d.ts +4 -0
  20. package/{lib/types/src → declarations}/instructions/refreshOraclePrice.d.ts +2 -3
  21. package/{lib/types/src → declarations}/instructions/repayVault.d.ts +2 -3
  22. package/declarations/instructions/setHalted.d.ts +4 -0
  23. package/{lib/types/src → declarations}/instructions/withdrawStakingPool.d.ts +0 -1
  24. package/declarations/instructions/withdrawVault.d.ts +4 -0
  25. package/{lib/types/src → declarations}/state/LiquidationPoolEra.d.ts +1 -2
  26. package/{lib/types/src → declarations}/state/LiquidationPoolState.d.ts +0 -1
  27. package/{lib/types/src → declarations}/state/LiquidationPosition.d.ts +8 -10
  28. package/{lib/types/src → declarations}/state/StakingPool.d.ts +0 -1
  29. package/{lib/types/src → declarations}/state/StakingPoolPosition.d.ts +0 -1
  30. package/{lib/types/src → declarations}/state/VaultAccount.d.ts +0 -1
  31. package/{lib/types/src → declarations}/state/VaultHistoryEvent.d.ts +0 -1
  32. package/{lib/types/src → declarations}/utils/Errors.d.ts +0 -1
  33. package/lib/Constants.js +86 -0
  34. package/lib/HedgeDecimal.js +24 -0
  35. package/lib/StakingPools.js +15 -0
  36. package/lib/Vaults.js +20 -0
  37. package/lib/idl/idl.js +1475 -0
  38. package/lib/idl/vault.js +2285 -0
  39. package/lib/index.js +37 -2156
  40. package/lib/instructions/claimLiquidationPoolPosition.js +53 -0
  41. package/lib/instructions/closeLiquidationPoolPosition.js +60 -0
  42. package/lib/instructions/createStakingPool.js +52 -0
  43. package/lib/instructions/createVault.js +92 -0
  44. package/lib/instructions/depositLiquidationPool.js +55 -0
  45. package/lib/instructions/depositStakingPool.js +52 -0
  46. package/lib/instructions/depositVault.js +87 -0
  47. package/lib/instructions/initHedgeFoundation.js +55 -0
  48. package/lib/instructions/initHedgeFoundationTokens.js +48 -0
  49. package/lib/instructions/liquidateVault.js +80 -0
  50. package/lib/instructions/loanVault.js +61 -0
  51. package/lib/instructions/redeemVault.js +65 -0
  52. package/lib/instructions/refreshOraclePrice.js +65 -0
  53. package/lib/instructions/repayVault.js +62 -0
  54. package/lib/instructions/setHalted.js +37 -0
  55. package/lib/instructions/withdrawStakingPool.js +64 -0
  56. package/lib/instructions/withdrawVault.js +62 -0
  57. package/lib/state/LiquidationPoolEra.js +19 -0
  58. package/lib/state/LiquidationPoolState.js +12 -0
  59. package/lib/state/LiquidationPosition.js +39 -0
  60. package/lib/state/StakingPool.js +22 -0
  61. package/lib/state/StakingPoolPosition.js +28 -0
  62. package/lib/state/VaultAccount.js +52 -0
  63. package/lib/state/VaultHistoryEvent.js +45 -0
  64. package/lib/utils/Errors.js +14 -0
  65. package/package.json +14 -8
  66. package/src/Constants.ts +24 -19
  67. package/src/HedgeDecimal.ts +3 -3
  68. package/src/idl/idl.ts +13 -13
  69. package/src/idl/vault.ts +4565 -0
  70. package/src/index.ts +6 -0
  71. package/src/instructions/claimLiquidationPoolPosition.ts +76 -0
  72. package/src/instructions/closeLiquidationPoolPosition.ts +82 -0
  73. package/src/instructions/createStakingPool.ts +4 -4
  74. package/src/instructions/createVault.ts +98 -27
  75. package/src/instructions/depositLiquidationPool.ts +67 -0
  76. package/src/instructions/depositStakingPool.ts +5 -3
  77. package/src/instructions/depositVault.ts +95 -27
  78. package/src/instructions/initHedgeFoundation.ts +64 -0
  79. package/src/instructions/initHedgeFoundationTokens.ts +55 -0
  80. package/src/instructions/liquidateVault.ts +87 -35
  81. package/src/instructions/loanVault.ts +30 -20
  82. package/src/instructions/redeemVault.ts +37 -24
  83. package/src/instructions/refreshOraclePrice.ts +6 -3
  84. package/src/instructions/repayVault.ts +30 -20
  85. package/src/instructions/setHalted.ts +48 -0
  86. package/src/instructions/withdrawStakingPool.ts +6 -6
  87. package/src/instructions/withdrawVault.ts +50 -17
  88. package/src/state/LiquidationPoolEra.ts +2 -8
  89. package/src/state/LiquidationPosition.ts +38 -39
  90. package/tsconfig.json +3 -2
  91. package/.github/workflows/npm-publish.yml +0 -34
  92. package/README.md +0 -44
  93. package/jsconfig.json +0 -12
  94. package/lib/index.js.map +0 -1
  95. package/lib/types/src/Constants.d.ts.map +0 -1
  96. package/lib/types/src/HedgeDecimal.d.ts.map +0 -1
  97. package/lib/types/src/StakingPools.d.ts.map +0 -1
  98. package/lib/types/src/Vaults.d.ts.map +0 -1
  99. package/lib/types/src/idl/idl.d.ts.map +0 -1
  100. package/lib/types/src/index.d.ts.map +0 -1
  101. package/lib/types/src/instructions/createStakingPool.d.ts.map +0 -1
  102. package/lib/types/src/instructions/createVault.d.ts +0 -5
  103. package/lib/types/src/instructions/createVault.d.ts.map +0 -1
  104. package/lib/types/src/instructions/depositStakingPool.d.ts.map +0 -1
  105. package/lib/types/src/instructions/depositVault.d.ts +0 -5
  106. package/lib/types/src/instructions/depositVault.d.ts.map +0 -1
  107. package/lib/types/src/instructions/liquidateVault.d.ts +0 -5
  108. package/lib/types/src/instructions/liquidateVault.d.ts.map +0 -1
  109. package/lib/types/src/instructions/loanVault.d.ts.map +0 -1
  110. package/lib/types/src/instructions/redeemVault.d.ts +0 -5
  111. package/lib/types/src/instructions/redeemVault.d.ts.map +0 -1
  112. package/lib/types/src/instructions/refreshOraclePrice.d.ts.map +0 -1
  113. package/lib/types/src/instructions/repayVault.d.ts.map +0 -1
  114. package/lib/types/src/instructions/withdrawStakingPool.d.ts.map +0 -1
  115. package/lib/types/src/instructions/withdrawVault.d.ts +0 -5
  116. package/lib/types/src/instructions/withdrawVault.d.ts.map +0 -1
  117. package/lib/types/src/state/LiquidationPoolEra.d.ts.map +0 -1
  118. package/lib/types/src/state/LiquidationPoolState.d.ts.map +0 -1
  119. package/lib/types/src/state/LiquidationPosition.d.ts.map +0 -1
  120. package/lib/types/src/state/StakingPool.d.ts.map +0 -1
  121. package/lib/types/src/state/StakingPoolPosition.d.ts.map +0 -1
  122. package/lib/types/src/state/VaultAccount.d.ts.map +0 -1
  123. package/lib/types/src/state/VaultHistoryEvent.d.ts.map +0 -1
  124. package/lib/types/src/utils/Errors.d.ts.map +0 -1
  125. package/lib/types/tsconfig.base.tsbuildinfo +0 -1
  126. package/rollup.config.js +0 -40
@@ -0,0 +1,53 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.claimLiquidationPoolPositionInstruction = exports.claimLiquidationPoolPosition = void 0;
13
+ const spl_token_1 = require("@solana/spl-token");
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const Errors_1 = require("../utils/Errors");
16
+ const Constants_1 = require("../Constants");
17
+ function claimLiquidationPoolPosition(program, provider, poolPosition, payer, collateralType, overrideStartTime) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(collateralType);
20
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
21
+ const collateralMint = vaultTypeAccountInfo.collateralMint;
22
+ const poolStatePublicKey = yield (0, Constants_1.getLiquidationPoolStatePublicKey)();
23
+ const poolAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(poolStatePublicKey, collateralMint);
24
+ const payerAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, payer.publicKey);
25
+ const transaction = new web3_js_1.Transaction().add(yield claimLiquidationPoolPositionInstruction(program, poolStatePublicKey, poolAssociatedTokenAccount, vaultTypeAccountPublicKey, collateralMint, poolPosition, payer.publicKey, payerAssociatedTokenAccount.address, overrideStartTime));
26
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer], provider.opts).catch(Errors_1.parseAnchorErrors);
27
+ return payerAssociatedTokenAccount.address;
28
+ });
29
+ }
30
+ exports.claimLiquidationPoolPosition = claimLiquidationPoolPosition;
31
+ function claimLiquidationPoolPositionInstruction(program, poolState, poolAssociatedTokenAccount, vaultTypeAccount, collateralMint, poolPosition, payer, payerAssociatedTokenAccount, overrideStartTime) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)();
34
+ return program.instruction.claimLiquidationPoolPosition({
35
+ accounts: {
36
+ vaultSystemState: vaultSystemState,
37
+ poolState: poolState,
38
+ poolAssociatedTokenAccount: poolAssociatedTokenAccount,
39
+ vaultTypeAccount: vaultTypeAccount,
40
+ collateralMint: collateralMint,
41
+ poolPosition: poolPosition,
42
+ payer: payer,
43
+ payerAssociatedTokenAccount: payerAssociatedTokenAccount,
44
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
45
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
46
+ systemProgram: web3_js_1.SystemProgram.programId,
47
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
48
+ },
49
+ signers: []
50
+ });
51
+ });
52
+ }
53
+ exports.claimLiquidationPoolPositionInstruction = claimLiquidationPoolPositionInstruction;
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.closeLiquidationPoolPositionInstruction = exports.closeLiquidationPoolPosition = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const spl_token_1 = require("@solana/spl-token");
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const Errors_1 = require("../utils/Errors");
17
+ const Constants_1 = require("../Constants");
18
+ function closeLiquidationPoolPosition(program, provider, poolPosition, payer, overrideStartTime) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
21
+ const payerUsdhAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, usdhMintPublickey, payer.publicKey);
22
+ const poolState = yield (0, Constants_1.getLiquidationPoolStatePublicKey)();
23
+ const liquidationPositionAccount = yield program.account.liquidationPosition.fetch(poolPosition);
24
+ const poolEra = liquidationPositionAccount.era;
25
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
26
+ const poolUsdhAccount = yield (0, Constants_1.getLiquidationPoolUsdhAccountPublicKey)();
27
+ const hedgeMint = yield (0, Constants_1.getHedgeMintPublicKey)();
28
+ const payerAssociatedHedgeAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMint, payer.publicKey);
29
+ const communityAssociatedHedgeTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, hedgeMint, vaultSystemStatePublicKey, true);
30
+ const transaction = new web3_js_1.Transaction().add(yield closeLiquidationPoolPositionInstruction(program, vaultSystemStatePublicKey, poolState, poolEra, poolPosition, poolUsdhAccount, payer.publicKey, payerUsdhAccount.address, hedgeMint, payerAssociatedHedgeAccount.address, communityAssociatedHedgeTokenAccount.address, overrideStartTime));
31
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer], provider.opts).catch(Errors_1.parseAnchorErrors);
32
+ return poolPosition;
33
+ });
34
+ }
35
+ exports.closeLiquidationPoolPosition = closeLiquidationPoolPosition;
36
+ function closeLiquidationPoolPositionInstruction(program, vaultSystemState, poolState, poolEra, poolPosition, poolUsdhAccount, payerPublicKey, payerUsdhAccount, hedgeMint, payerAssociatedHedgeAccount, communityAssociatedHedgeTokenAccount, overrideStartTime) {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ return program.instruction.closeLiquidationPoolPosition(new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Date.now() / 1000), // override current time
39
+ {
40
+ accounts: {
41
+ vaultSystemState: vaultSystemState,
42
+ poolState: poolState,
43
+ poolEra: poolEra,
44
+ poolPosition: poolPosition,
45
+ poolUsdhAccount: poolUsdhAccount,
46
+ payer: payerPublicKey,
47
+ ownerUsdhAccount: payerUsdhAccount,
48
+ hedgeMint: hedgeMint,
49
+ payerAssociatedHedgeAccount: payerAssociatedHedgeAccount,
50
+ communityAssociatedHedgeTokenAccount: communityAssociatedHedgeTokenAccount,
51
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
52
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
53
+ systemProgram: web3_js_1.SystemProgram.programId,
54
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
55
+ },
56
+ signers: []
57
+ });
58
+ });
59
+ }
60
+ exports.closeLiquidationPoolPositionInstruction = closeLiquidationPoolPositionInstruction;
@@ -0,0 +1,52 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createStakingPoolInstruction = exports.createStakingPool = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const spl_token_1 = require("@solana/spl-token");
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const Errors_1 = require("../utils/Errors");
17
+ const Constants_1 = require("../Constants");
18
+ function createStakingPool(program, provider, payer, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const transaction = new web3_js_1.Transaction().add(yield createStakingPoolInstruction(program, payer.publicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime));
21
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer], provider.opts).catch(Errors_1.parseAnchorErrors);
22
+ const [poolPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(mintPublicKey);
23
+ return poolPublickey;
24
+ });
25
+ }
26
+ exports.createStakingPool = createStakingPool;
27
+ function createStakingPoolInstruction(program, payerPublicKey, mintPublicKey, hedgeTokensToBeMinted, overrideStartTime) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
30
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
31
+ const [poolPublickey, poolBump, poolSeedPhrase] = yield (0, Constants_1.getPoolPublicKeyForMint)(mintPublicKey);
32
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(poolPublickey, mintPublicKey);
33
+ const poolAssociatedUsdhTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(poolPublickey, usdhMintPublickey);
34
+ return program.instruction.createStakingPool(poolBump, poolSeedPhrase, new anchor_1.BN(hedgeTokensToBeMinted), new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Date.now() / 1000), {
35
+ accounts: {
36
+ signer: payerPublicKey,
37
+ vaultSystemState: vaultSystemStatePublicKey,
38
+ pool: poolPublickey,
39
+ stakedTokenMintInfo: mintPublicKey,
40
+ usdhMint: usdhMintPublickey,
41
+ poolAssociatedStakedTokenAccount: poolAssociatedStakedTokenAccount,
42
+ poolAssociatedUsdhTokenAccount: poolAssociatedUsdhTokenAccount,
43
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
44
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
45
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
46
+ systemProgram: web3_js_1.SystemProgram.programId
47
+ },
48
+ signers: []
49
+ });
50
+ });
51
+ }
52
+ exports.createStakingPoolInstruction = createStakingPoolInstruction;
@@ -0,0 +1,92 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.createVaultInstruction = exports.createVault = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const serum_1 = require("@project-serum/serum");
15
+ const spl_token_1 = require("@solana/spl-token");
16
+ const web3_js_1 = require("@solana/web3.js");
17
+ const Constants_1 = require("../Constants");
18
+ const uuid_1 = require("uuid");
19
+ const Errors_1 = require("../utils/Errors");
20
+ function createVault(program, provider, payer, collateralType, depositAmount, overrideTime) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
23
+ const salt = (0, uuid_1.v4)().substring(0, 8);
24
+ const newVaultPublicKey = yield (0, Constants_1.findVaultAddress)(salt);
25
+ const history = web3_js_1.Keypair.generate();
26
+ // Prep the user to get USDH back out at some point
27
+ yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, usdhMintPublickey, payer.publicKey);
28
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(collateralType);
29
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
30
+ const payerTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payer.publicKey, vaultTypeAccountInfo.collateralMint);
31
+ const vaultAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(newVaultPublicKey, vaultTypeAccountInfo.collateralMint);
32
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
33
+ const wrappedSolAccount = web3_js_1.Keypair.generate();
34
+ const transaction = new web3_js_1.Transaction();
35
+ const signers = [payer, history];
36
+ const isWrappedSol = vaultTypeAccountInfo.collateralMint.toString() === serum_1.TokenInstructions.WRAPPED_SOL_MINT.toString();
37
+ const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(yield (0, Constants_1.getHedgeMintPublicKey)());
38
+ const feePoolAssociatedUsdhTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, usdhMintPublickey);
39
+ if (isWrappedSol) {
40
+ transaction.add(web3_js_1.SystemProgram.createAccount({
41
+ fromPubkey: payer.publicKey,
42
+ lamports: depositAmount + 2.04e6,
43
+ newAccountPubkey: wrappedSolAccount.publicKey,
44
+ programId: spl_token_1.TOKEN_PROGRAM_ID,
45
+ space: 165
46
+ }), serum_1.TokenInstructions.initializeAccount({
47
+ account: wrappedSolAccount.publicKey,
48
+ mint: serum_1.TokenInstructions.WRAPPED_SOL_MINT,
49
+ owner: payer.publicKey
50
+ }));
51
+ signers.push(wrappedSolAccount);
52
+ }
53
+ transaction.add(yield createVaultInstruction(program, salt, vaultSystemStatePublicKey, payer.publicKey, isWrappedSol ? wrappedSolAccount.publicKey : payerTokenAccount, newVaultPublicKey, vaultAssociatedTokenAccount, hedgeStakingPoolPublicKey, feePoolAssociatedUsdhTokenAccount, vaultTypeAccountPublicKey, vaultTypeAccountInfo.collateralMint, history.publicKey, usdhMintPublickey, depositAmount, overrideTime));
54
+ if (isWrappedSol) {
55
+ transaction.add(serum_1.TokenInstructions.closeAccount({
56
+ source: wrappedSolAccount.publicKey,
57
+ destination: payer.publicKey,
58
+ owner: payer.publicKey
59
+ }));
60
+ }
61
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, signers, provider === null || provider === void 0 ? void 0 : provider.opts).catch(Errors_1.parseAnchorErrors);
62
+ return newVaultPublicKey;
63
+ });
64
+ }
65
+ exports.createVault = createVault;
66
+ function createVaultInstruction(program, salt, vaultSystemStatePublicKey, payerPublicKey, payerTokenAccountPublicKey, vaultPublicKey, vaultAssociatedTokenAccount, feePool, feePoolAssociatedUsdhTokenAccount, vaultTypeAccount, collateralMint, historyPublicKey, usdhMintPublickey, depositAmount, overrideTime) {
67
+ return __awaiter(this, void 0, void 0, function* () {
68
+ const ix = program.instruction.createVault(salt, new anchor_1.BN(depositAmount), new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)), // override override time
69
+ {
70
+ accounts: {
71
+ vaultSystemState: vaultSystemStatePublicKey,
72
+ vaultTypeAccount: vaultTypeAccount,
73
+ vault: vaultPublicKey,
74
+ vaultAssociatedTokenAccount: vaultAssociatedTokenAccount,
75
+ feePool: feePool,
76
+ feePoolAssociatedUsdhTokenAccount: feePoolAssociatedUsdhTokenAccount,
77
+ history: historyPublicKey,
78
+ payer: payerPublicKey,
79
+ payerTokenAccount: payerTokenAccountPublicKey,
80
+ collateralMint: collateralMint,
81
+ usdhMint: usdhMintPublickey,
82
+ systemProgram: web3_js_1.SystemProgram.programId,
83
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
84
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
85
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
86
+ },
87
+ signers: []
88
+ });
89
+ return ix;
90
+ });
91
+ }
92
+ exports.createVaultInstruction = createVaultInstruction;
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.depositLiquidationPoolInstruction = exports.depositLiquidationPool = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const spl_token_1 = require("@solana/spl-token");
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const Errors_1 = require("../utils/Errors");
17
+ const Constants_1 = require("../Constants");
18
+ function depositLiquidationPool(program, provider, payer, depositAmount, overrideStartTime) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
21
+ const payerUsdhAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, usdhMintPublickey, payer.publicKey);
22
+ const poolPosition = web3_js_1.Keypair.generate();
23
+ const transaction = new web3_js_1.Transaction().add(yield depositLiquidationPoolInstruction(program, payer.publicKey, payerUsdhAccount.address, poolPosition.publicKey, depositAmount, overrideStartTime));
24
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, poolPosition], provider.opts).catch(Errors_1.parseAnchorErrors);
25
+ return poolPosition.publicKey;
26
+ });
27
+ }
28
+ exports.depositLiquidationPool = depositLiquidationPool;
29
+ function depositLiquidationPoolInstruction(program, payerPublicKey, payerUsdhAccount, poolPositionPublicKey, depositAmount, overrideStartTime) {
30
+ return __awaiter(this, void 0, void 0, function* () {
31
+ const liquidationPoolStatePublicKey = yield (0, Constants_1.getLiquidationPoolStatePublicKey)();
32
+ const liquidationPoolState = yield program.account.liquidationPoolState.fetch(liquidationPoolStatePublicKey);
33
+ const poolUSDHAccount = yield (0, Constants_1.getLiquidationPoolUsdhAccountPublicKey)();
34
+ const usdhMint = yield (0, Constants_1.getUsdhMintPublicKey)();
35
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)();
36
+ return program.instruction.depositLiquidationPool(new anchor_1.BN(depositAmount), new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Date.now() / 1000), // override current time
37
+ {
38
+ accounts: {
39
+ vaultSystemState: vaultSystemState,
40
+ poolState: liquidationPoolStatePublicKey,
41
+ poolEra: liquidationPoolState.currentEra,
42
+ poolPosition: poolPositionPublicKey,
43
+ poolUsdhAccount: poolUSDHAccount,
44
+ usdhMint: usdhMint,
45
+ payer: payerPublicKey,
46
+ ownerUsdhAccount: payerUsdhAccount,
47
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
48
+ systemProgram: web3_js_1.SystemProgram.programId,
49
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY
50
+ },
51
+ signers: []
52
+ });
53
+ });
54
+ }
55
+ exports.depositLiquidationPoolInstruction = depositLiquidationPoolInstruction;
@@ -0,0 +1,52 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.depositStakingPoolInstruction = exports.depositStakingPool = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const spl_token_1 = require("@solana/spl-token");
15
+ const web3_js_1 = require("@solana/web3.js");
16
+ const Errors_1 = require("../utils/Errors");
17
+ const Constants_1 = require("../Constants");
18
+ function depositStakingPool(program, provider, payer, mintPublicKey, depositAmount, overrideStartTime) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const poolPosition = web3_js_1.Keypair.generate();
21
+ const transaction = new web3_js_1.Transaction().add(yield depositStakingPoolInstruction(program, payer.publicKey, poolPosition.publicKey, mintPublicKey, depositAmount, overrideStartTime));
22
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, poolPosition], provider.opts).catch(Errors_1.parseAnchorErrors);
23
+ return poolPosition.publicKey;
24
+ });
25
+ }
26
+ exports.depositStakingPool = depositStakingPool;
27
+ function depositStakingPoolInstruction(program, payerPublicKey, poolPositionPublicKey, stakedTokenMintPublicKey, depositAmount, overrideStartTime) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const [poolPublickey] = yield (0, Constants_1.getPoolPublicKeyForMint)(stakedTokenMintPublicKey);
30
+ const poolAssociatedStakedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(poolPublickey, stakedTokenMintPublicKey);
31
+ const payersArbitraryTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payerPublicKey, stakedTokenMintPublicKey);
32
+ const vaultSystemState = yield (0, Constants_1.getVaultSystemStatePublicKey)();
33
+ return program.instruction.depositStakingPool(new anchor_1.BN(depositAmount), new anchor_1.BN(overrideStartTime !== null && overrideStartTime !== void 0 ? overrideStartTime : Date.now() / 1000), // override current time
34
+ {
35
+ accounts: {
36
+ payer: payerPublicKey,
37
+ vaultSystemState: vaultSystemState,
38
+ pool: poolPublickey,
39
+ poolPosition: poolPositionPublicKey,
40
+ stakedTokenMintInfo: stakedTokenMintPublicKey,
41
+ poolAssociatedStakedTokenAccount: poolAssociatedStakedTokenAccount,
42
+ payerAssociatedStakedTokenAccount: payersArbitraryTokenAccount,
43
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
44
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
45
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
46
+ systemProgram: web3_js_1.SystemProgram.programId
47
+ },
48
+ signers: []
49
+ });
50
+ });
51
+ }
52
+ exports.depositStakingPoolInstruction = depositStakingPoolInstruction;
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.depositVaultInstruction = exports.depositVault = void 0;
13
+ const anchor_1 = require("@project-serum/anchor");
14
+ const serum_1 = require("@project-serum/serum");
15
+ const spl_token_1 = require("@solana/spl-token");
16
+ const web3_js_1 = require("@solana/web3.js");
17
+ const Constants_1 = require("../Constants");
18
+ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, overrideTime) {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
21
+ // Prep the user to get USDH back out at some point
22
+ yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, usdhMintPublickey, payer.publicKey);
23
+ const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
24
+ const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
25
+ const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
26
+ const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
27
+ const payerTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payer.publicKey, vaultTypeAccountInfo.collateralMint);
28
+ const vaultAssociatedCollateralAccountPublicKey = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccountInfo.collateralMint);
29
+ const history = web3_js_1.Keypair.generate();
30
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
31
+ const wrappedSolAccount = web3_js_1.Keypair.generate();
32
+ const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(yield (0, Constants_1.getHedgeMintPublicKey)());
33
+ const hedgeStakingPoolAssociatedUsdhTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, usdhMintPublickey);
34
+ const transaction = new web3_js_1.Transaction();
35
+ const signers = [payer, history];
36
+ if (vaultAccount.collateralType === 'SOL') {
37
+ transaction.add(web3_js_1.SystemProgram.createAccount({
38
+ fromPubkey: payer.publicKey,
39
+ lamports: depositAmount + 2.04e6,
40
+ newAccountPubkey: wrappedSolAccount.publicKey,
41
+ programId: spl_token_1.TOKEN_PROGRAM_ID,
42
+ space: 165
43
+ }), serum_1.TokenInstructions.initializeAccount({
44
+ account: wrappedSolAccount.publicKey,
45
+ mint: serum_1.TokenInstructions.WRAPPED_SOL_MINT,
46
+ owner: payer.publicKey
47
+ }));
48
+ signers.push(wrappedSolAccount);
49
+ }
50
+ transaction.add(yield depositVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultAccount.collateralType === 'SOL' ? wrappedSolAccount.publicKey : payerTokenAccount, vaultPublicKey, vaultAssociatedCollateralAccountPublicKey, history.publicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUsdhTokenAccount, vaultTypeAccountInfo.collateralMint, usdhMintPublickey, depositAmount, overrideTime));
51
+ if (vaultAccount.collateralType === 'SOL') {
52
+ transaction.add(serum_1.TokenInstructions.closeAccount({
53
+ source: wrappedSolAccount.publicKey,
54
+ destination: payer.publicKey,
55
+ owner: payer.publicKey
56
+ }));
57
+ }
58
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, signers, provider.opts);
59
+ return vaultPublicKey;
60
+ });
61
+ }
62
+ exports.depositVault = depositVault;
63
+ function depositVaultInstruction(program, vaultSystemStatePublicKey, vaultOwner, vaultOwnerTokenAccount, vaultPublicKey, vaultAssociatedTokenAccount, historyPublicKey, vaultTypeAccountPublicKey, vaultTypeAssociatedTokenAccount, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUsdhTokenAccount, collateralMint, usdhMintPublickey, depositAmount, overrideTime) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ return program.instruction.depositVault(new anchor_1.BN(depositAmount), new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)), // override override time
66
+ {
67
+ accounts: {
68
+ vaultSystemState: vaultSystemStatePublicKey,
69
+ vaultTypeAccount: vaultTypeAccountPublicKey,
70
+ vaultTypeAssociatedTokenAccount: vaultTypeAssociatedTokenAccount,
71
+ collateralTokenMint: collateralMint,
72
+ vault: vaultPublicKey,
73
+ vaultAssociatedTokenAccount: vaultAssociatedTokenAccount,
74
+ feePool: hedgeStakingPoolPublicKey,
75
+ feePoolAssociatedUsdhTokenAccount: hedgeStakingPoolAssociatedUsdhTokenAccount,
76
+ history: historyPublicKey,
77
+ vaultOwner: vaultOwner,
78
+ vaultOwnerTokenAccount: vaultOwnerTokenAccount,
79
+ usdhMint: usdhMintPublickey,
80
+ systemProgram: web3_js_1.SystemProgram.programId,
81
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID
82
+ },
83
+ signers: []
84
+ });
85
+ });
86
+ }
87
+ exports.depositVaultInstruction = depositVaultInstruction;
@@ -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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.initHedgeFoundationInstruction = exports.initHedgeFoundation = void 0;
13
+ const spl_token_1 = require("@solana/spl-token");
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const Errors_1 = require("../utils/Errors");
16
+ const Constants_1 = require("../Constants");
17
+ function initHedgeFoundation(program, provider, payer) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const poolEra = web3_js_1.Keypair.generate();
20
+ const transaction = new web3_js_1.Transaction().add(yield initHedgeFoundationInstruction(program, poolEra.publicKey, payer.publicKey));
21
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer, poolEra], provider.opts).catch(Errors_1.parseAnchorErrors);
22
+ return payer.publicKey;
23
+ });
24
+ }
25
+ exports.initHedgeFoundation = initHedgeFoundation;
26
+ function initHedgeFoundationInstruction(program, poolEraPublicKey, payerPublicKey) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
29
+ const poolStatePublickey = yield (0, Constants_1.getLiquidationPoolStatePublicKey)();
30
+ const poolUsdhTokenAccount = yield (0, Constants_1.getLiquidationPoolUsdhAccountPublicKey)();
31
+ const usdhMintPublickey = yield (0, Constants_1.getUsdhMintPublicKey)();
32
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
33
+ const founderHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payerPublicKey, hedgeMintPublickey);
34
+ const communityHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultSystemStatePublicKey, hedgeMintPublickey);
35
+ return program.instruction.initHedgeFoundation({
36
+ accounts: {
37
+ vaultSystemState: vaultSystemStatePublicKey,
38
+ poolState: poolStatePublickey,
39
+ poolEra: poolEraPublicKey,
40
+ poolUsdhAccount: poolUsdhTokenAccount,
41
+ founder: payerPublicKey,
42
+ usdhMint: usdhMintPublickey,
43
+ hedgeMint: hedgeMintPublickey,
44
+ founderAssociatedHedgeTokenAccount: founderHedgeTokenAccount,
45
+ communityAssociatedHedgeTokenAccount: communityHedgeTokenAccount,
46
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
47
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
48
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
49
+ systemProgram: web3_js_1.SystemProgram.programId
50
+ },
51
+ signers: []
52
+ });
53
+ });
54
+ }
55
+ exports.initHedgeFoundationInstruction = initHedgeFoundationInstruction;
@@ -0,0 +1,48 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.initHedgeFoundationTokensInstruction = exports.initHedgeFoundationTokens = void 0;
13
+ const spl_token_1 = require("@solana/spl-token");
14
+ const web3_js_1 = require("@solana/web3.js");
15
+ const Errors_1 = require("../utils/Errors");
16
+ const Constants_1 = require("../Constants");
17
+ function initHedgeFoundationTokens(program, provider, payer) {
18
+ return __awaiter(this, void 0, void 0, function* () {
19
+ const poolEra = web3_js_1.Keypair.generate();
20
+ const transaction = new web3_js_1.Transaction().add(yield initHedgeFoundationTokensInstruction(program, payer.publicKey));
21
+ yield (0, web3_js_1.sendAndConfirmTransaction)(provider.connection, transaction, [payer], provider.opts).catch(Errors_1.parseAnchorErrors);
22
+ return payer.publicKey;
23
+ });
24
+ }
25
+ exports.initHedgeFoundationTokens = initHedgeFoundationTokens;
26
+ function initHedgeFoundationTokensInstruction(program, payerPublicKey) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
29
+ const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
30
+ const founderHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payerPublicKey, hedgeMintPublickey);
31
+ const communityHedgeTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultSystemStatePublicKey, hedgeMintPublickey);
32
+ return program.instruction.initHedgeFoundationTokens({
33
+ accounts: {
34
+ vaultSystemState: vaultSystemStatePublicKey,
35
+ founder: payerPublicKey,
36
+ hedgeMint: hedgeMintPublickey,
37
+ founderAssociatedHedgeTokenAccount: founderHedgeTokenAccount,
38
+ communityAssociatedHedgeTokenAccount: communityHedgeTokenAccount,
39
+ rent: web3_js_1.SYSVAR_RENT_PUBKEY,
40
+ tokenProgram: spl_token_1.TOKEN_PROGRAM_ID,
41
+ associatedTokenProgram: spl_token_1.ASSOCIATED_TOKEN_PROGRAM_ID,
42
+ systemProgram: web3_js_1.SystemProgram.programId
43
+ },
44
+ signers: []
45
+ });
46
+ });
47
+ }
48
+ exports.initHedgeFoundationTokensInstruction = initHedgeFoundationTokensInstruction;