@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.
Files changed (35) hide show
  1. package/dist/services/rebalance/rebalanceTxBuilder.js +1 -1
  2. package/dist/services/solauto/solautoClient.d.ts +0 -2
  3. package/dist/services/solauto/solautoClient.d.ts.map +1 -1
  4. package/dist/services/solauto/solautoClient.js +4 -8
  5. package/dist/services/solauto/solautoMarginfiClient.js +6 -6
  6. package/dist/services/transactions/transactionUtils.js +1 -1
  7. package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
  8. package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -4
  9. package/dist/solautoPosition/positionUtils.d.ts +1 -1
  10. package/dist/solautoPosition/positionUtils.d.ts.map +1 -1
  11. package/dist/solautoPosition/positionUtils.js +17 -16
  12. package/dist/solautoPosition/solautoPositionEx.d.ts +8 -6
  13. package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
  14. package/dist/solautoPosition/solautoPositionEx.js +6 -20
  15. package/dist/types/solauto.d.ts +1 -0
  16. package/dist/types/solauto.d.ts.map +1 -1
  17. package/dist/utils/instructionUtils.js +1 -1
  18. package/dist/utils/marginfiUtils.d.ts.map +1 -1
  19. package/dist/utils/marginfiUtils.js +8 -5
  20. package/dist/utils/numberUtils.d.ts +2 -3
  21. package/dist/utils/numberUtils.d.ts.map +1 -1
  22. package/dist/utils/numberUtils.js +8 -5
  23. package/local/txSandbox.ts +3 -0
  24. package/package.json +1 -1
  25. package/src/services/rebalance/rebalanceTxBuilder.ts +1 -1
  26. package/src/services/solauto/solautoClient.ts +6 -17
  27. package/src/services/solauto/solautoMarginfiClient.ts +6 -6
  28. package/src/services/transactions/transactionUtils.ts +1 -1
  29. package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -5
  30. package/src/solautoPosition/positionUtils.ts +31 -26
  31. package/src/solautoPosition/solautoPositionEx.ts +20 -26
  32. package/src/types/solauto.ts +3 -1
  33. package/src/utils/instructionUtils.ts +1 -1
  34. package/src/utils/marginfiUtils.ts +20 -13
  35. 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,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,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;IAuFxC,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;IAgBzB,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"}
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
- this.positionId = args.positionId ?? 0;
22
- this.selfManaged = this.positionId === 0;
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
- const positionPk = (0, utils_1.getSolautoPositionAccount)(this.authority, this.positionId, this.programId);
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;CAuBjE"}
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
- if (!this.canRefreshPositionState()) {
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, publicKey: PublicKey, customArgs?: PositionCustomArgs, contextUpdates?: ContextUpdates): Promise<SolautoPositionEx>;
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,EAQf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAI5E,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,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CAsC5B;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"}
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, publicKey, customArgs, contextUpdates) {
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: 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,EAgBf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMvD,OAAO,EAAqC,SAAS,EAAE,MAAM,cAAc,CAAC;AAE5E,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,KAAK,CAAC,EAAE,UAAU,CAAC;CACpB;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACjB,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAEnC,SAAS,EAAG,SAAS,CAAC;IACtB,eAAe,EAAG,eAAe,CAAC;IACzC,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAa;IACrC,SAAS,CAAC,KAAK,EAAG,UAAU,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAa;IAE7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAElB,IAAI,EAAE,cAAc;IAiBhC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C,IAAI,MAAM,YAET;IAED,IAAI,SAAS,cAIZ;IAED,IAAI,UAAU,uBAEb;IAED,IAAI,WAAW,YAEd;IAED,IAAI,YAAY,oDAEf;IAED,IAAI,YAAY,WAEf;IAED,qBAAqB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM;IAQpD,SAAS,KAAK,IAAI,IAAI,qBAAqB,CAE1C;IAED,IAAI,KAAK,IAAI,aAAa,CAEzB;IAED,IAAI,QAAQ,IAAI,yBAAyB,GAAG,SAAS,CAEpD;IAED,cAAc,CAAC,QAAQ,EAAE,yBAAyB;IAIlD,IAAI,GAAG,IAAI,WAAW,GAAG,SAAS,CAEjC;IAED,SAAS,CAAC,GAAG,EAAE,WAAW;IAI1B,IAAI,UAAU,IAAI,SAAS,CAE1B;IAED,IAAI,cAAc,IAAI,SAAS,CAE9B;IAED,IAAI,QAAQ,IAAI,SAAS,CAExB;IAED,IAAI,YAAY,IAAI,SAAS,CAE5B;IAED,IAAI,UAAU,WAEb;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,YAAY,WAEf;IAED,IAAI,UAAU,WAEb;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,YAAY,WAKf;IAED,IAAI,eAAe,WAElB;IAED,IAAI,QAAQ,WAEX;IAED,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS;IAIjC,IAAI,WAAW,WAEd;IAED,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS;IAO/B,SAAS,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS;IAI3C,IAAI,SAAS,WAEZ;IAED,OAAO,CAAC,SAAS,CAAC,EAAE,SAAS;IAO7B,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS;IAIzC,IAAI,0BAA0B,WAE7B;IAED,IAAI,6BAA6B,WAEhC;IAED,IAAI,2BAA2B,WAE9B;IAED,IAAI,sBAAsB,WAEzB;IAED,IAAI,yBAAyB,WAE5B;IAED,QAAQ,KAAK,wBAAwB,IAAI,MAAM,CAAC;IAEhD,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAE7C,IAAI,gBAAgB,wBAEnB;IAED,OAAO,CAAC,0BAA0B;IA0BlC,oBAAoB,CAAC,oBAAoB,SAAI,GAAG,eAAe,GAAG,SAAS;IAuB3E,kBAAkB,IAAI,OAAO;IAQ7B,SAAS,CAAC,uBAAuB;IAWjC,QAAQ,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7D,uBAAuB,CAAC,SAAS,CAAC,EAAE,SAAS;IAiBnD,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IASvD,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAI/B,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IASjD,eAAe,CAAC,KAAK,EAAE,MAAM;IAI7B,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM;IAUnC,wBAAwB,CACtB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,SAAS;IASvB,iBAAiB,CACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM;IA0BhC,mBAAmB;CAM1B"}
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._data.selfManaged)
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;
@@ -47,4 +47,5 @@ export interface RebalanceDetails {
47
47
  priceType: PriceType;
48
48
  }
