hedge-web3 0.1.46 → 0.1.50
Sign up to get free protection for your applications and to get access to all the features.
- package/declarations/idl/vault.d.ts +5 -78
- package/declarations/instructions/liquidateVault.d.ts +1 -1
- package/declarations/state/VaultAccount.d.ts +5 -7
- package/lib/idl/vault.js +5 -78
- package/lib/instructions/createStakingPool.js +0 -1
- package/lib/instructions/depositVault.js +7 -7
- package/lib/instructions/liquidateVault.js +7 -5
- package/lib/instructions/loanVault.js +6 -7
- package/lib/instructions/redeemVault.js +5 -4
- package/lib/instructions/refreshOraclePrice.js +2 -2
- package/lib/instructions/repayVault.js +5 -4
- package/lib/instructions/withdrawVault.js +5 -4
- package/lib/state/VaultAccount.js +26 -20
- package/lib/utils/getLinkedListAccounts.js +22 -19
- package/package.json +1 -1
- package/src/idl/vault.ts +10 -156
- package/src/instructions/createStakingPool.ts +0 -1
- package/src/instructions/depositVault.ts +8 -8
- package/src/instructions/liquidateVault.ts +7 -5
- package/src/instructions/loanVault.ts +8 -11
- package/src/instructions/redeemVault.ts +5 -4
- package/src/instructions/refreshOraclePrice.ts +2 -2
- package/src/instructions/repayVault.ts +5 -4
- package/src/instructions/withdrawVault.ts +5 -4
- package/src/state/VaultAccount.ts +25 -25
- package/src/utils/getLinkedListAccounts.ts +24 -20
@@ -32,7 +32,11 @@ const borsh = __importStar(require("@project-serum/borsh"));
|
|
32
32
|
*/
|
33
33
|
class VaultAccount {
|
34
34
|
constructor(vault, publicKey) {
|
35
|
-
var _a
|
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);
|
36
40
|
/** Debt redistribution snapshot */
|
37
41
|
this.debtProductSnapshotBytes = new decimal_js_1.default(0);
|
38
42
|
/** Collateral redistribution snapshot' */
|
@@ -43,20 +47,23 @@ class VaultAccount {
|
|
43
47
|
this.vaultOwner = vault.vaultOwner;
|
44
48
|
this.vaultNumber = (_a = vault.vaultNumber) === null || _a === void 0 ? void 0 : _a.toNumber();
|
45
49
|
this.pdaSalt = vault.pdaSalt;
|
46
|
-
|
47
|
-
|
50
|
+
if (vault.deposited) {
|
51
|
+
this.deposited = new decimal_js_1.default(vault.deposited.toString());
|
52
|
+
}
|
53
|
+
if (vault.denormalizedDebt) {
|
54
|
+
this.denormalizedDebt = new decimal_js_1.default(vault.denormalizedDebt.toString());
|
55
|
+
}
|
48
56
|
if (vault.debtProductSnapshotBytes) {
|
49
57
|
this.debtProductSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.debtProductSnapshotBytes.toString());
|
50
58
|
}
|
51
59
|
if (vault.collateralAccumulatorSnapshotBytes) {
|
52
60
|
this.collateralAccumulatorSnapshotBytes = (0, HedgeDecimal_1.DecimalFromU128)(vault.collateralAccumulatorSnapshotBytes.toString());
|
53
61
|
}
|
54
|
-
this.
|
62
|
+
this.collateralType = vault.collateralType;
|
55
63
|
this.nextVaultToRedeem = vault.nextVaultToRedeem;
|
56
64
|
if (vault.vaultStatus) {
|
57
65
|
this.vaultStatus = Object.keys(vault.vaultStatus)[0];
|
58
66
|
}
|
59
|
-
this.vaultType = vault.vaultType;
|
60
67
|
}
|
61
68
|
/**
|
62
69
|
* Check if some `PublicKey` is the owner
|
@@ -73,7 +80,7 @@ class VaultAccount {
|
|
73
80
|
* @returns collateral value in SOL
|
74
81
|
*/
|
75
82
|
inSol() {
|
76
|
-
return this.deposited
|
83
|
+
return this.deposited.div(web3_js_1.LAMPORTS_PER_SOL).toNumber();
|
77
84
|
}
|
78
85
|
/**
|
79
86
|
* Get the debt value in USH
|
@@ -81,7 +88,7 @@ class VaultAccount {
|
|
81
88
|
* @returns debt value in USH
|
82
89
|
*/
|
83
90
|
inUsd() {
|
84
|
-
return this.denormalizedDebt
|
91
|
+
return this.denormalizedDebt.div(web3_js_1.LAMPORTS_PER_SOL).toNumber();
|
85
92
|
}
|
86
93
|
/**
|
87
94
|
* Pretty print the vault publickey for easy display
|
@@ -95,31 +102,30 @@ class VaultAccount {
|
|
95
102
|
}
|
96
103
|
addDebt(newNormalizedDebt, vaultTypeCompoundedInterest) {
|
97
104
|
const denormalizedNewDebt = newNormalizedDebt.div(vaultTypeCompoundedInterest);
|
98
|
-
this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor()
|
105
|
+
this.denormalizedDebt = denormalizedNewDebt.add(new decimal_js_1.default(this.denormalizedDebt)).floor();
|
99
106
|
// this.denormalizedDebt = parseFloat(this.denormalizedDebt.toFixed(0))
|
100
107
|
}
|
101
108
|
addDeposit(depositAmount) {
|
102
|
-
this.deposited
|
109
|
+
this.deposited = this.deposited.add(depositAmount);
|
103
110
|
}
|
104
111
|
redeem() {
|
105
112
|
// TODO - Calculate actual redeem amount and adust correctly
|
106
|
-
this.denormalizedDebt = 0;
|
113
|
+
this.denormalizedDebt = new decimal_js_1.default(0);
|
107
114
|
this.vaultStatus = 'initialized';
|
108
115
|
}
|
109
116
|
liquidate() {
|
110
117
|
// TODO - Calculate actual liquidate amount and adust correctly
|
111
|
-
this.denormalizedDebt = 0;
|
118
|
+
this.denormalizedDebt = new decimal_js_1.default(0);
|
112
119
|
this.vaultStatus = 'liquidated';
|
113
120
|
}
|
114
|
-
updateDebtAndCollateral(
|
115
|
-
const debtProductCurrent = (0, HedgeDecimal_1.DecimalFromU128)(
|
116
|
-
const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(
|
121
|
+
updateDebtAndCollateral(vaultTypeAccuntData) {
|
122
|
+
const debtProductCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccuntData.debtRedistributionProduct);
|
123
|
+
const collateralAccumulatorCurrent = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccuntData.collateralRedistributionAccumulator);
|
117
124
|
this.denormalizedDebt = debtProductCurrent
|
118
125
|
.div(this.debtProductSnapshotBytes)
|
119
|
-
.mul(new decimal_js_1.default(this.denormalizedDebt))
|
120
|
-
|
121
|
-
|
122
|
-
this.deposited += extraCollateralDeposited;
|
126
|
+
.mul(new decimal_js_1.default(this.denormalizedDebt));
|
127
|
+
const extraCollateralDeposited = this.denormalizedDebt.mul(collateralAccumulatorCurrent.sub(this.collateralAccumulatorSnapshotBytes));
|
128
|
+
this.deposited = this.deposited.add(extraCollateralDeposited);
|
123
129
|
this.collateralAccumulatorSnapshotBytes = collateralAccumulatorCurrent;
|
124
130
|
this.debtProductSnapshotBytes = debtProductCurrent;
|
125
131
|
}
|
@@ -129,14 +135,14 @@ class VaultAccount {
|
|
129
135
|
arrow = ' <----!!';
|
130
136
|
}
|
131
137
|
let collateralRatio = 'Infinite';
|
132
|
-
if (this.denormalizedDebt
|
138
|
+
if (this.denormalizedDebt.greaterThan(0)) {
|
133
139
|
collateralRatio = new decimal_js_1.default(this.deposited).div(new decimal_js_1.default(this.denormalizedDebt)).toString();
|
134
140
|
}
|
135
141
|
let nextVault = 'None';
|
136
142
|
if (this.nextVaultToRedeem) {
|
137
143
|
nextVault = this.nextVaultToRedeem.toString().substring(0, 6);
|
138
144
|
}
|
139
|
-
return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} ${arrow} `;
|
145
|
+
return `Vault(${this.vaultNumber}): ${this.publicKey.toString().substring(0, 6)}. Debt: ${this.denormalizedDebt} Collat: ${this.deposited} Ratio: ${collateralRatio} NextVault: ${nextVault} ${arrow} `;
|
140
146
|
}
|
141
147
|
/**
|
142
148
|
* Creates a VaultAccount from a slice of data
|
@@ -21,14 +21,13 @@ const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
21
21
|
const bs58_1 = __importDefault(require("bs58"));
|
22
22
|
function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, depositAmount, loanAmount, redeem, liquidate, cachedVaults) {
|
23
23
|
return __awaiter(this, void 0, void 0, function* () {
|
24
|
-
|
24
|
+
console.log('Getting getLinkedListAccounts');
|
25
25
|
const vaultTypeAccount = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
|
26
26
|
// Default for null is the vault itself, so set them all to this vault
|
27
27
|
let oldSmallerPublicKey = vaultPublicKey;
|
28
28
|
let newSmallerPublicKey = vaultPublicKey;
|
29
29
|
let newLargerPublicKey = vaultPublicKey;
|
30
30
|
const thisVaultData = yield program.account.vault.fetch(vaultPublicKey);
|
31
|
-
const accountInfo = yield program.provider.connection.getAccountInfo(vaultPublicKey);
|
32
31
|
const thisVault = new VaultAccount_1.VaultAccount(thisVaultData, vaultPublicKey);
|
33
32
|
// Load all the vaults
|
34
33
|
let vaults;
|
@@ -51,10 +50,10 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
51
50
|
// vaults = allVaults.map((vault) => {
|
52
51
|
// return new VaultAccount(vault.account, vault.publicKey)
|
53
52
|
// })
|
54
|
-
vaults = yield getMiniVaults(program, vaultTypeAccount.
|
53
|
+
vaults = yield getMiniVaults(program, vaultTypeAccount.collateralType);
|
55
54
|
}
|
56
|
-
|
57
|
-
|
55
|
+
console.log('Vault count found:', vaults.length);
|
56
|
+
console.log('First Vault', vaults[0]);
|
58
57
|
// Filter out the accounts that are not open
|
59
58
|
// TODO filter on vault status. Or we enable people to "close out" empty vaults
|
60
59
|
// vaults = _.filter(vaults, (vault) => {
|
@@ -62,7 +61,7 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
62
61
|
// })
|
63
62
|
// Remove any vaults with no debt or collateral
|
64
63
|
vaults = underscore_1.default.filter(vaults, (vault) => {
|
65
|
-
return vault.denormalizedDebt
|
64
|
+
return vault.denormalizedDebt.greaterThan(0) && vault.deposited.greaterThan(0);
|
66
65
|
});
|
67
66
|
// Sort them
|
68
67
|
vaults.sort(sortVaults);
|
@@ -77,11 +76,6 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
77
76
|
if (indexBefore > 0) {
|
78
77
|
oldSmallerPublicKey = vaults[indexBefore - 1].publicKey;
|
79
78
|
}
|
80
|
-
// Pretty print the list again
|
81
|
-
// console.log('Sorted open vaults. Index Before: ', indexBefore)
|
82
|
-
// console.log(vaults.map((vault) => {
|
83
|
-
// return vault.toString(vaultPublicKey)
|
84
|
-
// }))
|
85
79
|
// Pretty print all the vaults before the operation
|
86
80
|
// console.log('Sorted open vaults BEFORE at index:', indexBefore)
|
87
81
|
// let correctOrderBefore = true
|
@@ -122,11 +116,16 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
122
116
|
if (redeem) {
|
123
117
|
vaults[indexBefore].redeem();
|
124
118
|
}
|
125
|
-
if (vaults[indexBefore].denormalizedDebt
|
119
|
+
if (vaults[indexBefore].denormalizedDebt.isZero()) {
|
126
120
|
vaults.splice(indexBefore, 1);
|
127
121
|
}
|
128
122
|
// Sort it again since we've changed one vault
|
129
123
|
vaults = vaults.sort(sortVaults);
|
124
|
+
// Pretty print the list again
|
125
|
+
// console.log('Sorted open vaults with new debt added at index: ', indexAfter)
|
126
|
+
// console.log(vaults.map((vault) => {
|
127
|
+
// return vault.toString(vaultPublicKey)
|
128
|
+
// }))
|
130
129
|
// Search for the vaults new position
|
131
130
|
let indexAfter = -1;
|
132
131
|
vaults.forEach((vault, index) => {
|
@@ -142,7 +141,8 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
142
141
|
// })
|
143
142
|
// )
|
144
143
|
// Print where it moved from / to
|
145
|
-
|
144
|
+
console.log('Index Before', indexBefore);
|
145
|
+
console.log('Index After', indexAfter);
|
146
146
|
// Save references to the new left and right
|
147
147
|
if (indexAfter > 0) {
|
148
148
|
newSmallerPublicKey = vaults[indexAfter - 1].publicKey;
|
@@ -161,14 +161,17 @@ exports.getLinkedListAccounts = getLinkedListAccounts;
|
|
161
161
|
// Sort function we can use to sort the vaults
|
162
162
|
// Sorted by collateral ratio. If two are the same, newer vault first
|
163
163
|
function sortVaults(a, b) {
|
164
|
-
const aRatio = a.deposited
|
165
|
-
const bRatio = b.deposited
|
166
|
-
if (aRatio
|
164
|
+
const aRatio = a.deposited.floor().div(a.denormalizedDebt.floor());
|
165
|
+
const bRatio = b.deposited.floor().div(b.denormalizedDebt.floor());
|
166
|
+
if (aRatio.equals(bRatio)) {
|
167
167
|
return b.vaultNumber - a.vaultNumber;
|
168
168
|
}
|
169
|
-
|
169
|
+
if (aRatio.greaterThan(bRatio)) {
|
170
|
+
return 1;
|
171
|
+
}
|
172
|
+
return -1;
|
170
173
|
}
|
171
|
-
function getMiniVaults(program,
|
174
|
+
function getMiniVaults(program, collateralType) {
|
172
175
|
return __awaiter(this, void 0, void 0, function* () {
|
173
176
|
const filters = [
|
174
177
|
// Filter for Vault Accounts
|
@@ -179,7 +182,7 @@ function getMiniVaults(program, vaultTypeName) {
|
|
179
182
|
// Filter for Vaults with this collateral type
|
180
183
|
{
|
181
184
|
memcmp: {
|
182
|
-
bytes: bs58_1.default.encode(VaultAccount_1.VaultAccount.getBufferForString(
|
185
|
+
bytes: bs58_1.default.encode(VaultAccount_1.VaultAccount.getBufferForString(collateralType)),
|
183
186
|
offset: 8 + 32 + 24,
|
184
187
|
},
|
185
188
|
},
|
package/package.json
CHANGED
package/src/idl/vault.ts
CHANGED
@@ -1649,58 +1649,6 @@ export type Vault = {
|
|
1649
1649
|
}
|
1650
1650
|
}
|
1651
1651
|
]
|
1652
|
-
},
|
1653
|
-
{
|
1654
|
-
"name": "adminMigrateVault",
|
1655
|
-
"accounts": [
|
1656
|
-
{
|
1657
|
-
"name": "payer",
|
1658
|
-
"isMut": true,
|
1659
|
-
"isSigner": true
|
1660
|
-
},
|
1661
|
-
{
|
1662
|
-
"name": "vaultSystemState",
|
1663
|
-
"isMut": true,
|
1664
|
-
"isSigner": false
|
1665
|
-
},
|
1666
|
-
{
|
1667
|
-
"name": "vaultAccount",
|
1668
|
-
"isMut": true,
|
1669
|
-
"isSigner": false
|
1670
|
-
},
|
1671
|
-
{
|
1672
|
-
"name": "vaultTypeAccount",
|
1673
|
-
"isMut": true,
|
1674
|
-
"isSigner": false
|
1675
|
-
}
|
1676
|
-
],
|
1677
|
-
"args": []
|
1678
|
-
},
|
1679
|
-
{
|
1680
|
-
"name": "adminMigrateOracle",
|
1681
|
-
"accounts": [
|
1682
|
-
{
|
1683
|
-
"name": "payer",
|
1684
|
-
"isMut": true,
|
1685
|
-
"isSigner": true
|
1686
|
-
},
|
1687
|
-
{
|
1688
|
-
"name": "vaultSystemState",
|
1689
|
-
"isMut": true,
|
1690
|
-
"isSigner": false
|
1691
|
-
},
|
1692
|
-
{
|
1693
|
-
"name": "oracleInfoAccount",
|
1694
|
-
"isMut": true,
|
1695
|
-
"isSigner": false
|
1696
|
-
},
|
1697
|
-
{
|
1698
|
-
"name": "vaultTypeAccount",
|
1699
|
-
"isMut": true,
|
1700
|
-
"isSigner": false
|
1701
|
-
}
|
1702
|
-
],
|
1703
|
-
"args": []
|
1704
1652
|
}
|
1705
1653
|
],
|
1706
1654
|
"accounts": [
|
@@ -1896,7 +1844,7 @@ export type Vault = {
|
|
1896
1844
|
"kind": "struct",
|
1897
1845
|
"fields": [
|
1898
1846
|
{
|
1899
|
-
"name": "
|
1847
|
+
"name": "collateralType",
|
1900
1848
|
"type": "string"
|
1901
1849
|
},
|
1902
1850
|
{
|
@@ -1910,10 +1858,6 @@ export type Vault = {
|
|
1910
1858
|
{
|
1911
1859
|
"name": "oracleSwitchboard",
|
1912
1860
|
"type": "publicKey"
|
1913
|
-
},
|
1914
|
-
{
|
1915
|
-
"name": "vaultType",
|
1916
|
-
"type": "publicKey"
|
1917
1861
|
}
|
1918
1862
|
]
|
1919
1863
|
}
|
@@ -2158,7 +2102,7 @@ export type Vault = {
|
|
2158
2102
|
"kind": "struct",
|
2159
2103
|
"fields": [
|
2160
2104
|
{
|
2161
|
-
"name": "
|
2105
|
+
"name": "collateralType",
|
2162
2106
|
"type": "string"
|
2163
2107
|
},
|
2164
2108
|
{
|
@@ -2242,14 +2186,6 @@ export type Vault = {
|
|
2242
2186
|
{
|
2243
2187
|
"name": "deprecated",
|
2244
2188
|
"type": "bool"
|
2245
|
-
},
|
2246
|
-
{
|
2247
|
-
"name": "totalFeesAccumulatedUsh",
|
2248
|
-
"type": "u128"
|
2249
|
-
},
|
2250
|
-
{
|
2251
|
-
"name": "totalFeesAccumulatedCollateral",
|
2252
|
-
"type": "u128"
|
2253
2189
|
}
|
2254
2190
|
]
|
2255
2191
|
}
|
@@ -2276,7 +2212,7 @@ export type Vault = {
|
|
2276
2212
|
"type": "u64"
|
2277
2213
|
},
|
2278
2214
|
{
|
2279
|
-
"name": "
|
2215
|
+
"name": "collateralType",
|
2280
2216
|
"type": "string"
|
2281
2217
|
},
|
2282
2218
|
{
|
@@ -2324,10 +2260,6 @@ export type Vault = {
|
|
2324
2260
|
"type": {
|
2325
2261
|
"option": "publicKey"
|
2326
2262
|
}
|
2327
|
-
},
|
2328
|
-
{
|
2329
|
-
"name": "vaultType",
|
2330
|
-
"type": "publicKey"
|
2331
2263
|
}
|
2332
2264
|
]
|
2333
2265
|
}
|
@@ -2741,8 +2673,8 @@ export type Vault = {
|
|
2741
2673
|
},
|
2742
2674
|
{
|
2743
2675
|
"code": 6020,
|
2744
|
-
"name": "
|
2745
|
-
"msg": "Can only redeem
|
2676
|
+
"name": "RedeemingNonHighestCollateralRatioVault",
|
2677
|
+
"msg": "Can only redeem highest collateral ratio vault in system."
|
2746
2678
|
},
|
2747
2679
|
{
|
2748
2680
|
"code": 6021,
|
@@ -2756,11 +2688,6 @@ export type Vault = {
|
|
2756
2688
|
},
|
2757
2689
|
{
|
2758
2690
|
"code": 6023,
|
2759
|
-
"name": "InvalidSaltLength",
|
2760
|
-
"msg": "Salt for new vaults must be of length 8"
|
2761
|
-
},
|
2762
|
-
{
|
2763
|
-
"code": 6024,
|
2764
2691
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
2765
2692
|
"msg": "New Max debt extended value is less than the current debt!"
|
2766
2693
|
}
|
@@ -4418,58 +4345,6 @@ export const IDL: Vault = {
|
|
4418
4345
|
}
|
4419
4346
|
}
|
4420
4347
|
]
|
4421
|
-
},
|
4422
|
-
{
|
4423
|
-
"name": "adminMigrateVault",
|
4424
|
-
"accounts": [
|
4425
|
-
{
|
4426
|
-
"name": "payer",
|
4427
|
-
"isMut": true,
|
4428
|
-
"isSigner": true
|
4429
|
-
},
|
4430
|
-
{
|
4431
|
-
"name": "vaultSystemState",
|
4432
|
-
"isMut": true,
|
4433
|
-
"isSigner": false
|
4434
|
-
},
|
4435
|
-
{
|
4436
|
-
"name": "vaultAccount",
|
4437
|
-
"isMut": true,
|
4438
|
-
"isSigner": false
|
4439
|
-
},
|
4440
|
-
{
|
4441
|
-
"name": "vaultTypeAccount",
|
4442
|
-
"isMut": true,
|
4443
|
-
"isSigner": false
|
4444
|
-
}
|
4445
|
-
],
|
4446
|
-
"args": []
|
4447
|
-
},
|
4448
|
-
{
|
4449
|
-
"name": "adminMigrateOracle",
|
4450
|
-
"accounts": [
|
4451
|
-
{
|
4452
|
-
"name": "payer",
|
4453
|
-
"isMut": true,
|
4454
|
-
"isSigner": true
|
4455
|
-
},
|
4456
|
-
{
|
4457
|
-
"name": "vaultSystemState",
|
4458
|
-
"isMut": true,
|
4459
|
-
"isSigner": false
|
4460
|
-
},
|
4461
|
-
{
|
4462
|
-
"name": "oracleInfoAccount",
|
4463
|
-
"isMut": true,
|
4464
|
-
"isSigner": false
|
4465
|
-
},
|
4466
|
-
{
|
4467
|
-
"name": "vaultTypeAccount",
|
4468
|
-
"isMut": true,
|
4469
|
-
"isSigner": false
|
4470
|
-
}
|
4471
|
-
],
|
4472
|
-
"args": []
|
4473
4348
|
}
|
4474
4349
|
],
|
4475
4350
|
"accounts": [
|
@@ -4665,7 +4540,7 @@ export const IDL: Vault = {
|
|
4665
4540
|
"kind": "struct",
|
4666
4541
|
"fields": [
|
4667
4542
|
{
|
4668
|
-
"name": "
|
4543
|
+
"name": "collateralType",
|
4669
4544
|
"type": "string"
|
4670
4545
|
},
|
4671
4546
|
{
|
@@ -4679,10 +4554,6 @@ export const IDL: Vault = {
|
|
4679
4554
|
{
|
4680
4555
|
"name": "oracleSwitchboard",
|
4681
4556
|
"type": "publicKey"
|
4682
|
-
},
|
4683
|
-
{
|
4684
|
-
"name": "vaultType",
|
4685
|
-
"type": "publicKey"
|
4686
4557
|
}
|
4687
4558
|
]
|
4688
4559
|
}
|
@@ -4927,7 +4798,7 @@ export const IDL: Vault = {
|
|
4927
4798
|
"kind": "struct",
|
4928
4799
|
"fields": [
|
4929
4800
|
{
|
4930
|
-
"name": "
|
4801
|
+
"name": "collateralType",
|
4931
4802
|
"type": "string"
|
4932
4803
|
},
|
4933
4804
|
{
|
@@ -5011,14 +4882,6 @@ export const IDL: Vault = {
|
|
5011
4882
|
{
|
5012
4883
|
"name": "deprecated",
|
5013
4884
|
"type": "bool"
|
5014
|
-
},
|
5015
|
-
{
|
5016
|
-
"name": "totalFeesAccumulatedUsh",
|
5017
|
-
"type": "u128"
|
5018
|
-
},
|
5019
|
-
{
|
5020
|
-
"name": "totalFeesAccumulatedCollateral",
|
5021
|
-
"type": "u128"
|
5022
4885
|
}
|
5023
4886
|
]
|
5024
4887
|
}
|
@@ -5045,7 +4908,7 @@ export const IDL: Vault = {
|
|
5045
4908
|
"type": "u64"
|
5046
4909
|
},
|
5047
4910
|
{
|
5048
|
-
"name": "
|
4911
|
+
"name": "collateralType",
|
5049
4912
|
"type": "string"
|
5050
4913
|
},
|
5051
4914
|
{
|
@@ -5093,10 +4956,6 @@ export const IDL: Vault = {
|
|
5093
4956
|
"type": {
|
5094
4957
|
"option": "publicKey"
|
5095
4958
|
}
|
5096
|
-
},
|
5097
|
-
{
|
5098
|
-
"name": "vaultType",
|
5099
|
-
"type": "publicKey"
|
5100
4959
|
}
|
5101
4960
|
]
|
5102
4961
|
}
|
@@ -5510,8 +5369,8 @@ export const IDL: Vault = {
|
|
5510
5369
|
},
|
5511
5370
|
{
|
5512
5371
|
"code": 6020,
|
5513
|
-
"name": "
|
5514
|
-
"msg": "Can only redeem
|
5372
|
+
"name": "RedeemingNonHighestCollateralRatioVault",
|
5373
|
+
"msg": "Can only redeem highest collateral ratio vault in system."
|
5515
5374
|
},
|
5516
5375
|
{
|
5517
5376
|
"code": 6021,
|
@@ -5525,11 +5384,6 @@ export const IDL: Vault = {
|
|
5525
5384
|
},
|
5526
5385
|
{
|
5527
5386
|
"code": 6023,
|
5528
|
-
"name": "InvalidSaltLength",
|
5529
|
-
"msg": "Salt for new vaults must be of length 8"
|
5530
|
-
},
|
5531
|
-
{
|
5532
|
-
"code": 6024,
|
5533
5387
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
5534
5388
|
"msg": "New Max debt extended value is less than the current debt!"
|
5535
5389
|
}
|
@@ -41,7 +41,6 @@ export async function createStakingPoolInstruction(
|
|
41
41
|
hedgeTokensToBeMinted: number,
|
42
42
|
overrideStartTime?: number
|
43
43
|
): Promise<TransactionInstruction> {
|
44
|
-
console.log("new createStakingPoolInstruction")
|
45
44
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
46
45
|
const ushMintPublickey = await getUshMintPublicKey()
|
47
46
|
const [poolPublickey, poolBump] = await getPoolPublicKeyForMint(mintPublicKey)
|
@@ -20,7 +20,6 @@ import {
|
|
20
20
|
getHedgeMintPublicKey,
|
21
21
|
} from '../Constants'
|
22
22
|
import { Vault } from 'idl/vault'
|
23
|
-
import { WRAPPED_SOL_MINT } from '@project-serum/serum/lib/token-instructions'
|
24
23
|
|
25
24
|
export async function depositVault(
|
26
25
|
program: Program<Vault>,
|
@@ -36,12 +35,13 @@ export async function depositVault(
|
|
36
35
|
await getOrCreateAssociatedTokenAccount(provider.connection, payer, ushMintPublickey, payer.publicKey)
|
37
36
|
|
38
37
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
39
|
-
const
|
38
|
+
const vaultTypeAccountPublicKey = await getVaultTypeAccountPublicKey(vaultAccount.collateralType)
|
39
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
40
40
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
41
41
|
provider.connection,
|
42
42
|
payer,
|
43
43
|
vaultTypeAccountInfo.collateralMint,
|
44
|
-
|
44
|
+
vaultTypeAccountPublicKey,
|
45
45
|
true
|
46
46
|
)
|
47
47
|
|
@@ -68,7 +68,7 @@ export async function depositVault(
|
|
68
68
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
69
69
|
program,
|
70
70
|
provider,
|
71
|
-
|
71
|
+
vaultTypeAccountPublicKey,
|
72
72
|
vaultPublicKey,
|
73
73
|
depositAmount,
|
74
74
|
0,
|
@@ -76,7 +76,7 @@ export async function depositVault(
|
|
76
76
|
false
|
77
77
|
)
|
78
78
|
|
79
|
-
if (
|
79
|
+
if (vaultAccount.collateralType === 'SOL') {
|
80
80
|
transaction.add(
|
81
81
|
SystemProgram.createAccount({
|
82
82
|
fromPubkey: payer.publicKey,
|
@@ -98,11 +98,11 @@ export async function depositVault(
|
|
98
98
|
program,
|
99
99
|
vaultSystemStatePublicKey,
|
100
100
|
payer.publicKey,
|
101
|
-
|
101
|
+
vaultAccount.collateralType === 'SOL' ? wrappedSolAccount.publicKey : payerTokenAccount,
|
102
102
|
vaultPublicKey,
|
103
103
|
vaultAssociatedCollateralAccountPublicKey,
|
104
104
|
history.publicKey,
|
105
|
-
|
105
|
+
vaultTypeAccountPublicKey,
|
106
106
|
vaultTypeAssociatedTokenAccount.address,
|
107
107
|
hedgeStakingPoolPublicKey,
|
108
108
|
hedgeStakingPoolAssociatedUshTokenAccount,
|
@@ -115,7 +115,7 @@ export async function depositVault(
|
|
115
115
|
overrideTime
|
116
116
|
)
|
117
117
|
)
|
118
|
-
if (
|
118
|
+
if (vaultAccount.collateralType === 'SOL') {
|
119
119
|
transaction.add(
|
120
120
|
TokenInstructions.closeAccount({
|
121
121
|
source: wrappedSolAccount.publicKey,
|
@@ -31,7 +31,8 @@ export async function liquidateVault(
|
|
31
31
|
): Promise<PublicKey> {
|
32
32
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
33
33
|
|
34
|
-
const
|
34
|
+
const vaultTypeAccountPublicKey = await getVaultTypeAccountPublicKey(vaultAccount.collateralType)
|
35
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
35
36
|
const collateralMint = vaultTypeAccountInfo.collateralMint
|
36
37
|
|
37
38
|
const hedgeMintPublickey = await getHedgeMintPublicKey()
|
@@ -72,7 +73,7 @@ export async function liquidateVault(
|
|
72
73
|
provider.connection,
|
73
74
|
payer,
|
74
75
|
collateralMint,
|
75
|
-
|
76
|
+
vaultTypeAccountPublicKey,
|
76
77
|
true
|
77
78
|
)
|
78
79
|
const hedgeStakingPoolAssociatedUshTokenAccount = await getOrCreateAssociatedTokenAccount(
|
@@ -86,7 +87,7 @@ export async function liquidateVault(
|
|
86
87
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
87
88
|
program,
|
88
89
|
provider,
|
89
|
-
|
90
|
+
vaultTypeAccountPublicKey,
|
90
91
|
vaultPublicKey,
|
91
92
|
0,
|
92
93
|
0,
|
@@ -118,7 +119,7 @@ export async function liquidateVault(
|
|
118
119
|
oldSmallerPublicKey,
|
119
120
|
newSmallerPublicKey,
|
120
121
|
newLargerPublicKey,
|
121
|
-
vaultAccount.
|
122
|
+
vaultAccount.collateralType,
|
122
123
|
overrideTime
|
123
124
|
)
|
124
125
|
)
|
@@ -145,12 +146,13 @@ export async function liquidateVaultInstruction(
|
|
145
146
|
oldSmallerPublicKey: PublicKey,
|
146
147
|
newSmallerPublicKey: PublicKey,
|
147
148
|
newLargerPublicKey: PublicKey,
|
148
|
-
|
149
|
+
collateralType: string,
|
149
150
|
overrideTime?: number
|
150
151
|
): Promise<TransactionInstruction> {
|
151
152
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
152
153
|
const ushMintPublickey = await getUshMintPublicKey()
|
153
154
|
const liquidationPoolUshAccountPublickey = await getLiquidationPoolUshAccountPublicKey()
|
155
|
+
const vaultTypeAccount = await getVaultTypeAccountPublicKey(collateralType)
|
154
156
|
|
155
157
|
return await program.methods
|
156
158
|
.liquidateVault(
|