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.
- package/{lib/types/src → declarations}/Constants.d.ts +8 -8
- package/{lib/types/src → declarations}/HedgeDecimal.d.ts +2 -3
- package/{lib/types/src → declarations}/StakingPools.d.ts +0 -1
- package/{lib/types/src → declarations}/Vaults.d.ts +0 -1
- package/{lib/types/src → declarations}/idl/idl.d.ts +0 -1
- package/declarations/idl/vault.d.ts +2283 -0
- package/{lib/types/src → declarations}/index.d.ts +6 -1
- package/declarations/instructions/claimLiquidationPoolPosition.d.ts +4 -0
- package/declarations/instructions/closeLiquidationPoolPosition.d.ts +4 -0
- package/{lib/types/src → declarations}/instructions/createStakingPool.d.ts +0 -1
- package/declarations/instructions/createVault.d.ts +4 -0
- package/declarations/instructions/depositLiquidationPool.d.ts +4 -0
- package/{lib/types/src → declarations}/instructions/depositStakingPool.d.ts +0 -1
- package/declarations/instructions/depositVault.d.ts +4 -0
- package/declarations/instructions/initHedgeFoundation.d.ts +4 -0
- package/declarations/instructions/initHedgeFoundationTokens.d.ts +4 -0
- package/declarations/instructions/liquidateVault.d.ts +4 -0
- package/{lib/types/src → declarations}/instructions/loanVault.d.ts +2 -3
- package/declarations/instructions/redeemVault.d.ts +4 -0
- package/{lib/types/src → declarations}/instructions/refreshOraclePrice.d.ts +2 -3
- package/{lib/types/src → declarations}/instructions/repayVault.d.ts +2 -3
- package/declarations/instructions/setHalted.d.ts +4 -0
- package/{lib/types/src → declarations}/instructions/withdrawStakingPool.d.ts +0 -1
- package/declarations/instructions/withdrawVault.d.ts +4 -0
- package/{lib/types/src → declarations}/state/LiquidationPoolEra.d.ts +1 -2
- package/{lib/types/src → declarations}/state/LiquidationPoolState.d.ts +0 -1
- package/{lib/types/src → declarations}/state/LiquidationPosition.d.ts +8 -10
- package/{lib/types/src → declarations}/state/StakingPool.d.ts +0 -1
- package/{lib/types/src → declarations}/state/StakingPoolPosition.d.ts +0 -1
- package/{lib/types/src → declarations}/state/VaultAccount.d.ts +0 -1
- package/{lib/types/src → declarations}/state/VaultHistoryEvent.d.ts +0 -1
- package/{lib/types/src → declarations}/utils/Errors.d.ts +0 -1
- package/lib/Constants.js +86 -0
- package/lib/HedgeDecimal.js +24 -0
- package/lib/StakingPools.js +15 -0
- package/lib/Vaults.js +20 -0
- package/lib/idl/idl.js +1475 -0
- package/lib/idl/vault.js +2285 -0
- package/lib/index.js +37 -2156
- package/lib/instructions/claimLiquidationPoolPosition.js +53 -0
- package/lib/instructions/closeLiquidationPoolPosition.js +60 -0
- package/lib/instructions/createStakingPool.js +52 -0
- package/lib/instructions/createVault.js +92 -0
- package/lib/instructions/depositLiquidationPool.js +55 -0
- package/lib/instructions/depositStakingPool.js +52 -0
- package/lib/instructions/depositVault.js +87 -0
- package/lib/instructions/initHedgeFoundation.js +55 -0
- package/lib/instructions/initHedgeFoundationTokens.js +48 -0
- package/lib/instructions/liquidateVault.js +80 -0
- package/lib/instructions/loanVault.js +61 -0
- package/lib/instructions/redeemVault.js +65 -0
- package/lib/instructions/refreshOraclePrice.js +65 -0
- package/lib/instructions/repayVault.js +62 -0
- package/lib/instructions/setHalted.js +37 -0
- package/lib/instructions/withdrawStakingPool.js +64 -0
- package/lib/instructions/withdrawVault.js +62 -0
- package/lib/state/LiquidationPoolEra.js +19 -0
- package/lib/state/LiquidationPoolState.js +12 -0
- package/lib/state/LiquidationPosition.js +39 -0
- package/lib/state/StakingPool.js +22 -0
- package/lib/state/StakingPoolPosition.js +28 -0
- package/lib/state/VaultAccount.js +52 -0
- package/lib/state/VaultHistoryEvent.js +45 -0
- package/lib/utils/Errors.js +14 -0
- package/package.json +14 -8
- package/src/Constants.ts +24 -19
- package/src/HedgeDecimal.ts +3 -3
- package/src/idl/idl.ts +13 -13
- package/src/idl/vault.ts +4565 -0
- package/src/index.ts +6 -0
- package/src/instructions/claimLiquidationPoolPosition.ts +76 -0
- package/src/instructions/closeLiquidationPoolPosition.ts +82 -0
- package/src/instructions/createStakingPool.ts +4 -4
- package/src/instructions/createVault.ts +98 -27
- package/src/instructions/depositLiquidationPool.ts +67 -0
- package/src/instructions/depositStakingPool.ts +5 -3
- package/src/instructions/depositVault.ts +95 -27
- package/src/instructions/initHedgeFoundation.ts +64 -0
- package/src/instructions/initHedgeFoundationTokens.ts +55 -0
- package/src/instructions/liquidateVault.ts +87 -35
- package/src/instructions/loanVault.ts +30 -20
- package/src/instructions/redeemVault.ts +37 -24
- package/src/instructions/refreshOraclePrice.ts +6 -3
- package/src/instructions/repayVault.ts +30 -20
- package/src/instructions/setHalted.ts +48 -0
- package/src/instructions/withdrawStakingPool.ts +6 -6
- package/src/instructions/withdrawVault.ts +50 -17
- package/src/state/LiquidationPoolEra.ts +2 -8
- package/src/state/LiquidationPosition.ts +38 -39
- package/tsconfig.json +3 -2
- package/.github/workflows/npm-publish.yml +0 -34
- package/README.md +0 -44
- package/jsconfig.json +0 -12
- package/lib/index.js.map +0 -1
- package/lib/types/src/Constants.d.ts.map +0 -1
- package/lib/types/src/HedgeDecimal.d.ts.map +0 -1
- package/lib/types/src/StakingPools.d.ts.map +0 -1
- package/lib/types/src/Vaults.d.ts.map +0 -1
- package/lib/types/src/idl/idl.d.ts.map +0 -1
- package/lib/types/src/index.d.ts.map +0 -1
- package/lib/types/src/instructions/createStakingPool.d.ts.map +0 -1
- package/lib/types/src/instructions/createVault.d.ts +0 -5
- package/lib/types/src/instructions/createVault.d.ts.map +0 -1
- package/lib/types/src/instructions/depositStakingPool.d.ts.map +0 -1
- package/lib/types/src/instructions/depositVault.d.ts +0 -5
- package/lib/types/src/instructions/depositVault.d.ts.map +0 -1
- package/lib/types/src/instructions/liquidateVault.d.ts +0 -5
- package/lib/types/src/instructions/liquidateVault.d.ts.map +0 -1
- package/lib/types/src/instructions/loanVault.d.ts.map +0 -1
- package/lib/types/src/instructions/redeemVault.d.ts +0 -5
- package/lib/types/src/instructions/redeemVault.d.ts.map +0 -1
- package/lib/types/src/instructions/refreshOraclePrice.d.ts.map +0 -1
- package/lib/types/src/instructions/repayVault.d.ts.map +0 -1
- package/lib/types/src/instructions/withdrawStakingPool.d.ts.map +0 -1
- package/lib/types/src/instructions/withdrawVault.d.ts +0 -5
- package/lib/types/src/instructions/withdrawVault.d.ts.map +0 -1
- package/lib/types/src/state/LiquidationPoolEra.d.ts.map +0 -1
- package/lib/types/src/state/LiquidationPoolState.d.ts.map +0 -1
- package/lib/types/src/state/LiquidationPosition.d.ts.map +0 -1
- package/lib/types/src/state/StakingPool.d.ts.map +0 -1
- package/lib/types/src/state/StakingPoolPosition.d.ts.map +0 -1
- package/lib/types/src/state/VaultAccount.d.ts.map +0 -1
- package/lib/types/src/state/VaultHistoryEvent.d.ts.map +0 -1
- package/lib/types/src/utils/Errors.d.ts.map +0 -1
- package/lib/types/tsconfig.base.tsbuildinfo +0 -1
- 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;
|