@haven-fi/solauto-sdk 1.0.215 → 1.0.217

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. package/dist/clients/referralStateManager.d.ts +6 -5
  2. package/dist/clients/referralStateManager.d.ts.map +1 -1
  3. package/dist/clients/referralStateManager.js +9 -10
  4. package/dist/clients/solautoClient.d.ts +8 -17
  5. package/dist/clients/solautoClient.d.ts.map +1 -1
  6. package/dist/clients/solautoClient.js +15 -42
  7. package/dist/clients/solautoMarginfiClient.d.ts +2 -2
  8. package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
  9. package/dist/clients/solautoMarginfiClient.js +20 -13
  10. package/dist/clients/txHandler.d.ts +1 -4
  11. package/dist/clients/txHandler.d.ts.map +1 -1
  12. package/dist/generated/instructions/marginfiRebalance.d.ts +1 -1
  13. package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
  14. package/dist/generated/types/index.d.ts +1 -0
  15. package/dist/generated/types/index.d.ts.map +1 -1
  16. package/dist/generated/types/index.js +1 -0
  17. package/dist/generated/types/rebalanceData.d.ts +3 -3
  18. package/dist/generated/types/rebalanceData.d.ts.map +1 -1
  19. package/dist/generated/types/rebalanceData.js +2 -2
  20. package/dist/generated/types/rebalanceDirection.d.ts +15 -0
  21. package/dist/generated/types/rebalanceDirection.d.ts.map +1 -0
  22. package/dist/generated/types/rebalanceDirection.js +22 -0
  23. package/dist/transactions/transactionUtils.d.ts.map +1 -1
  24. package/dist/transactions/transactionUtils.js +14 -13
  25. package/dist/utils/solauto/rebalanceUtils.d.ts +2 -0
  26. package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
  27. package/dist/utils/solauto/rebalanceUtils.js +1 -0
  28. package/package.json +1 -1
  29. package/src/clients/referralStateManager.ts +17 -15
  30. package/src/clients/solautoClient.ts +21 -75
  31. package/src/clients/solautoMarginfiClient.ts +31 -20
  32. package/src/clients/txHandler.ts +0 -5
  33. package/src/generated/instructions/marginfiRebalance.ts +1 -1
  34. package/src/generated/types/index.ts +1 -0
  35. package/src/generated/types/rebalanceData.ts +7 -5
  36. package/src/generated/types/rebalanceDirection.ts +25 -0
  37. package/src/transactions/transactionUtils.ts +19 -13
  38. package/src/utils/solauto/rebalanceUtils.ts +4 -0
  39. package/tests/transactions/solautoMarginfi.ts +4 -4
@@ -51,14 +51,13 @@ function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn)
51
51
  }
