hedge-web3 0.2.3 → 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- package/declarations/instructions/createVault.d.ts +3 -2
- package/declarations/instructions/depositLiquidationPool.d.ts +4 -3
- package/declarations/instructions/depositStakingPool.d.ts +3 -2
- package/declarations/instructions/depositVault.d.ts +3 -2
- package/declarations/instructions/loanVault.d.ts +3 -2
- package/declarations/instructions/redeemVault.d.ts +3 -2
- package/declarations/instructions/repayVault.d.ts +3 -2
- package/declarations/instructions/setVaultTypeStatus.d.ts +2 -3
- package/declarations/instructions/withdrawVault.d.ts +3 -2
- package/declarations/state/VaultAccount.d.ts +33 -10
- package/declarations/utils/getLinkedListAccounts.d.ts +17 -2
- package/lib/instructions/createVault.js +2 -2
- package/lib/instructions/depositLiquidationPool.js +2 -2
- package/lib/instructions/depositStakingPool.js +2 -2
- package/lib/instructions/depositVault.js +3 -3
- package/lib/instructions/liquidateVault.js +1 -1
- package/lib/instructions/loanVault.js +3 -3
- package/lib/instructions/redeemVault.js +3 -3
- package/lib/instructions/refreshOraclePrice.js +2 -2
- package/lib/instructions/repayVault.js +3 -3
- package/lib/instructions/setVaultTypeStatus.js +10 -9
- package/lib/instructions/withdrawVault.js +3 -3
- package/lib/state/VaultAccount.js +76 -33
- package/lib/utils/getLinkedListAccounts.js +29 -13
- package/package.json +1 -1
- package/src/instructions/createVault.ts +3 -3
- package/src/instructions/depositLiquidationPool.ts +4 -4
- package/src/instructions/depositStakingPool.ts +3 -3
- package/src/instructions/depositVault.ts +7 -6
- package/src/instructions/liquidateVault.ts +4 -3
- package/src/instructions/loanVault.ts +7 -6
- package/src/instructions/redeemVault.ts +7 -6
- package/src/instructions/refreshOraclePrice.ts +2 -2
- package/src/instructions/repayVault.ts +7 -6
- package/src/instructions/withdrawVault.ts +7 -6
- package/src/state/VaultAccount.ts +84 -39
- package/src/utils/getLinkedListAccounts.ts +34 -16
@@ -27,12 +27,18 @@ const web3_js_1 = require("@solana/web3.js");
|
|
27
27
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
28
28
|
const HedgeDecimal_1 = require("../HedgeDecimal");
|
29
29
|
const borsh = __importStar(require("@project-serum/borsh"));
|
30
|
+
const bn_js_1 = __importDefault(require("bn.js"));
|
30
31
|
/**
|
31
32
|
* A class that represents an on-chian vault.
|
32
33
|
*/
|
33
34
|
class VaultAccount {
|
34
35
|
constructor(vault, publicKey) {
|
35
|
-
|
36
|
+
/** The deposited collateral of the vault (in SOL Lamports). */
|
37
|
+
this.deposited = new bn_js_1.default(0);
|
38
|
+
/** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
|
39
|
+
this.denormalizedDebt = new bn_js_1.default(0);
|
40
|
+
/** The ordered number of when this vault was created. */
|
41
|
+
this.vaultNumber = 0;
|
36
42
|
/** Debt redistribution snapshot */
|
37
43
|
this.debtProductSnapshotBytes = new decimal_js_1.default(0);
|
38
44
|
/** Collateral redistribution snapshot' */
|
@@ -41,10 +47,12 @@ class VaultAccount {
|
|
41
47
|
this.vaultStatus = '';
|
42
48
|
this.publicKey = publicKey;
|
43
49
|
this.vaultOwner = vault.vaultOwner;
|
44
|
-
this.vaultNumber = (_a = vault.vaultNumber) === null || _a === void 0 ? void 0 : _a.toNumber();
|
45
50
|
this.pdaSalt = vault.pdaSalt;
|
46
|
-
this.deposited =
|
47
|
-
this.denormalizedDebt =
|
51
|
+
this.deposited = vault.deposited;
|
52
|
+
this.denormalizedDebt = vault.denormalizedDebt;
|
53
|
+
if (vault.vaultNumber) {
|
54
|
+
this.vaultNumber = vault.vaultNumber.toNumber();
|
55
|
+
}
|
48
56
|
if (vault.debtProductSnapshotBytes) {
|
49
57
|
this.debtProductSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.debtProductSnapshotBytes.toString());
|
50
58
|
}
|
@@ -67,21 +75,22 @@ class VaultAccount {
|
|
67
75
|
isOwnedBy(publicKey) {
|
68
76
|
return publicKey && publicKey.toString() === this.vaultOwner.toString();
|
69
77
|
}
|
70
|
-
/**
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
inSol() {
|
76
|
-
|
77
|
-
|
78
|
+
// /**
|
79
|
+
// * Get the collateral value in SOL
|
80
|
+
// *
|
81
|
+
// * @returns collateral value in SOL
|
82
|
+
// */
|
83
|
+
// public inSol(): number {
|
84
|
+
// This should not be LAMPORTS_PER_SOL. Should be collateral units like Ray
|
85
|
+
// return new Decimal(this.deposited.toString()).div(LAMPORTS_PER_SOL).toNumber()
|
86
|
+
// }
|
78
87
|
/**
|
79
88
|
* Get the debt value in USH
|
80
89
|
*
|
81
90
|
* @returns debt value in USH
|
82
91
|
*/
|
83
92
|
inUsd() {
|
84
|
-
return this.denormalizedDebt
|
93
|
+
return new decimal_js_1.default(this.denormalizedDebt.toString()).div(web3_js_1.LAMPORTS_PER_SOL).toNumber();
|
85
94
|
}
|
86
95
|
/**
|
87
96
|
* Pretty print the vault publickey for easy display
|
@@ -93,35 +102,69 @@ class VaultAccount {
|
|
93
102
|
.toString()
|
94
103
|
.substring(this.publicKey.toString().length - 6)}`;
|
95
104
|
}
|
105
|
+
/**
|
106
|
+
* Add additional debt to the vault.
|
107
|
+
*
|
108
|
+
* @param {BN} additionalDebt - Additional normalized debt to add in (USH) lamports.
|
109
|
+
* @param {VaultType} vaultTypeAccount - Vault's vaultType
|
110
|
+
*
|
111
|
+
*/
|
96
112
|
addDebt(additionalDebt, vaultTypeAccount) {
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
const totalNormalizedLoan =
|
102
|
-
const denormalizedNewDebt =
|
103
|
-
this.denormalizedDebt =
|
113
|
+
const additionalDebtAsDecimal = new decimal_js_1.default(additionalDebt.toString());
|
114
|
+
// Calculate the fee on the loan
|
115
|
+
const loanFee = vaultTypeAccount.loanInitFee.mul(additionalDebtAsDecimal);
|
116
|
+
// TODO: There's a chance this needs to be .Floor()
|
117
|
+
const totalNormalizedLoan = additionalDebtAsDecimal.add(loanFee);
|
118
|
+
const denormalizedNewDebt = new bn_js_1.default(totalNormalizedLoan.div(vaultTypeAccount.cumulativeRate).floor().toString());
|
119
|
+
this.denormalizedDebt = this.denormalizedDebt.add(denormalizedNewDebt);
|
120
|
+
}
|
121
|
+
/**
|
122
|
+
* Repay debt on a vault
|
123
|
+
*
|
124
|
+
* @param {BN} repayAmount - Normalized debt to repay in (USH) lamports.
|
125
|
+
* @param {VaultType} vaultTypeAccount - Vault's vaultType
|
126
|
+
*
|
127
|
+
*/
|
128
|
+
repayDebt(repayAmount, vaultTypeAccount) {
|
129
|
+
const denormalizedRepayment = new decimal_js_1.default(repayAmount.toString()).div(vaultTypeAccount.cumulativeRate).floor();
|
130
|
+
this.denormalizedDebt = this.denormalizedDebt.sub(new bn_js_1.default(denormalizedRepayment.toString()));
|
131
|
+
}
|
132
|
+
/**
|
133
|
+
* Deposit Collateral
|
134
|
+
*
|
135
|
+
* @param {BN} depositAmount - Amount to deposit in (CollateralMint) lamports
|
136
|
+
*
|
137
|
+
*/
|
138
|
+
depositCollateral(depositAmount) {
|
139
|
+
this.deposited = this.deposited.add(depositAmount);
|
104
140
|
}
|
105
|
-
|
106
|
-
|
141
|
+
/**
|
142
|
+
* Withdraw Collateral
|
143
|
+
*
|
144
|
+
* @param {BN} withdrawAmount - Amount to withdraw in (CollateralMint) lamports
|
145
|
+
*
|
146
|
+
*/
|
147
|
+
withdrawCollateral(withdrawAmount) {
|
148
|
+
this.deposited = this.deposited.sub(withdrawAmount);
|
107
149
|
}
|
108
150
|
redeem() {
|
109
151
|
// TODO - Calculate actual redeem amount and adust correctly
|
110
|
-
this.denormalizedDebt = 0;
|
152
|
+
this.denormalizedDebt = new bn_js_1.default(0);
|
111
153
|
this.vaultStatus = 'initialized';
|
112
154
|
}
|
113
155
|
liquidate() {
|
114
156
|
// TODO - Calculate actual liquidate amount and adust correctly
|
115
|
-
this.denormalizedDebt = 0;
|
157
|
+
this.denormalizedDebt = new bn_js_1.default(0);
|
116
158
|
this.vaultStatus = 'liquidated';
|
117
159
|
}
|
118
160
|
updateDebtAndCollateral(vaultTypeAccountData) {
|
119
|
-
this.denormalizedDebt = vaultTypeAccountData.debtRedistributionProduct
|
161
|
+
this.denormalizedDebt = new bn_js_1.default(vaultTypeAccountData.debtRedistributionProduct
|
120
162
|
.div(this.debtProductSnapshotBytes)
|
121
|
-
.mul(new decimal_js_1.default(this.denormalizedDebt))
|
122
|
-
.
|
123
|
-
|
124
|
-
this.
|
163
|
+
.mul(new decimal_js_1.default(this.denormalizedDebt.toString()))
|
164
|
+
.floor()
|
165
|
+
.toString());
|
166
|
+
const extraCollateralDeposited = new decimal_js_1.default(this.denormalizedDebt.toString()).mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber()).floor();
|
167
|
+
this.deposited = this.deposited.add(new bn_js_1.default(extraCollateralDeposited.toString()));
|
125
168
|
this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator;
|
126
169
|
this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct;
|
127
170
|
}
|
@@ -131,14 +174,14 @@ class VaultAccount {
|
|
131
174
|
arrow = ' <----!!';
|
132
175
|
}
|
133
176
|
let collateralRatio = 'Infinite';
|
134
|
-
if (this.denormalizedDebt
|
135
|
-
collateralRatio = new decimal_js_1.default(this.deposited).div(new decimal_js_1.default(this.denormalizedDebt)).toString();
|
177
|
+
if (this.denormalizedDebt.gt(new bn_js_1.default(0))) {
|
178
|
+
collateralRatio = new decimal_js_1.default(this.deposited.toString()).div(new decimal_js_1.default(this.denormalizedDebt.toString())).toString();
|
136
179
|
}
|
137
180
|
let nextVault = 'None';
|
138
181
|
if (this.nextVaultToRedeem) {
|
139
182
|
nextVault = this.nextVaultToRedeem.toString().substring(0, 6);
|
140
183
|
}
|
141
|
-
return
|
184
|
+
return `${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} ${arrow} `;
|
142
185
|
}
|
143
186
|
/**
|
144
187
|
* Creates a VaultAccount from a slice of data
|
@@ -153,7 +196,7 @@ class VaultAccount {
|
|
153
196
|
* @returns a new VaultAccount
|
154
197
|
*/
|
155
198
|
static FromMiniSlice(data, pubkey) {
|
156
|
-
const props = [borsh.u64('
|
199
|
+
const props = [borsh.u64('deposited'), borsh.u64('denormalizedDebt')];
|
157
200
|
const miniVaultLayout = borsh.struct(props, 'minVaultLayout');
|
158
201
|
const decodedData = miniVaultLayout.decode(data);
|
159
202
|
return new VaultAccount(decodedData, pubkey);
|
@@ -13,13 +13,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
13
|
};
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
15
15
|
exports.getLinkedListAccounts = void 0;
|
16
|
+
const anchor_1 = require("@project-serum/anchor");
|
16
17
|
const underscore_1 = __importDefault(require("underscore"));
|
17
18
|
const Constants_1 = require("../Constants");
|
18
19
|
const VaultAccount_1 = require("../state/VaultAccount");
|
19
20
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
20
21
|
const bs58_1 = __importDefault(require("bs58"));
|
21
22
|
const VaultType_1 = __importDefault(require("../state/VaultType"));
|
22
|
-
|
23
|
+
/**
|
24
|
+
* Get the accounts the left and right for re-inserting in the linked list
|
25
|
+
*
|
26
|
+
* @param {Program<Vault>} program - Anchor program <Vault ILD>
|
27
|
+
* @param {PublicKey} vaultTypeAccountPublicKey - Vault Type Account PublicKey
|
28
|
+
* @param {PublicKey} vaultPublicKey - Vault Account PublicKey
|
29
|
+
* @param {BN} depositAmount - Amount that will be deposited into vault with instruction
|
30
|
+
* @param {BN} withdrawAmount - Amount that will be withdrawn from vault with instruction
|
31
|
+
* @param {BN} loanAmount - Amount that will be deposited into vault with transaction (sans fees)
|
32
|
+
* @param {BN} repayAmount - Amount that will be repaid into vault with transaction
|
33
|
+
* @param {boolean} redeem - True if vault is going to be redeemed fully
|
34
|
+
* @param {boolean} liquidate - True if vault is going to be liquidated fully
|
35
|
+
* @param {VaultAccount[]} cachedVaults - Optional list of cached vaults. Saves a request to the on-chain data.
|
36
|
+
*/
|
37
|
+
function getLinkedListAccounts(program, vaultTypeAccountPublicKey, vaultPublicKey, depositAmount, withdrawAmount, loanAmount, repayAmount, redeem, liquidate, cachedVaults) {
|
23
38
|
return __awaiter(this, void 0, void 0, function* () {
|
24
39
|
const vaultTypeRaw = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
|
25
40
|
const vaultType = new VaultType_1.default(vaultTypeRaw, vaultTypeAccountPublicKey);
|
@@ -50,7 +65,7 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
50
65
|
// })
|
51
66
|
// Remove any vaults with no debt or collateral
|
52
67
|
vaults = underscore_1.default.filter(vaults, (vault) => {
|
53
|
-
return vault.denormalizedDebt
|
68
|
+
return vault.denormalizedDebt.gt(new anchor_1.BN(0)) && vault.deposited.gt(new anchor_1.BN(0));
|
54
69
|
});
|
55
70
|
// Sort them
|
56
71
|
vaults.sort(sortVaults);
|
@@ -101,17 +116,18 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
101
116
|
}
|
102
117
|
// Now that we know it's def in the list, iterate the list and update
|
103
118
|
// this vault with the operation we're going to apply
|
104
|
-
const newNormalizedDebt = new decimal_js_1.default(loanAmount);
|
105
119
|
vaults[indexBefore].updateDebtAndCollateral(vaultType);
|
106
|
-
vaults[indexBefore].addDebt(
|
107
|
-
vaults[indexBefore].
|
120
|
+
vaults[indexBefore].addDebt(loanAmount, vaultType);
|
121
|
+
vaults[indexBefore].repayDebt(repayAmount, vaultType);
|
122
|
+
vaults[indexBefore].depositCollateral(depositAmount);
|
123
|
+
vaults[indexBefore].withdrawCollateral(withdrawAmount);
|
108
124
|
if (liquidate) {
|
109
125
|
vaults[indexBefore].liquidate();
|
110
126
|
}
|
111
127
|
if (redeem) {
|
112
128
|
vaults[indexBefore].redeem();
|
113
129
|
}
|
114
|
-
if (vaults[indexBefore].denormalizedDebt
|
130
|
+
if (vaults[indexBefore].denormalizedDebt.isZero()) {
|
115
131
|
vaults.splice(indexBefore, 1);
|
116
132
|
}
|
117
133
|
// Sort it again since we've changed one vault
|
@@ -154,12 +170,12 @@ exports.getLinkedListAccounts = getLinkedListAccounts;
|
|
154
170
|
// Sort function we can use to sort the vaults
|
155
171
|
// Sorted by collateral ratio. If two are the same, newer vault first
|
156
172
|
function sortVaults(a, b) {
|
157
|
-
const aRatio = a.deposited
|
158
|
-
const bRatio = b.deposited
|
159
|
-
if (aRatio
|
160
|
-
return b.
|
173
|
+
const aRatio = new decimal_js_1.default(a.deposited.toString()).div(new decimal_js_1.default(a.denormalizedDebt.toString()));
|
174
|
+
const bRatio = new decimal_js_1.default(b.deposited.toString()).div(new decimal_js_1.default(b.denormalizedDebt.toString()));
|
175
|
+
if (aRatio.equals(bRatio)) {
|
176
|
+
return a.publicKey.toString() > b.publicKey.toString() ? 1 : -1;
|
161
177
|
}
|
162
|
-
return aRatio -
|
178
|
+
return aRatio.greaterThan(bRatio) ? 1 : -1;
|
163
179
|
}
|
164
180
|
function getMiniVaults(program, vaultTypePublicKey) {
|
165
181
|
return __awaiter(this, void 0, void 0, function* () {
|
@@ -189,8 +205,8 @@ function getMiniVaults(program, vaultTypePublicKey) {
|
|
189
205
|
// Slice the data only to grab the 3 u64's of size 8 bytes each
|
190
206
|
dataSlice: {
|
191
207
|
// See programs/hedge-vault/src/account_data/vault.rs for struct layout
|
192
|
-
offset: 8 + 32,
|
193
|
-
length:
|
208
|
+
offset: 8 + 32 + 8,
|
209
|
+
length: 16,
|
194
210
|
},
|
195
211
|
});
|
196
212
|
return allAccounts.map((vaultData) => {
|
package/package.json
CHANGED
@@ -93,7 +93,7 @@ export async function createVault(
|
|
93
93
|
vaultTypeAccountInfo.collateralMint,
|
94
94
|
history.publicKey,
|
95
95
|
ushMintPublickey,
|
96
|
-
depositAmount,
|
96
|
+
new BN(depositAmount),
|
97
97
|
overrideTime
|
98
98
|
)
|
99
99
|
)
|
@@ -187,7 +187,7 @@ export async function buildCreateVaultTransaction(
|
|
187
187
|
vaultTypeAccountInfo.collateralMint,
|
188
188
|
history.publicKey,
|
189
189
|
ushMintPublickey,
|
190
|
-
depositAmount,
|
190
|
+
new BN(depositAmount),
|
191
191
|
overrideTime
|
192
192
|
)
|
193
193
|
)
|
@@ -221,7 +221,7 @@ export async function createVaultInstruction(
|
|
221
221
|
collateralMint: PublicKey,
|
222
222
|
historyPublicKey: PublicKey,
|
223
223
|
ushMintPublickey: PublicKey,
|
224
|
-
depositAmount:
|
224
|
+
depositAmount: BN,
|
225
225
|
overrideTime?: number
|
226
226
|
): Promise<TransactionInstruction> {
|
227
227
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
@@ -24,7 +24,7 @@ export async function depositLiquidationPool(
|
|
24
24
|
program: Program<Vault>,
|
25
25
|
provider: Provider,
|
26
26
|
payer: Signer,
|
27
|
-
depositAmount:
|
27
|
+
depositAmount: BN,
|
28
28
|
overrideStartTime?: number
|
29
29
|
): Promise<PublicKey> {
|
30
30
|
const ushMintPublickey = await getUshMintPublicKey()
|
@@ -42,7 +42,7 @@ export async function depositLiquidationPool(
|
|
42
42
|
payer.publicKey,
|
43
43
|
payerUshAccount.address,
|
44
44
|
poolPosition.publicKey,
|
45
|
-
depositAmount,
|
45
|
+
new BN(depositAmount),
|
46
46
|
overrideStartTime
|
47
47
|
)
|
48
48
|
)
|
@@ -55,7 +55,7 @@ export async function depositLiquidationPoolInstruction(
|
|
55
55
|
payerPublicKey: PublicKey,
|
56
56
|
payerUshAccount: PublicKey,
|
57
57
|
poolPositionPublicKey: PublicKey,
|
58
|
-
depositAmount:
|
58
|
+
depositAmount: BN,
|
59
59
|
overrideStartTime?: number
|
60
60
|
): Promise<TransactionInstruction> {
|
61
61
|
const liquidationPoolStatePublicKey = await getLiquidationPoolStatePublicKey()
|
@@ -68,7 +68,7 @@ export async function depositLiquidationPoolInstruction(
|
|
68
68
|
|
69
69
|
return await program.methods
|
70
70
|
.depositLiquidationPool(
|
71
|
-
|
71
|
+
depositAmount,
|
72
72
|
new BN(overrideStartTime ?? Math.floor(Date.now() / 1000)) // override current time
|
73
73
|
)
|
74
74
|
.accounts({
|
@@ -30,7 +30,7 @@ export async function depositStakingPool(
|
|
30
30
|
payer.publicKey,
|
31
31
|
poolPosition.publicKey,
|
32
32
|
mintPublicKey,
|
33
|
-
depositAmount,
|
33
|
+
new BN(depositAmount),
|
34
34
|
overrideStartTime
|
35
35
|
)
|
36
36
|
)
|
@@ -43,7 +43,7 @@ export async function depositStakingPoolInstruction(
|
|
43
43
|
payerPublicKey: PublicKey,
|
44
44
|
poolPositionPublicKey: PublicKey,
|
45
45
|
stakedTokenMintPublicKey: PublicKey,
|
46
|
-
depositAmount:
|
46
|
+
depositAmount: BN,
|
47
47
|
overrideStartTime?: number
|
48
48
|
): Promise<TransactionInstruction> {
|
49
49
|
const [poolPublickey] = await getPoolPublicKeyForMint(stakedTokenMintPublicKey)
|
@@ -53,7 +53,7 @@ export async function depositStakingPoolInstruction(
|
|
53
53
|
|
54
54
|
return await program.methods
|
55
55
|
.depositStakingPool(
|
56
|
-
|
56
|
+
depositAmount,
|
57
57
|
new BN(overrideStartTime ?? Math.floor(Date.now() / 1000)) // override current time
|
58
58
|
)
|
59
59
|
.accounts({
|
@@ -67,11 +67,12 @@ export async function depositVault(
|
|
67
67
|
const signers = [payer, history]
|
68
68
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
69
69
|
program,
|
70
|
-
provider,
|
71
70
|
vaultAccount.vaultType,
|
72
71
|
vaultPublicKey,
|
73
|
-
depositAmount,
|
74
|
-
0,
|
72
|
+
new BN(depositAmount),
|
73
|
+
new BN(0),
|
74
|
+
new BN(0),
|
75
|
+
new BN(0),
|
75
76
|
false,
|
76
77
|
false
|
77
78
|
)
|
@@ -111,7 +112,7 @@ export async function depositVault(
|
|
111
112
|
oldSmallerPublicKey,
|
112
113
|
newSmallerPublicKey,
|
113
114
|
newLargerPublicKey,
|
114
|
-
depositAmount,
|
115
|
+
new BN(depositAmount),
|
115
116
|
overrideTime
|
116
117
|
)
|
117
118
|
)
|
@@ -146,12 +147,12 @@ export async function depositVaultInstruction(
|
|
146
147
|
oldSmallerPublicKey: PublicKey,
|
147
148
|
newSmallerPublicKey: PublicKey,
|
148
149
|
newLargerPublicKey: PublicKey,
|
149
|
-
depositAmount:
|
150
|
+
depositAmount: BN,
|
150
151
|
overrideTime?: number
|
151
152
|
): Promise<TransactionInstruction> {
|
152
153
|
return await program.methods
|
153
154
|
.depositVault(
|
154
|
-
|
155
|
+
depositAmount,
|
155
156
|
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
156
157
|
)
|
157
158
|
.accounts({
|
@@ -87,11 +87,12 @@ export async function liquidateVault(
|
|
87
87
|
|
88
88
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
89
89
|
program,
|
90
|
-
provider,
|
91
90
|
vaultAccount.vaultType,
|
92
91
|
vaultPublicKey,
|
93
|
-
0,
|
94
|
-
0,
|
92
|
+
new BN(0),
|
93
|
+
new BN(0),
|
94
|
+
new BN(0),
|
95
|
+
new BN(0),
|
95
96
|
false,
|
96
97
|
true
|
97
98
|
)
|
@@ -59,11 +59,12 @@ export async function loanVault(
|
|
59
59
|
)
|
60
60
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
61
61
|
program,
|
62
|
-
provider,
|
63
62
|
vaultAccount.vaultType,
|
64
63
|
vaultPublicKey,
|
65
|
-
0,
|
66
|
-
|
64
|
+
new BN(0),
|
65
|
+
new BN(0),
|
66
|
+
new BN(loanAmount),
|
67
|
+
new BN(0),
|
67
68
|
false,
|
68
69
|
false
|
69
70
|
)
|
@@ -82,7 +83,7 @@ export async function loanVault(
|
|
82
83
|
oldSmallerPublicKey,
|
83
84
|
newSmallerPublicKey,
|
84
85
|
newLargerPublicKey,
|
85
|
-
loanAmount,
|
86
|
+
new BN(loanAmount),
|
86
87
|
overrideTime
|
87
88
|
)
|
88
89
|
)
|
@@ -102,7 +103,7 @@ export async function loanVaultInstruction(
|
|
102
103
|
oldSmallerPublicKey: PublicKey,
|
103
104
|
newSmallerPublicKey: PublicKey,
|
104
105
|
newLargerPublicKey: PublicKey,
|
105
|
-
loanAmount:
|
106
|
+
loanAmount: BN,
|
106
107
|
overrideTime?: number
|
107
108
|
): Promise<TransactionInstruction> {
|
108
109
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
@@ -116,7 +117,7 @@ export async function loanVaultInstruction(
|
|
116
117
|
|
117
118
|
return await program.methods
|
118
119
|
.loanVault(
|
119
|
-
|
120
|
+
loanAmount,
|
120
121
|
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
121
122
|
)
|
122
123
|
.accounts({
|
@@ -67,11 +67,12 @@ export async function redeemVault(
|
|
67
67
|
|
68
68
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
69
69
|
program,
|
70
|
-
provider,
|
71
70
|
vaultAccount.vaultType,
|
72
71
|
vaultPublicKey,
|
73
|
-
0,
|
74
|
-
0,
|
72
|
+
new BN(0),
|
73
|
+
new BN(0),
|
74
|
+
new BN(0),
|
75
|
+
new BN(0),
|
75
76
|
true,
|
76
77
|
false
|
77
78
|
)
|
@@ -91,7 +92,7 @@ export async function redeemVault(
|
|
91
92
|
oldSmallerPublicKey,
|
92
93
|
newSmallerPublicKey,
|
93
94
|
newLargerPublicKey,
|
94
|
-
redeemAmount,
|
95
|
+
new BN(redeemAmount),
|
95
96
|
transactionOverrideTime
|
96
97
|
)
|
97
98
|
)
|
@@ -112,7 +113,7 @@ export async function redeemVaultInstruction(
|
|
112
113
|
oldSmallerPublicKey: PublicKey,
|
113
114
|
newSmallerPublicKey: PublicKey,
|
114
115
|
newLargerPublicKey: PublicKey,
|
115
|
-
redeemAmount:
|
116
|
+
redeemAmount: BN,
|
116
117
|
transactionOverrideTime?: number
|
117
118
|
): Promise<TransactionInstruction> {
|
118
119
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
@@ -125,7 +126,7 @@ export async function redeemVaultInstruction(
|
|
125
126
|
)
|
126
127
|
return await program.methods
|
127
128
|
.redeemVault(
|
128
|
-
|
129
|
+
redeemAmount,
|
129
130
|
new BN(transactionOverrideTime ?? Date.now() / 1000) // override start time
|
130
131
|
)
|
131
132
|
.accounts({
|
@@ -75,12 +75,12 @@ const pythAccounts = {
|
|
75
75
|
}
|
76
76
|
const chainlinkAccounts = {
|
77
77
|
Testing: SystemProgram.programId,
|
78
|
-
Devnet: new PublicKey('
|
78
|
+
Devnet: new PublicKey('HgTtcbcmp5BeThax5AU8vg4VwK79qAvAKKFMs8txMLW6'),
|
79
79
|
MainnetBeta: SystemProgram.programId, // CHAINLINK NOT ON MAINNET YET
|
80
80
|
}
|
81
81
|
const switchboardAccounts = {
|
82
82
|
Testing: SystemProgram.programId,
|
83
83
|
// Devnet: new PublicKey('GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR'),
|
84
|
-
Devnet: new PublicKey('
|
84
|
+
Devnet: new PublicKey('GvDMxPzN1sCj7L26YDK2HnMRXEQmQ2aemov8YBtPS7vR'),
|
85
85
|
MainnetBeta: SystemProgram.programId, // Switchboard V2 NOT ON MAINNET YET
|
86
86
|
}
|
@@ -49,11 +49,12 @@ export async function repayVault(
|
|
49
49
|
|
50
50
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
51
51
|
program,
|
52
|
-
provider,
|
53
52
|
vaultAccount.vaultType,
|
54
53
|
vaultPublicKey,
|
55
|
-
0,
|
56
|
-
|
54
|
+
new BN(0),
|
55
|
+
new BN(0),
|
56
|
+
new BN(0),
|
57
|
+
new BN(Math.abs(repayAmount)),
|
57
58
|
false,
|
58
59
|
false
|
59
60
|
)
|
@@ -72,7 +73,7 @@ export async function repayVault(
|
|
72
73
|
oldSmallerPublicKey,
|
73
74
|
newSmallerPublicKey,
|
74
75
|
newLargerPublicKey,
|
75
|
-
repayAmount,
|
76
|
+
new BN(repayAmount),
|
76
77
|
overrideTime
|
77
78
|
)
|
78
79
|
)
|
@@ -92,7 +93,7 @@ export async function repayVaultInstruction(
|
|
92
93
|
oldSmallerPublicKey: PublicKey,
|
93
94
|
newSmallerPublicKey: PublicKey,
|
94
95
|
newLargerPublicKey: PublicKey,
|
95
|
-
repayAmount:
|
96
|
+
repayAmount: BN,
|
96
97
|
overrideTime?: number
|
97
98
|
): Promise<TransactionInstruction> {
|
98
99
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
@@ -106,7 +107,7 @@ export async function repayVaultInstruction(
|
|
106
107
|
|
107
108
|
return await program.methods
|
108
109
|
.repayVault(
|
109
|
-
|
110
|
+
repayAmount,
|
110
111
|
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
111
112
|
)
|
112
113
|
.accounts({
|
@@ -69,11 +69,12 @@ export async function withdrawVault(
|
|
69
69
|
|
70
70
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
71
71
|
program,
|
72
|
-
provider,
|
73
72
|
vaultAccount.vaultType,
|
74
73
|
vaultPublicKey,
|
75
|
-
|
76
|
-
|
74
|
+
new BN(0),
|
75
|
+
new BN(Math.abs(withdrawAmount)),
|
76
|
+
new BN(0),
|
77
|
+
new BN(0),
|
77
78
|
false,
|
78
79
|
false
|
79
80
|
)
|
@@ -95,7 +96,7 @@ export async function withdrawVault(
|
|
95
96
|
oldSmallerPublicKey,
|
96
97
|
newSmallerPublicKey,
|
97
98
|
newLargerPublicKey,
|
98
|
-
withdrawAmount,
|
99
|
+
new BN(withdrawAmount),
|
99
100
|
overrideTime
|
100
101
|
)
|
101
102
|
)
|
@@ -119,12 +120,12 @@ export async function withdrawVaultInstruction(
|
|
119
120
|
oldSmallerPublicKey: PublicKey,
|
120
121
|
newSmallerPublicKey: PublicKey,
|
121
122
|
newLargerPublicKey: PublicKey,
|
122
|
-
withdrawAmount:
|
123
|
+
withdrawAmount: BN,
|
123
124
|
overrideTime?: number
|
124
125
|
): Promise<TransactionInstruction> {
|
125
126
|
return await program.methods
|
126
127
|
.withdrawVault(
|
127
|
-
|
128
|
+
withdrawAmount,
|
128
129
|
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
129
130
|
)
|
130
131
|
.accounts({
|