@haven-fi/solauto-sdk 1.0.569 → 1.0.571
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.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +11 -3
- package/dist/utils/marginfiUtils.js +2 -2
- package/package.json +1 -1
- package/src/clients/solautoMarginfiClient.ts +18 -11
- package/src/utils/marginfiUtils.ts +2 -2
- package/tests/transactions/solautoMarginfi.ts +49 -19
@@ -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;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EAGb,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAEtB,OAAO,EAGL,eAAe,EAWhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,eAAe,EAChB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,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,cAAc,CAAC,CAAY;IAE5B,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;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAErD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAiG1C,8BAA8B;IAwCpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAUzB,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA0B3D,yBAAyB,CAAC,eAAe,EAAE,MAAM,GAAG,kBAAkB;IAStE,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;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,wBAAwB,EACvC,eAAe,EAAE,eAAe,EAChC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,GACnC,kBAAkB;IA+ErB,WAAW,CACT,aAAa,EAAE,oBAAoB,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA8CrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;
|
1
|
+
{"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"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"}
|
@@ -443,12 +443,13 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
443
443
|
},
|
444
444
|
]);
|
445
445
|
}
|
446
|
-
const banksRequiringBalanceClose = [
|
446
|
+
const banksRequiringBalanceClose = Array.from(new Set([
|
447
447
|
accounts.data.bank,
|
448
448
|
...(this.intermediaryMarginfiAccount?.lendingAccount.balances ?? [])
|
449
449
|
.filter((x) => x.active && (0, numberUtils_1.bytesToI80F48)(x.liabilityShares.value) > 0)
|
450
450
|
.map((x) => x.bankPk.toString()),
|
451
|
-
];
|
451
|
+
]));
|
452
|
+
this.log("Intermediary marginfi account active balances:", banksRequiringBalanceClose);
|
452
453
|
return (0, umi_1.transactionBuilder)()
|
453
454
|
.add((0, marginfi_sdk_1.lendingAccountRepay)(this.umi, {
|
454
455
|
amount: flashLoanDetails.baseUnitAmount,
|
@@ -460,7 +461,14 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
460
461
|
signer: this.signer,
|
461
462
|
signerTokenAccount: (0, umi_1.publicKey)((0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), flashLoanDetails.mint)),
|
462
463
|
}))
|
463
|
-
.add(
|
464
|
+
.add(
|
465
|
+
// banksRequiringBalanceClose.map((x) =>
|
466
|
+
// this.closeBalance(
|
467
|
+
// this.intermediaryMarginfiAccountPk,
|
468
|
+
// new PublicKey(x)
|
469
|
+
// )
|
470
|
+
// )
|
471
|
+
this.closeBalance(this.intermediaryMarginfiAccountPk, new web3_js_1.PublicKey(accounts.data.bank)))
|
464
472
|
.add((0, marginfi_sdk_1.lendingAccountEndFlashloan)(this.umi, {
|
465
473
|
marginfiAccount: (0, umi_1.publicKey)(this.intermediaryMarginfiAccountPk),
|
466
474
|
signer: this.signer,
|
@@ -322,6 +322,6 @@ function getUpToDateShareValues(bank) {
|
|
322
322
|
}
|
323
323
|
function marginfiAccountEmpty(marginfiAccount) {
|
324
324
|
return (marginfiAccount.lendingAccount.balances.find((x) => x.bankPk.toString() !== web3_js_1.PublicKey.default.toString() &&
|
325
|
-
(
|
326
|
-
|
325
|
+
((0, numberUtils_1.bytesToI80F48)(x.assetShares.value) > 0.0001 ||
|
326
|
+
(0, numberUtils_1.bytesToI80F48)(x.liabilityShares.value) > 0.0001)) === undefined);
|
327
327
|
}
|
package/package.json
CHANGED
@@ -687,12 +687,15 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
687
687
|
);
|
688
688
|
}
|
689
689
|
|
690
|
-
const banksRequiringBalanceClose =
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
690
|
+
const banksRequiringBalanceClose = Array.from(
|
691
|
+
new Set([
|
692
|
+
accounts.data.bank,
|
693
|
+
...(this.intermediaryMarginfiAccount?.lendingAccount.balances ?? [])
|
694
|
+
.filter((x) => x.active && bytesToI80F48(x.liabilityShares.value) > 0)
|
695
|
+
.map((x) => x.bankPk.toString()),
|
696
|
+
])
|
697
|
+
);
|
698
|
+
this.log("Intermediary marginfi account active balances:", banksRequiringBalanceClose);
|
696
699
|
|
697
700
|
return transactionBuilder()
|
698
701
|
.add(
|
@@ -713,11 +716,15 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
713
716
|
})
|
714
717
|
)
|
715
718
|
.add(
|
716
|
-
banksRequiringBalanceClose.map((x) =>
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
719
|
+
// banksRequiringBalanceClose.map((x) =>
|
720
|
+
// this.closeBalance(
|
721
|
+
// this.intermediaryMarginfiAccountPk,
|
722
|
+
// new PublicKey(x)
|
723
|
+
// )
|
724
|
+
// )
|
725
|
+
this.closeBalance(
|
726
|
+
this.intermediaryMarginfiAccountPk,
|
727
|
+
new PublicKey(accounts.data.bank)
|
721
728
|
)
|
722
729
|
)
|
723
730
|
.add(
|
@@ -591,8 +591,8 @@ export function marginfiAccountEmpty(marginfiAccount: MarginfiAccount) {
|
|
591
591
|
marginfiAccount.lendingAccount.balances.find(
|
592
592
|
(x) =>
|
593
593
|
x.bankPk.toString() !== PublicKey.default.toString() &&
|
594
|
-
(
|
595
|
-
|
594
|
+
(bytesToI80F48(x.assetShares.value) > 0.0001 ||
|
595
|
+
bytesToI80F48(x.liabilityShares.value) > 0.0001)
|
596
596
|
) === undefined
|
597
597
|
);
|
598
598
|
}
|
@@ -5,6 +5,7 @@ import {
|
|
5
5
|
some,
|
6
6
|
transactionBuilder,
|
7
7
|
Umi,
|
8
|
+
UmiError,
|
8
9
|
} from "@metaplex-foundation/umi";
|
9
10
|
import { setupTest } from "../shared";
|
10
11
|
import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
|
@@ -50,6 +51,7 @@ import {
|
|
50
51
|
getQnComputeUnitPriceEstimate,
|
51
52
|
getSolautoManagedPositions,
|
52
53
|
getSolautoPositionAccount,
|
54
|
+
marginfiAccountEmpty,
|
53
55
|
retryWithExponentialBackoff,
|
54
56
|
safeGetPrice,
|
55
57
|
} from "../../src/utils";
|
@@ -61,6 +63,7 @@ import {
|
|
61
63
|
USD_DECIMALS,
|
62
64
|
} from "../../dist";
|
63
65
|
import {
|
66
|
+
lendingPoolAccrueBankInterest,
|
64
67
|
safeFetchBank,
|
65
68
|
safeFetchMarginfiAccount,
|
66
69
|
} from "../../src/marginfi-sdk";
|
@@ -117,16 +120,16 @@ async function test(
|
|
117
120
|
console.log(
|
118
121
|
bytesToI80F48(
|
119
122
|
imfiAccount.lendingAccount.balances[0].liabilityShares.value
|
120
|
-
) *
|
121
|
-
|
122
|
-
|
123
|
+
) * bytesToI80F48(supplyBank.liabilityShareValue.value),
|
124
|
+
bytesToI80F48(imfiAccount.lendingAccount.balances[0].assetShares.value) *
|
125
|
+
bytesToI80F48(supplyBank.assetShareValue.value)
|
123
126
|
);
|
124
127
|
console.log(
|
125
128
|
bytesToI80F48(
|
126
129
|
imfiAccount.lendingAccount.balances[1].liabilityShares.value
|
127
|
-
) *
|
128
|
-
|
129
|
-
|
130
|
+
) * bytesToI80F48(debtBank.liabilityShareValue.value),
|
131
|
+
bytesToI80F48(imfiAccount.lendingAccount.balances[1].assetShares.value) *
|
132
|
+
bytesToI80F48(debtBank.assetShareValue.value)
|
130
133
|
);
|
131
134
|
|
132
135
|
console.log(
|
@@ -183,16 +186,17 @@ describe("Solauto Marginfi tests", async () => {
|
|
183
186
|
// debtMint: new PublicKey(USDC),
|
184
187
|
});
|
185
188
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
189
|
+
await test(
|
190
|
+
client.umi,
|
191
|
+
// new PublicKey("E8oukAkTMW4YsAPymMzWQHWb8egmGq9yjDtmMi6gfY18"),
|
192
|
+
undefined,
|
193
|
+
new PublicKey(RETARDIO),
|
194
|
+
new PublicKey("3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM"),
|
195
|
+
6,
|
196
|
+
new PublicKey(USDC),
|
197
|
+
new PublicKey("6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5"),
|
198
|
+
6
|
199
|
+
);
|
196
200
|
// await test(
|
197
201
|
// client.umi,
|
198
202
|
// new PublicKey("EcdfYZCtaePaDWVy9Cz6eiS5QbLbhThau1fHLhQTEZqs"),
|
@@ -208,7 +212,7 @@ describe("Solauto Marginfi tests", async () => {
|
|
208
212
|
// client.umi,
|
209
213
|
// publicKey("E8oukAkTMW4YsAPymMzWQHWb8egmGq9yjDtmMi6gfY18")
|
210
214
|
// );
|
211
|
-
// console.log(mfiAccount.lendingAccount.balances);
|
215
|
+
// // console.log(mfiAccount.lendingAccount.balances);
|
212
216
|
// console.log(
|
213
217
|
// mfiAccount.lendingAccount.balances.map((x) =>
|
214
218
|
// bytesToI80F48(x.liabilityShares.value)
|
@@ -295,15 +299,41 @@ describe("Solauto Marginfi tests", async () => {
|
|
295
299
|
|
296
300
|
const imfiAccount = await safeFetchMarginfiAccount(
|
297
301
|
client.umi,
|
298
|
-
publicKey(client.intermediaryMarginfiAccountPk)
|
302
|
+
// publicKey(client.intermediaryMarginfiAccountPk)
|
303
|
+
publicKey("E8oukAkTMW4YsAPymMzWQHWb8egmGq9yjDtmMi6gfY18")
|
299
304
|
);
|
300
305
|
|
301
306
|
console.log(imfiAccount.lendingAccount.balances);
|
302
307
|
console.log(
|
303
|
-
imfiAccount.lendingAccount.balances.map((x) =>
|
308
|
+
imfiAccount.lendingAccount.balances.map((x) => [
|
309
|
+
x.bankPk.toString(),
|
310
|
+
x.liabilityShares.value,
|
311
|
+
bytesToI80F48(x.liabilityShares.value),
|
312
|
+
])
|
304
313
|
);
|
314
|
+
|
315
|
+
console.log(marginfiAccountEmpty(imfiAccount));
|
305
316
|
return;
|
306
317
|
|
318
|
+
// transactionItems.push(
|
319
|
+
// new TransactionItem(async () => ({
|
320
|
+
// tx: transactionBuilder().add([
|
321
|
+
// lendingPoolAccrueBankInterest(client.umi, {
|
322
|
+
// bank: publicKey("3J5rKmCi7JXG6qmiobFJyAidVTnnNAMGj4jomfBxKGRM"),
|
323
|
+
// marginfiGroup: publicKey(
|
324
|
+
// "EpzY5EYF1A5eFDRfjtsPXSYMPmEx1FXKaXPnouTMF4dm"
|
325
|
+
// ),
|
326
|
+
// }),
|
327
|
+
// lendingPoolAccrueBankInterest(client.umi, {
|
328
|
+
// bank: publicKey("6cgYhBFWCc5sNHxkvSRhd5H9AdAHR41zKwuF37HmLry5"),
|
329
|
+
// marginfiGroup: publicKey(
|
330
|
+
// "EpzY5EYF1A5eFDRfjtsPXSYMPmEx1FXKaXPnouTMF4dm"
|
331
|
+
// ),
|
332
|
+
// }),
|
333
|
+
// ]),
|
334
|
+
// }))
|
335
|
+
// );
|
336
|
+
|
307
337
|
// transactionItems.push(
|
308
338
|
// new TransactionItem(async () => ({
|
309
339
|
// tx: transactionBuilder().add(
|