@haven-fi/solauto-sdk 1.0.659 → 1.0.661
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/services/rebalance/rebalanceTxBuilder.js +1 -1
- package/dist/services/solauto/solautoClient.d.ts +0 -2
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +4 -8
- package/dist/services/solauto/solautoMarginfiClient.js +6 -6
- package/dist/services/transactions/transactionUtils.js +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -4
- package/dist/solautoPosition/positionUtils.d.ts +1 -1
- package/dist/solautoPosition/positionUtils.d.ts.map +1 -1
- package/dist/solautoPosition/positionUtils.js +17 -16
- package/dist/solautoPosition/solautoPositionEx.d.ts +8 -6
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +6 -20
- package/dist/types/solauto.d.ts +1 -0
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/utils/instructionUtils.js +1 -1
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +8 -5
- package/dist/utils/numberUtils.d.ts +2 -3
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +8 -5
- package/local/txSandbox.ts +3 -0
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +1 -1
- package/src/services/solauto/solautoClient.ts +6 -17
- package/src/services/solauto/solautoMarginfiClient.ts +6 -6
- package/src/services/transactions/transactionUtils.ts +1 -1
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -5
- package/src/solautoPosition/positionUtils.ts +31 -26
- package/src/solautoPosition/solautoPositionEx.ts +20 -26
- package/src/types/solauto.ts +3 -1
- package/src/utils/instructionUtils.ts +1 -1
- package/src/utils/marginfiUtils.ts +20 -13
- package/src/utils/numberUtils.ts +25 -8
@@ -149,7 +149,7 @@ class RebalanceTxBuilder {
|
|
149
149
|
return true;
|
150
150
|
}
|
151
151
|
async refreshBeforeRebalance() {
|
152
|
-
if (this.client.selfManaged ||
|
152
|
+
if (this.client.pos.selfManaged ||
|
153
153
|
this.client.contextUpdates.supplyAdjustment > BigInt(0) ||
|
154
154
|
this.client.contextUpdates.debtAdjustment > BigInt(0) ||
|
155
155
|
!this.client.pos.exists) {
|
@@ -18,8 +18,6 @@ export declare abstract class SolautoClient extends ReferralStateManager {
|
|
18
18
|
lendingPlatform: LendingPlatform;
|
19
19
|
lpEnv: ProgramEnv;
|
20
20
|
authority: PublicKey;
|
21
|
-
positionId: number;
|
22
|
-
selfManaged: boolean;
|
23
21
|
pos: SolautoPositionEx;
|
24
22
|
positionSupplyTa: PublicKey;
|
25
23
|
signerSupplyTa: PublicKey;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IA+ExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAezB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IAgEK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAE5D,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAqFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
|
@@ -18,14 +18,11 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
18
18
|
}
|
19
19
|
async initialize(args) {
|
20
20
|
await super.initialize(args);
|
21
|
-
|
22
|
-
|
23
|
-
if (this.selfManaged &&
|
24
|
-
(!args.supplyMint || !args.debtMint || !args.lpUserAccount)) {
|
21
|
+
const positionId = args.positionId ?? 0;
|
22
|
+
if (positionId === 0 && !args.lpUserAccount) {
|
25
23
|
throw new Error("Self managed position is missing arguments");
|
26
24
|
}
|
27
|
-
|
28
|
-
this.pos = await (0, solautoPosition_1.getOrCreatePositionEx)(this.umi, positionPk, {
|
25
|
+
this.pos = await (0, solautoPosition_1.getOrCreatePositionEx)(this.umi, this.authority, positionId, this.programId, {
|
29
26
|
supplyMint: args.supplyMint,
|
30
27
|
debtMint: args.debtMint,
|
31
28
|
lendingPool: args.lendingPool,
|
@@ -97,7 +94,6 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
97
94
|
lutAccountsToAdd() {
|
98
95
|
return [
|
99
96
|
this.authority,
|
100
|
-
...(this.authorityLutAddress ? [this.authorityLutAddress] : []),
|
101
97
|
this.signerSupplyTa,
|
102
98
|
this.signerDebtTa,
|
103
99
|
this.pos.publicKey,
|
@@ -275,7 +271,7 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
275
271
|
}
|
276
272
|
protocolInteractionIx(args) {
|
277
273
|
let tx = (0, umi_1.transactionBuilder)();
|
278
|
-
if (!this.selfManaged) {
|
274
|
+
if (!this.pos.selfManaged) {
|
279
275
|
if (args.__kind === "Deposit") {
|
280
276
|
tx = tx.add((0, utils_1.splTokenTransferUmiIx)(this.signer, this.signerSupplyTa, this.positionSupplyTa, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), BigInt(args.fields[0])));
|
281
277
|
}
|
@@ -18,7 +18,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
18
18
|
await super.initialize(args);
|
19
19
|
this.mfiAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv);
|
20
20
|
this.marginfiGroup = await this.pos.lendingPool();
|
21
|
-
if (this.selfManaged) {
|
21
|
+
if (this.pos.selfManaged) {
|
22
22
|
this.marginfiAccount =
|
23
23
|
args.lpUserAccount ??
|
24
24
|
(0, umi_1.createSignerFromKeypair)(this.umi, this.umi.eddsa.generateKeypair());
|
@@ -106,7 +106,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
106
106
|
signerDebtTa: signerDebtTa,
|
107
107
|
positionType: positionType ?? generated_1.PositionType.Leverage,
|
108
108
|
positionData: {
|
109
|
-
positionId: this.positionId,
|
109
|
+
positionId: this.pos.positionId,
|
110
110
|
settings: settings ?? null,
|
111
111
|
dca: dca ?? null,
|
112
112
|
},
|
@@ -139,7 +139,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
139
139
|
}
|
140
140
|
protocolInteractionIx(args) {
|
141
141
|
let tx = super.protocolInteractionIx(args);
|
142
|
-
if (this.selfManaged) {
|
142
|
+
if (this.pos.selfManaged) {
|
143
143
|
return tx.add(this.marginfiProtocolInteractionIx(args));
|
144
144
|
}
|
145
145
|
else {
|
@@ -203,7 +203,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
203
203
|
let vaultSupplyTa = undefined;
|
204
204
|
let supplyVaultAuthority = undefined;
|
205
205
|
if (args.__kind === "Deposit" || args.__kind === "Withdraw") {
|
206
|
-
positionSupplyTa = (0, umi_1.publicKey)(args.__kind === "Withdraw" || this.selfManaged
|
206
|
+
positionSupplyTa = (0, umi_1.publicKey)(args.__kind === "Withdraw" || this.pos.selfManaged
|
207
207
|
? this.signerSupplyTa
|
208
208
|
: this.positionSupplyTa);
|
209
209
|
vaultSupplyTa = (0, umi_1.publicKey)(this.marginfiSupplyAccounts.liquidityVault);
|
@@ -213,7 +213,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
213
213
|
let vaultDebtTa = undefined;
|
214
214
|
let debtVaultAuthority = undefined;
|
215
215
|
if (args.__kind === "Borrow" || args.__kind === "Repay") {
|
216
|
-
positionDebtTa = (0, umi_1.publicKey)(args.__kind === "Borrow" || this.selfManaged
|
216
|
+
positionDebtTa = (0, umi_1.publicKey)(args.__kind === "Borrow" || this.pos.selfManaged
|
217
217
|
? this.signerDebtTa
|
218
218
|
: this.positionDebtTa);
|
219
219
|
vaultDebtTa = (0, umi_1.publicKey)(this.marginfiDebtAccounts.liquidityVault);
|
@@ -250,7 +250,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
250
250
|
const isFirstRebalance = (preSwapRebalance && (0, utils_1.hasFirstRebalance)(data.rebalanceType)) ||
|
251
251
|
(postSwapRebalance &&
|
252
252
|
data.rebalanceType === generated_1.SolautoRebalanceType.FLSwapThenRebalance);
|
253
|
-
const addAuthorityTas = this.selfManaged || data.values.tokenBalanceChange !== undefined;
|
253
|
+
const addAuthorityTas = this.pos.selfManaged || data.values.tokenBalanceChange !== undefined;
|
254
254
|
return (0, generated_1.marginfiRebalance)(this.umi, {
|
255
255
|
signer: this.signer,
|
256
256
|
marginfiProgram: (0, umi_1.publicKey)(this.mfiAccounts.program),
|
@@ -52,7 +52,7 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
|
|
52
52
|
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.referralStateData.lookupTable).equals(web3_js_1.PublicKey.default))) {
|
53
53
|
chores = chores.add(client.updateReferralStatesIx(undefined, client.authorityLutAddress));
|
54
54
|
}
|
55
|
-
if (client.selfManaged) {
|
55
|
+
if (client.pos.selfManaged) {
|
56
56
|
if ((0, utils_1.isMarginfiClient)(client) &&
|
57
57
|
!(await (0, utils_1.getSolanaAccountCreated)(client.umi, client.marginfiAccountPk))) {
|
58
58
|
chores = chores.add(client.marginfiAccountInitialize(client.marginfiAccount));
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;
|
1
|
+
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,IAAI,EAIL,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAmBjE"}
|
@@ -62,10 +62,7 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
62
62
|
return (0, utils_1.fromBaseUnit)((0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false), this.supplyMintInfo.decimals);
|
63
63
|
}
|
64
64
|
async refreshPositionState(priceType) {
|
65
|
-
|
66
|
-
return;
|
67
|
-
}
|
68
|
-
const useDesignatedMint = !this._data.position || !this._data.selfManaged;
|
65
|
+
const useDesignatedMint = !this._data.position || !this.selfManaged;
|
69
66
|
const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount }, await this.lendingPool(), useDesignatedMint ? { mint: this.supplyMint } : undefined, useDesignatedMint ? { mint: this.debtMint } : undefined, this.lpEnv, this.contextUpdates, priceType);
|
70
67
|
if (resp) {
|
71
68
|
this.supplyBank = resp.supplyBank;
|
@@ -5,7 +5,7 @@ import { ContextUpdates } from "../utils";
|
|
5
5
|
import { PositionCustomArgs, SolautoPositionEx } from "./solautoPositionEx";
|
6
6
|
export declare function createSolautoSettings(settings: SolautoSettingsParametersInpArgs): SolautoSettingsParameters;
|
7
7
|
export declare function getPositionExBulk(umi: Umi, publicKeys: PublicKey[]): Promise<SolautoPositionEx[]>;
|
8
|
-
export declare function getOrCreatePositionEx(umi: Umi,
|
8
|
+
export declare function getOrCreatePositionEx(umi: Umi, authority: PublicKey, positionId: number, programId: PublicKey, customArgs?: PositionCustomArgs, contextUpdates?: ContextUpdates): Promise<SolautoPositionEx>;
|
9
9
|
interface AssetProps {
|
10
10
|
mint: PublicKey;
|
11
11
|
price?: number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,
|
1
|
+
{"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAI7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAoC5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
|
@@ -35,28 +35,29 @@ async function getPositionExBulk(umi, publicKeys) {
|
|
35
35
|
}
|
36
36
|
});
|
37
37
|
}
|
38
|
-
async function getOrCreatePositionEx(umi,
|
38
|
+
async function getOrCreatePositionEx(umi, authority, positionId, programId, customArgs, contextUpdates) {
|
39
|
+
const publicKey = (0, utils_1.getSolautoPositionAccount)(authority, positionId, programId);
|
39
40
|
const data = await (0, generated_1.safeFetchSolautoPosition)(umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(publicKey));
|
40
|
-
if (!data && (!customArgs?.supplyMint || !customArgs.debtMint)) {
|
41
|
-
throw new Error("Must provide a supply & debt mint if creating a new position");
|
42
|
-
}
|
43
|
-
const placeholderState = createFakePositionState({
|
44
|
-
mint: customArgs?.supplyMint ?? web3_js_1.PublicKey.default,
|
45
|
-
}, { mint: customArgs?.debtMint ?? web3_js_1.PublicKey.default }, 0, 0);
|
46
41
|
const lendingPlatform = data
|
47
42
|
? data.position.lendingPlatform
|
48
43
|
: customArgs.lendingPlatform;
|
44
|
+
const args = {
|
45
|
+
umi,
|
46
|
+
publicKey,
|
47
|
+
authority,
|
48
|
+
positionId,
|
49
|
+
programId,
|
50
|
+
data: data ?? {
|
51
|
+
state: createFakePositionState({
|
52
|
+
mint: customArgs?.supplyMint ?? web3_js_1.PublicKey.default,
|
53
|
+
}, { mint: customArgs?.debtMint ?? web3_js_1.PublicKey.default }, 0, 0),
|
54
|
+
},
|
55
|
+
customArgs,
|
56
|
+
contextUpdates,
|
57
|
+
};
|
49
58
|
switch (lendingPlatform) {
|
50
59
|
case generated_1.LendingPlatform.Marginfi:
|
51
|
-
return new marginfiSolautoPositionEx_1.MarginfiSolautoPositionEx(
|
52
|
-
umi,
|
53
|
-
publicKey,
|
54
|
-
data: data ?? {
|
55
|
-
state: placeholderState,
|
56
|
-
},
|
57
|
-
customArgs,
|
58
|
-
contextUpdates,
|
59
|
-
});
|
60
|
+
return new marginfiSolautoPositionEx_1.MarginfiSolautoPositionEx(args);
|
60
61
|
// TODO: PF
|
61
62
|
}
|
62
63
|
}
|
@@ -15,9 +15,12 @@ export interface PositionCustomArgs {
|
|
15
15
|
interface SolautoPositionExData extends Partial<SolautoPosition> {
|
16
16
|
state: PositionState;
|
17
17
|
}
|
18
|
-
interface PositionExArgs {
|
18
|
+
export interface PositionExArgs {
|
19
19
|
umi: Umi;
|
20
|
-
publicKey
|
20
|
+
publicKey?: PublicKey;
|
21
|
+
programId?: PublicKey;
|
22
|
+
authority?: PublicKey;
|
23
|
+
positionId?: number;
|
21
24
|
data: SolautoPositionExData;
|
22
25
|
customArgs?: PositionCustomArgs;
|
23
26
|
contextUpdates?: ContextUpdates;
|
@@ -27,18 +30,18 @@ export declare abstract class SolautoPositionEx {
|
|
27
30
|
protected contextUpdates?: ContextUpdates;
|
28
31
|
publicKey: PublicKey;
|
29
32
|
lendingPlatform: LendingPlatform;
|
33
|
+
positionId: number;
|
34
|
+
authority: PublicKey;
|
30
35
|
protected _data: SolautoPositionExData;
|
31
36
|
protected lp?: PublicKey;
|
32
|
-
protected lpEnv: ProgramEnv;
|
33
37
|
lpUserAccount?: PublicKey;
|
38
|
+
protected lpEnv: ProgramEnv;
|
34
39
|
private readonly firstState;
|
35
40
|
protected _supplyPrice?: number;
|
36
41
|
protected _debtPrice?: number;
|
37
42
|
constructor(args: PositionExArgs);
|
38
43
|
abstract lendingPool(): Promise<PublicKey>;
|
39
44
|
get exists(): boolean;
|
40
|
-
get authority(): PublicKey;
|
41
|
-
get positionId(): number | undefined;
|
42
45
|
get selfManaged(): boolean;
|
43
46
|
get positionType(): import("../generated").PositionType | undefined;
|
44
47
|
get strategyName(): string;
|
@@ -80,7 +83,6 @@ export declare abstract class SolautoPositionEx {
|
|
80
83
|
private sufficientLiquidityToBoost;
|
81
84
|
eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
|
82
85
|
eligibleForRefresh(): boolean;
|
83
|
-
protected canRefreshPositionState(): boolean;
|
84
86
|
abstract refreshPositionState(priceType?: PriceType): Promise<void>;
|
85
87
|
utilizationRateBpsDrift(priceType?: PriceType): Promise<number>;
|
86
88
|
updateSupply(newSupplyUsd: number, supplyPrice?: number): void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EACL,WAAW,EAEX,eAAe,EACf,aAAa,EACb,SAAS,EACT,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAOL,cAAc,
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
|
@@ -1,19 +1,21 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.SolautoPositionEx = void 0;
|
4
|
-
const web3_js_1 = require("@solana/web3.js");
|
5
4
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
6
5
|
const generated_1 = require("../generated");
|
7
6
|
const utils_1 = require("../utils");
|
8
7
|
const rebalance_1 = require("../services/rebalance");
|
9
|
-
const constants_1 = require("../constants");
|
10
8
|
class SolautoPositionEx {
|
11
9
|
constructor(args) {
|
12
10
|
this.lp = undefined;
|
13
11
|
this.lpUserAccount = undefined;
|
14
12
|
this.umi = args.umi;
|
15
|
-
this.publicKey = args.publicKey;
|
16
13
|
this.contextUpdates = args.contextUpdates;
|
14
|
+
this.publicKey =
|
15
|
+
args.publicKey ??
|
16
|
+
(0, utils_1.getSolautoPositionAccount)(args.authority, args.positionId, args.programId);
|
17
|
+
this.positionId = args.positionId ?? args.data.positionId[0];
|
18
|
+
this.authority = args.authority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.authority);
|
17
19
|
this.lp = args.customArgs?.lendingPool;
|
18
20
|
this.lpUserAccount =
|
19
21
|
args.customArgs?.lpUserAccount ??
|
@@ -27,14 +29,6 @@ class SolautoPositionEx {
|
|
27
29
|
get exists() {
|
28
30
|
return this._data.position !== undefined;
|
29
31
|
}
|
30
|
-
get authority() {
|
31
|
-
return this._data.authority
|
32
|
-
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this._data.authority)
|
33
|
-
: web3_js_1.PublicKey.default;
|
34
|
-
}
|
35
|
-
get positionId() {
|
36
|
-
return this._data.positionId ? this._data.positionId[0] : undefined;
|
37
|
-
}
|
38
32
|
get selfManaged() {
|
39
33
|
return this.positionId === 0;
|
40
34
|
}
|
@@ -178,18 +172,10 @@ class SolautoPositionEx {
|
|
178
172
|
return undefined;
|
179
173
|
}
|
180
174
|
eligibleForRefresh() {
|
181
|
-
if (this.
|
175
|
+
if (this.selfManaged)
|
182
176
|
return false;
|
183
177
|
return ((0, utils_1.currentUnixSeconds)() - Number(this.state.lastRefreshed) > 60 * 60 * 24 * 7);
|
184
178
|
}
|
185
|
-
canRefreshPositionState() {
|
186
|
-
if (Number(this.state.lastRefreshed) >
|
187
|
-
(0, utils_1.currentUnixSeconds)() - constants_1.MIN_POSITION_STATE_FRESHNESS_SECS &&
|
188
|
-
!this.contextUpdates?.positionUpdates()) {
|
189
|
-
return false;
|
190
|
-
}
|
191
|
-
return true;
|
192
|
-
}
|
193
179
|
async utilizationRateBpsDrift(priceType) {
|
194
180
|
const supplyPrice = this.supplyPrice(priceType) ?? 0;
|
195
181
|
const debtPrice = this.debtPrice(priceType) ?? 0;
|
package/dist/types/solauto.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,WAAW;IAClB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,wBAAwB,EAEhC,kBAAkB,EAAE,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,aAAa,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC"}
|
1
|
+
{"version":3,"file":"solauto.d.ts","sourceRoot":"","sources":["../../src/types/solauto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,SAAS,EACV,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oBAAY,kBAAkB;IAC5B,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,OAAO,WAAW;IAClB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAED,eAAO,MAAM,wBAAwB,EAEhC,kBAAkB,EAAE,CAAC;AAE1B,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAExD,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,GAAG,QAAQ,CAAC;AAEhF,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,eAAe,EAAE,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,qBAAqB;IAC7D,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,eAAe,CAAC;IACxB,aAAa,EAAE,oBAAoB,CAAC;IACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,SAAS,EAAE,aAAa,CAAC;IACzB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC"}
|
@@ -26,7 +26,7 @@ function closeSolautoPosition(client) {
|
|
26
26
|
function updateSolautoPosition(client, settings, dca) {
|
27
27
|
return new services_1.TransactionItem(async () => ({
|
28
28
|
tx: client.updatePositionIx({
|
29
|
-
positionId: client.positionId,
|
29
|
+
positionId: client.pos.positionId,
|
30
30
|
settings,
|
31
31
|
dca,
|
32
32
|
}),
|
@@ -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,EAAE,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAKnE,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAsB,SAAS,EAAE,MAAM,cAAc,CAAC;AAC5E,OAAO,EAIL,uBAAuB,EAIxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,IAAI,EAMJ,eAAe,EAKhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAiBhD,wBAAgB,4BAA4B,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CActE;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,UAAU,OASxE;AAED,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,GAAG,EACR,eAAe,EAAE,uBAAuB,GACvC,OAAO,CAAC,SAAS,EAAE,CAAC,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
|
@@ -283,10 +283,13 @@ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment, priceT
|
|
283
283
|
};
|
284
284
|
}
|
285
285
|
async function getBank(umi, data, marginfiGroup) {
|
286
|
-
|
287
|
-
? data.
|
288
|
-
:
|
289
|
-
|
286
|
+
const mint = data?.mint && !data.mint.equals(web3_js_1.PublicKey.default)
|
287
|
+
? data.mint.toString()
|
288
|
+
: undefined;
|
289
|
+
return data?.banksCache && mint
|
290
|
+
? data.banksCache[marginfiGroup.toString()][mint]
|
291
|
+
: mint && mint !== web3_js_1.PublicKey.default.toString()
|
292
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup.toString()][mint].bank), { commitment: "confirmed" })
|
290
293
|
: null;
|
291
294
|
}
|
292
295
|
async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, programEnv, contextUpdates, priceType) {
|
@@ -363,7 +366,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
|
|
363
366
|
if (!debtUsage) {
|
364
367
|
debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
|
365
368
|
}
|
366
|
-
const supplyPrice = (0, priceUtils_1.safeGetPrice)(
|
369
|
+
const supplyPrice = (0, priceUtils_1.safeGetPrice)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint));
|
367
370
|
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? (0, constants_1.getMarginfiAccounts)(programEnv).defaultGroup, {
|
368
371
|
mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
|
369
372
|
bank: supplyBank,
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { PositionState } from "../generated";
|
2
|
+
import { RoundAction } from "../types";
|
2
3
|
export declare function calcNetWorthUsd(state?: PositionState): number;
|
3
4
|
export declare function calcSupplyUsd(state?: PositionState): number;
|
4
5
|
export declare function calcDebtUsd(state?: PositionState): number;
|
@@ -12,10 +13,9 @@ export declare function supplyLiquidityUsdDepositable(state?: PositionState): nu
|
|
12
13
|
export declare function fromRoundedUsdValue(number: bigint): number;
|
13
14
|
export declare function toRoundedUsdValue(number: number): bigint;
|
14
15
|
export declare function getLiqUtilzationRateBps(supplyUsd: number, debtUsd: number, liqThresholdBps: number): number;
|
15
|
-
export declare function toBaseUnit(value: number, decimals: number): bigint;
|
16
|
+
export declare function toBaseUnit(value: number, decimals: number, roundAction?: RoundAction): bigint;
|
16
17
|
export declare function fromBaseUnit(value: bigint, decimals: number): number;
|
17
18
|
export declare function fromBps(value: number): number;
|
18
|
-
type RoundAction = "Floor" | "Round" | "Ceil";
|
19
19
|
export declare function toBps(value: number, roundAction?: RoundAction): number;
|
20
20
|
export declare function bytesToI80F48(bytes: number[]): number;
|
21
21
|
export declare function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint;
|
@@ -23,5 +23,4 @@ export declare function getMaxLiqUtilizationRateBps(maxLtvBps: number, liqThresh
|
|
23
23
|
export declare function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number): number;
|
24
24
|
export declare function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number): number;
|
25
25
|
export declare function maxBoostToBps(maxLtvBps: number, liqThresholdBps: number): number;
|
26
|
-
export {};
|
27
26
|
//# sourceMappingURL=numberUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,aAAa,UAK3D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,aAAa,UAK/D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,WAAqB,GACjC,MAAM,CAKR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAGR;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UASzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
|
@@ -66,11 +66,11 @@ function getLiqUtilzationRateBps(supplyUsd, debtUsd, liqThresholdBps) {
|
|
66
66
|
}
|
67
67
|
return toBps(debtUsd / (supplyUsd * fromBps(liqThresholdBps)));
|
68
68
|
}
|
69
|
-
function toBaseUnit(value, decimals) {
|
69
|
+
function toBaseUnit(value, decimals, roundAction = "Round") {
|
70
70
|
if (!decimals) {
|
71
71
|
return BigInt(Math.floor(value));
|
72
72
|
}
|
73
|
-
return BigInt(
|
73
|
+
return BigInt(roundNumber(value * Math.pow(10, decimals), roundAction));
|
74
74
|
}
|
75
75
|
function fromBaseUnit(value, decimals) {
|
76
76
|
if (!decimals) {
|
@@ -83,11 +83,14 @@ function fromBps(value) {
|
|
83
83
|
}
|
84
84
|
function toBps(value, roundAction = "Round") {
|
85
85
|
const bps = value * constants_1.BASIS_POINTS;
|
86
|
+
return roundNumber(bps, roundAction);
|
87
|
+
}
|
88
|
+
function roundNumber(number, roundAction = "Round") {
|
86
89
|
return roundAction === "Round"
|
87
|
-
? Math.round(
|
90
|
+
? Math.round(number)
|
88
91
|
: roundAction === "Floor"
|
89
|
-
? Math.floor(
|
90
|
-
: Math.ceil(
|
92
|
+
? Math.floor(number)
|
93
|
+
: Math.ceil(number);
|
91
94
|
}
|
92
95
|
function bytesToI80F48(bytes) {
|
93
96
|
if (bytes.length !== 16) {
|
package/local/txSandbox.ts
CHANGED
@@ -43,6 +43,9 @@ export async function main() {
|
|
43
43
|
await client.initialize({
|
44
44
|
positionId: 1,
|
45
45
|
authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
|
46
|
+
// lpUserAccount: new PublicKey(
|
47
|
+
// "EyATEtRH6FQRCJCn4nVzEnKXnzyGaUV1nt4sHqBrQ2fZ"
|
48
|
+
// ),
|
46
49
|
});
|
47
50
|
|
48
51
|
const transactionItems = [rebalance(client)];
|
package/package.json
CHANGED
@@ -263,7 +263,7 @@ export class RebalanceTxBuilder {
|
|
263
263
|
|
264
264
|
private async refreshBeforeRebalance() {
|
265
265
|
if (
|
266
|
-
this.client.selfManaged ||
|
266
|
+
this.client.pos.selfManaged ||
|
267
267
|
this.client.contextUpdates.supplyAdjustment > BigInt(0) ||
|
268
268
|
this.client.contextUpdates.debtAdjustment > BigInt(0) ||
|
269
269
|
!this.client.pos.exists
|
@@ -55,8 +55,6 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
55
55
|
|
56
56
|
public authority!: PublicKey;
|
57
57
|
|
58
|
-
public positionId!: number;
|
59
|
-
public selfManaged!: boolean;
|
60
58
|
public pos!: SolautoPositionEx;
|
61
59
|
|
62
60
|
public positionSupplyTa!: PublicKey;
|
@@ -79,23 +77,15 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
79
77
|
async initialize(args: SolautoClientArgs) {
|
80
78
|
await super.initialize(args);
|
81
79
|
|
82
|
-
|
83
|
-
|
84
|
-
if (
|
85
|
-
this.selfManaged &&
|
86
|
-
(!args.supplyMint || !args.debtMint || !args.lpUserAccount)
|
87
|
-
) {
|
80
|
+
const positionId = args.positionId ?? 0;
|
81
|
+
if (positionId === 0 && !args.lpUserAccount) {
|
88
82
|
throw new Error("Self managed position is missing arguments");
|
89
83
|
}
|
90
|
-
|
91
|
-
const positionPk = getSolautoPositionAccount(
|
92
|
-
this.authority,
|
93
|
-
this.positionId,
|
94
|
-
this.programId
|
95
|
-
);
|
96
84
|
this.pos = await getOrCreatePositionEx(
|
97
85
|
this.umi,
|
98
|
-
|
86
|
+
this.authority,
|
87
|
+
positionId,
|
88
|
+
this.programId,
|
99
89
|
{
|
100
90
|
supplyMint: args.supplyMint,
|
101
91
|
debtMint: args.debtMint,
|
@@ -207,7 +197,6 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
207
197
|
lutAccountsToAdd(): PublicKey[] {
|
208
198
|
return [
|
209
199
|
this.authority,
|
210
|
-
...(this.authorityLutAddress ? [this.authorityLutAddress] : []),
|
211
200
|
this.signerSupplyTa,
|
212
201
|
this.signerDebtTa,
|
213
202
|
this.pos.publicKey,
|
@@ -442,7 +431,7 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
442
431
|
protocolInteractionIx(args: SolautoActionArgs): TransactionBuilder {
|
443
432
|
let tx = transactionBuilder();
|
444
433
|
|
445
|
-
if (!this.selfManaged) {
|
434
|
+
if (!this.pos.selfManaged) {
|
446
435
|
if (args.__kind === "Deposit") {
|
447
436
|
tx = tx.add(
|
448
437
|
splTokenTransferUmiIx(
|
@@ -65,7 +65,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
65
65
|
|
66
66
|
this.marginfiGroup = await this.pos.lendingPool();
|
67
67
|
|
68
|
-
if (this.selfManaged) {
|
68
|
+
if (this.pos.selfManaged) {
|
69
69
|
this.marginfiAccount =
|
70
70
|
args.lpUserAccount ??
|
71
71
|
createSignerFromKeypair(this.umi, this.umi.eddsa.generateKeypair());
|
@@ -187,7 +187,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
187
187
|
signerDebtTa: signerDebtTa,
|
188
188
|
positionType: positionType ?? PositionType.Leverage,
|
189
189
|
positionData: {
|
190
|
-
positionId: this.positionId
|
190
|
+
positionId: this.pos.positionId,
|
191
191
|
settings: settings ?? null,
|
192
192
|
dca: dca ?? null,
|
193
193
|
},
|
@@ -224,7 +224,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
224
224
|
protocolInteractionIx(args: SolautoActionArgs): TransactionBuilder {
|
225
225
|
let tx = super.protocolInteractionIx(args);
|
226
226
|
|
227
|
-
if (this.selfManaged) {
|
227
|
+
if (this.pos.selfManaged) {
|
228
228
|
return tx.add(this.marginfiProtocolInteractionIx(args));
|
229
229
|
} else {
|
230
230
|
return tx.add(this.marginfiSolautoProtocolInteractionIx(args));
|
@@ -306,7 +306,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
306
306
|
let supplyVaultAuthority: UmiPublicKey | undefined = undefined;
|
307
307
|
if (args.__kind === "Deposit" || args.__kind === "Withdraw") {
|
308
308
|
positionSupplyTa = publicKey(
|
309
|
-
args.__kind === "Withdraw" || this.selfManaged
|
309
|
+
args.__kind === "Withdraw" || this.pos.selfManaged
|
310
310
|
? this.signerSupplyTa
|
311
311
|
: this.positionSupplyTa
|
312
312
|
);
|
@@ -321,7 +321,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
321
321
|
let debtVaultAuthority: UmiPublicKey | undefined = undefined;
|
322
322
|
if (args.__kind === "Borrow" || args.__kind === "Repay") {
|
323
323
|
positionDebtTa = publicKey(
|
324
|
-
args.__kind === "Borrow" || this.selfManaged
|
324
|
+
args.__kind === "Borrow" || this.pos.selfManaged
|
325
325
|
? this.signerDebtTa
|
326
326
|
: this.positionDebtTa
|
327
327
|
);
|
@@ -369,7 +369,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
369
369
|
data.rebalanceType === SolautoRebalanceType.FLSwapThenRebalance);
|
370
370
|
|
371
371
|
const addAuthorityTas =
|
372
|
-
this.selfManaged || data.values.tokenBalanceChange !== undefined;
|
372
|
+
this.pos.selfManaged || data.values.tokenBalanceChange !== undefined;
|
373
373
|
|
374
374
|
return marginfiRebalance(this.umi, {
|
375
375
|
signer: this.signer,
|
@@ -97,11 +97,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
|
97
97
|
}
|
98
98
|
|
99
99
|
async refreshPositionState(priceType?: PriceType): Promise<void> {
|
100
|
-
|
101
|
-
return;
|
102
|
-
}
|
103
|
-
|
104
|
-
const useDesignatedMint = !this._data.position || !this._data.selfManaged;
|
100
|
+
const useDesignatedMint = !this._data.position || !this.selfManaged;
|
105
101
|
const resp = await getMarginfiAccountPositionState(
|
106
102
|
this.umi,
|
107
103
|
{ pk: this.lpUserAccount },
|
@@ -17,12 +17,17 @@ import {
|
|
17
17
|
currentUnixSeconds,
|
18
18
|
getBatches,
|
19
19
|
getLiqUtilzationRateBps,
|
20
|
+
getSolautoPositionAccount,
|
20
21
|
retryWithExponentialBackoff,
|
21
22
|
toBaseUnit,
|
22
23
|
tokenInfo,
|
23
24
|
toRoundedUsdValue,
|
24
25
|
} from "../utils";
|
25
|
-
import {
|
26
|
+
import {
|
27
|
+
PositionCustomArgs,
|
28
|
+
PositionExArgs,
|
29
|
+
SolautoPositionEx,
|
30
|
+
} from "./solautoPositionEx";
|
26
31
|
import { MarginfiSolautoPositionEx } from "./marginfiSolautoPositionEx";
|
27
32
|
import { assert } from "console";
|
28
33
|
|
@@ -73,45 +78,45 @@ export async function getPositionExBulk(
|
|
73
78
|
|
74
79
|
export async function getOrCreatePositionEx(
|
75
80
|
umi: Umi,
|
76
|
-
|
81
|
+
authority: PublicKey,
|
82
|
+
positionId: number,
|
83
|
+
programId: PublicKey,
|
77
84
|
customArgs?: PositionCustomArgs,
|
78
85
|
contextUpdates?: ContextUpdates
|
79
86
|
): Promise<SolautoPositionEx> {
|
87
|
+
const publicKey = getSolautoPositionAccount(authority, positionId, programId);
|
80
88
|
const data = await safeFetchSolautoPosition(
|
81
89
|
umi,
|
82
90
|
fromWeb3JsPublicKey(publicKey)
|
83
91
|
);
|
84
92
|
|
85
|
-
if (!data && (!customArgs?.supplyMint || !customArgs.debtMint)) {
|
86
|
-
throw new Error(
|
87
|
-
"Must provide a supply & debt mint if creating a new position"
|
88
|
-
);
|
89
|
-
}
|
90
|
-
|
91
|
-
const placeholderState = createFakePositionState(
|
92
|
-
{
|
93
|
-
mint: customArgs?.supplyMint ?? PublicKey.default,
|
94
|
-
},
|
95
|
-
{ mint: customArgs?.debtMint ?? PublicKey.default },
|
96
|
-
0,
|
97
|
-
0
|
98
|
-
);
|
99
|
-
|
100
93
|
const lendingPlatform = data
|
101
94
|
? data.position.lendingPlatform
|
102
95
|
: customArgs!.lendingPlatform;
|
103
96
|
|
97
|
+
const args: PositionExArgs = {
|
98
|
+
umi,
|
99
|
+
publicKey,
|
100
|
+
authority,
|
101
|
+
positionId,
|
102
|
+
programId,
|
103
|
+
data: data ?? {
|
104
|
+
state: createFakePositionState(
|
105
|
+
{
|
106
|
+
mint: customArgs?.supplyMint ?? PublicKey.default,
|
107
|
+
},
|
108
|
+
{ mint: customArgs?.debtMint ?? PublicKey.default },
|
109
|
+
0,
|
110
|
+
0
|
111
|
+
),
|
112
|
+
},
|
113
|
+
customArgs,
|
114
|
+
contextUpdates,
|
115
|
+
};
|
116
|
+
|
104
117
|
switch (lendingPlatform) {
|
105
118
|
case LendingPlatform.Marginfi:
|
106
|
-
return new MarginfiSolautoPositionEx(
|
107
|
-
umi,
|
108
|
-
publicKey,
|
109
|
-
data: data ?? {
|
110
|
-
state: placeholderState!,
|
111
|
-
},
|
112
|
-
customArgs,
|
113
|
-
contextUpdates,
|
114
|
-
});
|
119
|
+
return new MarginfiSolautoPositionEx(args);
|
115
120
|
// TODO: PF
|
116
121
|
}
|
117
122
|
}
|
@@ -25,6 +25,7 @@ import {
|
|
25
25
|
debtLiquidityAvailable,
|
26
26
|
debtLiquidityUsdAvailable,
|
27
27
|
getLiqUtilzationRateBps,
|
28
|
+
getSolautoPositionAccount,
|
28
29
|
maxBoostToBps,
|
29
30
|
maxRepayFromBps,
|
30
31
|
maxRepayToBps,
|
@@ -58,9 +59,12 @@ interface SolautoPositionExData extends Partial<SolautoPosition> {
|
|
58
59
|
state: PositionState;
|
59
60
|
}
|
60
61
|
|
61
|
-
interface PositionExArgs {
|
62
|
+
export interface PositionExArgs {
|
62
63
|
umi: Umi;
|
63
|
-
publicKey
|
64
|
+
publicKey?: PublicKey;
|
65
|
+
programId?: PublicKey;
|
66
|
+
authority?: PublicKey;
|
67
|
+
positionId?: number;
|
64
68
|
data: SolautoPositionExData;
|
65
69
|
customArgs?: PositionCustomArgs;
|
66
70
|
contextUpdates?: ContextUpdates;
|
@@ -72,10 +76,12 @@ export abstract class SolautoPositionEx {
|
|
72
76
|
|
73
77
|
public publicKey!: PublicKey;
|
74
78
|
public lendingPlatform!: LendingPlatform;
|
79
|
+
public positionId!: number;
|
80
|
+
public authority!: PublicKey;
|
75
81
|
protected _data!: SolautoPositionExData;
|
76
82
|
protected lp?: PublicKey = undefined;
|
77
|
-
protected lpEnv!: ProgramEnv;
|
78
83
|
public lpUserAccount?: PublicKey = undefined;
|
84
|
+
protected lpEnv!: ProgramEnv;
|
79
85
|
|
80
86
|
private readonly firstState!: PositionState;
|
81
87
|
protected _supplyPrice?: number;
|
@@ -83,9 +89,18 @@ export abstract class SolautoPositionEx {
|
|
83
89
|
|
84
90
|
constructor(args: PositionExArgs) {
|
85
91
|
this.umi = args.umi;
|
86
|
-
this.publicKey = args.publicKey;
|
87
92
|
this.contextUpdates = args.contextUpdates;
|
88
93
|
|
94
|
+
this.publicKey =
|
95
|
+
args.publicKey ??
|
96
|
+
getSolautoPositionAccount(
|
97
|
+
args.authority!,
|
98
|
+
args.positionId!,
|
99
|
+
args.programId!
|
100
|
+
);
|
101
|
+
this.positionId = args.positionId ?? args.data.positionId![0];
|
102
|
+
this.authority = args.authority ?? toWeb3JsPublicKey(args.data.authority!);
|
103
|
+
|
89
104
|
this.lp = args.customArgs?.lendingPool;
|
90
105
|
this.lpUserAccount =
|
91
106
|
args.customArgs?.lpUserAccount ??
|
@@ -104,16 +119,6 @@ export abstract class SolautoPositionEx {
|
|
104
119
|
return this._data.position !== undefined;
|
105
120
|
}
|
106
121
|
|
107
|
-
get authority() {
|
108
|
-
return this._data.authority
|
109
|
-
? toWeb3JsPublicKey(this._data.authority)
|
110
|
-
: PublicKey.default;
|
111
|
-
}
|
112
|
-
|
113
|
-
get positionId() {
|
114
|
-
return this._data.positionId ? this._data.positionId[0] : undefined;
|
115
|
-
}
|
116
|
-
|
117
122
|
get selfManaged() {
|
118
123
|
return this.positionId === 0;
|
119
124
|
}
|
@@ -322,24 +327,13 @@ export abstract class SolautoPositionEx {
|
|
322
327
|
}
|
323
328
|
|
324
329
|
eligibleForRefresh(): boolean {
|
325
|
-
if (this.
|
330
|
+
if (this.selfManaged) return false;
|
326
331
|
|
327
332
|
return (
|
328
333
|
currentUnixSeconds() - Number(this.state.lastRefreshed) > 60 * 60 * 24 * 7
|
329
334
|
);
|
330
335
|
}
|
331
336
|
|
332
|
-
protected canRefreshPositionState() {
|
333
|
-
if (
|
334
|
-
Number(this.state.lastRefreshed) >
|
335
|
-
currentUnixSeconds() - MIN_POSITION_STATE_FRESHNESS_SECS &&
|
336
|
-
!this.contextUpdates?.positionUpdates()
|
337
|
-
) {
|
338
|
-
return false;
|
339
|
-
}
|
340
|
-
return true;
|
341
|
-
}
|
342
|
-
|
343
337
|
abstract refreshPositionState(priceType?: PriceType): Promise<void>;
|
344
338
|
|
345
339
|
async utilizationRateBpsDrift(priceType?: PriceType) {
|
package/src/types/solauto.ts
CHANGED
@@ -93,7 +93,6 @@ export async function getAllBankRelatedAccounts(
|
|
93
93
|
getPythPushOracleAddress(oracleKey, MARGINFI_SPONSORED_SHARD_ID),
|
94
94
|
]
|
95
95
|
: [oracleKey];
|
96
|
-
|
97
96
|
})
|
98
97
|
.flat()
|
99
98
|
.map((x) => x.toString());
|
@@ -416,7 +415,10 @@ async function getTokenUsage(
|
|
416
415
|
let originationFee = 0;
|
417
416
|
|
418
417
|
if (bank !== null) {
|
419
|
-
[marketPrice] = await fetchTokenPrices(
|
418
|
+
[marketPrice] = await fetchTokenPrices(
|
419
|
+
[toWeb3JsPublicKey(bank.mint)],
|
420
|
+
priceType
|
421
|
+
);
|
420
422
|
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
421
423
|
const shareValue = isAsset ? assetShareValue : liabilityShareValue;
|
422
424
|
amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
|
@@ -466,17 +468,22 @@ type BanksCache = { [group: string]: { [mint: string]: Bank } };
|
|
466
468
|
async function getBank(
|
467
469
|
umi: Umi,
|
468
470
|
data: BankSelection,
|
469
|
-
marginfiGroup
|
471
|
+
marginfiGroup: PublicKey
|
470
472
|
) {
|
471
|
-
|
472
|
-
|
473
|
-
|
473
|
+
const mint =
|
474
|
+
data?.mint && !data.mint.equals(PublicKey.default)
|
475
|
+
? data.mint.toString()
|
476
|
+
: undefined;
|
477
|
+
|
478
|
+
return data?.banksCache && mint
|
479
|
+
? data.banksCache[marginfiGroup.toString()][mint]
|
480
|
+
: mint && mint !== PublicKey.default.toString()
|
474
481
|
? await safeFetchBank(
|
475
482
|
umi,
|
476
483
|
publicKey(
|
477
484
|
getMarginfiAccounts(undefined, marginfiGroup).bankAccounts[
|
478
|
-
marginfiGroup
|
479
|
-
][
|
485
|
+
marginfiGroup.toString()
|
486
|
+
][mint].bank
|
480
487
|
),
|
481
488
|
{ commitment: "confirmed" }
|
482
489
|
)
|
@@ -515,8 +522,8 @@ export async function getMarginfiAccountPositionState(
|
|
515
522
|
marginfiGroup = toWeb3JsPublicKey(marginfiAccount.group);
|
516
523
|
}
|
517
524
|
|
518
|
-
let supplyBank: Bank | null = await getBank(umi, supply, marginfiGroup);
|
519
|
-
let debtBank: Bank | null = await getBank(umi, debt, marginfiGroup);
|
525
|
+
let supplyBank: Bank | null = await getBank(umi, supply, marginfiGroup!);
|
526
|
+
let debtBank: Bank | null = await getBank(umi, debt, marginfiGroup!);
|
520
527
|
|
521
528
|
let supplyUsage: PositionTokenState | undefined = undefined;
|
522
529
|
let debtUsage: PositionTokenState | undefined = undefined;
|
@@ -585,7 +592,7 @@ export async function getMarginfiAccountPositionState(
|
|
585
592
|
supplyBank,
|
586
593
|
true,
|
587
594
|
0,
|
588
|
-
contextUpdates?.supplyAdjustment
|
595
|
+
contextUpdates?.supplyAdjustment
|
589
596
|
);
|
590
597
|
}
|
591
598
|
|
@@ -613,11 +620,11 @@ export async function getMarginfiAccountPositionState(
|
|
613
620
|
debtBank,
|
614
621
|
false,
|
615
622
|
0,
|
616
|
-
contextUpdates?.debtAdjustment
|
623
|
+
contextUpdates?.debtAdjustment
|
617
624
|
);
|
618
625
|
}
|
619
626
|
|
620
|
-
const supplyPrice = safeGetPrice(
|
627
|
+
const supplyPrice = safeGetPrice(toWeb3JsPublicKey(supplyBank.mint))!;
|
621
628
|
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(
|
622
629
|
umi,
|
623
630
|
marginfiGroup ?? getMarginfiAccounts(programEnv).defaultGroup,
|
package/src/utils/numberUtils.ts
CHANGED
@@ -1,5 +1,11 @@
|
|
1
|
-
import {
|
1
|
+
import {
|
2
|
+
BASIS_POINTS,
|
3
|
+
MIN_REPAY_GAP_BPS,
|
4
|
+
OFFSET_FROM_MAX_LTV,
|
5
|
+
USD_DECIMALS,
|
6
|
+
} from "../constants";
|
2
7
|
import { PositionState } from "../generated";
|
8
|
+
import { RoundAction } from "../types";
|
3
9
|
|
4
10
|
export function calcNetWorthUsd(state?: PositionState) {
|
5
11
|
return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
|
@@ -84,11 +90,15 @@ export function getLiqUtilzationRateBps(
|
|
84
90
|
return toBps(debtUsd / (supplyUsd * fromBps(liqThresholdBps)));
|
85
91
|
}
|
86
92
|
|
87
|
-
export function toBaseUnit(
|
93
|
+
export function toBaseUnit(
|
94
|
+
value: number,
|
95
|
+
decimals: number,
|
96
|
+
roundAction: RoundAction = "Round"
|
97
|
+
): bigint {
|
88
98
|
if (!decimals) {
|
89
99
|
return BigInt(Math.floor(value));
|
90
100
|
}
|
91
|
-
return BigInt(
|
101
|
+
return BigInt(roundNumber(value * Math.pow(10, decimals), roundAction));
|
92
102
|
}
|
93
103
|
|
94
104
|
export function fromBaseUnit(value: bigint, decimals: number): number {
|
@@ -102,17 +112,20 @@ export function fromBps(value: number): number {
|
|
102
112
|
return value / BASIS_POINTS;
|
103
113
|
}
|
104
114
|
|
105
|
-
type RoundAction = "Floor" | "Round" | "Ceil";
|
106
115
|
export function toBps(
|
107
116
|
value: number,
|
108
117
|
roundAction: RoundAction = "Round"
|
109
118
|
): number {
|
110
119
|
const bps = value * BASIS_POINTS;
|
120
|
+
return roundNumber(bps, roundAction);
|
121
|
+
}
|
122
|
+
|
123
|
+
function roundNumber(number: number, roundAction: RoundAction = "Round") {
|
111
124
|
return roundAction === "Round"
|
112
|
-
? Math.round(
|
125
|
+
? Math.round(number)
|
113
126
|
: roundAction === "Floor"
|
114
|
-
? Math.floor(
|
115
|
-
: Math.ceil(
|
127
|
+
? Math.floor(number)
|
128
|
+
: Math.ceil(number);
|
116
129
|
}
|
117
130
|
|
118
131
|
export function bytesToI80F48(bytes: number[]): number {
|
@@ -169,7 +182,11 @@ export function getMaxLiqUtilizationRateBps(
|
|
169
182
|
export function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number) {
|
170
183
|
return Math.min(
|
171
184
|
9000,
|
172
|
-
getMaxLiqUtilizationRateBps(
|
185
|
+
getMaxLiqUtilizationRateBps(
|
186
|
+
maxLtvBps,
|
187
|
+
liqThresholdBps - 1000,
|
188
|
+
OFFSET_FROM_MAX_LTV
|
189
|
+
)
|
173
190
|
);
|
174
191
|
}
|
175
192
|
|