52
52
  async function transactionChoresBefore(client, accountsGettingCreated, solautoActions, initiatingDcaIn) {
53
53
  let chores = (0, umi_1.transactionBuilder)();
54
- if (client.referralStateManager.referralStateData === null ||
55
- (client.referralStateManager.referredBy !== undefined &&
56
- client.referralStateManager.referralStateData?.referredByState ===
54
+ if (client.referralStateData === null ||
55
+ (client.referredBy !== undefined &&
56
+ client.referralStateData?.referredByState ===
57
57
  (0, umi_1.publicKey)(web3_js_1.PublicKey.default)) ||
58
58
  (client.authorityLutAddress !== undefined &&
59
- client.referralStateManager.referralStateData.lookupTable ==
60
- (0, umi_1.publicKey)(web3_js_1.PublicKey.default))) {
61
- chores = chores.add(client.referralStateManager.updateReferralStatesIx(undefined, client.authorityLutAddress));
59
+ client.referralStateData.lookupTable == (0, umi_1.publicKey)(web3_js_1.PublicKey.default))) {
60
+ chores = chores.add(client.updateReferralStatesIx(undefined, client.authorityLutAddress));
62
61
  }
63
62
  if (client.selfManaged) {
64
63
  if (client.solautoPositionData === null) {
@@ -127,14 +126,16 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
127
126
  const usesAccount = (key) => tx
128
127
  .getInstructions()
129
128
  .some((t) => t.keys.some((k) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(k.pubkey).equals(key)));
130
- const checkReferralSupplyTa = client.referredBySupplyTa && usesAccount(client.referredBySupplyTa);
129
+ const checkReferralSupplyTa = client.referredBySupplyTa() && usesAccount(client.referredBySupplyTa());
131
130
  const checkSolautoFeesTa = usesAccount(client.solautoFeesSupplyTa);
132
131
  const checkIntermediaryMfiAccount = client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
133
132
  usesAccount(client.intermediaryMarginfiAccountPk);
134
133
  const checkSignerSupplyTa = usesAccount(client.signerSupplyTa);
135
134
  const checkSignerDebtTa = usesAccount(client.signerDebtTa);
136
135
  const accountsNeeded = [
137
- ...[checkReferralSupplyTa ? client.referredBySupplyTa : web3_js_1.PublicKey.default],
136
+ ...[
137
+ checkReferralSupplyTa ? client.referredBySupplyTa() : web3_js_1.PublicKey.default,
138
+ ],
138
139
  ...[checkSolautoFeesTa ? client.solautoFeesSupplyTa : web3_js_1.PublicKey.default],
139
140
  ...[
140
141
  checkIntermediaryMfiAccount
@@ -148,7 +149,7 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
148
149
  let chores = (0, umi_1.transactionBuilder)();
149
150
  if (checkReferralSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(referredBySupplyTa)) {
150
151
  client.log("Creating referred-by TA for ", client.supplyMint.toString());
151
- chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referralStateManager.referredByState, client.supplyMint));
152
+ chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.supplyMint));
152
153
  }
153
154
  if (checkSolautoFeesTa && !(0, generalUtils_1.rpcAccountCreated)(solautoFeesSupplyTa)) {
154
155
  client.log("Creating Solauto fees TA for ", client.supplyMint.toString());
@@ -380,11 +381,11 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
380
381
  client.flashBorrow(flashLoan, (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), swapDetails.inputMint)),
381
382
  ...(addFirstRebalance
382
383
  ? [
383
- client.rebalance("A", jupQuote, rebalanceType, flashLoan, targetLiqUtilizationRateBps),
384
+ client.rebalance("A", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps),
384
385
  ]
385
386
  : []),
386
387
  swapIx,
387
- client.rebalance("B", jupQuote, rebalanceType, flashLoan, targetLiqUtilizationRateBps),
388
+ client.rebalance("B", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps),
388
389
  client.flashRepay(flashLoan),
389
390
  ]);
390
391
  }
