hedge-web3 0.2.17 → 0.2.20
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/declarations/idl/vault.d.ts +91 -8
- package/declarations/instructions/transferVault.d.ts +19 -0
- package/declarations/instructions/updateVaultType.d.ts +1 -0
- package/declarations/state/VaultAccount.d.ts +1 -2
- package/lib/idl/vault.js +91 -8
- package/lib/instructions/transferVault.js +55 -0
- package/lib/instructions/updateVaultType.js +9 -8
- package/lib/state/VaultAccount.js +3 -1
- package/package.json +1 -1
- package/src/idl/vault.ts +182 -16
- package/src/instructions/psmEditAccount.rs +124 -0
- package/src/instructions/transferVault.ts +99 -0
- package/src/instructions/updateVaultType.ts +2 -0
- package/src/state/VaultAccount.ts +9 -10
@@ -76,6 +76,10 @@ export declare type Vault = {
|
|
76
76
|
"name": "maxDebtExtended";
|
77
77
|
"type": "u64";
|
78
78
|
},
|
79
|
+
{
|
80
|
+
"name": "emergencyModeThreshold";
|
81
|
+
"type": "u64";
|
82
|
+
},
|
79
83
|
{
|
80
84
|
"name": "canBeRedeemed";
|
81
85
|
"type": "bool";
|
@@ -1802,8 +1806,56 @@ export declare type Vault = {
|
|
1802
1806
|
"type": "u64";
|
1803
1807
|
},
|
1804
1808
|
{
|
1805
|
-
"name": "
|
1806
|
-
"type": "
|
1809
|
+
"name": "overrideCurrentTime";
|
1810
|
+
"type": "i64";
|
1811
|
+
}
|
1812
|
+
];
|
1813
|
+
},
|
1814
|
+
{
|
1815
|
+
"name": "psmEditAccount";
|
1816
|
+
"accounts": [
|
1817
|
+
{
|
1818
|
+
"name": "payer";
|
1819
|
+
"isMut": true;
|
1820
|
+
"isSigner": true;
|
1821
|
+
},
|
1822
|
+
{
|
1823
|
+
"name": "vaultSystemState";
|
1824
|
+
"isMut": true;
|
1825
|
+
"isSigner": false;
|
1826
|
+
},
|
1827
|
+
{
|
1828
|
+
"name": "psmAccount";
|
1829
|
+
"isMut": true;
|
1830
|
+
"isSigner": false;
|
1831
|
+
},
|
1832
|
+
{
|
1833
|
+
"name": "collateralMint";
|
1834
|
+
"isMut": false;
|
1835
|
+
"isSigner": false;
|
1836
|
+
},
|
1837
|
+
{
|
1838
|
+
"name": "systemProgram";
|
1839
|
+
"isMut": false;
|
1840
|
+
"isSigner": false;
|
1841
|
+
}
|
1842
|
+
];
|
1843
|
+
"args": [
|
1844
|
+
{
|
1845
|
+
"name": "mintFee";
|
1846
|
+
"type": "u64";
|
1847
|
+
},
|
1848
|
+
{
|
1849
|
+
"name": "redeemFee";
|
1850
|
+
"type": "u64";
|
1851
|
+
},
|
1852
|
+
{
|
1853
|
+
"name": "debtLimit";
|
1854
|
+
"type": "u64";
|
1855
|
+
},
|
1856
|
+
{
|
1857
|
+
"name": "minSwap";
|
1858
|
+
"type": "u64";
|
1807
1859
|
},
|
1808
1860
|
{
|
1809
1861
|
"name": "overrideCurrentTime";
|
@@ -2746,6 +2798,12 @@ export declare type Vault = {
|
|
2746
2798
|
"option": "u64";
|
2747
2799
|
};
|
2748
2800
|
},
|
2801
|
+
{
|
2802
|
+
"name": "emergencyModeThreshold";
|
2803
|
+
"type": {
|
2804
|
+
"option": "u64";
|
2805
|
+
};
|
2806
|
+
},
|
2749
2807
|
{
|
2750
2808
|
"name": "oracleChainlink";
|
2751
2809
|
"type": {
|
@@ -3018,6 +3076,26 @@ export declare type Vault = {
|
|
3018
3076
|
"index": false;
|
3019
3077
|
}
|
3020
3078
|
];
|
3079
|
+
},
|
3080
|
+
{
|
3081
|
+
"name": "VaultTransferEvent";
|
3082
|
+
"fields": [
|
3083
|
+
{
|
3084
|
+
"name": "vault";
|
3085
|
+
"type": "publicKey";
|
3086
|
+
"index": false;
|
3087
|
+
},
|
3088
|
+
{
|
3089
|
+
"name": "oldOwner";
|
3090
|
+
"type": "publicKey";
|
3091
|
+
"index": false;
|
3092
|
+
},
|
3093
|
+
{
|
3094
|
+
"name": "newOwner";
|
3095
|
+
"type": "publicKey";
|
3096
|
+
"index": false;
|
3097
|
+
}
|
3098
|
+
];
|
3021
3099
|
}
|
3022
3100
|
];
|
3023
3101
|
"errors": [
|
@@ -3163,31 +3241,36 @@ export declare type Vault = {
|
|
3163
3241
|
},
|
3164
3242
|
{
|
3165
3243
|
"code": 6028;
|
3166
|
-
"name": "
|
3167
|
-
"msg": "PSM
|
3244
|
+
"name": "PsmMaxDebtReached";
|
3245
|
+
"msg": "PSM - Max Debt reached";
|
3168
3246
|
},
|
3169
3247
|
{
|
3170
3248
|
"code": 6029;
|
3249
|
+
"name": "PsmMinSwapAmount";
|
3250
|
+
"msg": "PSM - Need more to swap";
|
3251
|
+
},
|
3252
|
+
{
|
3253
|
+
"code": 6030;
|
3171
3254
|
"name": "UpdateVaultTypeBadMaxDebtExtended";
|
3172
3255
|
"msg": "New Max debt extended value is less than the current debt!";
|
3173
3256
|
},
|
3174
3257
|
{
|
3175
|
-
"code":
|
3258
|
+
"code": 6031;
|
3176
3259
|
"name": "UpdateVaultTypeNoEnabledOracles";
|
3177
3260
|
"msg": "No Enabled Oracles!";
|
3178
3261
|
},
|
3179
3262
|
{
|
3180
|
-
"code":
|
3263
|
+
"code": 6032;
|
3181
3264
|
"name": "UpdateVaultTypeDuplicateOraclePriorities";
|
3182
3265
|
"msg": "Duplicate Oracle Priorities";
|
3183
3266
|
},
|
3184
3267
|
{
|
3185
|
-
"code":
|
3268
|
+
"code": 6033;
|
3186
3269
|
"name": "UpdateVaultTypeInvalidOraclePriority";
|
3187
3270
|
"msg": "Invalid Oracle Priority";
|
3188
3271
|
},
|
3189
3272
|
{
|
3190
|
-
"code":
|
3273
|
+
"code": 6034;
|
3191
3274
|
"name": "OracleUpdateFailed";
|
3192
3275
|
"msg": "OracleUpdateFailed";
|
3193
3276
|
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/// <reference types="bn.js" />
|
2
|
+
import { BN, Program, Provider } from '@project-serum/anchor';
|
3
|
+
import { PublicKey, Signer, TransactionInstruction } from '@solana/web3.js';
|
4
|
+
import { Vault } from '../idl/vault';
|
5
|
+
export interface VaultTypeConfig {
|
6
|
+
maxDebtExtended?: BN;
|
7
|
+
minDebtPerVault?: BN;
|
8
|
+
loanInitFee?: BN;
|
9
|
+
emergencyModeThreshold?: BN;
|
10
|
+
oracleChainlink?: PublicKey;
|
11
|
+
oraclePyth?: PublicKey;
|
12
|
+
oracleSwitchboard?: PublicKey;
|
13
|
+
priorityPyth?: number;
|
14
|
+
priorityChainlink?: number;
|
15
|
+
prioritySwitchboard?: number;
|
16
|
+
deprecated?: boolean;
|
17
|
+
}
|
18
|
+
export declare function transferVault(program: Program<Vault>, provider: Provider, payer: Signer, vaultTypeAccount: PublicKey, oracleInfoAccount: PublicKey, config: VaultTypeConfig): Promise<PublicKey>;
|
19
|
+
export declare function transferVaultInstruction(program: Program<Vault>, vaultSystemStatePublicKey: PublicKey, payerPublicKey: PublicKey, vaultTypeAccount: PublicKey, oracleInfoAccount: PublicKey, vaultTypeConfig: VaultTypeConfig): Promise<TransactionInstruction>;
|
@@ -11,8 +11,7 @@ export declare class VaultAccount {
|
|
11
11
|
publicKey: PublicKey;
|
12
12
|
/** The public key of the vault owner. */
|
13
13
|
vaultOwner: PublicKey;
|
14
|
-
/** The public key of the vault owner. */
|
15
|
-
pdaSalt: string;
|
14
|
+
/** The public key of the vault owner. */ pdaSalt: string;
|
16
15
|
/** The deposited collateral of the vault (in SOL Lamports). */
|
17
16
|
deposited: BN;
|
18
17
|
/** The outstanding debt of the vault (in USH Lamports). Denormalized to time 0. */
|
package/lib/idl/vault.js
CHANGED
@@ -79,6 +79,10 @@ exports.IDL = {
|
|
79
79
|
"name": "maxDebtExtended",
|
80
80
|
"type": "u64"
|
81
81
|
},
|
82
|
+
{
|
83
|
+
"name": "emergencyModeThreshold",
|
84
|
+
"type": "u64"
|
85
|
+
},
|
82
86
|
{
|
83
87
|
"name": "canBeRedeemed",
|
84
88
|
"type": "bool"
|
@@ -1805,8 +1809,56 @@ exports.IDL = {
|
|
1805
1809
|
"type": "u64"
|
1806
1810
|
},
|
1807
1811
|
{
|
1808
|
-
"name": "
|
1809
|
-
"type": "
|
1812
|
+
"name": "overrideCurrentTime",
|
1813
|
+
"type": "i64"
|
1814
|
+
}
|
1815
|
+
]
|
1816
|
+
},
|
1817
|
+
{
|
1818
|
+
"name": "psmEditAccount",
|
1819
|
+
"accounts": [
|
1820
|
+
{
|
1821
|
+
"name": "payer",
|
1822
|
+
"isMut": true,
|
1823
|
+
"isSigner": true
|
1824
|
+
},
|
1825
|
+
{
|
1826
|
+
"name": "vaultSystemState",
|
1827
|
+
"isMut": true,
|
1828
|
+
"isSigner": false
|
1829
|
+
},
|
1830
|
+
{
|
1831
|
+
"name": "psmAccount",
|
1832
|
+
"isMut": true,
|
1833
|
+
"isSigner": false
|
1834
|
+
},
|
1835
|
+
{
|
1836
|
+
"name": "collateralMint",
|
1837
|
+
"isMut": false,
|
1838
|
+
"isSigner": false
|
1839
|
+
},
|
1840
|
+
{
|
1841
|
+
"name": "systemProgram",
|
1842
|
+
"isMut": false,
|
1843
|
+
"isSigner": false
|
1844
|
+
}
|
1845
|
+
],
|
1846
|
+
"args": [
|
1847
|
+
{
|
1848
|
+
"name": "mintFee",
|
1849
|
+
"type": "u64"
|
1850
|
+
},
|
1851
|
+
{
|
1852
|
+
"name": "redeemFee",
|
1853
|
+
"type": "u64"
|
1854
|
+
},
|
1855
|
+
{
|
1856
|
+
"name": "debtLimit",
|
1857
|
+
"type": "u64"
|
1858
|
+
},
|
1859
|
+
{
|
1860
|
+
"name": "minSwap",
|
1861
|
+
"type": "u64"
|
1810
1862
|
},
|
1811
1863
|
{
|
1812
1864
|
"name": "overrideCurrentTime",
|
@@ -2749,6 +2801,12 @@ exports.IDL = {
|
|
2749
2801
|
"option": "u64"
|
2750
2802
|
}
|
2751
2803
|
},
|
2804
|
+
{
|
2805
|
+
"name": "emergencyModeThreshold",
|
2806
|
+
"type": {
|
2807
|
+
"option": "u64"
|
2808
|
+
}
|
2809
|
+
},
|
2752
2810
|
{
|
2753
2811
|
"name": "oracleChainlink",
|
2754
2812
|
"type": {
|
@@ -3021,6 +3079,26 @@ exports.IDL = {
|
|
3021
3079
|
"index": false
|
3022
3080
|
}
|
3023
3081
|
]
|
3082
|
+
},
|
3083
|
+
{
|
3084
|
+
"name": "VaultTransferEvent",
|
3085
|
+
"fields": [
|
3086
|
+
{
|
3087
|
+
"name": "vault",
|
3088
|
+
"type": "publicKey",
|
3089
|
+
"index": false
|
3090
|
+
},
|
3091
|
+
{
|
3092
|
+
"name": "oldOwner",
|
3093
|
+
"type": "publicKey",
|
3094
|
+
"index": false
|
3095
|
+
},
|
3096
|
+
{
|
3097
|
+
"name": "newOwner",
|
3098
|
+
"type": "publicKey",
|
3099
|
+
"index": false
|
3100
|
+
}
|
3101
|
+
]
|
3024
3102
|
}
|
3025
3103
|
],
|
3026
3104
|
"errors": [
|
@@ -3166,31 +3244,36 @@ exports.IDL = {
|
|
3166
3244
|
},
|
3167
3245
|
{
|
3168
3246
|
"code": 6028,
|
3169
|
-
"name": "
|
3170
|
-
"msg": "PSM
|
3247
|
+
"name": "PsmMaxDebtReached",
|
3248
|
+
"msg": "PSM - Max Debt reached"
|
3171
3249
|
},
|
3172
3250
|
{
|
3173
3251
|
"code": 6029,
|
3252
|
+
"name": "PsmMinSwapAmount",
|
3253
|
+
"msg": "PSM - Need more to swap"
|
3254
|
+
},
|
3255
|
+
{
|
3256
|
+
"code": 6030,
|
3174
3257
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
3175
3258
|
"msg": "New Max debt extended value is less than the current debt!"
|
3176
3259
|
},
|
3177
3260
|
{
|
3178
|
-
"code":
|
3261
|
+
"code": 6031,
|
3179
3262
|
"name": "UpdateVaultTypeNoEnabledOracles",
|
3180
3263
|
"msg": "No Enabled Oracles!"
|
3181
3264
|
},
|
3182
3265
|
{
|
3183
|
-
"code":
|
3266
|
+
"code": 6032,
|
3184
3267
|
"name": "UpdateVaultTypeDuplicateOraclePriorities",
|
3185
3268
|
"msg": "Duplicate Oracle Priorities"
|
3186
3269
|
},
|
3187
3270
|
{
|
3188
|
-
"code":
|
3271
|
+
"code": 6033,
|
3189
3272
|
"name": "UpdateVaultTypeInvalidOraclePriority",
|
3190
3273
|
"msg": "Invalid Oracle Priority"
|
3191
3274
|
},
|
3192
3275
|
{
|
3193
|
-
"code":
|
3276
|
+
"code": 6034,
|
3194
3277
|
"name": "OracleUpdateFailed",
|
3195
3278
|
"msg": "OracleUpdateFailed"
|
3196
3279
|
}
|
@@ -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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.transferVaultInstruction = exports.transferVault = void 0;
|
16
|
+
const web3_js_1 = require("@solana/web3.js");
|
17
|
+
const Constants_1 = require("../Constants");
|
18
|
+
const sendAndConfirmWithDebug_1 = __importDefault(require("../utils/sendAndConfirmWithDebug"));
|
19
|
+
function transferVault(program, provider, payer, vaultTypeAccount, oracleInfoAccount, config) {
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
21
|
+
const vaultSystemStatePublicKey = yield (0, Constants_1.getVaultSystemStatePublicKey)();
|
22
|
+
const transaction = new web3_js_1.Transaction().add(yield transferVaultInstruction(program, vaultSystemStatePublicKey, payer.publicKey, vaultTypeAccount, oracleInfoAccount, config));
|
23
|
+
yield (0, sendAndConfirmWithDebug_1.default)(provider.connection, transaction, [payer]);
|
24
|
+
return vaultSystemStatePublicKey;
|
25
|
+
});
|
26
|
+
}
|
27
|
+
exports.transferVault = transferVault;
|
28
|
+
function transferVaultInstruction(program, vaultSystemStatePublicKey, payerPublicKey, vaultTypeAccount, oracleInfoAccount, vaultTypeConfig) {
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
30
|
+
return __awaiter(this, void 0, void 0, function* () {
|
31
|
+
const config = {
|
32
|
+
maxDebtExtended: (_a = vaultTypeConfig.maxDebtExtended) !== null && _a !== void 0 ? _a : null,
|
33
|
+
minDebtPerVault: (_b = vaultTypeConfig.minDebtPerVault) !== null && _b !== void 0 ? _b : null,
|
34
|
+
loanInitFee: (_c = vaultTypeConfig.loanInitFee) !== null && _c !== void 0 ? _c : null,
|
35
|
+
emergencyModeThreshold: (_d = vaultTypeConfig.emergencyModeThreshold) !== null && _d !== void 0 ? _d : null,
|
36
|
+
oracleChainlink: (_e = vaultTypeConfig.oracleChainlink) !== null && _e !== void 0 ? _e : null,
|
37
|
+
oraclePyth: (_f = vaultTypeConfig.oraclePyth) !== null && _f !== void 0 ? _f : null,
|
38
|
+
oracleSwitchboard: (_g = vaultTypeConfig.oracleSwitchboard) !== null && _g !== void 0 ? _g : null,
|
39
|
+
deprecated: (_h = vaultTypeConfig.deprecated) !== null && _h !== void 0 ? _h : null,
|
40
|
+
priorityPyth: (_j = vaultTypeConfig.priorityPyth) !== null && _j !== void 0 ? _j : null,
|
41
|
+
priorityChainlink: (_k = vaultTypeConfig.priorityChainlink) !== null && _k !== void 0 ? _k : null,
|
42
|
+
prioritySwitchboard: (_l = vaultTypeConfig.prioritySwitchboard) !== null && _l !== void 0 ? _l : null,
|
43
|
+
};
|
44
|
+
return yield program.methods
|
45
|
+
.updateVaultType(config)
|
46
|
+
.accounts({
|
47
|
+
payer: payerPublicKey,
|
48
|
+
vaultSystemState: vaultSystemStatePublicKey,
|
49
|
+
vaultType: vaultTypeAccount,
|
50
|
+
oracleInfoAccount: oracleInfoAccount,
|
51
|
+
})
|
52
|
+
.instruction();
|
53
|
+
});
|
54
|
+
}
|
55
|
+
exports.transferVaultInstruction = transferVaultInstruction;
|
@@ -26,19 +26,20 @@ function updateVaultType(program, provider, payer, vaultTypeAccount, oracleInfoA
|
|
26
26
|
}
|
27
27
|
exports.updateVaultType = updateVaultType;
|
28
28
|
function updateVaultTypeStatusInstruction(program, vaultSystemStatePublicKey, payerPublicKey, vaultTypeAccount, oracleInfoAccount, vaultTypeConfig) {
|
29
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
29
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
30
30
|
return __awaiter(this, void 0, void 0, function* () {
|
31
31
|
const config = {
|
32
32
|
maxDebtExtended: (_a = vaultTypeConfig.maxDebtExtended) !== null && _a !== void 0 ? _a : null,
|
33
33
|
minDebtPerVault: (_b = vaultTypeConfig.minDebtPerVault) !== null && _b !== void 0 ? _b : null,
|
34
34
|
loanInitFee: (_c = vaultTypeConfig.loanInitFee) !== null && _c !== void 0 ? _c : null,
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
35
|
+
emergencyModeThreshold: (_d = vaultTypeConfig.emergencyModeThreshold) !== null && _d !== void 0 ? _d : null,
|
36
|
+
oracleChainlink: (_e = vaultTypeConfig.oracleChainlink) !== null && _e !== void 0 ? _e : null,
|
37
|
+
oraclePyth: (_f = vaultTypeConfig.oraclePyth) !== null && _f !== void 0 ? _f : null,
|
38
|
+
oracleSwitchboard: (_g = vaultTypeConfig.oracleSwitchboard) !== null && _g !== void 0 ? _g : null,
|
39
|
+
deprecated: (_h = vaultTypeConfig.deprecated) !== null && _h !== void 0 ? _h : null,
|
40
|
+
priorityPyth: (_j = vaultTypeConfig.priorityPyth) !== null && _j !== void 0 ? _j : null,
|
41
|
+
priorityChainlink: (_k = vaultTypeConfig.priorityChainlink) !== null && _k !== void 0 ? _k : null,
|
42
|
+
prioritySwitchboard: (_l = vaultTypeConfig.prioritySwitchboard) !== null && _l !== void 0 ? _l : null,
|
42
43
|
};
|
43
44
|
return yield program.methods
|
44
45
|
.updateVaultType(config)
|
@@ -163,7 +163,9 @@ class VaultAccount {
|
|
163
163
|
.mul(new decimal_js_1.default(this.denormalizedDebt.toString()))
|
164
164
|
.floor()
|
165
165
|
.toString());
|
166
|
-
const extraCollateralDeposited = new decimal_js_1.default(this.denormalizedDebt.toString())
|
166
|
+
const extraCollateralDeposited = new decimal_js_1.default(this.denormalizedDebt.toString())
|
167
|
+
.mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber())
|
168
|
+
.floor();
|
167
169
|
this.deposited = this.deposited.add(new bn_js_1.default(extraCollateralDeposited.toString()));
|
168
170
|
this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator;
|
169
171
|
this.debtProductSnapshotBytes = vaultTypeAccountData.debtRedistributionProduct;
|
package/package.json
CHANGED
package/src/idl/vault.ts
CHANGED
@@ -76,6 +76,10 @@ export type Vault = {
|
|
76
76
|
"name": "maxDebtExtended",
|
77
77
|
"type": "u64"
|
78
78
|
},
|
79
|
+
{
|
80
|
+
"name": "emergencyModeThreshold",
|
81
|
+
"type": "u64"
|
82
|
+
},
|
79
83
|
{
|
80
84
|
"name": "canBeRedeemed",
|
81
85
|
"type": "bool"
|
@@ -1802,8 +1806,56 @@ export type Vault = {
|
|
1802
1806
|
"type": "u64"
|
1803
1807
|
},
|
1804
1808
|
{
|
1805
|
-
"name": "
|
1806
|
-
"type": "
|
1809
|
+
"name": "overrideCurrentTime",
|
1810
|
+
"type": "i64"
|
1811
|
+
}
|
1812
|
+
]
|
1813
|
+
},
|
1814
|
+
{
|
1815
|
+
"name": "psmEditAccount",
|
1816
|
+
"accounts": [
|
1817
|
+
{
|
1818
|
+
"name": "payer",
|
1819
|
+
"isMut": true,
|
1820
|
+
"isSigner": true
|
1821
|
+
},
|
1822
|
+
{
|
1823
|
+
"name": "vaultSystemState",
|
1824
|
+
"isMut": true,
|
1825
|
+
"isSigner": false
|
1826
|
+
},
|
1827
|
+
{
|
1828
|
+
"name": "psmAccount",
|
1829
|
+
"isMut": true,
|
1830
|
+
"isSigner": false
|
1831
|
+
},
|
1832
|
+
{
|
1833
|
+
"name": "collateralMint",
|
1834
|
+
"isMut": false,
|
1835
|
+
"isSigner": false
|
1836
|
+
},
|
1837
|
+
{
|
1838
|
+
"name": "systemProgram",
|
1839
|
+
"isMut": false,
|
1840
|
+
"isSigner": false
|
1841
|
+
}
|
1842
|
+
],
|
1843
|
+
"args": [
|
1844
|
+
{
|
1845
|
+
"name": "mintFee",
|
1846
|
+
"type": "u64"
|
1847
|
+
},
|
1848
|
+
{
|
1849
|
+
"name": "redeemFee",
|
1850
|
+
"type": "u64"
|
1851
|
+
},
|
1852
|
+
{
|
1853
|
+
"name": "debtLimit",
|
1854
|
+
"type": "u64"
|
1855
|
+
},
|
1856
|
+
{
|
1857
|
+
"name": "minSwap",
|
1858
|
+
"type": "u64"
|
1807
1859
|
},
|
1808
1860
|
{
|
1809
1861
|
"name": "overrideCurrentTime",
|
@@ -2746,6 +2798,12 @@ export type Vault = {
|
|
2746
2798
|
"option": "u64"
|
2747
2799
|
}
|
2748
2800
|
},
|
2801
|
+
{
|
2802
|
+
"name": "emergencyModeThreshold",
|
2803
|
+
"type": {
|
2804
|
+
"option": "u64"
|
2805
|
+
}
|
2806
|
+
},
|
2749
2807
|
{
|
2750
2808
|
"name": "oracleChainlink",
|
2751
2809
|
"type": {
|
@@ -3018,6 +3076,26 @@ export type Vault = {
|
|
3018
3076
|
"index": false
|
3019
3077
|
}
|
3020
3078
|
]
|
3079
|
+
},
|
3080
|
+
{
|
3081
|
+
"name": "VaultTransferEvent",
|
3082
|
+
"fields": [
|
3083
|
+
{
|
3084
|
+
"name": "vault",
|
3085
|
+
"type": "publicKey",
|
3086
|
+
"index": false
|
3087
|
+
},
|
3088
|
+
{
|
3089
|
+
"name": "oldOwner",
|
3090
|
+
"type": "publicKey",
|
3091
|
+
"index": false
|
3092
|
+
},
|
3093
|
+
{
|
3094
|
+
"name": "newOwner",
|
3095
|
+
"type": "publicKey",
|
3096
|
+
"index": false
|
3097
|
+
}
|
3098
|
+
]
|
3021
3099
|
}
|
3022
3100
|
],
|
3023
3101
|
"errors": [
|
@@ -3163,31 +3241,36 @@ export type Vault = {
|
|
3163
3241
|
},
|
3164
3242
|
{
|
3165
3243
|
"code": 6028,
|
3166
|
-
"name": "
|
3167
|
-
"msg": "PSM
|
3244
|
+
"name": "PsmMaxDebtReached",
|
3245
|
+
"msg": "PSM - Max Debt reached"
|
3168
3246
|
},
|
3169
3247
|
{
|
3170
3248
|
"code": 6029,
|
3249
|
+
"name": "PsmMinSwapAmount",
|
3250
|
+
"msg": "PSM - Need more to swap"
|
3251
|
+
},
|
3252
|
+
{
|
3253
|
+
"code": 6030,
|
3171
3254
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
3172
3255
|
"msg": "New Max debt extended value is less than the current debt!"
|
3173
3256
|
},
|
3174
3257
|
{
|
3175
|
-
"code":
|
3258
|
+
"code": 6031,
|
3176
3259
|
"name": "UpdateVaultTypeNoEnabledOracles",
|
3177
3260
|
"msg": "No Enabled Oracles!"
|
3178
3261
|
},
|
3179
3262
|
{
|
3180
|
-
"code":
|
3263
|
+
"code": 6032,
|
3181
3264
|
"name": "UpdateVaultTypeDuplicateOraclePriorities",
|
3182
3265
|
"msg": "Duplicate Oracle Priorities"
|
3183
3266
|
},
|
3184
3267
|
{
|
3185
|
-
"code":
|
3268
|
+
"code": 6033,
|
3186
3269
|
"name": "UpdateVaultTypeInvalidOraclePriority",
|
3187
3270
|
"msg": "Invalid Oracle Priority"
|
3188
3271
|
},
|
3189
3272
|
{
|
3190
|
-
"code":
|
3273
|
+
"code": 6034,
|
3191
3274
|
"name": "OracleUpdateFailed",
|
3192
3275
|
"msg": "OracleUpdateFailed"
|
3193
3276
|
}
|
@@ -3272,6 +3355,10 @@ export const IDL: Vault = {
|
|
3272
3355
|
"name": "maxDebtExtended",
|
3273
3356
|
"type": "u64"
|
3274
3357
|
},
|
3358
|
+
{
|
3359
|
+
"name": "emergencyModeThreshold",
|
3360
|
+
"type": "u64"
|
3361
|
+
},
|
3275
3362
|
{
|
3276
3363
|
"name": "canBeRedeemed",
|
3277
3364
|
"type": "bool"
|
@@ -4998,8 +5085,56 @@ export const IDL: Vault = {
|
|
4998
5085
|
"type": "u64"
|
4999
5086
|
},
|
5000
5087
|
{
|
5001
|
-
"name": "
|
5002
|
-
"type": "
|
5088
|
+
"name": "overrideCurrentTime",
|
5089
|
+
"type": "i64"
|
5090
|
+
}
|
5091
|
+
]
|
5092
|
+
},
|
5093
|
+
{
|
5094
|
+
"name": "psmEditAccount",
|
5095
|
+
"accounts": [
|
5096
|
+
{
|
5097
|
+
"name": "payer",
|
5098
|
+
"isMut": true,
|
5099
|
+
"isSigner": true
|
5100
|
+
},
|
5101
|
+
{
|
5102
|
+
"name": "vaultSystemState",
|
5103
|
+
"isMut": true,
|
5104
|
+
"isSigner": false
|
5105
|
+
},
|
5106
|
+
{
|
5107
|
+
"name": "psmAccount",
|
5108
|
+
"isMut": true,
|
5109
|
+
"isSigner": false
|
5110
|
+
},
|
5111
|
+
{
|
5112
|
+
"name": "collateralMint",
|
5113
|
+
"isMut": false,
|
5114
|
+
"isSigner": false
|
5115
|
+
},
|
5116
|
+
{
|
5117
|
+
"name": "systemProgram",
|
5118
|
+
"isMut": false,
|
5119
|
+
"isSigner": false
|
5120
|
+
}
|
5121
|
+
],
|
5122
|
+
"args": [
|
5123
|
+
{
|
5124
|
+
"name": "mintFee",
|
5125
|
+
"type": "u64"
|
5126
|
+
},
|
5127
|
+
{
|
5128
|
+
"name": "redeemFee",
|
5129
|
+
"type": "u64"
|
5130
|
+
},
|
5131
|
+
{
|
5132
|
+
"name": "debtLimit",
|
5133
|
+
"type": "u64"
|
5134
|
+
},
|
5135
|
+
{
|
5136
|
+
"name": "minSwap",
|
5137
|
+
"type": "u64"
|
5003
5138
|
},
|
5004
5139
|
{
|
5005
5140
|
"name": "overrideCurrentTime",
|
@@ -5942,6 +6077,12 @@ export const IDL: Vault = {
|
|
5942
6077
|
"option": "u64"
|
5943
6078
|
}
|
5944
6079
|
},
|
6080
|
+
{
|
6081
|
+
"name": "emergencyModeThreshold",
|
6082
|
+
"type": {
|
6083
|
+
"option": "u64"
|
6084
|
+
}
|
6085
|
+
},
|
5945
6086
|
{
|
5946
6087
|
"name": "oracleChainlink",
|
5947
6088
|
"type": {
|
@@ -6214,6 +6355,26 @@ export const IDL: Vault = {
|
|
6214
6355
|
"index": false
|
6215
6356
|
}
|
6216
6357
|
]
|
6358
|
+
},
|
6359
|
+
{
|
6360
|
+
"name": "VaultTransferEvent",
|
6361
|
+
"fields": [
|
6362
|
+
{
|
6363
|
+
"name": "vault",
|
6364
|
+
"type": "publicKey",
|
6365
|
+
"index": false
|
6366
|
+
},
|
6367
|
+
{
|
6368
|
+
"name": "oldOwner",
|
6369
|
+
"type": "publicKey",
|
6370
|
+
"index": false
|
6371
|
+
},
|
6372
|
+
{
|
6373
|
+
"name": "newOwner",
|
6374
|
+
"type": "publicKey",
|
6375
|
+
"index": false
|
6376
|
+
}
|
6377
|
+
]
|
6217
6378
|
}
|
6218
6379
|
],
|
6219
6380
|
"errors": [
|
@@ -6359,31 +6520,36 @@ export const IDL: Vault = {
|
|
6359
6520
|
},
|
6360
6521
|
{
|
6361
6522
|
"code": 6028,
|
6362
|
-
"name": "
|
6363
|
-
"msg": "PSM
|
6523
|
+
"name": "PsmMaxDebtReached",
|
6524
|
+
"msg": "PSM - Max Debt reached"
|
6364
6525
|
},
|
6365
6526
|
{
|
6366
6527
|
"code": 6029,
|
6528
|
+
"name": "PsmMinSwapAmount",
|
6529
|
+
"msg": "PSM - Need more to swap"
|
6530
|
+
},
|
6531
|
+
{
|
6532
|
+
"code": 6030,
|
6367
6533
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
6368
6534
|
"msg": "New Max debt extended value is less than the current debt!"
|
6369
6535
|
},
|
6370
6536
|
{
|
6371
|
-
"code":
|
6537
|
+
"code": 6031,
|
6372
6538
|
"name": "UpdateVaultTypeNoEnabledOracles",
|
6373
6539
|
"msg": "No Enabled Oracles!"
|
6374
6540
|
},
|
6375
6541
|
{
|
6376
|
-
"code":
|
6542
|
+
"code": 6032,
|
6377
6543
|
"name": "UpdateVaultTypeDuplicateOraclePriorities",
|
6378
6544
|
"msg": "Duplicate Oracle Priorities"
|
6379
6545
|
},
|
6380
6546
|
{
|
6381
|
-
"code":
|
6547
|
+
"code": 6033,
|
6382
6548
|
"name": "UpdateVaultTypeInvalidOraclePriority",
|
6383
6549
|
"msg": "Invalid Oracle Priority"
|
6384
6550
|
},
|
6385
6551
|
{
|
6386
|
-
"code":
|
6552
|
+
"code": 6034,
|
6387
6553
|
"name": "OracleUpdateFailed",
|
6388
6554
|
"msg": "OracleUpdateFailed"
|
6389
6555
|
}
|
@@ -0,0 +1,124 @@
|
|
1
|
+
import { BN, Program, Provider } from '@project-serum/anchor'
|
2
|
+
import { getOrCreateAssociatedTokenAccount, TOKEN_PROGRAM_ID } from '@solana/spl-token'
|
3
|
+
import {
|
4
|
+
Keypair,
|
5
|
+
PublicKey,
|
6
|
+
sendAndConfirmTransaction,
|
7
|
+
Signer,
|
8
|
+
SystemProgram,
|
9
|
+
Transaction,
|
10
|
+
TransactionInstruction,
|
11
|
+
} from '@solana/web3.js'
|
12
|
+
import { getLinkedListAccounts } from '../utils/getLinkedListAccounts'
|
13
|
+
import {
|
14
|
+
findAssociatedTokenAddress,
|
15
|
+
getHedgeMintPublicKey,
|
16
|
+
getPoolPublicKeyForMint,
|
17
|
+
getUshMintPublicKey,
|
18
|
+
getVaultSystemStatePublicKey,
|
19
|
+
HEDGE_PROGRAM_PUBLICKEY,
|
20
|
+
} from '../Constants'
|
21
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
22
|
+
import { Vault } from '../idl/vault'
|
23
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
24
|
+
import { VaultAccount } from '../state/VaultAccount'
|
25
|
+
|
26
|
+
export enum psmStatus {
|
27
|
+
PsmEnabled,
|
28
|
+
PsmDisabled,
|
29
|
+
MintOnly,
|
30
|
+
RedeemOnly
|
31
|
+
}
|
32
|
+
|
33
|
+
export async function psmEditAccount(
|
34
|
+
program: Program<Vault>,
|
35
|
+
provider: Provider,
|
36
|
+
payer: Signer,
|
37
|
+
collateralMint: PublicKey,
|
38
|
+
mintFee: number,
|
39
|
+
redeemFee: number,
|
40
|
+
debtLimit: number,
|
41
|
+
minSwap: number,
|
42
|
+
overrideTime?: number
|
43
|
+
): Promise<PublicKey> {
|
44
|
+
const ushMintPublickey = await getUshMintPublicKey()
|
45
|
+
|
46
|
+
const payerUshAccount = await getOrCreateAssociatedTokenAccount(
|
47
|
+
provider.connection,
|
48
|
+
payer,
|
49
|
+
ushMintPublickey,
|
50
|
+
payer.publicKey
|
51
|
+
)
|
52
|
+
|
53
|
+
const payerCollateralAccount = await getOrCreateAssociatedTokenAccount(
|
54
|
+
provider.connection,
|
55
|
+
payer,
|
56
|
+
collateralMint,
|
57
|
+
payer.publicKey
|
58
|
+
)
|
59
|
+
|
60
|
+
|
61
|
+
const enc = new TextEncoder()
|
62
|
+
const [psmAccount] = await PublicKey.findProgramAddress(
|
63
|
+
[enc.encode(collateralMint.toString().slice(0, 12)), enc.encode('PSM')],
|
64
|
+
HEDGE_PROGRAM_PUBLICKEY
|
65
|
+
)
|
66
|
+
|
67
|
+
const psmAccountAta = await getOrCreateAssociatedTokenAccount(
|
68
|
+
provider.connection,
|
69
|
+
payer,
|
70
|
+
collateralMint,
|
71
|
+
psmAccount,
|
72
|
+
true
|
73
|
+
)
|
74
|
+
|
75
|
+
const transaction = new Transaction().add(
|
76
|
+
await psmEditAccountInstruction(
|
77
|
+
program,
|
78
|
+
payer.publicKey,
|
79
|
+
psmAccount,
|
80
|
+
collateralMint,
|
81
|
+
new BN(mintFee),
|
82
|
+
new BN(redeemFee),
|
83
|
+
new BN(debtLimit),
|
84
|
+
new BN(minSwap),
|
85
|
+
overrideTime
|
86
|
+
)
|
87
|
+
)
|
88
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
|
89
|
+
return payer.publicKey
|
90
|
+
}
|
91
|
+
|
92
|
+
export async function psmEditAccountInstruction(
|
93
|
+
program: Program<Vault>,
|
94
|
+
payerPublicKey: PublicKey,
|
95
|
+
psmAccount: PublicKey,
|
96
|
+
collateralMint: PublicKey,
|
97
|
+
mintFee: BN,
|
98
|
+
redeemFee: BN,
|
99
|
+
debtLimit: BN,
|
100
|
+
minSwap: BN,
|
101
|
+
overrideTime?: number
|
102
|
+
): Promise<TransactionInstruction> {
|
103
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
104
|
+
const hedgeMintPublickey = await getHedgeMintPublicKey()
|
105
|
+
const [hedgeStakingPoolPublicKey] = await getPoolPublicKeyForMint(hedgeMintPublickey)
|
106
|
+
|
107
|
+
|
108
|
+
return await program.methods
|
109
|
+
.psmEditAccount(
|
110
|
+
mintFee,
|
111
|
+
redeemFee,
|
112
|
+
debtLimit,
|
113
|
+
minSwap,
|
114
|
+
new BN(overrideTime ?? Math.floor(Date.now() / 1000)) // override override time
|
115
|
+
)
|
116
|
+
.accounts({
|
117
|
+
payer: payerPublicKey,
|
118
|
+
vaultSystemState: vaultSystemStatePublicKey,
|
119
|
+
psmAccount: psmAccount,
|
120
|
+
collateralMint: collateralMint,
|
121
|
+
systemProgram: SystemProgram.programId,
|
122
|
+
})
|
123
|
+
.instruction()
|
124
|
+
}
|
@@ -0,0 +1,99 @@
|
|
1
|
+
import { BN, Program, Provider } from '@project-serum/anchor'
|
2
|
+
import {
|
3
|
+
Keypair,
|
4
|
+
PublicKey,
|
5
|
+
sendAndConfirmTransaction,
|
6
|
+
Signer,
|
7
|
+
SystemProgram,
|
8
|
+
SYSVAR_RENT_PUBKEY,
|
9
|
+
Transaction,
|
10
|
+
TransactionInstruction,
|
11
|
+
} from '@solana/web3.js'
|
12
|
+
import {
|
13
|
+
findAssociatedTokenAddress,
|
14
|
+
findVaultAddress,
|
15
|
+
getVaultTypeAccountPublicKey,
|
16
|
+
getUshMintPublicKey,
|
17
|
+
getVaultSystemStatePublicKey,
|
18
|
+
getPoolPublicKeyForMint,
|
19
|
+
getHedgeMintPublicKey,
|
20
|
+
} from '../Constants'
|
21
|
+
|
22
|
+
import { v4 as uuidv4 } from 'uuid'
|
23
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
24
|
+
import sendAndConfirmWithDebug from '../utils/sendAndConfirmWithDebug'
|
25
|
+
import { Vault } from '../idl/vault'
|
26
|
+
|
27
|
+
export interface VaultTypeConfig {
|
28
|
+
maxDebtExtended?: BN
|
29
|
+
minDebtPerVault?: BN
|
30
|
+
loanInitFee?: BN
|
31
|
+
emergencyModeThreshold?: BN
|
32
|
+
|
33
|
+
oracleChainlink?: PublicKey
|
34
|
+
oraclePyth?: PublicKey
|
35
|
+
oracleSwitchboard?: PublicKey
|
36
|
+
|
37
|
+
priorityPyth?: number
|
38
|
+
priorityChainlink?: number
|
39
|
+
prioritySwitchboard?: number
|
40
|
+
|
41
|
+
deprecated?: boolean
|
42
|
+
}
|
43
|
+
|
44
|
+
export async function transferVault(
|
45
|
+
program: Program<Vault>,
|
46
|
+
provider: Provider,
|
47
|
+
payer: Signer,
|
48
|
+
vaultTypeAccount: PublicKey,
|
49
|
+
oracleInfoAccount: PublicKey,
|
50
|
+
config: VaultTypeConfig
|
51
|
+
): Promise<PublicKey> {
|
52
|
+
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
53
|
+
const transaction = new Transaction().add(
|
54
|
+
await transferVaultInstruction(
|
55
|
+
program,
|
56
|
+
vaultSystemStatePublicKey,
|
57
|
+
payer.publicKey,
|
58
|
+
vaultTypeAccount,
|
59
|
+
oracleInfoAccount,
|
60
|
+
config
|
61
|
+
)
|
62
|
+
)
|
63
|
+
|
64
|
+
await sendAndConfirmWithDebug(provider.connection, transaction, [payer])
|
65
|
+
return vaultSystemStatePublicKey
|
66
|
+
}
|
67
|
+
|
68
|
+
export async function transferVaultInstruction(
|
69
|
+
program: Program<Vault>,
|
70
|
+
vaultSystemStatePublicKey: PublicKey,
|
71
|
+
payerPublicKey: PublicKey,
|
72
|
+
vaultTypeAccount: PublicKey,
|
73
|
+
oracleInfoAccount: PublicKey,
|
74
|
+
vaultTypeConfig: VaultTypeConfig
|
75
|
+
): Promise<TransactionInstruction> {
|
76
|
+
const config = {
|
77
|
+
maxDebtExtended: vaultTypeConfig.maxDebtExtended ?? null,
|
78
|
+
minDebtPerVault: vaultTypeConfig.minDebtPerVault ?? null,
|
79
|
+
loanInitFee: vaultTypeConfig.loanInitFee ?? null,
|
80
|
+
emergencyModeThreshold: vaultTypeConfig.emergencyModeThreshold ?? null,
|
81
|
+
oracleChainlink: vaultTypeConfig.oracleChainlink ?? null,
|
82
|
+
oraclePyth: vaultTypeConfig.oraclePyth ?? null,
|
83
|
+
oracleSwitchboard: vaultTypeConfig.oracleSwitchboard ?? null,
|
84
|
+
deprecated: vaultTypeConfig.deprecated ?? null,
|
85
|
+
priorityPyth: vaultTypeConfig.priorityPyth ?? null,
|
86
|
+
priorityChainlink: vaultTypeConfig.priorityChainlink ?? null,
|
87
|
+
prioritySwitchboard: vaultTypeConfig.prioritySwitchboard ?? null,
|
88
|
+
}
|
89
|
+
|
90
|
+
return await program.methods
|
91
|
+
.updateVaultType(config)
|
92
|
+
.accounts({
|
93
|
+
payer: payerPublicKey,
|
94
|
+
vaultSystemState: vaultSystemStatePublicKey,
|
95
|
+
vaultType: vaultTypeAccount,
|
96
|
+
oracleInfoAccount: oracleInfoAccount,
|
97
|
+
})
|
98
|
+
.instruction()
|
99
|
+
}
|
@@ -28,6 +28,7 @@ export interface VaultTypeConfig {
|
|
28
28
|
maxDebtExtended?: BN
|
29
29
|
minDebtPerVault?: BN
|
30
30
|
loanInitFee?: BN
|
31
|
+
emergencyModeThreshold?: BN
|
31
32
|
|
32
33
|
oracleChainlink?: PublicKey
|
33
34
|
oraclePyth?: PublicKey
|
@@ -76,6 +77,7 @@ export async function updateVaultTypeStatusInstruction(
|
|
76
77
|
maxDebtExtended: vaultTypeConfig.maxDebtExtended ?? null,
|
77
78
|
minDebtPerVault: vaultTypeConfig.minDebtPerVault ?? null,
|
78
79
|
loanInitFee: vaultTypeConfig.loanInitFee ?? null,
|
80
|
+
emergencyModeThreshold: vaultTypeConfig.emergencyModeThreshold ?? null,
|
79
81
|
oracleChainlink: vaultTypeConfig.oracleChainlink ?? null,
|
80
82
|
oraclePyth: vaultTypeConfig.oraclePyth ?? null,
|
81
83
|
oracleSwitchboard: vaultTypeConfig.oracleSwitchboard ?? null,
|
@@ -16,7 +16,7 @@ export class VaultAccount {
|
|
16
16
|
/** The public key of the vault owner. */
|
17
17
|
vaultOwner: PublicKey
|
18
18
|
|
19
|
-
/** The public key of the vault owner. */
|
19
|
+
/** The public key of the vault owner. */ // dont think this is correct? thoughts?
|
20
20
|
pdaSalt: string
|
21
21
|
|
22
22
|
/** The deposited collateral of the vault (in SOL Lamports). */
|
@@ -50,7 +50,7 @@ export class VaultAccount {
|
|
50
50
|
this.publicKey = publicKey
|
51
51
|
this.vaultOwner = vault.vaultOwner
|
52
52
|
this.pdaSalt = vault.pdaSalt
|
53
|
-
|
53
|
+
|
54
54
|
this.deposited = vault.deposited
|
55
55
|
this.denormalizedDebt = vault.denormalizedDebt
|
56
56
|
|
@@ -177,16 +177,15 @@ export class VaultAccount {
|
|
177
177
|
public updateDebtAndCollateral(vaultTypeAccountData: VaultType) {
|
178
178
|
this.denormalizedDebt = new BN(
|
179
179
|
vaultTypeAccountData.debtRedistributionProduct
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
180
|
+
.div(this.debtProductSnapshotBytes)
|
181
|
+
.mul(new Decimal(this.denormalizedDebt.toString()))
|
182
|
+
.floor()
|
183
|
+
.toString()
|
184
184
|
)
|
185
185
|
|
186
|
-
const extraCollateralDeposited =
|
187
|
-
|
188
|
-
|
189
|
-
).floor()
|
186
|
+
const extraCollateralDeposited = new Decimal(this.denormalizedDebt.toString())
|
187
|
+
.mul(vaultTypeAccountData.collateralRedistributionAccumulator.sub(this.collateralAccumulatorSnapshotBytes).toNumber())
|
188
|
+
.floor()
|
190
189
|
this.deposited = this.deposited.add(new BN(extraCollateralDeposited.toString()))
|
191
190
|
|
192
191
|
this.collateralAccumulatorSnapshotBytes = vaultTypeAccountData.collateralRedistributionAccumulator
|