hedge-web3 0.1.50 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- package/declarations/Constants.d.ts +2 -1
- package/declarations/idl/vault.d.ts +192 -41
- package/declarations/index.d.ts +1 -0
- package/declarations/instructions/claimLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/claimStakingPoolPosition.d.ts +1 -1
- package/declarations/instructions/closeClaimedLiquidationPoolPosition.d.ts +5 -0
- package/declarations/instructions/closeLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/createStakingPool.d.ts +1 -1
- package/declarations/instructions/createVault.d.ts +1 -1
- package/declarations/instructions/depositLiquidationPool.d.ts +1 -1
- package/declarations/instructions/depositStakingPool.d.ts +1 -1
- package/declarations/instructions/depositVault.d.ts +1 -1
- package/declarations/instructions/initHedgeFoundation.d.ts +1 -1
- package/declarations/instructions/liquidateVault.d.ts +2 -2
- package/declarations/instructions/loanVault.d.ts +1 -1
- package/declarations/instructions/redeemVault.d.ts +1 -1
- package/declarations/instructions/refreshOraclePrice.d.ts +3 -3
- package/declarations/instructions/repayVault.d.ts +1 -1
- package/declarations/instructions/setHalted.d.ts +1 -1
- package/declarations/instructions/updateVaultType.d.ts +4 -1
- package/declarations/instructions/withdrawStakingPool.d.ts +1 -1
- package/declarations/instructions/withdrawVault.d.ts +1 -1
- package/declarations/state/VaultAccount.d.ts +9 -6
- package/declarations/utils/getLinkedListAccounts.d.ts +1 -1
- package/lib/Constants.js +3 -2
- package/lib/idl/vault.js +192 -41
- package/lib/index.js +1 -0
- package/lib/instructions/claimLiquidationPoolPosition.js +5 -1
- package/lib/instructions/claimStakingPoolPosition.js +5 -1
- package/lib/instructions/closeClaimedLiquidationPoolPosition.js +38 -0
- package/lib/instructions/closeLiquidationPoolPosition.js +5 -1
- package/lib/instructions/createStakingPool.js +5 -1
- package/lib/instructions/createVault.js +5 -1
- package/lib/instructions/depositLiquidationPool.js +5 -1
- package/lib/instructions/depositStakingPool.js +5 -1
- package/lib/instructions/depositVault.js +12 -8
- package/lib/instructions/initHedgeFoundation.js +5 -1
- package/lib/instructions/initHedgeFoundationTokens.js +5 -1
- package/lib/instructions/liquidateVault.js +10 -8
- package/lib/instructions/loanVault.js +9 -6
- package/lib/instructions/redeemVault.js +9 -6
- package/lib/instructions/refreshOraclePrice.js +8 -3
- package/lib/instructions/repayVault.js +9 -6
- package/lib/instructions/setHalted.js +5 -1
- package/lib/instructions/updateVaultType.js +9 -2
- package/lib/instructions/withdrawStakingPool.js +5 -1
- package/lib/instructions/withdrawVault.js +9 -6
- package/lib/state/VaultAccount.js +28 -32
- package/lib/utils/getLinkedListAccounts.js +54 -57
- package/package.json +1 -1
- package/src/Constants.ts +2 -1
- package/src/idl/vault.ts +384 -82
- package/src/index.ts +1 -0
- package/src/instructions/claimLiquidationPoolPosition.ts +3 -2
- package/src/instructions/claimStakingPoolPosition.ts +3 -2
- package/src/instructions/closeClaimedLiquidationPoolPosition.ts +31 -0
- package/src/instructions/closeLiquidationPoolPosition.ts +3 -2
- package/src/instructions/createStakingPool.ts +3 -2
- package/src/instructions/createVault.ts +3 -2
- package/src/instructions/depositLiquidationPool.ts +3 -2
- package/src/instructions/depositStakingPool.ts +3 -2
- package/src/instructions/depositVault.ts +11 -11
- package/src/instructions/initHedgeFoundation.ts +3 -2
- package/src/instructions/initHedgeFoundationTokens.ts +2 -1
- package/src/instructions/liquidateVault.ts +11 -10
- package/src/instructions/loanVault.ts +11 -9
- package/src/instructions/redeemVault.ts +7 -7
- package/src/instructions/refreshOraclePrice.ts +9 -6
- package/src/instructions/repayVault.ts +7 -7
- package/src/instructions/setHalted.ts +3 -2
- package/src/instructions/updateVaultType.ts +10 -2
- package/src/instructions/withdrawStakingPool.ts +5 -3
- package/src/instructions/withdrawVault.ts +7 -7
- package/src/state/VaultAccount.ts +37 -32
- package/src/state/VaultType.ts +62 -0
- package/src/utils/getLinkedListAccounts.ts +61 -60
- package/src/utils/sendAndConfirmWithDebug.ts +27 -0
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.depositVaultInstruction = exports.depositVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -16,15 +19,16 @@ const spl_token_1 = require("@solana/spl-token");
|
|
16
19
|
const web3_js_1 = require("@solana/web3.js");
|
17
20
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
18
21
|
const Constants_1 = require("../Constants");
|
22
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
23
|
+
const token_instructions_1 = require("@project-serum/serum/lib/token-instructions");
|
19
24
|
function depositVault(program, provider, payer, vaultPublicKey, depositAmount, overrideTime) {
|
20
25
|
return __awaiter(this, void 0, void 0, function* () {
|
21
26
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
22
27
|
// Prep the user to get USH back out at some point
|
23
28
|
yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
|
24
29
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
25
|
-
const
|
26
|
-
const
|
27
|
-
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
|
30
|
+
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
31
|
+
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
|
28
32
|
const payerTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(payer.publicKey, vaultTypeAccountInfo.collateralMint);
|
29
33
|
const vaultAssociatedCollateralAccountPublicKey = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccountInfo.collateralMint);
|
30
34
|
const history = web3_js_1.Keypair.generate();
|
@@ -34,8 +38,8 @@ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, o
|
|
34
38
|
const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
|
35
39
|
const transaction = new web3_js_1.Transaction();
|
36
40
|
const signers = [payer, history];
|
37
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
38
|
-
if (
|
41
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, depositAmount, 0, false, false);
|
42
|
+
if (vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString()) {
|
39
43
|
transaction.add(web3_js_1.SystemProgram.createAccount({
|
40
44
|
fromPubkey: payer.publicKey,
|
41
45
|
lamports: depositAmount + 2.04e6,
|
@@ -49,15 +53,15 @@ function depositVault(program, provider, payer, vaultPublicKey, depositAmount, o
|
|
49
53
|
}));
|
50
54
|
signers.push(wrappedSolAccount);
|
51
55
|
}
|
52
|
-
transaction.add(yield depositVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey,
|
53
|
-
if (
|
56
|
+
transaction.add(yield depositVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString() ? wrappedSolAccount.publicKey : payerTokenAccount, vaultPublicKey, vaultAssociatedCollateralAccountPublicKey, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, vaultTypeAccountInfo.collateralMint, ushMintPublickey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, depositAmount, overrideTime));
|
57
|
+
if (vaultTypeAccountInfo.collateralMint.toString() === token_instructions_1.WRAPPED_SOL_MINT.toString()) {
|
54
58
|
transaction.add(serum_1.TokenInstructions.closeAccount({
|
55
59
|
source: wrappedSolAccount.publicKey,
|
56
60
|
destination: payer.publicKey,
|
57
61
|
owner: payer.publicKey,
|
58
62
|
}));
|
59
63
|
}
|
60
|
-
yield (0,
|
64
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, signers);
|
61
65
|
return vaultPublicKey;
|
62
66
|
});
|
63
67
|
}
|
@@ -8,17 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.initHedgeFoundationInstruction = exports.initHedgeFoundation = void 0;
|
13
16
|
const spl_token_1 = require("@solana/spl-token");
|
14
17
|
const web3_js_1 = require("@solana/web3.js");
|
15
18
|
const Errors_1 = require("../utils/Errors");
|
16
19
|
const Constants_1 = require("../Constants");
|
20
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
17
21
|
function initHedgeFoundation(program, provider, payer) {
|
18
22
|
return __awaiter(this, void 0, void 0, function* () {
|
19
23
|
const poolEra = web3_js_1.Keypair.generate();
|
20
24
|
const transaction = new web3_js_1.Transaction().add(yield initHedgeFoundationInstruction(program, poolEra.publicKey, payer.publicKey));
|
21
|
-
yield (0,
|
25
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, poolEra]).catch(Errors_1.parseAnchorErrors);
|
22
26
|
return payer.publicKey;
|
23
27
|
});
|
24
28
|
}
|
@@ -8,17 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.initHedgeFoundationTokensInstruction = exports.initHedgeFoundationTokens = void 0;
|
13
16
|
const spl_token_1 = require("@solana/spl-token");
|
14
17
|
const web3_js_1 = require("@solana/web3.js");
|
15
18
|
const Errors_1 = require("../utils/Errors");
|
16
19
|
const Constants_1 = require("../Constants");
|
20
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
17
21
|
function initHedgeFoundationTokens(program, provider, payer) {
|
18
22
|
return __awaiter(this, void 0, void 0, function* () {
|
19
23
|
const poolEra = web3_js_1.Keypair.generate();
|
20
24
|
const transaction = new web3_js_1.Transaction().add(yield initHedgeFoundationTokensInstruction(program, payer.publicKey));
|
21
|
-
yield (0,
|
25
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
|
22
26
|
return payer.publicKey;
|
23
27
|
});
|
24
28
|
}
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.liquidateVaultInstruction = exports.liquidateVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -15,11 +18,11 @@ const spl_token_1 = require("@solana/spl-token");
|
|
15
18
|
const web3_js_1 = require("@solana/web3.js");
|
16
19
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
17
20
|
const Constants_1 = require("../Constants");
|
21
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
18
22
|
function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime) {
|
19
23
|
return __awaiter(this, void 0, void 0, function* () {
|
20
24
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
21
|
-
const
|
22
|
-
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
|
25
|
+
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
23
26
|
const collateralMint = vaultTypeAccountInfo.collateralMint;
|
24
27
|
const hedgeMintPublickey = yield (0, Constants_1.getHedgeMintPublicKey)();
|
25
28
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
@@ -30,24 +33,23 @@ function liquidateVault(program, provider, payer, vaultPublicKey, overrideTime)
|
|
30
33
|
const feePoolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, hedgeStakingPoolPublicKey, true);
|
31
34
|
const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultPublicKey, true);
|
32
35
|
const poolAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, liquidationPoolStatePublicKey, true);
|
33
|
-
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint,
|
36
|
+
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, collateralMint, vaultAccount.vaultType, true);
|
34
37
|
const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, hedgeStakingPoolPublicKey, true);
|
35
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
38
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, false, true);
|
36
39
|
const history = web3_js_1.Keypair.generate();
|
37
40
|
const newEra = web3_js_1.Keypair.generate();
|
38
41
|
const transaction = new web3_js_1.Transaction();
|
39
|
-
transaction.add(yield liquidateVaultInstruction(program, payer.publicKey, payerAssociatedTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, liquidationPoolStatePublicKey, poolStateInfo.currentEra, poolAssociatedTokenAccount.address, history.publicKey, newEra.publicKey, hedgeStakingPoolPublicKey, feePoolAssociatedTokenAccount.address, hedgeStakingPoolAssociatedUshTokenAccount.address, collateralMint, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultAccount.
|
40
|
-
yield (0,
|
42
|
+
transaction.add(yield liquidateVaultInstruction(program, payer.publicKey, payerAssociatedTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, liquidationPoolStatePublicKey, poolStateInfo.currentEra, poolAssociatedTokenAccount.address, history.publicKey, newEra.publicKey, hedgeStakingPoolPublicKey, feePoolAssociatedTokenAccount.address, hedgeStakingPoolAssociatedUshTokenAccount.address, collateralMint, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultAccount.vaultType, overrideTime));
|
43
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history, newEra]);
|
41
44
|
return vaultPublicKey;
|
42
45
|
});
|
43
46
|
}
|
44
47
|
exports.liquidateVault = liquidateVault;
|
45
|
-
function liquidateVaultInstruction(program, payerPublicKey, payerAssociatedTokenAccount, vaultPublickey, vaultAssociatedTokenAccount, poolState, poolEra, poolAssociatedTokenAccount, historyPublicKey, newEraPublicKey, feePool, feePoolAssociatedTokenAccount, hedgeStakingPoolAssociatedUshTokenAccount, collateralMint, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey,
|
48
|
+
function liquidateVaultInstruction(program, payerPublicKey, payerAssociatedTokenAccount, vaultPublickey, vaultAssociatedTokenAccount, poolState, poolEra, poolAssociatedTokenAccount, historyPublicKey, newEraPublicKey, feePool, feePoolAssociatedTokenAccount, hedgeStakingPoolAssociatedUshTokenAccount, collateralMint, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaultTypeAccount, overrideTime) {
|
46
49
|
return __awaiter(this, void 0, void 0, function* () {
|
47
50
|
const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
|
48
51
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
49
52
|
const liquidationPoolUshAccountPublickey = yield (0, Constants_1.getLiquidationPoolUshAccountPublicKey)();
|
50
|
-
const vaultTypeAccount = yield (0, Constants_1.getVaultTypeAccountPublicKey)(collateralType);
|
51
53
|
return yield program.methods
|
52
54
|
.liquidateVault(new anchor_1.BN(overrideTime !== null && overrideTime !== void 0 ? overrideTime : Math.floor(Date.now() / 1000)) // override override time
|
53
55
|
)
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.loanVaultInstruction = exports.loanVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -15,19 +18,19 @@ const spl_token_1 = require("@solana/spl-token");
|
|
15
18
|
const web3_js_1 = require("@solana/web3.js");
|
16
19
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
17
20
|
const Constants_1 = require("../Constants");
|
21
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
18
22
|
function loanVault(program, provider, payer, vaultPublicKey, loanAmount, overrideTime) {
|
19
23
|
return __awaiter(this, void 0, void 0, function* () {
|
20
24
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
21
25
|
const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
|
22
26
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
23
|
-
const
|
24
|
-
const
|
25
|
-
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultTypeAccountPublicKey, true);
|
27
|
+
const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
28
|
+
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultAccount.vaultType, true);
|
26
29
|
const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccount.collateralMint, vaultPublicKey, true);
|
27
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
30
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, loanAmount, false, false);
|
28
31
|
const history = web3_js_1.Keypair.generate();
|
29
|
-
const transaction = new web3_js_1.Transaction().add(yield loanVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey,
|
30
|
-
yield (0,
|
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, loanAmount, overrideTime));
|
33
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
|
31
34
|
return vaultPublicKey;
|
32
35
|
});
|
33
36
|
}
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.redeemVaultInstruction = exports.redeemVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -16,21 +19,21 @@ const spl_token_1 = require("@solana/spl-token");
|
|
16
19
|
const web3_js_1 = require("@solana/web3.js");
|
17
20
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
18
21
|
const Constants_1 = require("../Constants");
|
22
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
19
23
|
function redeemVault(program, provider, payer, vaultPublicKey, redeemAmount, transactionOverrideTime) {
|
20
24
|
return __awaiter(this, void 0, void 0, function* () {
|
21
25
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
22
26
|
// Prep the user to get USH back out at some point
|
23
27
|
const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
|
24
28
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
25
|
-
const
|
26
|
-
const
|
27
|
-
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultTypeAccountPublicKey, true);
|
29
|
+
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
30
|
+
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
|
28
31
|
const vaultAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultPublicKey, true);
|
29
32
|
const payerTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
|
30
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
33
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, 0, true, false);
|
31
34
|
const history = web3_js_1.Keypair.generate();
|
32
|
-
const transaction = new web3_js_1.Transaction().add(yield redeemVaultInstruction(program, payer.publicKey, payerUshAccount.address, payerTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey,
|
33
|
-
yield (0,
|
35
|
+
const transaction = new web3_js_1.Transaction().add(yield redeemVaultInstruction(program, payer.publicKey, payerUshAccount.address, payerTokenAccount.address, vaultPublicKey, vaultAssociatedTokenAccount.address, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, redeemAmount, transactionOverrideTime));
|
36
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
|
34
37
|
return vaultPublicKey;
|
35
38
|
});
|
36
39
|
}
|
@@ -8,15 +8,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.Cluster = exports.refreshOraclePriceInstruction = exports.refreshOraclePrice = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
14
17
|
const web3_js_1 = require("@solana/web3.js");
|
18
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
15
19
|
const Constants_1 = require("../Constants");
|
16
20
|
function refreshOraclePrice(program, provider, payer, collateralType, network, overridePrice, overrideTime) {
|
17
21
|
return __awaiter(this, void 0, void 0, function* () {
|
18
22
|
const transaction = new web3_js_1.Transaction().add(yield refreshOraclePriceInstruction(program, collateralType, network, overridePrice, overrideTime));
|
19
|
-
return yield (0,
|
23
|
+
return yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
|
20
24
|
});
|
21
25
|
}
|
22
26
|
exports.refreshOraclePrice = refreshOraclePrice;
|
@@ -32,10 +36,11 @@ function refreshOraclePriceInstruction(program, collateralType, network, overrid
|
|
32
36
|
.accounts({
|
33
37
|
oracleInfoAccount: oracleInfoAccount,
|
34
38
|
vaultTypeAccount: vaultTypeAccount,
|
35
|
-
oracleChainlink:
|
39
|
+
oracleChainlink: chainlinkAccounts[network],
|
36
40
|
oraclePyth: pythAccounts[network],
|
37
41
|
oracleSwitchboard: switchboardAccounts[network],
|
38
42
|
systemProgram: web3_js_1.SystemProgram.programId,
|
43
|
+
chainlinkProgram: Constants_1.CHAINLINK_PROGRAM_ID,
|
39
44
|
})
|
40
45
|
.instruction();
|
41
46
|
});
|
@@ -52,7 +57,7 @@ const pythAccounts = {
|
|
52
57
|
Devnet: new web3_js_1.PublicKey('J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix'),
|
53
58
|
MainnetBeta: new web3_js_1.PublicKey('H6ARHf6YXhGYeQfUzQNGk6rDNnLBQKrenN712K4AQJEG'),
|
54
59
|
};
|
55
|
-
const
|
60
|
+
const chainlinkAccounts = {
|
56
61
|
Testing: web3_js_1.SystemProgram.programId,
|
57
62
|
Devnet: new web3_js_1.PublicKey('FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'),
|
58
63
|
MainnetBeta: web3_js_1.SystemProgram.programId, // CHAINLINK NOT ON MAINNET YET
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.repayVaultInstruction = exports.repayVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -15,20 +18,20 @@ const spl_token_1 = require("@solana/spl-token");
|
|
15
18
|
const web3_js_1 = require("@solana/web3.js");
|
16
19
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
17
20
|
const Constants_1 = require("../Constants");
|
21
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
18
22
|
function repayVault(program, provider, payer, vaultPublicKey, repayAmount, overrideTime) {
|
19
23
|
return __awaiter(this, void 0, void 0, function* () {
|
20
24
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
21
25
|
// Prep the user to get USH back out at some point
|
22
26
|
const payerUshAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, ushMintPublickey, payer.publicKey);
|
23
27
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
24
|
-
const
|
25
|
-
const
|
26
|
-
const vaultTypeAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultTypeAccountPublicKey, vaultTypeAccount.collateralMint);
|
28
|
+
const vaultTypeAccount = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
29
|
+
const vaultTypeAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultAccount.vaultType, vaultTypeAccount.collateralMint);
|
27
30
|
const vaultAssociatedTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(vaultPublicKey, vaultTypeAccount.collateralMint);
|
28
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
31
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, 0, repayAmount * -1, false, false);
|
29
32
|
const history = web3_js_1.Keypair.generate();
|
30
|
-
const transaction = new web3_js_1.Transaction().add(yield repayVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount, history.publicKey,
|
31
|
-
yield (0,
|
33
|
+
const transaction = new web3_js_1.Transaction().add(yield repayVaultInstruction(program, payer.publicKey, payerUshAccount.address, vaultPublicKey, vaultAssociatedTokenAccount, history.publicKey, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, repayAmount, overrideTime));
|
34
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
|
32
35
|
return vaultPublicKey;
|
33
36
|
});
|
34
37
|
}
|
@@ -8,16 +8,20 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.setHaltedInstruction = exports.setHalted = void 0;
|
13
16
|
const web3_js_1 = require("@solana/web3.js");
|
14
17
|
const Constants_1 = require("../Constants");
|
15
18
|
const Errors_1 = require("../utils/Errors");
|
19
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
16
20
|
function setHalted(program, provider, payer, halted) {
|
17
21
|
return __awaiter(this, void 0, void 0, function* () {
|
18
22
|
const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
|
19
23
|
const transaction = new web3_js_1.Transaction().add(yield setHaltedInstruction(program, vaultSystemStatePublicKey, payer.publicKey, halted));
|
20
|
-
yield (0,
|
24
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
|
21
25
|
return vaultSystemStatePublicKey;
|
22
26
|
});
|
23
27
|
}
|
@@ -8,21 +8,25 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.updateVaultTypeStatusInstruction = exports.updateVaultType = void 0;
|
13
16
|
const web3_js_1 = require("@solana/web3.js");
|
14
17
|
const Constants_1 = require("../Constants");
|
18
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
15
19
|
function updateVaultType(program, provider, payer, vaultTypeAccount, oracleInfoAccount, config) {
|
16
20
|
return __awaiter(this, void 0, void 0, function* () {
|
17
21
|
const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
|
18
22
|
const transaction = new web3_js_1.Transaction().add(yield updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccount, oracleInfoAccount, config));
|
19
|
-
yield (0,
|
23
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
|
20
24
|
return vaultSystemStatePublicKey;
|
21
25
|
});
|
22
26
|
}
|
23
27
|
exports.updateVaultType = updateVaultType;
|
24
28
|
function updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, payerPublicKey, vaultTypeAccount, oracleInfoAccount, vaultTypeConfig) {
|
25
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
26
30
|
return __awaiter(this, void 0, void 0, function* () {
|
27
31
|
const config = {
|
28
32
|
maxDebtExtended: (_a = vaultTypeConfig.maxDebtExtended) !== null && _a !== void 0 ? _a : null,
|
@@ -32,6 +36,9 @@ function updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, pa
|
|
32
36
|
oraclePyth: (_e = vaultTypeConfig.oraclePyth) !== null && _e !== void 0 ? _e : null,
|
33
37
|
oracleSwitchboard: (_f = vaultTypeConfig.oracleSwitchboard) !== null && _f !== void 0 ? _f : null,
|
34
38
|
deprecated: (_g = vaultTypeConfig.deprecated) !== null && _g !== void 0 ? _g : null,
|
39
|
+
priorityPyth: (_h = vaultTypeConfig.priorityPyth) !== null && _h !== void 0 ? _h : null,
|
40
|
+
priorityChainlink: (_j = vaultTypeConfig.priorityChainlink) !== null && _j !== void 0 ? _j : null,
|
41
|
+
prioritySwitchboard: (_k = vaultTypeConfig.prioritySwitchboard) !== null && _k !== void 0 ? _k : null,
|
35
42
|
};
|
36
43
|
return yield program.methods
|
37
44
|
.updateVaultType(config)
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.withdrawStakingPoolInstruction = exports.withdrawStakingPool = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -15,11 +18,12 @@ const spl_token_1 = require("@solana/spl-token");
|
|
15
18
|
const web3_js_1 = require("@solana/web3.js");
|
16
19
|
const Errors_1 = require("../utils/Errors");
|
17
20
|
const Constants_1 = require("../Constants");
|
21
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
18
22
|
function withdrawStakingPool(program, provider, payer, poolPositionPublicKey, stakedTokenMintPublicKey, overrideStartTime) {
|
19
23
|
return __awaiter(this, void 0, void 0, function* () {
|
20
24
|
const poolPosition = web3_js_1.Keypair.generate();
|
21
25
|
const transaction = new web3_js_1.Transaction().add(yield withdrawStakingPoolInstruction(program, payer.publicKey, poolPositionPublicKey, stakedTokenMintPublicKey, overrideStartTime));
|
22
|
-
yield (0,
|
26
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]).catch(Errors_1.parseAnchorErrors);
|
23
27
|
return poolPosition.publicKey;
|
24
28
|
});
|
25
29
|
}
|
@@ -8,6 +8,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
9
|
});
|
10
10
|
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
12
15
|
exports.withdrawVaultInstruction = exports.withdrawVault = void 0;
|
13
16
|
const anchor_1 = require("@project-serum/anchor");
|
@@ -16,6 +19,7 @@ const serum_1 = require("@project-serum/serum");
|
|
16
19
|
const web3_js_1 = require("@solana/web3.js");
|
17
20
|
const Constants_1 = require("../Constants");
|
18
21
|
const getLinkedListAccounts_1 = require("../utils/getLinkedListAccounts");
|
22
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
19
23
|
function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount, overrideTime) {
|
20
24
|
return __awaiter(this, void 0, void 0, function* () {
|
21
25
|
const ushMintPublickey = yield (0, Constants_1.getUshMintPublicKey)();
|
@@ -24,16 +28,15 @@ function withdrawVault(program, provider, payer, vaultPublicKey, withdrawAmount,
|
|
24
28
|
const history = web3_js_1.Keypair.generate();
|
25
29
|
const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
|
26
30
|
const vaultAccount = yield program.account.vault.fetch(vaultPublicKey);
|
27
|
-
const vaultTypeAccountPublicKey = yield (0, Constants_1.getVaultTypeAccountPublicKey)(vaultAccount.collateralType);
|
28
31
|
const vaultAssociatedCollateralAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, serum_1.TokenInstructions.WRAPPED_SOL_MINT, vaultPublicKey, true);
|
29
|
-
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(
|
30
|
-
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint,
|
32
|
+
const vaultTypeAccountInfo = yield program.account.vaultType.fetch(vaultAccount.vaultType);
|
33
|
+
const vaultTypeAssociatedTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, vaultAccount.vaultType, true);
|
31
34
|
const destinationTokenAccount = yield (0, spl_token_1.getOrCreateAssociatedTokenAccount)(provider.connection, payer, vaultTypeAccountInfo.collateralMint, payer.publicKey);
|
32
35
|
const [hedgeStakingPoolPublicKey] = yield (0, Constants_1.getPoolPublicKeyForMint)(yield (0, Constants_1.getHedgeMintPublicKey)());
|
33
36
|
const hedgeStakingPoolAssociatedUshTokenAccount = yield (0, Constants_1.findAssociatedTokenAddress)(hedgeStakingPoolPublicKey, ushMintPublickey);
|
34
|
-
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider,
|
35
|
-
const transaction = new web3_js_1.Transaction().add(yield withdrawVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, destinationTokenAccount.address, vaultPublicKey, vaultAssociatedCollateralAccount.address,
|
36
|
-
yield (0,
|
37
|
+
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = yield (0, getLinkedListAccounts_1.getLinkedListAccounts)(program, provider, vaultAccount.vaultType, vaultPublicKey, withdrawAmount * -1, 0, false, false);
|
38
|
+
const transaction = new web3_js_1.Transaction().add(yield withdrawVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, destinationTokenAccount.address, vaultPublicKey, vaultAssociatedCollateralAccount.address, vaultAccount.vaultType, vaultTypeAssociatedTokenAccount.address, hedgeStakingPoolPublicKey, hedgeStakingPoolAssociatedUshTokenAccount, ushMintPublickey, history.publicKey, oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, withdrawAmount, overrideTime));
|
39
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer, history]);
|
37
40
|
return vaultPublicKey;
|
38
41
|
});
|
39
42
|
}
|
@@ -32,11 +32,7 @@ const borsh = __importStar(require("@project-serum/borsh"));
|
|
32
32
|
*/
|
33
33
|
class VaultAccount {
|
34
34
|
constructor(vault, publicKey) {
|
35
|
-
var _a;
|
36
|
-
/** The deposited collateral of the vault (in SOL Lamports). */
|
37
|
-
this.deposited = new decimal_js_1.default(0);
|
38
|
-
/** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
|
39
|
-
this.denormalizedDebt = new decimal_js_1.default(0);
|
35
|
+
var _a, _b, _c;
|
40
36
|
/** Debt redistribution snapshot */
|
41
37
|
this.debtProductSnapshotBytes = new decimal_js_1.default(0);
|
42
38
|
/** Collateral redistribution snapshot' */
|
@@ -47,23 +43,20 @@ class VaultAccount {
|
|
47
43
|
this.vaultOwner = vault.vaultOwner;
|
48
44
|
this.vaultNumber = (_a = vault.vaultNumber) === null || _a === void 0 ? void 0 : _a.toNumber();
|
49
45
|
this.pdaSalt = vault.pdaSalt;
|
50
|
-
|
51
|
-
|
52
|
-
}
|
53
|
-
if (vault.denormalizedDebt) {
|
54
|
-
this.denormalizedDebt = new decimal_js_1.default(vault.denormalizedDebt.toString());
|
55
|
-
}
|
46
|
+
this.deposited = (_b = vault.deposited) === null || _b === void 0 ? void 0 : _b.toNumber();
|
47
|
+
this.denormalizedDebt = (_c = vault.denormalizedDebt) === null || _c === void 0 ? void 0 : _c.toNumber();
|
56
48
|
if (vault.debtProductSnapshotBytes) {
|
57
49
|
this.debtProductSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.debtProductSnapshotBytes.toString());
|
58
50
|
}
|
59
51
|
if (vault.collateralAccumulatorSnapshotBytes) {
|
60
52
|
this.collateralAccumulatorSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.collateralAccumulatorSnapshotBytes.toString());
|
61
53
|
}
|
62
|
-
this.
|
54
|
+
this.vaultTypeName = vault.vaultTypeName;
|
63
55
|
this.nextVaultToRedeem = vault.nextVaultToRedeem;
|
64
56
|
if (vault.vaultStatus) {
|
65
57
|
this.vaultStatus = Object.keys(vault.vaultStatus)[0];
|
66
58
|
}
|
59
|
+
this.vaultType = vault.vaultType;
|
67
60
|
}
|
68
61
|
/**
|
69
62
|
* Check if some `PublicKey` is the owner
|
@@ -80,7 +73,7 @@ class VaultAccount {
|
|
80
73
|
* @returns collateral value in SOL
|
81
74
|
*/
|
82
75
|
inSol() {
|
83
|
-
return this.deposited
|
76
|
+
return this.deposited / web3_js_1.LAMPORTS_PER_SOL;
|
84
77
|
}
|
85
78
|
/**
|
86
79
|
* Get the debt value in USH
|
@@ -88,7 +81,7 @@ class VaultAccount {
|
|
88
81
|
* @returns debt value in USH
|
89
82
|
*/
|
90
83
|
inUsd() {
|
91
|
-
return this.denormalizedDebt
|
84
|
+
return this.denormalizedDebt / web3_js_1.LAMPORTS_PER_SOL;
|
92
85
|
}
|
93
86
|
/**
|
94
87
|
* Pretty print the vault publickey for easy display
|
@@ -100,34 +93,37 @@ class VaultAccount {
|
|
100
93
|
.toString()
|
101
94
|
.substring(this.publicKey.toString().length - 6)}`;
|
102
95
|
}
|
103
|
-
addDebt(
|
104
|
-
|
105
|
-
|
106
|
-
|
96
|
+
addDebt(additionalDebt, vaultTypeAccount) {
|
97
|
+
let loanFee = new decimal_js_1.default(0);
|
98
|
+
if (additionalDebt.isPositive()) {
|
99
|
+
loanFee = vaultTypeAccount.loanInitFee.mul(additionalDebt);
|
100
|
+
}
|
101
|
+
const totalNormalizedLoan = additionalDebt.add(loanFee);
|
102
|
+
const denormalizedNewDebt = totalNormalizedLoan.div(new decimal_js_1.default(vaultTypeAccount.cumulativeRate.toString()));
|
103
|
+
this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor().toNumber();
|
107
104
|
}
|
108
105
|
addDeposit(depositAmount) {
|
109
|
-
this.deposited
|
106
|
+
this.deposited += depositAmount;
|
110
107
|
}
|
111
108
|
redeem() {
|
112
109
|
// TODO - Calculate actual redeem amount and adust correctly
|
113
|
-
this.denormalizedDebt =
|
110
|
+
this.denormalizedDebt = 0;
|
114
111
|
this.vaultStatus = 'initialized';
|
115
112
|
}
|
116
113
|
liquidate() {
|
117
114
|
// TODO - Calculate actual liquidate amount and adust correctly
|
118
|
-
this.denormalizedDebt =
|
115
|
+
this.denormalizedDebt = 0;
|
119
116
|
this.vaultStatus = 'liquidated';
|
120
117
|
}
|
121
|
-
updateDebtAndCollateral(
|
122
|
-
|
123
|
-
const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccuntData.collateralRedistributionAccumulator);
|
124
|
-
this.denormalizedDebt = debtProductCurrent
|
118
|
+
updateDebtAndCollateral(vaultTypeAccountData) {
|
119
|
+
this.denormalizedDebt = vaultTypeAccountData.debtRedistributionProduct
|
125
120
|
.div(this.debtProductSnapshotBytes)
|
126
|
-
.mul(new decimal_js_1.default(this.denormalizedDebt))
|
127
|
-
|
128
|
-
this.
|
129
|
-
this.
|
130
|
-
this.
|
121
|
+
.mul(new decimal_js_1.default(this.denormalizedDebt))
|
122
|
+
.toNumber();
|
123
|
+
const extraCollateralDeposited = this.denormalizedDebt * vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber();
|
124
|
+
this.deposited += extraCollateralDeposited;
|
125
|
+
this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator;
|
126
|
+
this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct;
|
131
127
|
}
|
132
128
|
toString(highlight) {
|
133
129
|
let arrow = '';
|
@@ -135,14 +131,14 @@ class VaultAccount {
|
|
135
131
|
arrow = ' <----!!';
|
136
132
|
}
|
137
133
|
let collateralRatio = 'Infinite';
|
138
|
-
if (this.denormalizedDebt
|
134
|
+
if (this.denormalizedDebt > 0) {
|
139
135
|
collateralRatio = new decimal_js_1.default(this.deposited).div(new decimal_js_1.default(this.denormalizedDebt)).toString();
|
140
136
|
}
|
141
137
|
let nextVault = 'None';
|
142
138
|
if (this.nextVaultToRedeem) {
|
143
139
|
nextVault = this.nextVaultToRedeem.toString().substring(0, 6);
|
144
140
|
}
|
145
|
-
return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio}
|
141
|
+
return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} ${arrow} `;
|
146
142
|
}
|
147
143
|
/**
|
148
144
|
* Creates a VaultAccount from a slice of data
|