@@ -393,9 +394,9 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
393
394
  tx = tx.add([
394
395
  setupInstructions,
395
396
  tokenLedgerIx,
396
- client.rebalance("A", jupQuote, rebalanceType, undefined, targetLiqUtilizationRateBps),
397
+ client.rebalance("A", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
397
398
  swapIx,
398
- client.rebalance("B", jupQuote, rebalanceType, undefined, targetLiqUtilizationRateBps),
399
+ client.rebalance("B", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
399
400
  ]);
400
401
  }
401
402
  return {
@@ -3,6 +3,7 @@ import { SolautoClient } from "../../clients/solautoClient";
3
3
  import { DCASettings, PositionState, SolautoSettingsParameters, TokenType } from "../../generated";
4
4
  import { QuoteResponse } from "@jup-ag/api";
5
5
  import { JupSwapDetails } from "../jupiterUtils";
6
+ import { RebalanceAction } from "../../types";
6
7
  export interface RebalanceValues {
7
8
  increasingLeverage: boolean;
8
9
  debtAdjustmentUsd: number;
@@ -10,6 +11,7 @@ export interface RebalanceValues {
10
11
  amountToDcaIn: number;
11
12
  amountUsdToDcaIn: number;
12
13
  dcaTokenType?: TokenType;
14
+ rebalanceAction: RebalanceAction;
13
15
  }
14
16
  export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number): RebalanceValues;
15
17
  export interface FlashLoanDetails {
@@ -1 +1 @@
1
- {"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA8IjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAiDjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAyChB"}
1
+ {"version":3,"file":"rebalanceUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/rebalanceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EACL,WAAW,EACX,aAAa,EAEb,yBAAyB,EACzB,SAAS,EACV,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAajD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAkI9C,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,OAAO,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,GACnC,eAAe,CAmDjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,aAAa,GACtB,gBAAgB,GAAG,SAAS,CA0D9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAyChB"}
@@ -100,6 +100,7 @@ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice,
100
100
  amountToDcaIn: amountToDcaIn ?? 0,
101
101
  amountUsdToDcaIn,
102
102
  dcaTokenType: dca?.tokenType,
103
+ rebalanceAction: (amountToDcaIn ?? 0) > 0 ? "dca" : increasingLeverage ? "boost" : "repay",
103
104
  };
104
105
  }
105
106
  function getFlashLoanDetails(client, values, jupQuote) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.215",
3
+ "version": "1.0.217",
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",
@@ -23,10 +23,10 @@ import { getReferralState, getTokenAccount } from "../utils";
23
23
  import { TxHandler } from "./txHandler";
24
24
  import { SOLAUTO_LUT } from "../constants";
25
25
 
26
- interface ReferralStateManagerArgs {
26
+ export interface ReferralStateManagerArgs {
27
27
  signer?: Signer;
28
28
  wallet?: WalletAdapter;
29
- referralAuthority?: PublicKey;
29
+ authority?: PublicKey;
30
30
  referredByAuthority?: PublicKey;
31
31
  }
32
32
 
@@ -34,15 +34,18 @@ export class ReferralStateManager extends TxHandler {
34
34
  public umi!: Umi;
35
35
  public signer!: Signer;
36
36
 
37
- public referralAuthority!: PublicKey;
37
+ public authority!: PublicKey;
38
38
  public referralState!: PublicKey;
39
39
  public referralStateData!: ReferralState | null;
40
40
 
41
+ public referredBy?: PublicKey;
42
+ public referredByState?: PublicKey;
43
+
41
44
  constructor(
42
- heliusApiUrl: string,
45
+ rpcUrl: string,
43
46
  public localTest?: boolean
44
47
  ) {
45
- super(heliusApiUrl, localTest);
48
+ super(rpcUrl, localTest);
46
49
  this.umi = this.umi.use({
47
50
  install(umi) {
48
51
  umi.programs.add(createSolautoProgram(), false);
@@ -59,10 +62,11 @@ export class ReferralStateManager extends TxHandler {
59
62
  ? signerIdentity(args.signer)
60
63
  : walletAdapterIdentity(args.wallet!, true)
61
64
  );
62
-
63
65
  this.signer = this.umi.identity;
66
+ this.authority = args.authority ?? toWeb3JsPublicKey(this.signer.publicKey);
67
+
64
68
  this.referralState = getReferralState(
65
- args.referralAuthority ?? toWeb3JsPublicKey(this.signer.publicKey)
69
+ args.authority ?? toWeb3JsPublicKey(this.signer.publicKey)
66
70
  );
67
71
  this.referralStateData = await safeFetchReferralState(
68
72
  this.umi,
@@ -82,12 +86,10 @@ export class ReferralStateManager extends TxHandler {
82
86
  : [SOLAUTO_LUT];
83
87
  }
84
88
 
85
- public setReferredBy(referredBy?: PublicKey) {
86
- const authorityReferralStateData = this.referralStateData;
89
+ setReferredBy(referredBy?: PublicKey) {
87
90
  const hasReferredBy =
88
- authorityReferralStateData &&
89
- authorityReferralStateData.referredByState !==
90
- publicKey(PublicKey.default);
91
+ this.referralStateData &&
92
+ this.referralStateData.referredByState !== publicKey(PublicKey.default);
91
93
  const finalReferredBy =
92
94
  !hasReferredBy &&
93
95
  referredBy &&
@@ -98,8 +100,8 @@ export class ReferralStateManager extends TxHandler {
98
100
  this.referredBy = finalReferredBy;
99
101
  this.referredByState = finalReferredBy
100
102
  ? getReferralState(finalReferredBy)
101
- : authorityReferralStateData
102
- ? toWeb3JsPublicKey(authorityReferralStateData.referredByState)
103
+ : this.referralStateData
104
+ ? toWeb3JsPublicKey(this.referralStateData.referredByState)
103
105
  : undefined;
104
106
  }
105
107
 
@@ -143,7 +145,7 @@ export class ReferralStateManager extends TxHandler {
143
145
  signerWsolTa: publicKey(
144
146
  getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), NATIVE_MINT)
145
147
  ),
146
- referralAuthority: publicKey(this.referralAuthority),
148
+ referralAuthority: publicKey(this.authority),
147
149
  referralState: publicKey(this.referralState),
148
150
  referralFeesDestTa: publicKey(referralDestTa),
149
151
  referralFeesDestMint: publicKey(referralFeesDestMint),
@@ -8,13 +8,8 @@ import {
8
8
  PublicKey as UmiPublicKey,
9
9
  isSome,
10
10
  transactionBuilder,
11
- signerIdentity,
12
11
  } from "@metaplex-foundation/umi";
13
12
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
14
- import {
15
- WalletAdapter,
16
- walletAdapterIdentity,
17
- } from "@metaplex-foundation/umi-signer-wallet-adapters";
18
13
  import {
19
14
  DCASettings,
20
15
  DCASettingsInpArgs,
@@ -29,12 +24,10 @@ import {
29
24
  UpdatePositionDataArgs,
30
25
  cancelDCA,
31
26
  closePosition,
32
- createSolautoProgram,
33
27
  safeFetchSolautoPosition,
34
28
  updatePosition,
35
29
  } from "../generated";
36
30
  import {
37
- getReferralState,
38
31
  getSolautoPositionAccount,
39
32
  getTokenAccount,
40
33
  } from "../utils/accountUtils";
@@ -43,32 +36,28 @@ import {
43
36
  getWrappedInstruction,
44
37
  splTokenTransferUmiIx,
45
38
  } from "../utils/solanaUtils";
46
- import { FlashLoanDetails } from "../utils/solauto/rebalanceUtils";
39
+ import { FlashLoanDetails, RebalanceValues } from "../utils/solauto/rebalanceUtils";
47
40
  import {
48
41
  MIN_POSITION_STATE_FRESHNESS_SECS,
49
42
  SOLAUTO_LUT,
50
43
  } from "../constants/solautoConstants";
51
44
  import { currentUnixSeconds } from "../utils/generalUtils";
52
45
  import { LivePositionUpdates } from "../utils/solauto/generalUtils";
53
- import { ReferralStateManager } from "./referralStateManager";
54
- import { TxHandler } from "./txHandler";
46
+ import {
47
+ ReferralStateManager,
48
+ ReferralStateManagerArgs,
49
+ } from "./referralStateManager";
55
50
  import { QuoteResponse } from "@jup-ag/api";
56
51
 
57
- export interface SolautoClientArgs {
52
+ export interface SolautoClientArgs extends ReferralStateManagerArgs {
58
53
  new?: boolean;
59
- authority?: PublicKey;
60
54
  positionId?: number;
61
- signer?: Signer;
62
- wallet?: WalletAdapter;
63
-
64
55
  supplyMint?: PublicKey;
65
56
  debtMint?: PublicKey;
66
-
67
- referredByAuthority?: PublicKey;
68
57
  }
69
58
 
70
- export abstract class SolautoClient extends TxHandler {
71
- public lendingPlatform!: LendingPlatform;
59
+ export abstract class SolautoClient extends ReferralStateManager {
60
+ public lendingPlatform?: LendingPlatform;
72
61
 
73
62
  public authority!: PublicKey;
74
63
  public signer!: Signer;
@@ -90,9 +79,6 @@ export abstract class SolautoClient extends TxHandler {
90
79
  public positionDebtTa!: PublicKey;
91
80
  public signerDebtTa!: PublicKey;
92
81
 
93
- public referralStateManager!: ReferralStateManager;
94
- public referredBySupplyTa?: PublicKey;
95
-
96
82
  public solautoFeesWallet!: PublicKey;
97
83
  public solautoFeesSupplyTa!: PublicKey;
98
84
 
@@ -100,32 +86,11 @@ export abstract class SolautoClient extends TxHandler {
100
86
 
101
87
  public livePositionUpdates: LivePositionUpdates = new LivePositionUpdates();
102
88
 
103
- constructor(rpcUrl: string, localTest?: boolean) {
104
- super(rpcUrl, localTest);
105
-
106
- this.umi = this.umi.use({
107
- install(umi) {
108
- umi.programs.add(createSolautoProgram(), false);
109
- },
110
- });
111
- }
112
-
113
- async initialize(args: SolautoClientArgs, lendingPlatform: LendingPlatform) {
114
- if (!args.signer && !args.wallet) {
115
- throw new Error("Signer or wallet must be provided");
116
- }
117
- this.umi = this.umi.use(
118
- args.signer
119
- ? signerIdentity(args.signer)
120
- : walletAdapterIdentity(args.wallet!, true)
121
- );
122
-
123
- this.signer = this.umi.identity;
124
- this.authority = args.authority ?? toWeb3JsPublicKey(this.signer.publicKey);
89
+ async initialize(args: SolautoClientArgs) {
90
+ await super.initialize(args);
125
91
 
126
92
  this.positionId = args.positionId ?? 0;
127
93
  this.selfManaged = this.positionId === 0;
128
- this.lendingPlatform = lendingPlatform;
129
94
  this.solautoPosition = getSolautoPositionAccount(
130
95
  this.authority,
131
96
  this.positionId
@@ -167,35 +132,18 @@ export abstract class SolautoClient extends TxHandler {
167
132
  this.debtMint
168
133
  );
169
134
 
170
- this.referralStateManager = new ReferralStateManager(this.rpcUrl);
171
- await this.referralStateManager.initialize({
172
- referralAuthority: this.authority,
173
- referredByAuthority: args.referredByAuthority,
174
- signer: args.signer,
175
- wallet: args.wallet,
176
- });
177
- console.log(this.referralStateManager.referredBy?.toString());
178
- if (this.referralStateManager.referredByState !== undefined) {
179
- this.referredBySupplyTa = getTokenAccount(
180
- this.referralStateManager.referredByState,
181
- this.supplyMint
182
- );
183
- }
184
-
185
135
  this.solautoFeesWallet = SOLAUTO_FEES_WALLET;
186
136
  this.solautoFeesSupplyTa = getTokenAccount(
187
137
  this.solautoFeesWallet,
188
138
  this.supplyMint
189
139
  );
190
140
 
191
- const authorityReferralStateData =
192
- this.referralStateManager.referralStateData;
193
141
  this.authorityLutAddress =
194
- authorityReferralStateData?.lookupTable &&
195
- !toWeb3JsPublicKey(authorityReferralStateData.lookupTable).equals(
142
+ this.referralStateData?.lookupTable &&
143
+ !toWeb3JsPublicKey(this.referralStateData.lookupTable).equals(
196
144
  PublicKey.default
197
145
  )
198
- ? toWeb3JsPublicKey(authorityReferralStateData.lookupTable)
146
+ ? toWeb3JsPublicKey(this.referralStateData.lookupTable)
199
147
  : undefined;
200
148
 
201
149
  this.log("Position state: ", this.solautoPositionState);
@@ -212,14 +160,11 @@ export abstract class SolautoClient extends TxHandler {
212
160
  );
213
161
  }
214
162
 
215
- public setReferredBy(referredBy?: PublicKey) {
216
- this.referralStateManager.setReferredBy(referredBy);
217
- if (this.referralStateManager.referredByState !== undefined) {
218
- this.referredBySupplyTa = getTokenAccount(
219
- this.referralStateManager.referredByState!,
220
- this.supplyMint
221
- );
163
+ referredBySupplyTa(): PublicKey | undefined {
164
+ if (this.referredByState !== undefined) {
165
+ return getTokenAccount(this.referredByState, this.supplyMint);
222
166
  }
167
+ return undefined;
223
168
  }
224
169
 
225
170
  async resetLiveTxUpdates(success?: boolean) {
@@ -268,8 +213,8 @@ export abstract class SolautoClient extends TxHandler {
268
213
  this.solautoPosition,
269
214
  this.positionSupplyTa,
270
215
  this.positionDebtTa,
271
- this.referralStateManager.referralState,
272
- ...(this.referredBySupplyTa ? [this.referredBySupplyTa] : []),
216
+ this.referralState,
217
+ ...(this.referredBySupplyTa() ? [this.referredBySupplyTa()!] : []),
273
218
  ];
274
219
  }
275
220
 
@@ -333,7 +278,7 @@ export abstract class SolautoClient extends TxHandler {
333
278
  const addingReferredBy =
334
279
  accountsToAdd.length === 1 &&
335
280
  accountsToAdd[0].toString().toLowerCase() ===
336
- this.referredBySupplyTa?.toString().toLowerCase();
281
+ this.referredBySupplyTa()?.toString().toLowerCase();
337
282
 
338
283
  if (tx.getInstructions().length > 0) {
339
284
  this.log("Updating authority lookup table...");
@@ -592,6 +537,7 @@ export abstract class SolautoClient extends TxHandler {
592
537
  rebalanceStep: "A" | "B",
593
538
  jupQuote: QuoteResponse,
594
539
  rebalanceType: SolautoRebalanceTypeArgs,
540
+ rebalanceValues: RebalanceValues,
595
541
  flashLoan?: FlashLoanDetails,
596
542
  targetLiqUtilizationRateBps?: number
597
543
  ): TransactionBuilder;
@@ -32,7 +32,11 @@ import {
32
32
  marginfiRebalance,
33
33
  marginfiRefreshData,
34
34
  } from "../generated";
35
- import { getMarginfiAccountPDA, getReferralState, getTokenAccount } from "../utils/accountUtils";
35
+ import {
36
+ getMarginfiAccountPDA,
37
+ getReferralState,
38
+ getTokenAccount,
39
+ } from "../utils/accountUtils";
36
40
  import { generateRandomU64, safeGetPrice } from "../utils/generalUtils";
37
41
  import {
38
42
  MARGINFI_PROGRAM_ID,
@@ -47,7 +51,10 @@ import {
47
51
  safeFetchAllMarginfiAccount,
48
52
  safeFetchMarginfiAccount,
49
53
  } from "../marginfi-sdk";
50
- import { FlashLoanDetails } from "../utils/solauto/rebalanceUtils";
54
+ import {
55
+ FlashLoanDetails,
56
+ RebalanceValues,
57
+ } from "../utils/solauto/rebalanceUtils";
51
58
  import {
52
59
  findMarginfiAccounts,
53
60
  getAllMarginfiAccountsByAuthority,
@@ -85,7 +92,9 @@ export class SolautoMarginfiClient extends SolautoClient {
85
92
  public intermediaryMarginfiAccount?: MarginfiAccount;
86
93
 
87
94
  async initialize(args: SolautoMarginfiClientArgs) {
88
- await super.initialize(args, LendingPlatform.Marginfi);
95
+ await super.initialize(args);
96
+
97
+ this.lendingPlatform = LendingPlatform.Marginfi;
89
98
 
90
99
  if (this.selfManaged) {
91
100
  this.marginfiAccount =
@@ -262,12 +271,12 @@ export class SolautoMarginfiClient extends SolautoClient {
262
271
  return marginfiOpenPosition(this.umi, {
263
272
  signer: this.signer,
264
273
  marginfiProgram: publicKey(MARGINFI_PROGRAM_ID),
265
- signerReferralState: publicKey(this.referralStateManager.referralState),
266
- referredByState: this.referralStateManager.referredByState
267
- ? publicKey(this.referralStateManager.referredByState)
274
+ signerReferralState: publicKey(this.referralState),
275
+ referredByState: this.referredByState
276
+ ? publicKey(this.referredByState)
268
277
  : undefined,
269
- referredBySupplyTa: this.referredBySupplyTa
270
- ? publicKey(this.referredBySupplyTa)
278
+ referredBySupplyTa: this.referredBySupplyTa()
279
+ ? publicKey(this.referredBySupplyTa()!)
271
280
  : undefined,
272
281
  solautoPosition: publicKey(this.solautoPosition),
273
282
  marginfiGroup: publicKey(this.marginfiGroup),
@@ -447,6 +456,7 @@ export class SolautoMarginfiClient extends SolautoClient {
447
456
  rebalanceStep: "A" | "B",
448
457
  jupQuote: QuoteResponse,
449
458
  rebalanceType: SolautoRebalanceTypeArgs,
459
+ rebalanceValues: RebalanceValues,
450
460
  flashLoan?: FlashLoanDetails,
451
461
  targetLiqUtilizationRateBps?: number
452
462
  ): TransactionBuilder {
@@ -471,13 +481,14 @@ export class SolautoMarginfiClient extends SolautoClient {
471
481
  ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
472
482
  solautoFeesSupplyTa:
473
483
  rebalanceStep === "B" ? publicKey(this.solautoFeesSupplyTa) : undefined,
474
- authorityReferralState: publicKey(
475
- this.referralStateManager.referralState
476
- ),
477
- referredBySupplyTa: this.referredBySupplyTa
478
- ? publicKey(this.referredBySupplyTa)
484
+ authorityReferralState: publicKey(this.referralState),
485
+ referredBySupplyTa: this.referredBySupplyTa()
486
+ ? publicKey(this.referredBySupplyTa()!)
479
487
  : undefined,
480
- positionAuthority: publicKey(this.authority),
488
+ positionAuthority:
489
+ rebalanceValues.rebalanceAction === "dca"
490
+ ? publicKey(this.authority)
491
+ : undefined,
481
492
  solautoPosition: publicKey(this.solautoPosition),
482
493
  marginfiGroup: publicKey(this.marginfiGroup),
483
494
  marginfiAccount: publicKey(this.marginfiAccountPk),
@@ -490,9 +501,9 @@ export class SolautoMarginfiClient extends SolautoClient {
490
501
  supplyBank: publicKey(this.marginfiSupplyAccounts.bank),
491
502
  supplyPriceOracle: publicKey(this.supplyPriceOracle),
492
503
  positionSupplyTa: publicKey(this.positionSupplyTa),
493
- authoritySupplyTa: publicKey(
494
- getTokenAccount(this.authority, this.supplyMint)
495
- ),
504
+ authoritySupplyTa: this.selfManaged
505
+ ? publicKey(getTokenAccount(this.authority, this.supplyMint))
506
+ : undefined,
496
507
  vaultSupplyTa: needSupplyAccounts
497
508
  ? publicKey(this.marginfiSupplyAccounts.liquidityVault)
498
509
  : undefined,
@@ -502,9 +513,9 @@ export class SolautoMarginfiClient extends SolautoClient {
502
513
  debtBank: publicKey(this.marginfiDebtAccounts.bank),
503
514
  debtPriceOracle: publicKey(this.debtPriceOracle),
504
515
  positionDebtTa: publicKey(this.positionDebtTa),
505
- authorityDebtTa: publicKey(
506
- getTokenAccount(this.authority, this.debtMint)
507
- ),
516
+ authorityDebtTa: this.selfManaged
517
+ ? publicKey(getTokenAccount(this.authority, this.debtMint))
518
+ : undefined,
508
519
  vaultDebtTa: needDebtAccounts
509
520
  ? publicKey(this.marginfiDebtAccounts.liquidityVault)
510
521
  : undefined,
@@ -7,9 +7,6 @@ export abstract class TxHandler {
7
7
  public umi!: Umi;
8
8
  public connection!: Connection;
9
9
 
10
- public referredBy?: PublicKey;
11
- public referredByState?: PublicKey;
12
-
13
10
  constructor(
14
11
  rpcUrl: string,
15
12
  localTest?: boolean
@@ -31,6 +28,4 @@ export abstract class TxHandler {
31
28
  abstract defaultLookupTables(): string[];
32
29
 
33
30
  abstract resetLiveTxUpdates(success?: boolean): Promise<void>;
34
-
35
- abstract setReferredBy(referredBy?: PublicKey): void;
36
31
  }
@@ -46,7 +46,7 @@ export type MarginfiRebalanceInstructionAccounts = {
46
46
  solautoFeesSupplyTa?: PublicKey | Pda;
47
47
  authorityReferralState: PublicKey | Pda;
48
48
  referredBySupplyTa?: PublicKey | Pda;
49
- positionAuthority: PublicKey | Pda;
49
+ positionAuthority?: PublicKey | Pda;
50
50
  solautoPosition: PublicKey | Pda;
51
51
  marginfiGroup: PublicKey | Pda;
52
52
  marginfiAccount: PublicKey | Pda;
@@ -17,6 +17,7 @@ export * from './positionState';
17
17
  export * from './positionTokenUsage';
18
18
  export * from './positionType';
19
19
  export * from './rebalanceData';
20
+ export * from './rebalanceDirection';
20
21
  export * from './solautoAction';
21
22
  export * from './solautoRebalanceType';
22
23
  export * from './solautoSettingsParameters';
@@ -11,20 +11,22 @@ import {
11
11
  array,
12
12
  bytes,
13
13
  struct,
14
- u16,
15
14
  u64,
16
15
  u8,
17
16
  } from '@metaplex-foundation/umi/serializers';
18
17
  import {
18
+ RebalanceDirection,
19
+ RebalanceDirectionArgs,
19
20
  SolautoRebalanceType,
20
21
  SolautoRebalanceTypeArgs,
22
+ getRebalanceDirectionSerializer,
21
23
  getSolautoRebalanceTypeSerializer,
22
24
  } from '.';
23
25
 
24
26
  export type RebalanceData = {
25
27
  rebalanceType: SolautoRebalanceType;
26
28
  padding1: Array<number>;
27
- targetLiqUtilizationRateBps: number;
29
+ rebalanceDirection: RebalanceDirection;
28
30
  padding2: Array<number>;
29
31
  flashLoanAmount: bigint;
30
32
  padding: Uint8Array;
@@ -33,7 +35,7 @@ export type RebalanceData = {
33
35
  export type RebalanceDataArgs = {
34
36
  rebalanceType: SolautoRebalanceTypeArgs;
35
37
  padding1: Array<number>;
36
- targetLiqUtilizationRateBps: number;
38
+ rebalanceDirection: RebalanceDirectionArgs;
37
39
  padding2: Array<number>;
38
40
  flashLoanAmount: number | bigint;
39
41
  padding: Uint8Array;
@@ -47,8 +49,8 @@ export function getRebalanceDataSerializer(): Serializer<
47
49
  [
48
50
  ['rebalanceType', getSolautoRebalanceTypeSerializer()],
49
51
  ['padding1', array(u8(), { size: 7 })],
50
- ['targetLiqUtilizationRateBps', u16()],
51
- ['padding2', array(u8(), { size: 6 })],
52
+ ['rebalanceDirection', getRebalanceDirectionSerializer()],
53
+ ['padding2', array(u8(), { size: 7 })],
52
54
  ['flashLoanAmount', u64()],
53
55
  ['padding', bytes({ size: 32 })],
54
56
  ],
@@ -0,0 +1,25 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the kinobi library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun kinobi to update it.
5
+ *
6
+ * @see https://github.com/metaplex-foundation/kinobi
7
+ */
8
+
9
+ import { Serializer, scalarEnum } from '@metaplex-foundation/umi/serializers';
10
+
11
+ export enum RebalanceDirection {
12
+ Boost,
13
+ Repay,
14
+ }
15
+
16
+ export type RebalanceDirectionArgs = RebalanceDirection;
17
+
18
+ export function getRebalanceDirectionSerializer(): Serializer<
19
+ RebalanceDirectionArgs,
20
+ RebalanceDirection
21
+ > {
22
+ return scalarEnum<RebalanceDirection>(RebalanceDirection, {
23
+ description: 'RebalanceDirection',
24
+ }) as Serializer<RebalanceDirectionArgs, RebalanceDirection>;
25
+ }