hedge-web3 0.1.50 → 0.2.2
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/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
|
|