49
49
  export type ProgramEnv = "Prod" | "Staging";
50
+ export type RoundAction = "Floor" | "Round" | "Ceil";
50
51
  //# sourceMappingURL=solauto.d.ts.map
@@ -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":"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"}
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
- return data?.banksCache && data.mint && marginfiGroup
287
- ? data.banksCache[marginfiGroup.toString()][data?.mint?.toString()]
288
- : data?.mint && data?.mint !== web3_js_1.PublicKey.default
289
- ? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup?.toString() ?? ""][data?.mint.toString()].bank), { commitment: "confirmed" })
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)(supply.mint);
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":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,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,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlE;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,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAC9C,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAOR;AAED,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,UAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
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(Math.round(value * Math.pow(10, decimals)));
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(bps)
90
+ ? Math.round(number)
88
91
  : roundAction === "Floor"
89
- ? Math.floor(bps)
90
- : Math.ceil(bps);
92
+ ? Math.floor(number)
93
+ : Math.ceil(number);
91
94
  }
92
95
  function bytesToI80F48(bytes) {
93
96
  if (bytes.length !== 16) {
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.659",
3
+ "version": "1.0.661",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",
@@ -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
- this.positionId = args.positionId ?? 0;
83
- this.selfManaged = this.positionId === 0;
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
- positionPk,
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,
@@ -136,7 +136,7 @@ async function transactionChoresBefore(
136
136
  );
137
137
  }
138
138
 
139
- if (client.selfManaged) {
139
+ if (client.pos.selfManaged) {
140
140
  if (
141
141
  isMarginfiClient(client) &&
142
142
  !(await getSolanaAccountCreated(client.umi, client.marginfiAccountPk))
@@ -97,11 +97,7 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
97
97
  }
98
98
 
99
99
  async refreshPositionState(priceType?: PriceType): Promise<void> {
100
- if (!this.canRefreshPositionState()) {
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 { PositionCustomArgs, SolautoPositionEx } from "./solautoPositionEx";
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
- publicKey: PublicKey,
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: 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._data.selfManaged) return false;
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) {
@@ -64,4 +64,6 @@ export interface RebalanceDetails {
64
64
  priceType: PriceType;
65
65
  }
66
66
 
67
- export type ProgramEnv = "Prod" | "Staging";
67
+ export type ProgramEnv = "Prod" | "Staging";
68
+
69
+ export type RoundAction = "Floor" | "Round" | "Ceil";
@@ -44,7 +44,7 @@ export function updateSolautoPosition(
44
44
  return new TransactionItem(
45
45
  async () => ({
46
46
  tx: client.updatePositionIx({
47
- positionId: client.positionId,
47
+ positionId: client.pos.positionId,
48
48
  settings,
49
49
  dca,
50
50
  }),
@@ -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([toWeb3JsPublicKey(bank.mint)], priceType);
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?: PublicKey
471
+ marginfiGroup: PublicKey
470
472
  ) {
471
- return data?.banksCache && data.mint && marginfiGroup
472
- ? data.banksCache[marginfiGroup!.toString()][data?.mint?.toString()]
473
- : data?.mint && data?.mint !== PublicKey.default
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?.toString() ?? ""
479
- ][data?.mint.toString()].bank
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(supply.mint!)!;
627
+ const supplyPrice = safeGetPrice(toWeb3JsPublicKey(supplyBank.mint))!;
621
628
  let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(
622
629
  umi,
623
630
  marginfiGroup ?? getMarginfiAccounts(programEnv).defaultGroup,
@@ -1,5 +1,11 @@
1
- import { BASIS_POINTS, MIN_REPAY_GAP_BPS, OFFSET_FROM_MAX_LTV, USD_DECIMALS } from "../constants";
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(value: number, decimals: number): bigint {
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(Math.round(value * Math.pow(10, decimals)));
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(bps)
125
+ ? Math.round(number)
113
126
  : roundAction === "Floor"
114
- ? Math.floor(bps)
115
- : Math.ceil(bps);
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(maxLtvBps, liqThresholdBps - 1000, OFFSET_FROM_MAX_LTV)
185
+ getMaxLiqUtilizationRateBps(
186
+ maxLtvBps,
187
+ liqThresholdBps - 1000,
188
+ OFFSET_FROM_MAX_LTV
189
+ )
173
190
  );
174
191
  }
175
192