hedge-web3 0.1.50 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- package/declarations/Constants.d.ts +2 -1
- package/declarations/idl/vault.d.ts +192 -41
- package/declarations/index.d.ts +1 -0
- package/declarations/instructions/claimLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/claimStakingPoolPosition.d.ts +1 -1
- package/declarations/instructions/closeClaimedLiquidationPoolPosition.d.ts +5 -0
- package/declarations/instructions/closeLiquidationPoolPosition.d.ts +1 -1
- package/declarations/instructions/createStakingPool.d.ts +1 -1
- package/declarations/instructions/createVault.d.ts +1 -1
- package/declarations/instructions/depositLiquidationPool.d.ts +1 -1
- package/declarations/instructions/depositStakingPool.d.ts +1 -1
- package/declarations/instructions/depositVault.d.ts +1 -1
- package/declarations/instructions/initHedgeFoundation.d.ts +1 -1
- package/declarations/instructions/liquidateVault.d.ts +2 -2
- package/declarations/instructions/loanVault.d.ts +1 -1
- package/declarations/instructions/redeemVault.d.ts +1 -1
- package/declarations/instructions/refreshOraclePrice.d.ts +3 -3
- package/declarations/instructions/repayVault.d.ts +1 -1
- package/declarations/instructions/setHalted.d.ts +1 -1
- package/declarations/instructions/updateVaultType.d.ts +4 -1
- package/declarations/instructions/withdrawStakingPool.d.ts +1 -1
- package/declarations/instructions/withdrawVault.d.ts +1 -1
- package/declarations/state/VaultAccount.d.ts +9 -6
- package/declarations/utils/getLinkedListAccounts.d.ts +1 -1
- package/lib/Constants.js +3 -2
- package/lib/idl/vault.js +192 -41
- package/lib/index.js +1 -0
- package/lib/instructions/claimLiquidationPoolPosition.js +5 -1
- package/lib/instructions/claimStakingPoolPosition.js +5 -1
- package/lib/instructions/closeClaimedLiquidationPoolPosition.js +38 -0
- package/lib/instructions/closeLiquidationPoolPosition.js +5 -1
- package/lib/instructions/createStakingPool.js +5 -1
- package/lib/instructions/createVault.js +5 -1
- package/lib/instructions/depositLiquidationPool.js +5 -1
- package/lib/instructions/depositStakingPool.js +5 -1
- package/lib/instructions/depositVault.js +12 -8
- package/lib/instructions/initHedgeFoundation.js +5 -1
- package/lib/instructions/initHedgeFoundationTokens.js +5 -1
- package/lib/instructions/liquidateVault.js +10 -8
- package/lib/instructions/loanVault.js +9 -6
- package/lib/instructions/redeemVault.js +9 -6
- package/lib/instructions/refreshOraclePrice.js +8 -3
- package/lib/instructions/repayVault.js +9 -6
- package/lib/instructions/setHalted.js +5 -1
- package/lib/instructions/updateVaultType.js +9 -2
- package/lib/instructions/withdrawStakingPool.js +5 -1
- package/lib/instructions/withdrawVault.js +9 -6
- package/lib/state/VaultAccount.js +28 -32
- package/lib/utils/getLinkedListAccounts.js +54 -57
- package/package.json +1 -1
- package/src/Constants.ts +2 -1
- package/src/idl/vault.ts +384 -82
- package/src/index.ts +1 -0
- package/src/instructions/claimLiquidationPoolPosition.ts +3 -2
- package/src/instructions/claimStakingPoolPosition.ts +3 -2
- package/src/instructions/closeClaimedLiquidationPoolPosition.ts +31 -0
- package/src/instructions/closeLiquidationPoolPosition.ts +3 -2
- package/src/instructions/createStakingPool.ts +3 -2
- package/src/instructions/createVault.ts +3 -2
- package/src/instructions/depositLiquidationPool.ts +3 -2
- package/src/instructions/depositStakingPool.ts +3 -2
- package/src/instructions/depositVault.ts +11 -11
- package/src/instructions/initHedgeFoundation.ts +3 -2
- package/src/instructions/initHedgeFoundationTokens.ts +2 -1
- package/src/instructions/liquidateVault.ts +11 -10
- package/src/instructions/loanVault.ts +11 -9
- package/src/instructions/redeemVault.ts +7 -7
- package/src/instructions/refreshOraclePrice.ts +9 -6
- package/src/instructions/repayVault.ts +7 -7
- package/src/instructions/setHalted.ts +3 -2
- package/src/instructions/updateVaultType.ts +10 -2
- package/src/instructions/withdrawStakingPool.ts +5 -3
- package/src/instructions/withdrawVault.ts +7 -7
- package/src/state/VaultAccount.ts +37 -32
- package/src/state/VaultType.ts +62 -0
- package/src/utils/getLinkedListAccounts.ts +61 -60
- package/src/utils/sendAndConfirmWithDebug.ts +27 -0
@@ -15,19 +15,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.getLinkedListAccounts = void 0;
|
16
16
|
const underscore_1 = __importDefault(require("underscore"));
|
17
17
|
const Constants_1 = require("../Constants");
|
18
|
-
const HedgeDecimal_1 = require("../HedgeDecimal");
|
19
18
|
const VaultAccount_1 = require("../state/VaultAccount");
|
20
19
|
const decimal_js_1 = __importDefault(require("decimal.js"));
|
21
20
|
const bs58_1 = __importDefault(require("bs58"));
|
21
|
+
const VaultType_1 = __importDefault(require("../state/VaultType"));
|
22
22
|
function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vaultPublicKey, depositAmount, loanAmount, redeem, liquidate, cachedVaults) {
|
23
23
|
return __awaiter(this, void 0, void 0, function* () {
|
24
|
-
|
25
|
-
const
|
24
|
+
const vaultTypeRaw = yield program.account.vaultType.fetch(vaultTypeAccountPublicKey);
|
25
|
+
const vaultType = new VaultType_1.default(vaultTypeRaw, vaultTypeAccountPublicKey);
|
26
|
+
const DEBUG = false;
|
26
27
|
// Default for null is the vault itself, so set them all to this vault
|
27
28
|
let oldSmallerPublicKey = vaultPublicKey;
|
28
29
|
let newSmallerPublicKey = vaultPublicKey;
|
29
30
|
let newLargerPublicKey = vaultPublicKey;
|
30
31
|
const thisVaultData = yield program.account.vault.fetch(vaultPublicKey);
|
32
|
+
// const accountInfo = await program.provider.connection.getAccountInfo(vaultPublicKey)
|
31
33
|
const thisVault = new VaultAccount_1.VaultAccount(thisVaultData, vaultPublicKey);
|
32
34
|
// Load all the vaults
|
33
35
|
let vaults;
|
@@ -35,33 +37,20 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
35
37
|
vaults = cachedVaults;
|
36
38
|
}
|
37
39
|
else {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
// memcmp: { bytes: vaultTypeAccount.collateralType, offset: 8 + 32 + 8 },
|
44
|
-
// },
|
45
|
-
// ])
|
46
|
-
// .catch((error) => {
|
47
|
-
// console.log('error', error)
|
48
|
-
// })) || []
|
49
|
-
// // Load them into our account objects
|
50
|
-
// vaults = allVaults.map((vault) => {
|
51
|
-
// return new VaultAccount(vault.account, vault.publicKey)
|
52
|
-
// })
|
53
|
-
vaults = yield getMiniVaults(program, vaultTypeAccount.collateralType);
|
40
|
+
vaults = yield getMiniVaults(program, vaultTypeAccountPublicKey);
|
41
|
+
}
|
42
|
+
if (DEBUG) {
|
43
|
+
console.log('Vault count found:', vaults.length);
|
44
|
+
console.log('First Vault', vaults[0]);
|
54
45
|
}
|
55
|
-
console.log('Vault count found:', vaults.length);
|
56
|
-
console.log('First Vault', vaults[0]);
|
57
46
|
// Filter out the accounts that are not open
|
58
|
-
// TODO filter on vault status. Or we enable people to "close out" empty vaults
|
47
|
+
// TODO filter on vault status. Or we enable people to "close out" empty vaults
|
59
48
|
// vaults = _.filter(vaults, (vault) => {
|
60
49
|
// return vault.vaultStatus === 'open'
|
61
50
|
// })
|
62
51
|
// Remove any vaults with no debt or collateral
|
63
52
|
vaults = underscore_1.default.filter(vaults, (vault) => {
|
64
|
-
return vault.denormalizedDebt
|
53
|
+
return vault.denormalizedDebt > 0 && vault.deposited > 0;
|
65
54
|
});
|
66
55
|
// Sort them
|
67
56
|
vaults.sort(sortVaults);
|
@@ -76,6 +65,13 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
76
65
|
if (indexBefore > 0) {
|
77
66
|
oldSmallerPublicKey = vaults[indexBefore - 1].publicKey;
|
78
67
|
}
|
68
|
+
if (DEBUG) {
|
69
|
+
// Pretty print the list again
|
70
|
+
console.log('Sorted open vaults. Index Before: ', indexBefore);
|
71
|
+
console.log(vaults.map((vault) => {
|
72
|
+
return vault.toString(vaultPublicKey);
|
73
|
+
}));
|
74
|
+
}
|
79
75
|
// Pretty print all the vaults before the operation
|
80
76
|
// console.log('Sorted open vaults BEFORE at index:', indexBefore)
|
81
77
|
// let correctOrderBefore = true
|
@@ -106,9 +102,8 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
106
102
|
// Now that we know it's def in the list, iterate the list and update
|
107
103
|
// this vault with the operation we're going to apply
|
108
104
|
const newNormalizedDebt = new decimal_js_1.default(loanAmount);
|
109
|
-
|
110
|
-
vaults[indexBefore].
|
111
|
-
vaults[indexBefore].addDebt(newNormalizedDebt, vaultTypeCompoundedInterest);
|
105
|
+
vaults[indexBefore].updateDebtAndCollateral(vaultType);
|
106
|
+
vaults[indexBefore].addDebt(newNormalizedDebt, vaultType);
|
112
107
|
vaults[indexBefore].addDeposit(depositAmount);
|
113
108
|
if (liquidate) {
|
114
109
|
vaults[indexBefore].liquidate();
|
@@ -116,16 +111,11 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
116
111
|
if (redeem) {
|
117
112
|
vaults[indexBefore].redeem();
|
118
113
|
}
|
119
|
-
if (vaults[indexBefore].denormalizedDebt
|
114
|
+
if (vaults[indexBefore].denormalizedDebt === 0) {
|
120
115
|
vaults.splice(indexBefore, 1);
|
121
116
|
}
|
122
117
|
// Sort it again since we've changed one vault
|
123
118
|
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
119
|
// Search for the vaults new position
|
130
120
|
let indexAfter = -1;
|
131
121
|
vaults.forEach((vault, index) => {
|
@@ -133,16 +123,17 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
133
123
|
indexAfter = index;
|
134
124
|
}
|
135
125
|
});
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
126
|
+
if (DEBUG) {
|
127
|
+
// New list with vault
|
128
|
+
console.log('New list with vault now at index:', indexAfter);
|
129
|
+
console.log(vaults.map((vault) => {
|
130
|
+
return vault.toString(vaultPublicKey);
|
131
|
+
}));
|
132
|
+
}
|
133
|
+
if (DEBUG) {
|
134
|
+
// Print where it moved from / to
|
135
|
+
console.log('Index After', indexAfter);
|
136
|
+
}
|
146
137
|
// Save references to the new left and right
|
147
138
|
if (indexAfter > 0) {
|
148
139
|
newSmallerPublicKey = vaults[indexAfter - 1].publicKey;
|
@@ -150,10 +141,12 @@ function getLinkedListAccounts(program, provider, vaultTypeAccountPublicKey, vau
|
|
150
141
|
if (indexAfter < vaults.length - 1 && indexAfter >= 0) {
|
151
142
|
newLargerPublicKey = vaults[indexAfter + 1].publicKey;
|
152
143
|
}
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
144
|
+
if (DEBUG) {
|
145
|
+
// Print out the new left/right
|
146
|
+
console.log('oldSmallerPublicKey', oldSmallerPublicKey.toString());
|
147
|
+
console.log('newSmallerPublicKey', newSmallerPublicKey.toString());
|
148
|
+
console.log('newLargerPublicKey', newLargerPublicKey.toString());
|
149
|
+
}
|
157
150
|
return [oldSmallerPublicKey, newSmallerPublicKey, newLargerPublicKey, vaults];
|
158
151
|
});
|
159
152
|
}
|
@@ -161,17 +154,14 @@ exports.getLinkedListAccounts = getLinkedListAccounts;
|
|
161
154
|
// Sort function we can use to sort the vaults
|
162
155
|
// Sorted by collateral ratio. If two are the same, newer vault first
|
163
156
|
function sortVaults(a, b) {
|
164
|
-
const aRatio = a.deposited
|
165
|
-
const bRatio = b.deposited
|
166
|
-
if (aRatio
|
157
|
+
const aRatio = a.deposited / a.denormalizedDebt;
|
158
|
+
const bRatio = b.deposited / b.denormalizedDebt;
|
159
|
+
if (aRatio === bRatio) {
|
167
160
|
return b.vaultNumber - a.vaultNumber;
|
168
161
|
}
|
169
|
-
|
170
|
-
return 1;
|
171
|
-
}
|
172
|
-
return -1;
|
162
|
+
return aRatio - bRatio;
|
173
163
|
}
|
174
|
-
function getMiniVaults(program,
|
164
|
+
function getMiniVaults(program, vaultTypePublicKey) {
|
175
165
|
return __awaiter(this, void 0, void 0, function* () {
|
176
166
|
const filters = [
|
177
167
|
// Filter for Vault Accounts
|
@@ -179,13 +169,20 @@ function getMiniVaults(program, collateralType) {
|
|
179
169
|
// @ts-ignore
|
180
170
|
memcmp: program.account.vault.coder.accounts.memcmp(program.account.vault._idlAccount.name),
|
181
171
|
},
|
182
|
-
// Filter for Vaults
|
172
|
+
// Filter for Vaults that are open
|
183
173
|
{
|
184
174
|
memcmp: {
|
185
|
-
bytes: bs58_1.default.encode(
|
175
|
+
bytes: bs58_1.default.encode(Buffer.from([1])),
|
186
176
|
offset: 8 + 32 + 24,
|
187
177
|
},
|
188
178
|
},
|
179
|
+
// Filter for Vaults with this collateral type
|
180
|
+
{
|
181
|
+
memcmp: {
|
182
|
+
bytes: vaultTypePublicKey.toString(),
|
183
|
+
offset: 8 + 32 + 24 + 1,
|
184
|
+
},
|
185
|
+
},
|
189
186
|
];
|
190
187
|
const allAccounts = yield program.provider.connection.getProgramAccounts(Constants_1.HEDGE_PROGRAM_PUBLICKEY, {
|
191
188
|
filters: filters,
|
@@ -196,7 +193,7 @@ function getMiniVaults(program, collateralType) {
|
|
196
193
|
length: 24,
|
197
194
|
},
|
198
195
|
});
|
199
|
-
return allAccounts.map(vaultData => {
|
196
|
+
return allAccounts.map((vaultData) => {
|
200
197
|
return VaultAccount_1.VaultAccount.FromMiniSlice(vaultData.account.data, vaultData.pubkey);
|
201
198
|
});
|
202
199
|
});
|
package/package.json
CHANGED
package/src/Constants.ts
CHANGED
@@ -4,12 +4,13 @@ import {
|
|
4
4
|
} from '@solana/spl-token'
|
5
5
|
import { PublicKey } from '@solana/web3.js'
|
6
6
|
|
7
|
-
export const HEDGE_PROGRAM_ID = '
|
7
|
+
export const HEDGE_PROGRAM_ID = 'HedgeEohwU6RqokrvPU4Hb6XKPub8NuKbnPmY7FoMMtN'
|
8
8
|
export const HEDGE_PROGRAM_PUBLICKEY = new PublicKey(HEDGE_PROGRAM_ID)
|
9
9
|
|
10
10
|
export const CHAINLINK_SOL_USD_ID =
|
11
11
|
'FmAmfoyPXiA8Vhhe6MZTr3U6rZfEZ1ctEHay1ysqCqcf'
|
12
12
|
export const CHAINLINK_SOL_USD_PUBLICKEY = new PublicKey(CHAINLINK_SOL_USD_ID)
|
13
|
+
export const CHAINLINK_PROGRAM_ID = "HEvSKofvBgfaexv23kMabbYqxasxU3mQ4ibBMEmJWHny";
|
13
14
|
|
14
15
|
const enc = new TextEncoder()
|
15
16
|
|