@haven-fi/solauto-sdk 1.0.41 → 1.0.42
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/dist/clients/solautoMarginfiClient.d.ts +3 -3
- package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +44 -41
- package/dist/constants/marginfiAccounts.d.ts +2 -2
- package/dist/generated/instructions/marginfiRebalance.js +2 -2
- package/dist/types/accounts.d.ts +1 -1
- package/dist/utils/marginfiUtils.d.ts +3 -3
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +5 -5
- package/package.json +1 -1
- package/src/clients/solautoMarginfiClient.ts +53 -49
- package/src/constants/marginfiAccounts.ts +2 -2
- package/src/generated/instructions/marginfiRebalance.ts +2 -2
- package/src/types/accounts.ts +1 -1
- package/src/utils/marginfiUtils.ts +5 -5
- package/tests/transactions/solautoMarginfi.ts +1 -1
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Signer, TransactionBuilder } from "@metaplex-foundation/umi";
|
2
2
|
import { PublicKey } from "@solana/web3.js";
|
3
3
|
import { SolautoClient, SolautoClientArgs } from "./solautoClient";
|
4
|
-
import {
|
4
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
5
5
|
import { DCASettingsInpArgs, PositionState, SolautoActionArgs, SolautoRebalanceTypeArgs, SolautoSettingsParametersInpArgs } from "../generated";
|
6
6
|
import { MarginfiAccount } from "../marginfi-sdk";
|
7
7
|
import { JupSwapDetails } from "../utils/jupiterUtils";
|
@@ -18,8 +18,8 @@ export declare class SolautoMarginfiClient extends SolautoClient {
|
|
18
18
|
marginfiAccount: PublicKey | Signer;
|
19
19
|
marginfiAccountPk: PublicKey;
|
20
20
|
marginfiGroup: PublicKey;
|
21
|
-
|
22
|
-
|
21
|
+
marginfiSupplyAccounts: MarginfiAssetAccounts;
|
22
|
+
marginfiDebtAccounts: MarginfiAssetAccounts;
|
23
23
|
intermediaryMarginfiAccountSigner?: Signer;
|
24
24
|
intermediaryMarginfiAccountPk: PublicKey;
|
25
25
|
intermediaryMarginfiAccount?: MarginfiAccount;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,
|
1
|
+
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAQnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAG7C,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IA0C1C,8BAA8B;IA0CpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAQ/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA6C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA8D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA4DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IA8ElE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
|
@@ -39,10 +39,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
39
39
|
this.marginfiGroup = marginfiAccountData
|
40
40
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(marginfiAccountData.group)
|
41
41
|
: args.marginfiGroup ?? new web3_js_1.PublicKey(marginfiAccounts_1.DEFAULT_MARGINFI_GROUP);
|
42
|
-
this.
|
42
|
+
this.marginfiSupplyAccounts = (0, marginfiUtils_1.findMarginfiAccounts)({
|
43
43
|
mint: this.supplyMint.toString(),
|
44
44
|
});
|
45
|
-
this.
|
45
|
+
this.marginfiDebtAccounts = (0, marginfiUtils_1.findMarginfiAccounts)({
|
46
46
|
mint: this.debtMint.toString(),
|
47
47
|
});
|
48
48
|
if (!this.initialized) {
|
@@ -51,7 +51,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
51
51
|
this.initialized = true;
|
52
52
|
}
|
53
53
|
async setIntermediaryMarginfiDetails() {
|
54
|
-
const existingMarginfiAccounts = (await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(this.umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), false))
|
54
|
+
const existingMarginfiAccounts = (await (0, marginfiUtils_1.getAllMarginfiAccountsByAuthority)(this.umi, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), false))
|
55
|
+
.filter((x) => !x.marginfiAccount.equals(this.marginfiAccountPk))
|
56
|
+
.sort((a, b) => a.marginfiAccount.toString().localeCompare(b.marginfiAccount.toString()));
|
55
57
|
const emptyMarginfiAccounts = existingMarginfiAccounts.length > 0
|
56
58
|
? (await (0, marginfi_sdk_1.safeFetchAllMarginfiAccount)(this.umi, existingMarginfiAccounts.map((x) => (0, umi_1.publicKey)(x.marginfiAccount)))).filter((x) => x.lendingAccount.balances.find((y) => y.bankPk.toString() !== web3_js_1.PublicKey.default.toString() &&
|
57
59
|
(Math.round((0, numberUtils_1.bytesToI80F48)(y.assetShares.value)) != 0 ||
|
@@ -114,10 +116,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
114
116
|
? this.marginfiAccount
|
115
117
|
: (0, umi_1.publicKey)(this.marginfiAccount),
|
116
118
|
supplyMint: (0, umi_1.publicKey)(this.supplyMint),
|
117
|
-
supplyBank: (0, umi_1.publicKey)(this.
|
119
|
+
supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
118
120
|
positionSupplyTa: (0, umi_1.publicKey)(this.positionSupplyTa),
|
119
121
|
debtMint: (0, umi_1.publicKey)(this.debtMint),
|
120
|
-
debtBank: (0, umi_1.publicKey)(this.
|
122
|
+
debtBank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
121
123
|
positionDebtTa: (0, umi_1.publicKey)(this.positionDebtTa),
|
122
124
|
signerDebtTa: signerDebtTa,
|
123
125
|
positionData: {
|
@@ -136,10 +138,10 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
136
138
|
marginfiProgram: (0, umi_1.publicKey)(marginfi_sdk_1.MARGINFI_PROGRAM_ID),
|
137
139
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
138
140
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccount),
|
139
|
-
supplyBank: (0, umi_1.publicKey)(this.
|
140
|
-
supplyPriceOracle: (0, umi_1.publicKey)(this.
|
141
|
-
debtBank: (0, umi_1.publicKey)(this.
|
142
|
-
debtPriceOracle: (0, umi_1.publicKey)(this.
|
141
|
+
supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
142
|
+
supplyPriceOracle: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.priceOracle),
|
143
|
+
debtBank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
144
|
+
debtPriceOracle: (0, umi_1.publicKey)(this.marginfiDebtAccounts.priceOracle),
|
143
145
|
solautoPosition: (0, umi_1.publicKey)(this.solautoPosition),
|
144
146
|
});
|
145
147
|
}
|
@@ -161,8 +163,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
161
163
|
signerTokenAccount: (0, umi_1.publicKey)(this.signerSupplyTa),
|
162
164
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
163
165
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
164
|
-
bank: (0, umi_1.publicKey)(this.
|
165
|
-
bankLiquidityVault: (0, umi_1.publicKey)(this.
|
166
|
+
bank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
167
|
+
bankLiquidityVault: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault),
|
166
168
|
});
|
167
169
|
}
|
168
170
|
case "Borrow": {
|
@@ -172,9 +174,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
172
174
|
destinationTokenAccount: (0, umi_1.publicKey)(this.signerDebtTa),
|
173
175
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
174
176
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
175
|
-
bank: (0, umi_1.publicKey)(this.
|
176
|
-
bankLiquidityVault: (0, umi_1.publicKey)(this.
|
177
|
-
bankLiquidityVaultAuthority: (0, umi_1.publicKey)(this.
|
177
|
+
bank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
178
|
+
bankLiquidityVault: (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault),
|
179
|
+
bankLiquidityVaultAuthority: (0, umi_1.publicKey)(this.marginfiDebtAccounts.vaultAuthority),
|
178
180
|
});
|
179
181
|
}
|
180
182
|
case "Repay": {
|
@@ -185,8 +187,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
185
187
|
signerTokenAccount: (0, umi_1.publicKey)(this.signerDebtTa),
|
186
188
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
187
189
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
188
|
-
bank: (0, umi_1.publicKey)(this.
|
189
|
-
bankLiquidityVault: (0, umi_1.publicKey)(this.
|
190
|
+
bank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
191
|
+
bankLiquidityVault: (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault),
|
190
192
|
});
|
191
193
|
}
|
192
194
|
case "Withdraw": {
|
@@ -197,9 +199,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
197
199
|
destinationTokenAccount: (0, umi_1.publicKey)(this.signerSupplyTa),
|
198
200
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
199
201
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
200
|
-
bank: (0, umi_1.publicKey)(this.
|
201
|
-
bankLiquidityVault: (0, umi_1.publicKey)(this.
|
202
|
-
bankLiquidityVaultAuthority: (0, umi_1.publicKey)(this.
|
202
|
+
bank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
203
|
+
bankLiquidityVault: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault),
|
204
|
+
bankLiquidityVaultAuthority: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.vaultAuthority),
|
203
205
|
});
|
204
206
|
}
|
205
207
|
}
|
@@ -212,8 +214,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
212
214
|
positionSupplyTa = (0, umi_1.publicKey)(args.__kind === "Withdraw" || this.selfManaged
|
213
215
|
? this.signerSupplyTa
|
214
216
|
: this.positionSupplyTa);
|
215
|
-
vaultSupplyTa = (0, umi_1.publicKey)(this.
|
216
|
-
supplyVaultAuthority = (0, umi_1.publicKey)(this.
|
217
|
+
vaultSupplyTa = (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault);
|
218
|
+
supplyVaultAuthority = (0, umi_1.publicKey)(this.marginfiSupplyAccounts.vaultAuthority);
|
217
219
|
}
|
218
220
|
let positionDebtTa = undefined;
|
219
221
|
let vaultDebtTa = undefined;
|
@@ -222,14 +224,14 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
222
224
|
positionDebtTa = (0, umi_1.publicKey)(args.__kind === "Borrow" || this.selfManaged
|
223
225
|
? this.signerDebtTa
|
224
226
|
: this.positionDebtTa);
|
225
|
-
vaultDebtTa = (0, umi_1.publicKey)(this.
|
226
|
-
debtVaultAuthority = (0, umi_1.publicKey)(this.
|
227
|
+
vaultDebtTa = (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault);
|
228
|
+
debtVaultAuthority = (0, umi_1.publicKey)(this.marginfiDebtAccounts.vaultAuthority);
|
227
229
|
}
|
228
230
|
let supplyPriceOracle = undefined;
|
229
231
|
let debtPriceOracle = undefined;
|
230
232
|
if (args.__kind === "Withdraw" || args.__kind === "Borrow") {
|
231
|
-
supplyPriceOracle = (0, umi_1.publicKey)(this.
|
232
|
-
debtPriceOracle = (0, umi_1.publicKey)(this.
|
233
|
+
supplyPriceOracle = (0, umi_1.publicKey)(this.marginfiSupplyAccounts.priceOracle);
|
234
|
+
debtPriceOracle = (0, umi_1.publicKey)(this.marginfiDebtAccounts.priceOracle);
|
233
235
|
}
|
234
236
|
return (0, generated_1.marginfiProtocolInteraction)(this.umi, {
|
235
237
|
signer: this.signer,
|
@@ -237,12 +239,12 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
237
239
|
solautoPosition: (0, umi_1.publicKey)(this.solautoPosition),
|
238
240
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
239
241
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
240
|
-
supplyBank: (0, umi_1.publicKey)(this.
|
242
|
+
supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
241
243
|
supplyPriceOracle,
|
242
244
|
positionSupplyTa,
|
243
245
|
vaultSupplyTa,
|
244
246
|
supplyVaultAuthority,
|
245
|
-
debtBank: (0, umi_1.publicKey)(this.
|
247
|
+
debtBank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
246
248
|
debtPriceOracle,
|
247
249
|
positionDebtTa,
|
248
250
|
vaultDebtTa,
|
@@ -259,40 +261,41 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
259
261
|
const needDebtAccounts = (!inputIsSupply && rebalanceStep === "A") ||
|
260
262
|
(!outputIsSupply && rebalanceStep === "B") ||
|
261
263
|
(!inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
|
264
|
+
console.log(rebalanceStep, needDebtAccounts);
|
262
265
|
return (0, generated_1.marginfiRebalance)(this.umi, {
|
263
266
|
signer: this.signer,
|
264
267
|
marginfiProgram: (0, umi_1.publicKey)(marginfi_sdk_1.MARGINFI_PROGRAM_ID),
|
265
268
|
ixsSysvar: (0, umi_1.publicKey)(web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY),
|
266
269
|
solautoFeesSupplyTa: rebalanceStep === "B" ? (0, umi_1.publicKey)(this.solautoFeesSupplyTa) : undefined,
|
267
270
|
authorityReferralState: (0, umi_1.publicKey)(this.authorityReferralState),
|
268
|
-
referredBySupplyTa:
|
271
|
+
referredBySupplyTa: this.referredBySupplyTa
|
269
272
|
? (0, umi_1.publicKey)(this.referredBySupplyTa)
|
270
273
|
: undefined,
|
271
274
|
solautoPosition: (0, umi_1.publicKey)(this.solautoPosition),
|
272
275
|
marginfiGroup: (0, umi_1.publicKey)(this.marginfiGroup),
|
273
276
|
marginfiAccount: (0, umi_1.publicKey)(this.marginfiAccountPk),
|
274
277
|
intermediaryTa: (0, umi_1.publicKey)((0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), swapDetails.inputMint)),
|
275
|
-
supplyBank: (0, umi_1.publicKey)(this.
|
276
|
-
supplyPriceOracle: (0, umi_1.publicKey)(this.
|
278
|
+
supplyBank: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.bank),
|
279
|
+
supplyPriceOracle: (0, umi_1.publicKey)(this.marginfiSupplyAccounts.priceOracle),
|
277
280
|
positionSupplyTa: (0, umi_1.publicKey)(this.positionSupplyTa),
|
278
281
|
signerSupplyTa: this.selfManaged
|
279
282
|
? (0, umi_1.publicKey)(this.signerSupplyTa)
|
280
283
|
: undefined,
|
281
284
|
vaultSupplyTa: needSupplyAccounts
|
282
|
-
? (0, umi_1.publicKey)(this.
|
285
|
+
? (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault)
|
283
286
|
: undefined,
|
284
287
|
supplyVaultAuthority: needSupplyAccounts
|
285
|
-
? (0, umi_1.publicKey)(this.
|
288
|
+
? (0, umi_1.publicKey)(this.marginfiSupplyAccounts.vaultAuthority)
|
286
289
|
: undefined,
|
287
|
-
debtBank: (0, umi_1.publicKey)(this.
|
288
|
-
debtPriceOracle: (0, umi_1.publicKey)(this.
|
290
|
+
debtBank: (0, umi_1.publicKey)(this.marginfiDebtAccounts.bank),
|
291
|
+
debtPriceOracle: (0, umi_1.publicKey)(this.marginfiDebtAccounts.priceOracle),
|
289
292
|
positionDebtTa: (0, umi_1.publicKey)(this.positionDebtTa),
|
290
293
|
signerDebtTa: this.selfManaged ? (0, umi_1.publicKey)(this.signerDebtTa) : undefined,
|
291
294
|
vaultDebtTa: needDebtAccounts
|
292
|
-
? (0, umi_1.publicKey)(this.
|
295
|
+
? (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault)
|
293
296
|
: undefined,
|
294
297
|
debtVaultAuthority: needDebtAccounts
|
295
|
-
? (0, umi_1.publicKey)(this.
|
298
|
+
? (0, umi_1.publicKey)(this.marginfiDebtAccounts.vaultAuthority)
|
296
299
|
: undefined,
|
297
300
|
rebalanceType,
|
298
301
|
targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
|
@@ -301,8 +304,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
301
304
|
}
|
302
305
|
flashBorrow(flashLoanDetails, destinationTokenAccount) {
|
303
306
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
304
|
-
? this.
|
305
|
-
: this.
|
307
|
+
? this.marginfiSupplyAccounts
|
308
|
+
: this.marginfiDebtAccounts;
|
306
309
|
return (0, umi_1.transactionBuilder)()
|
307
310
|
.add((0, marginfi_sdk_1.lendingAccountStartFlashloan)(this.umi, {
|
308
311
|
endIndex: 0,
|
@@ -323,8 +326,8 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
323
326
|
}
|
324
327
|
flashRepay(flashLoanDetails) {
|
325
328
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
326
|
-
? this.
|
327
|
-
: this.
|
329
|
+
? this.marginfiSupplyAccounts
|
330
|
+
: this.marginfiDebtAccounts;
|
328
331
|
const remainingAccounts = [];
|
329
332
|
let includedFlashLoanToken = false;
|
330
333
|
if (this.intermediaryMarginfiAccount) {
|
@@ -340,7 +343,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
340
343
|
isWritable: false,
|
341
344
|
},
|
342
345
|
{
|
343
|
-
pubkey: (0, umi_1.publicKey)((0, marginfiUtils_1.
|
346
|
+
pubkey: (0, umi_1.publicKey)((0, marginfiUtils_1.findMarginfiAccounts)({ bank: x.bankPk.toString() })
|
344
347
|
.priceOracle),
|
345
348
|
isSigner: false,
|
346
349
|
isWritable: false,
|
@@ -1,7 +1,7 @@
|
|
1
|
-
import {
|
1
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
2
2
|
export declare const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
3
3
|
export declare const MARGINFI_ACCOUNTS: {
|
4
|
-
[key: string]:
|
4
|
+
[key: string]: MarginfiAssetAccounts;
|
5
5
|
};
|
6
6
|
export declare const MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
|
7
7
|
//# sourceMappingURL=marginfiAccounts.d.ts.map
|
@@ -114,7 +114,7 @@ function marginfiRebalance(context, input) {
|
|
114
114
|
},
|
115
115
|
supplyVaultAuthority: {
|
116
116
|
index: 17,
|
117
|
-
isWritable:
|
117
|
+
isWritable: true,
|
118
118
|
value: input.supplyVaultAuthority ?? null,
|
119
119
|
},
|
120
120
|
debtBank: {
|
@@ -144,7 +144,7 @@ function marginfiRebalance(context, input) {
|
|
144
144
|
},
|
145
145
|
debtVaultAuthority: {
|
146
146
|
index: 23,
|
147
|
-
isWritable:
|
147
|
+
isWritable: true,
|
148
148
|
value: input.debtVaultAuthority ?? null,
|
149
149
|
},
|
150
150
|
};
|
package/dist/types/accounts.d.ts
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Umi } from "@metaplex-foundation/umi";
|
3
3
|
import { Bank } from "../marginfi-sdk";
|
4
|
-
import {
|
4
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
5
5
|
import { PositionState } from "../generated";
|
6
6
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
7
|
-
export declare function
|
7
|
+
export declare function findMarginfiAccounts({ mint, bank, }: {
|
8
8
|
mint?: string;
|
9
9
|
bank?: string;
|
10
|
-
}):
|
10
|
+
}): MarginfiAssetAccounts;
|
11
11
|
export declare function getMaxLtvAndLiqThreshold(supplyBank: Bank, debtBank: Bank | null, supplyPrice?: number): Promise<[number, number]>;
|
12
12
|
export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: PublicKey, compatibleWithSolauto?: boolean): Promise<{
|
13
13
|
marginfiAccount: PublicKey;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,EACnC,IAAI,EACJ,IAAI,GACL,EAAE;IACD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,qBAAqB,CAWxB;AAED,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CA6CA;AA0DD,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA4IpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B3B"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getUpToDateShareValues = exports.getMarginfiAccountPositionState = exports.getAllMarginfiAccountsByAuthority = exports.getMaxLtvAndLiqThreshold = exports.
|
3
|
+
exports.getUpToDateShareValues = exports.getMarginfiAccountPositionState = exports.getAllMarginfiAccountsByAuthority = exports.getMaxLtvAndLiqThreshold = exports.findMarginfiAccounts = void 0;
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
5
5
|
const umi_1 = require("@metaplex-foundation/umi");
|
6
6
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
@@ -11,7 +11,7 @@ const solautoConstants_1 = require("../constants/solautoConstants");
|
|
11
11
|
const marginfiAccounts_1 = require("../constants/marginfiAccounts");
|
12
12
|
const generalAccounts_1 = require("../constants/generalAccounts");
|
13
13
|
const solanaUtils_1 = require("./solanaUtils");
|
14
|
-
function
|
14
|
+
function findMarginfiAccounts({ mint, bank, }) {
|
15
15
|
for (const key in marginfiAccounts_1.MARGINFI_ACCOUNTS) {
|
16
16
|
const account = marginfiAccounts_1.MARGINFI_ACCOUNTS[key];
|
17
17
|
if (mint && account.mint.toString().toLowerCase() === mint.toLowerCase()) {
|
@@ -23,7 +23,7 @@ function findMarginfiBankAccounts({ mint, bank, }) {
|
|
23
23
|
}
|
24
24
|
throw new Error(`Marginfi accounts not found by the mint: ${mint}`);
|
25
25
|
}
|
26
|
-
exports.
|
26
|
+
exports.findMarginfiAccounts = findMarginfiAccounts;
|
27
27
|
async function getMaxLtvAndLiqThreshold(supplyBank, debtBank, supplyPrice) {
|
28
28
|
if (!supplyPrice) {
|
29
29
|
const [price] = await (0, generalUtils_1.getTokenPrices)([(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint)]);
|
@@ -125,10 +125,10 @@ async function getTokenUsage(umi, bank, isAsset, shares, amountUsedAdjustment) {
|
|
125
125
|
async function getMarginfiAccountPositionState(umi, marginfiAccountPk, supplyMint, debtMint, livePositionUpdates) {
|
126
126
|
let marginfiAccount = await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(marginfiAccountPk));
|
127
127
|
let supplyBank = supplyMint && supplyMint !== web3_js_1.PublicKey.default
|
128
|
-
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
128
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(findMarginfiAccounts({ mint: supplyMint.toString() }).bank))
|
129
129
|
: null;
|
130
130
|
let debtBank = debtMint && debtMint !== web3_js_1.PublicKey.default
|
131
|
-
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
131
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(findMarginfiAccounts({ mint: debtMint.toString() }).bank))
|
132
132
|
: null;
|
133
133
|
let supplyUsage = undefined;
|
134
134
|
let debtUsage = undefined;
|
package/package.json
CHANGED
@@ -13,7 +13,7 @@ import {
|
|
13
13
|
} from "@metaplex-foundation/umi";
|
14
14
|
import { PublicKey, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
|
15
15
|
import { SolautoClient, SolautoClientArgs } from "./solautoClient";
|
16
|
-
import {
|
16
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
17
17
|
import {
|
18
18
|
DEFAULT_MARGINFI_GROUP,
|
19
19
|
MARGINFI_ACCOUNTS_LOOKUP_TABLE,
|
@@ -48,7 +48,7 @@ import {
|
|
48
48
|
import { JupSwapDetails } from "../utils/jupiterUtils";
|
49
49
|
import { FlashLoanDetails } from "../utils/solauto/rebalanceUtils";
|
50
50
|
import {
|
51
|
-
|
51
|
+
findMarginfiAccounts,
|
52
52
|
getAllMarginfiAccountsByAuthority,
|
53
53
|
getMarginfiAccountPositionState,
|
54
54
|
} from "../utils/marginfiUtils";
|
@@ -70,8 +70,8 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
70
70
|
public marginfiAccountPk!: PublicKey;
|
71
71
|
public marginfiGroup!: PublicKey;
|
72
72
|
|
73
|
-
public
|
74
|
-
public
|
73
|
+
public marginfiSupplyAccounts!: MarginfiAssetAccounts;
|
74
|
+
public marginfiDebtAccounts!: MarginfiAssetAccounts;
|
75
75
|
|
76
76
|
// For flash loans
|
77
77
|
public intermediaryMarginfiAccountSigner?: Signer;
|
@@ -107,10 +107,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
107
107
|
? toWeb3JsPublicKey(marginfiAccountData.group)
|
108
108
|
: args.marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP);
|
109
109
|
|
110
|
-
this.
|
110
|
+
this.marginfiSupplyAccounts = findMarginfiAccounts({
|
111
111
|
mint: this.supplyMint.toString(),
|
112
112
|
})!;
|
113
|
-
this.
|
113
|
+
this.marginfiDebtAccounts = findMarginfiAccounts({
|
114
114
|
mint: this.debtMint.toString(),
|
115
115
|
})!;
|
116
116
|
|
@@ -127,7 +127,11 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
127
127
|
toWeb3JsPublicKey(this.signer.publicKey),
|
128
128
|
false
|
129
129
|
)
|
130
|
-
)
|
130
|
+
)
|
131
|
+
.filter((x) => !x.marginfiAccount.equals(this.marginfiAccountPk))
|
132
|
+
.sort((a, b) =>
|
133
|
+
a.marginfiAccount.toString().localeCompare(b.marginfiAccount.toString())
|
134
|
+
);
|
131
135
|
const emptyMarginfiAccounts =
|
132
136
|
existingMarginfiAccounts.length > 0
|
133
137
|
? (
|
@@ -216,10 +220,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
216
220
|
? (this.marginfiAccount as Signer)
|
217
221
|
: publicKey(this.marginfiAccount),
|
218
222
|
supplyMint: publicKey(this.supplyMint),
|
219
|
-
supplyBank: publicKey(this.
|
223
|
+
supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
|
220
224
|
positionSupplyTa: publicKey(this.positionSupplyTa),
|
221
225
|
debtMint: publicKey(this.debtMint),
|
222
|
-
debtBank: publicKey(this.
|
226
|
+
debtBank: publicKey(this.marginfiDebtAccounts.bank),
|
223
227
|
positionDebtTa: publicKey(this.positionDebtTa),
|
224
228
|
signerDebtTa: signerDebtTa,
|
225
229
|
positionData: {
|
@@ -239,10 +243,10 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
239
243
|
marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
|
240
244
|
marginfiGroup: publicKey(this.marginfiGroup),
|
241
245
|
marginfiAccount: publicKey(this.marginfiAccount),
|
242
|
-
supplyBank: publicKey(this.
|
243
|
-
supplyPriceOracle: publicKey(this.
|
244
|
-
debtBank: publicKey(this.
|
245
|
-
debtPriceOracle: publicKey(this.
|
246
|
+
supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
|
247
|
+
supplyPriceOracle: publicKey(this.marginfiSupplyAccounts.priceOracle),
|
248
|
+
debtBank: publicKey(this.marginfiDebtAccounts.bank),
|
249
|
+
debtPriceOracle: publicKey(this.marginfiDebtAccounts.priceOracle),
|
246
250
|
solautoPosition: publicKey(this.solautoPosition),
|
247
251
|
});
|
248
252
|
}
|
@@ -266,9 +270,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
266
270
|
signerTokenAccount: publicKey(this.signerSupplyTa),
|
267
271
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
268
272
|
marginfiGroup: publicKey(this.marginfiGroup),
|
269
|
-
bank: publicKey(this.
|
273
|
+
bank: publicKey(this.marginfiSupplyAccounts.bank),
|
270
274
|
bankLiquidityVault: publicKey(
|
271
|
-
this.
|
275
|
+
this.marginfiSupplyAccounts.liquidityVault
|
272
276
|
),
|
273
277
|
});
|
274
278
|
}
|
@@ -279,12 +283,12 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
279
283
|
destinationTokenAccount: publicKey(this.signerDebtTa),
|
280
284
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
281
285
|
marginfiGroup: publicKey(this.marginfiGroup),
|
282
|
-
bank: publicKey(this.
|
286
|
+
bank: publicKey(this.marginfiDebtAccounts.bank),
|
283
287
|
bankLiquidityVault: publicKey(
|
284
|
-
this.
|
288
|
+
this.marginfiDebtAccounts.liquidityVault
|
285
289
|
),
|
286
290
|
bankLiquidityVaultAuthority: publicKey(
|
287
|
-
this.
|
291
|
+
this.marginfiDebtAccounts.vaultAuthority
|
288
292
|
),
|
289
293
|
});
|
290
294
|
}
|
@@ -297,9 +301,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
297
301
|
signerTokenAccount: publicKey(this.signerDebtTa),
|
298
302
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
299
303
|
marginfiGroup: publicKey(this.marginfiGroup),
|
300
|
-
bank: publicKey(this.
|
304
|
+
bank: publicKey(this.marginfiDebtAccounts.bank),
|
301
305
|
bankLiquidityVault: publicKey(
|
302
|
-
this.
|
306
|
+
this.marginfiDebtAccounts.liquidityVault
|
303
307
|
),
|
304
308
|
});
|
305
309
|
}
|
@@ -312,12 +316,12 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
312
316
|
destinationTokenAccount: publicKey(this.signerSupplyTa),
|
313
317
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
314
318
|
marginfiGroup: publicKey(this.marginfiGroup),
|
315
|
-
bank: publicKey(this.
|
319
|
+
bank: publicKey(this.marginfiSupplyAccounts.bank),
|
316
320
|
bankLiquidityVault: publicKey(
|
317
|
-
this.
|
321
|
+
this.marginfiSupplyAccounts.liquidityVault
|
318
322
|
),
|
319
323
|
bankLiquidityVaultAuthority: publicKey(
|
320
|
-
this.
|
324
|
+
this.marginfiSupplyAccounts.vaultAuthority
|
321
325
|
),
|
322
326
|
});
|
323
327
|
}
|
@@ -336,9 +340,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
336
340
|
? this.signerSupplyTa
|
337
341
|
: this.positionSupplyTa
|
338
342
|
);
|
339
|
-
vaultSupplyTa = publicKey(this.
|
343
|
+
vaultSupplyTa = publicKey(this.marginfiSupplyAccounts.liquidityVault);
|
340
344
|
supplyVaultAuthority = publicKey(
|
341
|
-
this.
|
345
|
+
this.marginfiSupplyAccounts.vaultAuthority
|
342
346
|
);
|
343
347
|
}
|
344
348
|
|
@@ -351,9 +355,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
351
355
|
? this.signerDebtTa
|
352
356
|
: this.positionDebtTa
|
353
357
|
);
|
354
|
-
vaultDebtTa = publicKey(this.
|
358
|
+
vaultDebtTa = publicKey(this.marginfiDebtAccounts.liquidityVault);
|
355
359
|
debtVaultAuthority = publicKey(
|
356
|
-
this.
|
360
|
+
this.marginfiDebtAccounts.vaultAuthority
|
357
361
|
);
|
358
362
|
}
|
359
363
|
|
@@ -361,9 +365,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
361
365
|
let debtPriceOracle: UmiPublicKey | undefined = undefined;
|
362
366
|
if (args.__kind === "Withdraw" || args.__kind === "Borrow") {
|
363
367
|
supplyPriceOracle = publicKey(
|
364
|
-
this.
|
368
|
+
this.marginfiSupplyAccounts.priceOracle
|
365
369
|
);
|
366
|
-
debtPriceOracle = publicKey(this.
|
370
|
+
debtPriceOracle = publicKey(this.marginfiDebtAccounts.priceOracle);
|
367
371
|
}
|
368
372
|
|
369
373
|
return marginfiProtocolInteraction(this.umi, {
|
@@ -372,12 +376,12 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
372
376
|
solautoPosition: publicKey(this.solautoPosition),
|
373
377
|
marginfiGroup: publicKey(this.marginfiGroup),
|
374
378
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
375
|
-
supplyBank: publicKey(this.
|
379
|
+
supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
|
376
380
|
supplyPriceOracle,
|
377
381
|
positionSupplyTa,
|
378
382
|
vaultSupplyTa,
|
379
383
|
supplyVaultAuthority,
|
380
|
-
debtBank: publicKey(this.
|
384
|
+
debtBank: publicKey(this.marginfiDebtAccounts.bank),
|
381
385
|
debtPriceOracle,
|
382
386
|
positionDebtTa,
|
383
387
|
vaultDebtTa,
|
@@ -392,7 +396,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
392
396
|
rebalanceType: SolautoRebalanceTypeArgs,
|
393
397
|
flashLoan?: FlashLoanDetails,
|
394
398
|
targetLiqUtilizationRateBps?: number,
|
395
|
-
limitGapBps?: number
|
399
|
+
limitGapBps?: number
|
396
400
|
): TransactionBuilder {
|
397
401
|
const inputIsSupply = swapDetails.inputMint.equals(this.supplyMint);
|
398
402
|
const outputIsSupply = swapDetails.outputMint.equals(this.supplyMint);
|
@@ -405,6 +409,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
405
409
|
(!outputIsSupply && rebalanceStep === "B") ||
|
406
410
|
(!inputIsSupply && flashLoan !== undefined && rebalanceStep == "B");
|
407
411
|
|
412
|
+
console.log(rebalanceStep, needDebtAccounts);
|
408
413
|
return marginfiRebalance(this.umi, {
|
409
414
|
signer: this.signer,
|
410
415
|
marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
|
@@ -412,10 +417,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
412
417
|
solautoFeesSupplyTa:
|
413
418
|
rebalanceStep === "B" ? publicKey(this.solautoFeesSupplyTa) : undefined,
|
414
419
|
authorityReferralState: publicKey(this.authorityReferralState),
|
415
|
-
referredBySupplyTa:
|
416
|
-
|
417
|
-
|
418
|
-
: undefined,
|
420
|
+
referredBySupplyTa: this.referredBySupplyTa
|
421
|
+
? publicKey(this.referredBySupplyTa)
|
422
|
+
: undefined,
|
419
423
|
solautoPosition: publicKey(this.solautoPosition),
|
420
424
|
marginfiGroup: publicKey(this.marginfiGroup),
|
421
425
|
marginfiAccount: publicKey(this.marginfiAccountPk),
|
@@ -425,27 +429,27 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
425
429
|
swapDetails.inputMint
|
426
430
|
)
|
427
431
|
),
|
428
|
-
supplyBank: publicKey(this.
|
429
|
-
supplyPriceOracle: publicKey(this.
|
432
|
+
supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
|
433
|
+
supplyPriceOracle: publicKey(this.marginfiSupplyAccounts.priceOracle),
|
430
434
|
positionSupplyTa: publicKey(this.positionSupplyTa),
|
431
435
|
signerSupplyTa: this.selfManaged
|
432
436
|
? publicKey(this.signerSupplyTa)
|
433
437
|
: undefined,
|
434
438
|
vaultSupplyTa: needSupplyAccounts
|
435
|
-
? publicKey(this.
|
439
|
+
? publicKey(this.marginfiSupplyAccounts.liquidityVault)
|
436
440
|
: undefined,
|
437
441
|
supplyVaultAuthority: needSupplyAccounts
|
438
|
-
? publicKey(this.
|
442
|
+
? publicKey(this.marginfiSupplyAccounts.vaultAuthority)
|
439
443
|
: undefined,
|
440
|
-
debtBank: publicKey(this.
|
441
|
-
debtPriceOracle: publicKey(this.
|
444
|
+
debtBank: publicKey(this.marginfiDebtAccounts.bank),
|
445
|
+
debtPriceOracle: publicKey(this.marginfiDebtAccounts.priceOracle),
|
442
446
|
positionDebtTa: publicKey(this.positionDebtTa),
|
443
447
|
signerDebtTa: this.selfManaged ? publicKey(this.signerDebtTa) : undefined,
|
444
448
|
vaultDebtTa: needDebtAccounts
|
445
|
-
? publicKey(this.
|
449
|
+
? publicKey(this.marginfiDebtAccounts.liquidityVault)
|
446
450
|
: undefined,
|
447
451
|
debtVaultAuthority: needDebtAccounts
|
448
|
-
? publicKey(this.
|
452
|
+
? publicKey(this.marginfiDebtAccounts.vaultAuthority)
|
449
453
|
: undefined,
|
450
454
|
rebalanceType,
|
451
455
|
targetLiqUtilizationRateBps: targetLiqUtilizationRateBps ?? null,
|
@@ -458,8 +462,8 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
458
462
|
destinationTokenAccount: PublicKey
|
459
463
|
): TransactionBuilder {
|
460
464
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
461
|
-
? this.
|
462
|
-
: this.
|
465
|
+
? this.marginfiSupplyAccounts
|
466
|
+
: this.marginfiDebtAccounts;
|
463
467
|
return transactionBuilder()
|
464
468
|
.add(
|
465
469
|
lendingAccountStartFlashloan(this.umi, {
|
@@ -485,8 +489,8 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
485
489
|
|
486
490
|
flashRepay(flashLoanDetails: FlashLoanDetails): TransactionBuilder {
|
487
491
|
const bank = flashLoanDetails.mint.equals(this.supplyMint)
|
488
|
-
? this.
|
489
|
-
: this.
|
492
|
+
? this.marginfiSupplyAccounts
|
493
|
+
: this.marginfiDebtAccounts;
|
490
494
|
|
491
495
|
const remainingAccounts: AccountMeta[] = [];
|
492
496
|
let includedFlashLoanToken = false;
|
@@ -507,7 +511,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
507
511
|
},
|
508
512
|
{
|
509
513
|
pubkey: publicKey(
|
510
|
-
|
514
|
+
findMarginfiAccounts({ bank: x.bankPk.toString() })
|
511
515
|
.priceOracle
|
512
516
|
),
|
513
517
|
isSigner: false,
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { NATIVE_MINT } from "@solana/spl-token";
|
2
2
|
import { USDC_MINT } from "./tokenConstants";
|
3
|
-
import {
|
3
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
4
4
|
|
5
5
|
export const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
6
6
|
|
7
|
-
export const MARGINFI_ACCOUNTS: { [key: string]:
|
7
|
+
export const MARGINFI_ACCOUNTS: { [key: string]: MarginfiAssetAccounts } = {
|
8
8
|
SOL: {
|
9
9
|
mint: NATIVE_MINT.toString(),
|
10
10
|
bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
|
@@ -206,7 +206,7 @@ export function marginfiRebalance(
|
|
206
206
|
},
|
207
207
|
supplyVaultAuthority: {
|
208
208
|
index: 17,
|
209
|
-
isWritable:
|
209
|
+
isWritable: true as boolean,
|
210
210
|
value: input.supplyVaultAuthority ?? null,
|
211
211
|
},
|
212
212
|
debtBank: {
|
@@ -236,7 +236,7 @@ export function marginfiRebalance(
|
|
236
236
|
},
|
237
237
|
debtVaultAuthority: {
|
238
238
|
index: 23,
|
239
|
-
isWritable:
|
239
|
+
isWritable: true as boolean,
|
240
240
|
value: input.debtVaultAuthority ?? null,
|
241
241
|
},
|
242
242
|
} satisfies ResolvedAccountsWithIndices;
|
package/src/types/accounts.ts
CHANGED
@@ -17,19 +17,19 @@ import {
|
|
17
17
|
} from "./numberUtils";
|
18
18
|
import { PRICES } from "../constants/solautoConstants";
|
19
19
|
import { MARGINFI_ACCOUNTS } from "../constants/marginfiAccounts";
|
20
|
-
import {
|
20
|
+
import { MarginfiAssetAccounts } from "../types/accounts";
|
21
21
|
import { PositionState, PositionTokenUsage } from "../generated";
|
22
22
|
import { USD_DECIMALS } from "../constants/generalAccounts";
|
23
23
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
24
24
|
import { currentUnixSecondsSolana } from "./solanaUtils";
|
25
25
|
|
26
|
-
export function
|
26
|
+
export function findMarginfiAccounts({
|
27
27
|
mint,
|
28
28
|
bank,
|
29
29
|
}: {
|
30
30
|
mint?: string;
|
31
31
|
bank?: string;
|
32
|
-
}):
|
32
|
+
}): MarginfiAssetAccounts {
|
33
33
|
for (const key in MARGINFI_ACCOUNTS) {
|
34
34
|
const account = MARGINFI_ACCOUNTS[key];
|
35
35
|
if (mint && account.mint.toString().toLowerCase() === mint.toLowerCase()) {
|
@@ -212,7 +212,7 @@ export async function getMarginfiAccountPositionState(
|
|
212
212
|
? await safeFetchBank(
|
213
213
|
umi,
|
214
214
|
publicKey(
|
215
|
-
|
215
|
+
findMarginfiAccounts({ mint: supplyMint.toString() }).bank
|
216
216
|
)
|
217
217
|
)
|
218
218
|
: null;
|
@@ -221,7 +221,7 @@ export async function getMarginfiAccountPositionState(
|
|
221
221
|
? await safeFetchBank(
|
222
222
|
umi,
|
223
223
|
publicKey(
|
224
|
-
|
224
|
+
findMarginfiAccounts({ mint: debtMint.toString() }).bank
|
225
225
|
)
|
226
226
|
)
|
227
227
|
: null;
|
@@ -115,7 +115,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
115
115
|
transactionItems.push(
|
116
116
|
new TransactionItem(
|
117
117
|
async (attemptNum) =>
|
118
|
-
await buildSolautoRebalanceTransaction(client,
|
118
|
+
await buildSolautoRebalanceTransaction(client, 5500, attemptNum),
|
119
119
|
"rebalance"
|
120
120
|
)
|
121
121
|
);
|