hedge-web3 0.1.43 → 0.1.46
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 +78 -5
- package/declarations/instructions/liquidateVault.d.ts +1 -1
- package/declarations/state/VaultAccount.d.ts +8 -6
- package/declarations/state/VaultType.d.ts +24 -0
- package/declarations/utils/Sender.d.ts +2 -0
- package/declarations/utils/sendAndConfirmWithDebug.d.ts +2 -0
- package/lib/idl/vault.js +78 -5
- package/lib/instructions/createStakingPool.js +1 -0
- package/lib/instructions/depositVault.js +7 -7
- package/lib/instructions/liquidateVault.js +5 -7
- package/lib/instructions/loanVault.js +7 -6
- package/lib/instructions/redeemVault.js +4 -5
- package/lib/instructions/refreshOraclePrice.js +2 -2
- package/lib/instructions/repayVault.js +4 -5
- package/lib/instructions/withdrawVault.js +4 -5
- package/lib/state/VaultAccount.js +9 -8
- package/lib/state/VaultType.js +32 -0
- package/lib/utils/Sender.js +32 -0
- package/lib/utils/getLinkedListAccounts.js +15 -15
- package/lib/utils/sendAndConfirmWithDebug.js +35 -0
- package/package.json +1 -1
- package/src/idl/vault.ts +156 -10
- package/src/instructions/createStakingPool.ts +1 -0
- package/src/instructions/depositVault.ts +8 -8
- package/src/instructions/liquidateVault.ts +5 -7
- package/src/instructions/loanVault.ts +11 -8
- package/src/instructions/redeemVault.ts +4 -5
- package/src/instructions/refreshOraclePrice.ts +2 -2
- package/src/instructions/repayVault.ts +4 -5
- package/src/instructions/withdrawVault.ts +4 -5
- package/src/state/VaultAccount.ts +14 -10
- package/src/utils/getLinkedListAccounts.ts +16 -16
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
7
|
+
const HedgeDecimal_1 = require("../HedgeDecimal");
|
8
|
+
class VaultType {
|
9
|
+
constructor(config, publicKey) {
|
10
|
+
var _a;
|
11
|
+
this.publicKey = publicKey;
|
12
|
+
this.name = config.collateralType;
|
13
|
+
this.loanInitFee = (0, HedgeDecimal_1.DecimalFromU128)(config.loanInitFee);
|
14
|
+
this.minCollateralRatio = (0, HedgeDecimal_1.DecimalFromU128)(config.minCollateralRatio);
|
15
|
+
this.interestRatePerSecond = (0, HedgeDecimal_1.DecimalFromU128)(config.interestRatePerSecond);
|
16
|
+
this.minDebtPerVault = (0, HedgeDecimal_1.DecimalFromU128)(config.minDebtPerVault);
|
17
|
+
this.maxDebtExtended = (0, HedgeDecimal_1.DecimalFromU128)(config.maxDebtExtended);
|
18
|
+
this.canBeRedeemed = config.canBeRedeemed;
|
19
|
+
this.collateralMint = config.collateralMint;
|
20
|
+
this.firstVaultToRedeem = config.firstVaultToRedeem;
|
21
|
+
this.recentPrice = (0, HedgeDecimal_1.DecimalFromU128)((_a = config.recentPrice) === null || _a === void 0 ? void 0 : _a.toString());
|
22
|
+
this.priceLastUpdatedTimestamp = new decimal_js_1.default(config.priceLastUpdatedTimestamp.toString());
|
23
|
+
this.collateralHeld = new decimal_js_1.default(config.collateralHeld.toString());
|
24
|
+
this.denormalizedDebtExtended = new decimal_js_1.default(config.denormalizedDebtExtended.toString());
|
25
|
+
this.debtRedistributionProduct = (0, HedgeDecimal_1.DecimalFromU128)(config.debtRedistributionProduct.toString());
|
26
|
+
this.collateralRedistributionAccumulator = (0, HedgeDecimal_1.DecimalFromU128)(config.collateralRedistributionAccumulator.toString());
|
27
|
+
this.cumulativeRate = (0, HedgeDecimal_1.DecimalFromU128)(config.cumulativeRate.toString());
|
28
|
+
this.cumulativeRateLastUpdated = new decimal_js_1.default(config.cumulativeRateLastUpdated.toString());
|
29
|
+
this.collateralIndex = config.collateralIndex.toNumber();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
exports.default = VaultType;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
exports.sendAndConfirmWithDebug = void 0;
|
13
|
+
function sendAndConfirmWithDebug(connection, transaction, signers) {
|
14
|
+
return __awaiter(this, void 0, void 0, function* () {
|
15
|
+
return connection
|
16
|
+
.sendTransaction(transaction, signers)
|
17
|
+
.then((signature) => {
|
18
|
+
return connection
|
19
|
+
.confirmTransaction(signature)
|
20
|
+
.then((signatureContext) => {
|
21
|
+
return signature;
|
22
|
+
})
|
23
|
+
.catch((error) => {
|
24
|
+
console.log('There was an error confirming the transaction', error);
|
25
|
+
});
|
26
|
+
})
|
27
|
+
.catch((error) => {
|
28
|
+
console.log('There was an error sending the transaction', error);
|
29
|
+
});
|
30
|
+
});
|
31
|
+
}
|
32
|
+
exports.sendAndConfirmWithDebug = sendAndConfirmWithDebug;
|
@@ -21,13 +21,14 @@ 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
|
-
console.log('Getting getLinkedListAccounts')
|
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);
|
31
32
|
const thisVault = new VaultAccount_1.VaultAccount(thisVaultData, vaultPublicKey);
|
32
33
|
// Load all the vaults
|
33
34
|
let vaults;
|
@@ -50,10 +51,10 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
50
51
|
// vaults = allVaults.map((vault) => {
|
51
52
|
// return new VaultAccount(vault.account, vault.publicKey)
|
52
53
|
// })
|
53
|
-
vaults = yield getMiniVaults(program, vaultTypeAccount.
|
54
|
+
vaults = yield getMiniVaults(program, vaultTypeAccount.vaultTypeName);
|
54
55
|
}
|
55
|
-
console.log('Vault count found:', vaults.length)
|
56
|
-
console.log('First Vault', vaults[0])
|
56
|
+
// console.log('Vault count found:', vaults.length)
|
57
|
+
// console.log('First Vault', vaults[0])
|
57
58
|
// Filter out the accounts that are not open
|
58
59
|
// TODO filter on vault status. Or we enable people to "close out" empty vaults
|
59
60
|
// vaults = _.filter(vaults, (vault) => {
|
@@ -76,6 +77,11 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
76
77
|
if (indexBefore > 0) {
|
77
78
|
oldSmallerPublicKey = vaults[indexBefore - 1].publicKey;
|
78
79
|
}
|
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
|
+
// }))
|
79
85
|
// Pretty print all the vaults before the operation
|
80
86
|
// console.log('Sorted open vaults BEFORE at index:', indexBefore)
|
81
87
|
// let correctOrderBefore = true
|
@@ -89,7 +95,7 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
89
95
|
// }
|
90
96
|
// }
|
91
97
|
// if (correctOrderBefore) {
|
92
|
-
// console.log(`
|
98
|
+
// console.log(`Verified the on-chain order of vault type:`, vaultTypeAccount.collateralType)
|
93
99
|
// } else {
|
94
100
|
// throw new Error('On-Chian vaults not in order!')
|
95
101
|
// }
|
@@ -104,7 +110,7 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
104
110
|
vaults[indexBefore] = thisVault;
|
105
111
|
}
|
106
112
|
// Now that we know it's def in the list, iterate the list and update
|
107
|
-
// this vault with the
|
113
|
+
// this vault with the operation we're going to apply
|
108
114
|
const newNormalizedDebt = new decimal_js_1.default(loanAmount);
|
109
115
|
const vaultTypeCompoundedInterest = (0, HedgeDecimal_1.DecimalFromU128)(vaultTypeAccount.cumulativeRate.toString());
|
110
116
|
vaults[indexBefore].updateDebtAndCollateral(vaultTypeAccount);
|
@@ -121,11 +127,6 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
121
127
|
}
|
122
128
|
// Sort it again since we've changed one vault
|
123
129
|
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
|
-
// }))
|
129
130
|
// Search for the vaults new position
|
130
131
|
let indexAfter = -1;
|
131
132
|
vaults.forEach((vault, index) => {
|
@@ -141,8 +142,7 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
141
142
|
// })
|
142
143
|
// )
|
143
144
|
// Print where it moved from / to
|
144
|
-
console.log('Index
|
145
|
-
console.log('Index After', indexAfter);
|
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;
|
@@ -168,7 +168,7 @@ function sortVaults(a, b) {
|
|
168
168
|
}
|
169
169
|
return aRatio - bRatio;
|
170
170
|
}
|
171
|
-
function getMiniVaults(program,
|
171
|
+
function getMiniVaults(program, vaultTypeName) {
|
172
172
|
return __awaiter(this, void 0, void 0, function* () {
|
173
173
|
const filters = [
|
174
174
|
// Filter for Vault Accounts
|
@@ -179,7 +179,7 @@ function getMiniVaults(program, collateralType) {
|
|
179
179
|
// Filter for Vaults with this collateral type
|
180
180
|
{
|
181
181
|
memcmp: {
|
182
|
-
bytes: bs58_1.default.encode(VaultAccount_1.VaultAccount.getBufferForString(
|
182
|
+
bytes: bs58_1.default.encode(VaultAccount_1.VaultAccount.getBufferForString(vaultTypeName)),
|
183
183
|
offset: 8 + 32 + 24,
|
184
184
|
},
|
185
185
|
},
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
12
|
+
function sendAndConfirmWithDebug(connection, transaction, signers) {
|
13
|
+
return __awaiter(this, void 0, void 0, function* () {
|
14
|
+
return connection
|
15
|
+
.sendTransaction(transaction, signers)
|
16
|
+
.then((signature) => {
|
17
|
+
return connection
|
18
|
+
.confirmTransaction(signature)
|
19
|
+
.then((signatureContext) => {
|
20
|
+
return signature;
|
21
|
+
})
|
22
|
+
.catch((error) => {
|
23
|
+
console.log('There was an error confirming the transaction', error);
|
24
|
+
console.trace();
|
25
|
+
throw error;
|
26
|
+
});
|
27
|
+
})
|
28
|
+
.catch((error) => {
|
29
|
+
console.log('There was an error sending the transaction', error);
|
30
|
+
console.trace();
|
31
|
+
throw error;
|
32
|
+
});
|
33
|
+
});
|
34
|
+
}
|
35
|
+
exports.default = sendAndConfirmWithDebug;
|
package/package.json
CHANGED
package/src/idl/vault.ts
CHANGED
@@ -1649,6 +1649,58 @@ 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": []
|
1652
1704
|
}
|
1653
1705
|
],
|
1654
1706
|
"accounts": [
|
@@ -1844,7 +1896,7 @@ export type Vault = {
|
|
1844
1896
|
"kind": "struct",
|
1845
1897
|
"fields": [
|
1846
1898
|
{
|
1847
|
-
"name": "
|
1899
|
+
"name": "vaultTypeName",
|
1848
1900
|
"type": "string"
|
1849
1901
|
},
|
1850
1902
|
{
|
@@ -1858,6 +1910,10 @@ export type Vault = {
|
|
1858
1910
|
{
|
1859
1911
|
"name": "oracleSwitchboard",
|
1860
1912
|
"type": "publicKey"
|
1913
|
+
},
|
1914
|
+
{
|
1915
|
+
"name": "vaultType",
|
1916
|
+
"type": "publicKey"
|
1861
1917
|
}
|
1862
1918
|
]
|
1863
1919
|
}
|
@@ -2102,7 +2158,7 @@ export type Vault = {
|
|
2102
2158
|
"kind": "struct",
|
2103
2159
|
"fields": [
|
2104
2160
|
{
|
2105
|
-
"name": "
|
2161
|
+
"name": "vaultTypeName",
|
2106
2162
|
"type": "string"
|
2107
2163
|
},
|
2108
2164
|
{
|
@@ -2186,6 +2242,14 @@ export type Vault = {
|
|
2186
2242
|
{
|
2187
2243
|
"name": "deprecated",
|
2188
2244
|
"type": "bool"
|
2245
|
+
},
|
2246
|
+
{
|
2247
|
+
"name": "totalFeesAccumulatedUsh",
|
2248
|
+
"type": "u128"
|
2249
|
+
},
|
2250
|
+
{
|
2251
|
+
"name": "totalFeesAccumulatedCollateral",
|
2252
|
+
"type": "u128"
|
2189
2253
|
}
|
2190
2254
|
]
|
2191
2255
|
}
|
@@ -2212,7 +2276,7 @@ export type Vault = {
|
|
2212
2276
|
"type": "u64"
|
2213
2277
|
},
|
2214
2278
|
{
|
2215
|
-
"name": "
|
2279
|
+
"name": "vaultTypeName",
|
2216
2280
|
"type": "string"
|
2217
2281
|
},
|
2218
2282
|
{
|
@@ -2260,6 +2324,10 @@ export type Vault = {
|
|
2260
2324
|
"type": {
|
2261
2325
|
"option": "publicKey"
|
2262
2326
|
}
|
2327
|
+
},
|
2328
|
+
{
|
2329
|
+
"name": "vaultType",
|
2330
|
+
"type": "publicKey"
|
2263
2331
|
}
|
2264
2332
|
]
|
2265
2333
|
}
|
@@ -2673,8 +2741,8 @@ export type Vault = {
|
|
2673
2741
|
},
|
2674
2742
|
{
|
2675
2743
|
"code": 6020,
|
2676
|
-
"name": "
|
2677
|
-
"msg": "Can only redeem
|
2744
|
+
"name": "NotRedeemingLowestCollateralRatioVault",
|
2745
|
+
"msg": "Can only redeem lowest collateral ratio vault in system."
|
2678
2746
|
},
|
2679
2747
|
{
|
2680
2748
|
"code": 6021,
|
@@ -2688,6 +2756,11 @@ export type Vault = {
|
|
2688
2756
|
},
|
2689
2757
|
{
|
2690
2758
|
"code": 6023,
|
2759
|
+
"name": "InvalidSaltLength",
|
2760
|
+
"msg": "Salt for new vaults must be of length 8"
|
2761
|
+
},
|
2762
|
+
{
|
2763
|
+
"code": 6024,
|
2691
2764
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
2692
2765
|
"msg": "New Max debt extended value is less than the current debt!"
|
2693
2766
|
}
|
@@ -4345,6 +4418,58 @@ export const IDL: Vault = {
|
|
4345
4418
|
}
|
4346
4419
|
}
|
4347
4420
|
]
|
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": []
|
4348
4473
|
}
|
4349
4474
|
],
|
4350
4475
|
"accounts": [
|
@@ -4540,7 +4665,7 @@ export const IDL: Vault = {
|
|
4540
4665
|
"kind": "struct",
|
4541
4666
|
"fields": [
|
4542
4667
|
{
|
4543
|
-
"name": "
|
4668
|
+
"name": "vaultTypeName",
|
4544
4669
|
"type": "string"
|
4545
4670
|
},
|
4546
4671
|
{
|
@@ -4554,6 +4679,10 @@ export const IDL: Vault = {
|
|
4554
4679
|
{
|
4555
4680
|
"name": "oracleSwitchboard",
|
4556
4681
|
"type": "publicKey"
|
4682
|
+
},
|
4683
|
+
{
|
4684
|
+
"name": "vaultType",
|
4685
|
+
"type": "publicKey"
|
4557
4686
|
}
|
4558
4687
|
]
|
4559
4688
|
}
|
@@ -4798,7 +4927,7 @@ export const IDL: Vault = {
|
|
4798
4927
|
"kind": "struct",
|
4799
4928
|
"fields": [
|
4800
4929
|
{
|
4801
|
-
"name": "
|
4930
|
+
"name": "vaultTypeName",
|
4802
4931
|
"type": "string"
|
4803
4932
|
},
|
4804
4933
|
{
|
@@ -4882,6 +5011,14 @@ export const IDL: Vault = {
|
|
4882
5011
|
{
|
4883
5012
|
"name": "deprecated",
|
4884
5013
|
"type": "bool"
|
5014
|
+
},
|
5015
|
+
{
|
5016
|
+
"name": "totalFeesAccumulatedUsh",
|
5017
|
+
"type": "u128"
|
5018
|
+
},
|
5019
|
+
{
|
5020
|
+
"name": "totalFeesAccumulatedCollateral",
|
5021
|
+
"type": "u128"
|
4885
5022
|
}
|
4886
5023
|
]
|
4887
5024
|
}
|
@@ -4908,7 +5045,7 @@ export const IDL: Vault = {
|
|
4908
5045
|
"type": "u64"
|
4909
5046
|
},
|
4910
5047
|
{
|
4911
|
-
"name": "
|
5048
|
+
"name": "vaultTypeName",
|
4912
5049
|
"type": "string"
|
4913
5050
|
},
|
4914
5051
|
{
|
@@ -4956,6 +5093,10 @@ export const IDL: Vault = {
|
|
4956
5093
|
"type": {
|
4957
5094
|
"option": "publicKey"
|
4958
5095
|
}
|
5096
|
+
},
|
5097
|
+
{
|
5098
|
+
"name": "vaultType",
|
5099
|
+
"type": "publicKey"
|
4959
5100
|
}
|
4960
5101
|
]
|
4961
5102
|
}
|
@@ -5369,8 +5510,8 @@ export const IDL: Vault = {
|
|
5369
5510
|
},
|
5370
5511
|
{
|
5371
5512
|
"code": 6020,
|
5372
|
-
"name": "
|
5373
|
-
"msg": "Can only redeem
|
5513
|
+
"name": "NotRedeemingLowestCollateralRatioVault",
|
5514
|
+
"msg": "Can only redeem lowest collateral ratio vault in system."
|
5374
5515
|
},
|
5375
5516
|
{
|
5376
5517
|
"code": 6021,
|
@@ -5384,6 +5525,11 @@ export const IDL: Vault = {
|
|
5384
5525
|
},
|
5385
5526
|
{
|
5386
5527
|
"code": 6023,
|
5528
|
+
"name": "InvalidSaltLength",
|
5529
|
+
"msg": "Salt for new vaults must be of length 8"
|
5530
|
+
},
|
5531
|
+
{
|
5532
|
+
"code": 6024,
|
5387
5533
|
"name": "UpdateVaultTypeBadMaxDebtExtended",
|
5388
5534
|
"msg": "New Max debt extended value is less than the current debt!"
|
5389
5535
|
}
|
@@ -41,6 +41,7 @@ export async function createStakingPoolInstruction(
|
|
41
41
|
hedgeTokensToBeMinted: number,
|
42
42
|
overrideStartTime?: number
|
43
43
|
): Promise<TransactionInstruction> {
|
44
|
+
console.log("new createStakingPoolInstruction")
|
44
45
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
45
46
|
const ushMintPublickey = await getUshMintPublicKey()
|
46
47
|
const [poolPublickey, poolBump] = await getPoolPublicKeyForMint(mintPublicKey)
|
@@ -20,6 +20,7 @@ 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'
|
23
24
|
|
24
25
|
export async function depositVault(
|
25
26
|
program: Program<Vault>,
|
@@ -35,13 +36,12 @@ export async function depositVault(
|
|
35
36
|
await getOrCreateAssociatedTokenAccount(provider.connection, payer, ushMintPublickey, payer.publicKey)
|
36
37
|
|
37
38
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
38
|
-
const
|
39
|
-
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
39
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
40
40
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
41
41
|
provider.connection,
|
42
42
|
payer,
|
43
43
|
vaultTypeAccountInfo.collateralMint,
|
44
|
-
|
44
|
+
vaultAccount.vaultType,
|
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
|
+
vaultAccount.vaultType,
|
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 (vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString()) {
|
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
|
+
vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString() ? wrappedSolAccount.publicKey : payerTokenAccount,
|
102
102
|
vaultPublicKey,
|
103
103
|
vaultAssociatedCollateralAccountPublicKey,
|
104
104
|
history.publicKey,
|
105
|
-
|
105
|
+
vaultAccount.vaultType,
|
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 (vaultTypeAccountInfo.collateralMint.toString() === WRAPPED_SOL_MINT.toString()) {
|
119
119
|
transaction.add(
|
120
120
|
TokenInstructions.closeAccount({
|
121
121
|
source: wrappedSolAccount.publicKey,
|
@@ -31,8 +31,7 @@ export async function liquidateVault(
|
|
31
31
|
): Promise<PublicKey> {
|
32
32
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
33
33
|
|
34
|
-
const
|
35
|
-
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultTypeAccountPublicKey)
|
34
|
+
const vaultTypeAccountInfo = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
36
35
|
const collateralMint = vaultTypeAccountInfo.collateralMint
|
37
36
|
|
38
37
|
const hedgeMintPublickey = await getHedgeMintPublicKey()
|
@@ -73,7 +72,7 @@ export async function liquidateVault(
|
|
73
72
|
provider.connection,
|
74
73
|
payer,
|
75
74
|
collateralMint,
|
76
|
-
|
75
|
+
vaultAccount.vaultType,
|
77
76
|
true
|
78
77
|
)
|
79
78
|
const hedgeStakingPoolAssociatedUshTokenAccount = await getOrCreateAssociatedTokenAccount(
|
@@ -87,7 +86,7 @@ export async function liquidateVault(
|
|
87
86
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
88
87
|
program,
|
89
88
|
provider,
|
90
|
-
|
89
|
+
vaultAccount.vaultType,
|
91
90
|
vaultPublicKey,
|
92
91
|
0,
|
93
92
|
0,
|
@@ -119,7 +118,7 @@ export async function liquidateVault(
|
|
119
118
|
oldSmallerPublicKey,
|
120
119
|
newSmallerPublicKey,
|
121
120
|
newLargerPublicKey,
|
122
|
-
vaultAccount.
|
121
|
+
vaultAccount.vaultType,
|
123
122
|
overrideTime
|
124
123
|
)
|
125
124
|
)
|
@@ -146,13 +145,12 @@ export async function liquidateVaultInstruction(
|
|
146
145
|
oldSmallerPublicKey: PublicKey,
|
147
146
|
newSmallerPublicKey: PublicKey,
|
148
147
|
newLargerPublicKey: PublicKey,
|
149
|
-
|
148
|
+
vaultTypeAccount: PublicKey,
|
150
149
|
overrideTime?: number
|
151
150
|
): Promise<TransactionInstruction> {
|
152
151
|
const vaultSystemStatePublicKey = await getVaultSystemStatePublicKey()
|
153
152
|
const ushMintPublickey = await getUshMintPublicKey()
|
154
153
|
const liquidationPoolUshAccountPublickey = await getLiquidationPoolUshAccountPublicKey()
|
155
|
-
const vaultTypeAccount = await getVaultTypeAccountPublicKey(collateralType)
|
156
154
|
|
157
155
|
return await program.methods
|
158
156
|
.liquidateVault(
|
@@ -17,8 +17,13 @@ import {
|
|
17
17
|
getVaultTypeAccountPublicKey,
|
18
18
|
getUshMintPublicKey,
|
19
19
|
getVaultSystemStatePublicKey,
|
20
|
+
HEDGE_PROGRAM_PUBLICKEY,
|
20
21
|
} from '../Constants'
|
21
22
|
import { Vault } from 'idl/vault'
|
23
|
+
import { parseAnchorErrors } from '../utils/Errors'
|
24
|
+
import { VaultAccount } from '../state/VaultAccount'
|
25
|
+
|
26
|
+
const fs = require('fs');
|
22
27
|
|
23
28
|
export async function loanVault(
|
24
29
|
program: Program<Vault>,
|
@@ -36,15 +41,14 @@ export async function loanVault(
|
|
36
41
|
ushMintPublickey,
|
37
42
|
payer.publicKey
|
38
43
|
)
|
39
|
-
|
40
44
|
const vaultAccount = await program.account.vault.fetch(vaultPublicKey)
|
41
|
-
const
|
42
|
-
|
45
|
+
const vaultTypeAccount = await program.account.vaultType.fetch(vaultAccount.vaultType)
|
46
|
+
|
43
47
|
const vaultTypeAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
44
48
|
provider.connection,
|
45
49
|
payer,
|
46
50
|
vaultTypeAccount.collateralMint,
|
47
|
-
|
51
|
+
vaultAccount.vaultType,
|
48
52
|
true
|
49
53
|
)
|
50
54
|
const vaultAssociatedTokenAccount = await getOrCreateAssociatedTokenAccount(
|
@@ -54,11 +58,10 @@ export async function loanVault(
|
|
54
58
|
vaultPublicKey,
|
55
59
|
true
|
56
60
|
)
|
57
|
-
|
58
61
|
const [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey] = await getLinkedListAccounts(
|
59
62
|
program,
|
60
63
|
provider,
|
61
|
-
|
64
|
+
vaultAccount.vaultType,
|
62
65
|
vaultPublicKey,
|
63
66
|
0,
|
64
67
|
loanAmount,
|
@@ -75,7 +78,7 @@ export async function loanVault(
|
|
75
78
|
vaultPublicKey,
|
76
79
|
vaultAssociatedTokenAccount.address,
|
77
80
|
history.publicKey,
|
78
|
-
|
81
|
+
vaultAccount.vaultType,
|
79
82
|
vaultTypeAssociatedTokenAccount.address,
|
80
83
|
oldSmallerPublicKey,
|
81
84
|
newSmallerPublicKey,
|
@@ -84,7 +87,7 @@ export async function loanVault(
|
|
84
87
|
overrideTime
|
85
88
|
)
|
86
89
|
)
|
87
|
-
await sendAndConfirmTransaction(provider.connection, transaction, [payer, history])
|
90
|
+
await sendAndConfirmTransaction(provider.connection, transaction, [payer, history]).catch(parseAnchorErrors)
|
88
91
|
return vaultPublicKey
|
89
92
|
}
|
90
93
|
|