@haven-fi/solauto-sdk 1.0.81 → 1.0.83

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
1
  export * from './solautoMarginfiClient';
2
2
  export * from './solautoClient';
3
+ export * from './referralStateManager';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./solautoMarginfiClient"), exports);
18
18
  __exportStar(require("./solautoClient"), exports);
19
+ __exportStar(require("./referralStateManager"), exports);
@@ -0,0 +1,22 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { Signer, TransactionBuilder, Umi } from "@metaplex-foundation/umi";
3
+ import { WalletAdapter } from "@metaplex-foundation/umi-signer-wallet-adapters";
4
+ import { ReferralState } from "../generated";
5
+ interface ReferralStateManagerArgs {
6
+ referralAuthority?: PublicKey;
7
+ signer?: Signer;
8
+ wallet?: WalletAdapter;
9
+ }
10
+ export declare class ReferralStateManager {
11
+ umi: Umi;
12
+ signer: Signer;
13
+ referralAuthority: PublicKey;
14
+ referralState: PublicKey;
15
+ referralStateData: ReferralState | null;
16
+ constructor(heliusApiKey: string);
17
+ initialize(args: ReferralStateManagerArgs): Promise<void>;
18
+ updateReferralStatesIx(destFeesMint?: PublicKey, referredBy?: PublicKey, lookupTable?: PublicKey): TransactionBuilder;
19
+ claimReferralFeesIx(destFeesMint?: PublicKey): TransactionBuilder;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=referralStateManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referralStateManager.d.ts","sourceRoot":"","sources":["../../src/clients/referralStateManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAa,MAAM,EAAkB,kBAAkB,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAEtG,OAAO,EAAE,aAAa,EAAyB,MAAM,iDAAiD,CAAC;AACvG,OAAO,EAA2C,aAAa,EAAgD,MAAM,cAAc,CAAC;AAGpI,UAAU,wBAAwB;IAC9B,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;CAC1B;AAED,qBAAa,oBAAoB;IACtB,GAAG,EAAG,GAAG,CAAC;IACV,MAAM,EAAG,MAAM,CAAC;IAEhB,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAC1B,iBAAiB,EAAG,aAAa,GAAG,IAAI,CAAC;gBAEpC,YAAY,EAAE,MAAM;IAS1B,UAAU,CAAC,IAAI,EAAE,wBAAwB;IAe/C,sBAAsB,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,GAAG,kBAAkB;IAiBrH,mBAAmB,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,kBAAkB;CAwBpE"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReferralStateManager = void 0;
4
+ const spl_token_1 = require("@solana/spl-token");
5
+ const umi_1 = require("@metaplex-foundation/umi");
6
+ const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
7
+ const umi_signer_wallet_adapters_1 = require("@metaplex-foundation/umi-signer-wallet-adapters");
8
+ const generated_1 = require("../generated");
9
+ const utils_1 = require("../utils");
10
+ class ReferralStateManager {
11
+ constructor(heliusApiKey) {
12
+ const [_, umi] = (0, utils_1.getSolanaRpcConnection)(heliusApiKey);
13
+ this.umi = umi.use({
14
+ install(umi) {
15
+ umi.programs.add((0, generated_1.createSolautoProgram)(), false);
16
+ },
17
+ });
18
+ }
19
+ async initialize(args) {
20
+ if (!args.signer && !args.wallet) {
21
+ throw new Error("Signer or wallet must be provided");
22
+ }
23
+ this.umi = this.umi.use(args.signer
24
+ ? (0, umi_1.signerIdentity)(args.signer)
25
+ : (0, umi_signer_wallet_adapters_1.walletAdapterIdentity)(args.wallet, true));
26
+ this.signer = this.umi.identity;
27
+ this.referralState = (0, utils_1.getReferralState)(args.referralAuthority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey));
28
+ this.referralStateData = await (0, generated_1.safeFetchReferralState)(this.umi, (0, umi_1.publicKey)(this.referralState));
29
+ }
30
+ updateReferralStatesIx(destFeesMint, referredBy, lookupTable) {
31
+ return (0, generated_1.updateReferralStates)(this.umi, {
32
+ signer: this.signer,
33
+ signerReferralState: (0, umi_1.publicKey)(this.referralState),
34
+ referralFeesDestMint: destFeesMint ? (0, umi_1.publicKey)(destFeesMint) : null,
35
+ referredByState: referredBy
36
+ ? (0, umi_1.publicKey)((0, utils_1.getReferralState)(referredBy))
37
+ : undefined,
38
+ referredByAuthority: referredBy
39
+ ? (0, umi_1.publicKey)(referredBy)
40
+ : undefined,
41
+ addressLookupTable: lookupTable
42
+ ? (0, umi_1.publicKey)(lookupTable)
43
+ : null,
44
+ });
45
+ }
46
+ claimReferralFeesIx(destFeesMint) {
47
+ const referralFeesDestMint = destFeesMint ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.referralStateData.destFeesMint);
48
+ const referralDestTa = (0, utils_1.getTokenAccount)(this.referralState, referralFeesDestMint);
49
+ const feesDestinationTa = referralFeesDestMint !== spl_token_1.NATIVE_MINT
50
+ ? (0, umi_1.publicKey)((0, utils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), referralFeesDestMint))
51
+ : undefined;
52
+ return (0, generated_1.claimReferralFees)(this.umi, {
53
+ signer: this.signer,
54
+ signerWsolTa: (0, umi_1.publicKey)((0, utils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), spl_token_1.NATIVE_MINT)),
55
+ referralAuthority: (0, umi_1.publicKey)(this.referralAuthority),
56
+ referralState: (0, umi_1.publicKey)(this.referralState),
57
+ referralFeesDestTa: (0, umi_1.publicKey)(referralDestTa),
58
+ referralFeesDestMint: (0, umi_1.publicKey)(referralFeesDestMint),
59
+ feesDestinationTa,
60
+ });
61
+ }
62
+ }
63
+ exports.ReferralStateManager = ReferralStateManager;
@@ -2,10 +2,11 @@ import "rpc-websockets/dist/lib/client";
2
2
  import { Connection, PublicKey } from "@solana/web3.js";
3
3
  import { Signer, TransactionBuilder, Umi } from "@metaplex-foundation/umi";
4
4
  import { WalletAdapter } from "@metaplex-foundation/umi-signer-wallet-adapters";
5
- import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, ReferralState, SolautoActionArgs, SolautoPosition, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
5
+ import { DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, SolautoActionArgs, SolautoPosition, SolautoRebalanceTypeArgs, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../generated";
6
6
  import { JupSwapDetails } from "../utils/jupiterUtils";
7
7
  import { FlashLoanDetails } from "../utils/solauto/rebalanceUtils";
8
8
  import { LivePositionUpdates } from "../utils/solauto/generalUtils";
9
+ import { ReferralStateManager } from "./referralStateManager";
9
10
  export interface SolautoClientArgs {
10
11
  authority?: PublicKey;
11
12
  positionId: number;
@@ -13,11 +14,11 @@ export interface SolautoClientArgs {
13
14
  wallet?: WalletAdapter;
14
15
  supplyMint?: PublicKey;
15
16
  debtMint?: PublicKey;
16
- referralFeesDestMint?: PublicKey;
17
17
  referredByAuthority?: PublicKey;
18
18
  }
19
19
  export declare abstract class SolautoClient {
20
20
  localTest?: boolean | undefined;
21
+ private heliusApiKey;
21
22
  umi: Umi;
22
23
  connection: Connection;
23
24
  lendingPlatform: LendingPlatform;
@@ -34,10 +35,7 @@ export declare abstract class SolautoClient {
34
35
  debtMint: PublicKey;
35
36
  positionDebtTa: PublicKey;
36
37
  signerDebtTa: PublicKey;
37
- authorityReferralState: PublicKey;
38
- authorityReferralStateData: ReferralState | null;
39
- authorityReferralFeesDestMint: PublicKey;
40
- authorityReferralDestTa: PublicKey;
38
+ referralStateManager: ReferralStateManager;
41
39
  referredByState?: PublicKey;
42
40
  referredByAuthority?: PublicKey;
43
41
  referredBySupplyTa?: PublicKey;
@@ -50,6 +48,7 @@ export declare abstract class SolautoClient {
50
48
  initialize(args: SolautoClientArgs, lendingPlatform: LendingPlatform): Promise<void>;
51
49
  log(...args: any[]): void;
52
50
  resetLivePositionUpdates(): Promise<void>;
51
+ abstract protocolAccount(): PublicKey;
53
52
  defaultLookupTables(): string[];
54
53
  lutAccountsToAdd(): PublicKey[];
55
54
  fetchExistingAuthorityLutAccounts(): Promise<PublicKey[]>;
@@ -59,8 +58,6 @@ export declare abstract class SolautoClient {
59
58
  } | undefined>;
60
59
  solautoPositionSettings(): SolautoSettingsParameters | undefined;
61
60
  solautoPositionActiveDca(): DCASettings | undefined;
62
- updateReferralStatesIx(): TransactionBuilder;
63
- claimReferralFeesIx(): TransactionBuilder;
64
61
  openPosition(settingParams?: SolautoSettingsParametersInpArgs, dca?: DCASettingsInpArgs): TransactionBuilder;
65
62
  updatePositionIx(args: UpdatePositionDataArgs): TransactionBuilder;
66
63
  closePositionIx(): TransactionBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAEL,UAAU,EACV,SAAS,EACV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,MAAM,EACN,kBAAkB,EAClB,GAAG,EAOJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,aAAa,EAEd,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,yBAAyB,EACzB,gCAAgC,EAChC,sBAAsB,EAMvB,MAAM,cAAc,CAAC;AAStB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAMvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,mBAAmB,CAAC,EAAE,SAAS,CAAC;CACjC;AAED,8BAAsB,aAAa;IAuCxB,SAAS,CAAC,EAAE,OAAO;IAtC5B,OAAO,CAAC,YAAY,CAAU;IACvB,GAAG,EAAG,GAAG,CAAC;IACV,UAAU,EAAG,UAAU,CAAC;IACxB,eAAe,EAAG,eAAe,CAAC;IAElC,SAAS,EAAG,SAAS,CAAC;IACtB,MAAM,EAAG,MAAM,CAAC;IAEhB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,eAAe,EAAG,SAAS,CAAC;IAC5B,mBAAmB,EAAG,eAAe,GAAG,IAAI,CAAC;IAC7C,oBAAoB,EAAG,aAAa,GAAG,SAAS,CAAC;IAEjD,UAAU,EAAG,SAAS,CAAC;IACvB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,QAAQ,EAAG,SAAS,CAAC;IACrB,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,oBAAoB,EAAG,oBAAoB,CAAC;IAE5C,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,kBAAkB,CAAC,EAAE,SAAS,CAAC;IAE/B,iBAAiB,EAAG,SAAS,CAAC;IAC9B,mBAAmB,EAAG,SAAS,CAAC;IAEhC,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAChC,mBAAmB,EAAG,SAAS,EAAE,CAAC;IAElC,mBAAmB,EAAE,mBAAmB,CAA6B;gBAG1E,YAAY,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,OAAO,YAAA;IAYtB,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,eAAe,EAAE,eAAe;IA2G1E,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMnB,wBAAwB;IAoB9B,QAAQ,CAAC,eAAe,IAAI,SAAS;IAErC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAiBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAChC;QAAE,WAAW,EAAE,kBAAkB,CAAC;QAAC,iBAAiB,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAC5E;IA2DD,uBAAuB,IAAI,yBAAyB,GAAG,SAAS;IAOhE,wBAAwB,IAAI,WAAW,GAAG,SAAS;IAOnD,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAuBrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IA2DlE,eAAe,IAAI,kBAAkB;IAWrC,WAAW,IAAI,kBAAkB;IA4BjC,QAAQ,CAAC,OAAO,IAAI,kBAAkB;IAEtC,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAuFhE,QAAQ,CAAC,WAAW,CAClB,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IAErB,QAAQ,CAAC,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAE3E,QAAQ,CAAC,SAAS,CAChB,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IAEf,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAYlE"}
@@ -10,15 +10,16 @@ const generated_1 = require("../generated");
10
10
  const accountUtils_1 = require("../utils/accountUtils");
11
11
  const generalAccounts_1 = require("../constants/generalAccounts");
12
12
  const solanaUtils_1 = require("../utils/solanaUtils");
13
- const spl_token_1 = require("@solana/spl-token");
14
13
  const solautoConstants_1 = require("../constants/solautoConstants");
15
14
  const generalUtils_1 = require("../utils/generalUtils");
16
15
  const generalUtils_2 = require("../utils/solauto/generalUtils");
16
+ const referralStateManager_1 = require("./referralStateManager");
17
17
  class SolautoClient {
18
18
  constructor(heliusApiKey, localTest) {
19
19
  this.localTest = localTest;
20
20
  this.livePositionUpdates = new generalUtils_2.LivePositionUpdates();
21
- const [connection, umi] = (0, solanaUtils_1.getSolanaRpcConnection)(heliusApiKey);
21
+ this.heliusApiKey = heliusApiKey;
22
+ const [connection, umi] = (0, solanaUtils_1.getSolanaRpcConnection)(this.heliusApiKey);
22
23
  this.connection = connection;
23
24
  this.umi = umi.use({
24
25
  install(umi) {
@@ -38,7 +39,7 @@ class SolautoClient {
38
39
  this.positionId = args.positionId;
39
40
  this.selfManaged = this.positionId === 0;
40
41
  this.lendingPlatform = lendingPlatform;
41
- this.solautoPosition = await (0, accountUtils_1.getSolautoPositionAccount)(this.authority, this.positionId);
42
+ this.solautoPosition = (0, accountUtils_1.getSolautoPositionAccount)(this.authority, this.positionId);
42
43
  this.solautoPositionData = await (0, generated_1.safeFetchSolautoPosition)(this.umi, (0, umi_1.publicKey)(this.solautoPosition));
43
44
  this.solautoPositionState = this.solautoPositionData?.state;
44
45
  this.supplyMint =
@@ -51,16 +52,15 @@ class SolautoClient {
51
52
  (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.position.debtMint);
52
53
  this.positionDebtTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.debtMint);
53
54
  this.signerDebtTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.debtMint);
54
- this.authorityReferralState = await (0, accountUtils_1.getReferralState)(this.authority);
55
- this.authorityReferralStateData = await (0, generated_1.safeFetchReferralState)(this.umi, (0, umi_1.publicKey)(this.authorityReferralState));
56
- this.authorityReferralFeesDestMint = args.referralFeesDestMint
57
- ? args.referralFeesDestMint
58
- : this.authorityReferralStateData?.destFeesMint
59
- ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData?.destFeesMint)
60
- : spl_token_1.NATIVE_MINT;
61
- this.authorityReferralDestTa = (0, accountUtils_1.getTokenAccount)(this.authorityReferralState, this.authorityReferralFeesDestMint);
62
- const hasReferredBy = this.authorityReferralStateData &&
63
- this.authorityReferralStateData.referredByState !==
55
+ this.referralStateManager = new referralStateManager_1.ReferralStateManager(this.heliusApiKey);
56
+ await this.referralStateManager.initialize({
57
+ referralAuthority: this.authority,
58
+ signer: args.signer,
59
+ wallet: args.wallet
60
+ });
61
+ const authorityReferralStateData = this.referralStateManager.referralStateData;
62
+ const hasReferredBy = authorityReferralStateData &&
63
+ authorityReferralStateData.referredByState !==
64
64
  (0, umi_1.publicKey)(web3_js_1.PublicKey.default);
65
65
  const referredByAuthority = !hasReferredBy &&
66
66
  args.referredByAuthority &&
@@ -68,9 +68,9 @@ class SolautoClient {
68
68
  ? args.referredByAuthority
69
69
  : undefined;
70
70
  this.referredByState = hasReferredBy
71
- ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData.referredByState)
71
+ ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(authorityReferralStateData.referredByState)
72
72
  : referredByAuthority
73
- ? await (0, accountUtils_1.getReferralState)(referredByAuthority)
73
+ ? (0, accountUtils_1.getReferralState)(referredByAuthority)
74
74
  : undefined;
75
75
  this.referredByAuthority = referredByAuthority;
76
76
  if (this.referredByState !== undefined) {
@@ -78,8 +78,8 @@ class SolautoClient {
78
78
  }
79
79
  this.solautoFeesWallet = generalAccounts_1.SOLAUTO_FEES_WALLET;
80
80
  this.solautoFeesSupplyTa = (0, accountUtils_1.getTokenAccount)(this.solautoFeesWallet, this.supplyMint);
81
- this.authorityLutAddress = this.authorityReferralStateData?.lookupTable
82
- ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.authorityReferralStateData?.lookupTable)
81
+ this.authorityLutAddress = authorityReferralStateData?.lookupTable
82
+ ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(authorityReferralStateData?.lookupTable)
83
83
  : undefined;
84
84
  this.upToDateLutAccounts = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey).equals(this.authority)
85
85
  ? await this.fetchExistingAuthorityLutAccounts()
@@ -128,7 +128,7 @@ class SolautoClient {
128
128
  this.solautoPosition,
129
129
  this.positionSupplyTa,
130
130
  this.positionDebtTa,
131
- this.authorityReferralState,
131
+ this.referralStateManager.referralState,
132
132
  ...(this.referredBySupplyTa ? [this.referredBySupplyTa] : []),
133
133
  ];
134
134
  }
@@ -186,36 +186,6 @@ class SolautoClient {
186
186
  return (this.livePositionUpdates.activeDca ??
187
187
  this.solautoPositionData?.position.dca);
188
188
  }
189
- updateReferralStatesIx() {
190
- return (0, generated_1.updateReferralStates)(this.umi, {
191
- signer: this.signer,
192
- signerReferralState: (0, umi_1.publicKey)(this.authorityReferralState),
193
- referralFeesDestMint: (0, umi_1.publicKey)(this.authorityReferralFeesDestMint),
194
- referredByState: this.referredByState
195
- ? (0, umi_1.publicKey)(this.referredByState)
196
- : undefined,
197
- referredByAuthority: this.referredByAuthority
198
- ? (0, umi_1.publicKey)(this.referredByAuthority)
199
- : undefined,
200
- addressLookupTable: this.authorityLutAddress
201
- ? (0, umi_1.some)((0, umi_1.publicKey)(this.authorityLutAddress))
202
- : null,
203
- });
204
- }
205
- claimReferralFeesIx() {
206
- const feesDestinationTa = this.authorityReferralFeesDestMint !== spl_token_1.NATIVE_MINT
207
- ? (0, umi_1.publicKey)((0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.authorityReferralFeesDestMint))
208
- : undefined;
209
- return (0, generated_1.claimReferralFees)(this.umi, {
210
- signer: this.signer,
211
- signerWsolTa: (0, umi_1.publicKey)((0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), spl_token_1.NATIVE_MINT)),
212
- referralAuthority: (0, umi_1.publicKey)(this.authorityReferralStateData.authority),
213
- referralState: (0, umi_1.publicKey)(this.authorityReferralState),
214
- referralFeesDestTa: (0, umi_1.publicKey)(this.authorityReferralDestTa),
215
- referralFeesDestMint: (0, umi_1.publicKey)(this.authorityReferralFeesDestMint),
216
- feesDestinationTa,
217
- });
218
- }
219
189
  openPosition(settingParams, dca) {
220
190
  if (dca && dca.debtToAddBaseUnit > 0) {
221
191
  this.livePositionUpdates.new({
@@ -27,6 +27,7 @@ export declare class SolautoMarginfiClient extends SolautoClient {
27
27
  intermediaryMarginfiAccount?: MarginfiAccount;
28
28
  initialize(args: SolautoMarginfiClientArgs): Promise<void>;
29
29
  setIntermediaryMarginfiDetails(): Promise<void>;
30
+ protocolAccount(): PublicKey;
30
31
  defaultLookupTables(): string[];
31
32
  lutAccountsToAdd(): PublicKey[];
32
33
  marginfiAccountInitialize(): TransactionBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAGL,eAAe,EAYhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAWnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkE1C,8BAA8B;IA0CpC,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAU/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA2DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
1
+ {"version":3,"file":"solautoMarginfiClient.d.ts","sourceRoot":"","sources":["../../src/clients/solautoMarginfiClient.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,MAAM,EACN,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAM1D,OAAO,EACL,kBAAkB,EAElB,aAAa,EACb,iBAAiB,EACjB,wBAAwB,EACxB,gCAAgC,EAKjC,MAAM,cAAc,CAAC;AAGtB,OAAO,EAEL,eAAe,EAUhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAWnE,MAAM,WAAW,yBAA0B,SAAQ,iBAAiB;IAClE,eAAe,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,qBAAa,qBAAsB,SAAQ,aAAa;IACtD,OAAO,CAAC,WAAW,CAAkB;IAE9B,eAAe,EAAG,SAAS,CAAC;IAE5B,sBAAsB,EAAE,MAAM,CAAa;IAC3C,eAAe,EAAG,SAAS,GAAG,MAAM,CAAC;IACrC,iBAAiB,EAAG,SAAS,CAAC;IAC9B,aAAa,EAAG,SAAS,CAAC;IAE1B,sBAAsB,EAAG,qBAAqB,CAAC;IAC/C,oBAAoB,EAAG,qBAAqB,CAAC;IAE7C,iBAAiB,EAAG,SAAS,CAAC;IAC9B,eAAe,EAAG,SAAS,CAAC;IAG5B,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAkE1C,8BAA8B;IA0CpC,eAAe,IAAI,SAAS;IAI5B,mBAAmB,IAAI,MAAM,EAAE;IAI/B,gBAAgB,IAAI,SAAS,EAAE;IAU/B,yBAAyB,IAAI,kBAAkB;IAS/C,YAAY,CACV,aAAa,CAAC,EAAE,gCAAgC,EAChD,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IAMrB,OAAO,CAAC,sBAAsB;IA8C9B,OAAO,IAAI,kBAAkB;IAc7B,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAUhE,OAAO,CAAC,6BAA6B;IAmErC,OAAO,CAAC,oCAAoC;IA0D5C,SAAS,CACP,aAAa,EAAE,GAAG,GAAG,GAAG,EACxB,WAAW,EAAE,cAAc,EAC3B,aAAa,EAAE,wBAAwB,EACvC,SAAS,CAAC,EAAE,gBAAgB,EAC5B,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB;IA2DrB,WAAW,CACT,gBAAgB,EAAE,gBAAgB,EAClC,uBAAuB,EAAE,SAAS,GACjC,kBAAkB;IA2BrB,UAAU,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,kBAAkB;IAoFlE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
@@ -82,6 +82,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
82
82
  this.intermediaryMarginfiAccount =
83
83
  emptyMarginfiAccounts.length > 0 ? emptyMarginfiAccounts[0] : undefined;
84
84
  }
85
+ protocolAccount() {
86
+ return this.marginfiAccountPk;
87
+ }
85
88
  defaultLookupTables() {
86
89
  return [marginfiAccounts_1.MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
87
90
  }
@@ -118,7 +121,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
118
121
  solautoManager: (0, umi_1.publicKey)(constants_1.SOLAUTO_MANAGER),
119
122
  solautoFeesWallet: (0, umi_1.publicKey)(this.solautoFeesWallet),
120
123
  solautoFeesSupplyTa: (0, umi_1.publicKey)(this.solautoFeesSupplyTa),
121
- signerReferralState: (0, umi_1.publicKey)(this.authorityReferralState),
124
+ signerReferralState: (0, umi_1.publicKey)(this.referralStateManager.referralState),
122
125
  referredByState: this.referredByState
123
126
  ? (0, umi_1.publicKey)(this.referredByState)
124
127
  : undefined,
@@ -281,7 +284,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
281
284
  marginfiProgram: (0, umi_1.publicKey)(marginfi_sdk_1.MARGINFI_PROGRAM_ID),
282
285
  ixsSysvar: (0, umi_1.publicKey)(web3_js_1.SYSVAR_INSTRUCTIONS_PUBKEY),
283
286
  solautoFeesSupplyTa: rebalanceStep === "B" ? (0, umi_1.publicKey)(this.solautoFeesSupplyTa) : undefined,
284
- authorityReferralState: (0, umi_1.publicKey)(this.authorityReferralState),
287
+ authorityReferralState: (0, umi_1.publicKey)(this.referralStateManager.referralState),
285
288
  referredBySupplyTa: this.referredBySupplyTa
286
289
  ? (0, umi_1.publicKey)(this.referredBySupplyTa)
287
290
  : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EASd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAuMzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA8G7B;AAkLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA4BnD;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CA2HA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CA8BzC"}
1
+ {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,aAAa,EASd,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAuMzD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CA8G7B;AAkLD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA4BnD;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CACN;IACA,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACC,SAAS,CACZ,CA2HA;AAED,wBAAsB,gCAAgC,CACpD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC,CA8BzC"}
@@ -47,14 +47,14 @@ function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn)
47
47
  }
48
48
  async function transactionChoresBefore(client, accountsGettingCreated, solautoActions, initiatingDcaIn) {
49
49
  let chores = (0, umi_1.transactionBuilder)();
50
- if (client.authorityReferralStateData === null ||
50
+ if (client.referralStateManager.referralState === null ||
51
51
  (client.referredByState !== undefined &&
52
- client.authorityReferralStateData.referredByState ===
52
+ client.referralStateManager.referralStateData.referredByState ===
53
53
  (0, umi_1.publicKey)(web3_js_1.PublicKey.default)) ||
54
54
  (client.authorityLutAddress !== undefined &&
55
- client.authorityReferralStateData.lookupTable ==
55
+ client.referralStateManager.referralStateData.lookupTable ==
56
56
  (0, umi_1.publicKey)(web3_js_1.PublicKey.default))) {
57
- chores = chores.add(client.updateReferralStatesIx());
57
+ chores = chores.add(client.referralStateManager.updateReferralStatesIx(undefined, client.referredByAuthority, client.authorityLutAddress));
58
58
  }
59
59
  if (client.selfManaged) {
60
60
  if (client.solautoPositionData === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionsManager.ts"],"names":[],"mappings":"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"}
@@ -141,11 +141,7 @@ class TransactionsManager {
141
141
  }
142
142
  const transaction = item.tx.setAddressLookupTables(await this.lookupTables.getLutInputs(item.lookupTableAddresses));
143
143
  if (!transaction.fitsInOneTransaction(this.client.umi)) {
144
- // TODO: revert me
145
- // throw new Error(
146
- // `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
147
- // );
148
- transactionSets.push(new TransactionSet(this.client, this.lookupTables, [item]));
144
+ throw new Error(`Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`);
149
145
  }
150
146
  else {
151
147
  let newSet = new TransactionSet(this.client, this.lookupTables, [item]);
@@ -3,7 +3,7 @@ export declare function bufferFromU8(num: number): Buffer;
3
3
  export declare function bufferFromU64(num: bigint): Buffer;
4
4
  export declare function getTokenAccount(wallet: PublicKey, tokenMint: PublicKey): PublicKey;
5
5
  export declare function getTokenAccounts(wallet: PublicKey, tokenMints: PublicKey[]): PublicKey[];
6
- export declare function getSolautoPositionAccount(signer: PublicKey, positionId: number): Promise<PublicKey>;
7
- export declare function getReferralState(authority: PublicKey): Promise<PublicKey>;
6
+ export declare function getSolautoPositionAccount(signer: PublicKey, positionId: number): PublicKey;
7
+ export declare function getReferralState(authority: PublicKey): PublicKey;
8
8
  export declare function getMarginfiAccountPDA(solautoPositionAccount: PublicKey, marginfiAccountSeedIdx: bigint): Promise<PublicKey>;
9
9
  //# sourceMappingURL=accountUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"accountUtils.d.ts","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAMlF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAExF;AAED,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,sBAQnB;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,SAAS,sBAU1D;AAED,wBAAsB,qBAAqB,CACzC,sBAAsB,EAAE,SAAS,EACjC,sBAAsB,EAAE,MAAM,sBAa/B"}
1
+ {"version":3,"file":"accountUtils.d.ts","sourceRoot":"","sources":["../../src/utils/accountUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS,CAMlF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAExF;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,aAQnB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,aAUpD;AAED,wBAAsB,qBAAqB,CACzC,sBAAsB,EAAE,SAAS,EACjC,sBAAsB,EAAE,MAAM,sBAa/B"}
@@ -26,14 +26,14 @@ function getTokenAccount(wallet, tokenMint) {
26
26
  function getTokenAccounts(wallet, tokenMints) {
27
27
  return tokenMints.map(x => getTokenAccount(wallet, x));
28
28
  }
29
- async function getSolautoPositionAccount(signer, positionId) {
30
- const [positionAccount, _] = await web3_js_1.PublicKey.findProgramAddress([bufferFromU8(positionId), signer.toBuffer()], new web3_js_1.PublicKey(generated_1.SOLAUTO_PROGRAM_ID));
29
+ function getSolautoPositionAccount(signer, positionId) {
30
+ const [positionAccount, _] = web3_js_1.PublicKey.findProgramAddressSync([bufferFromU8(positionId), signer.toBuffer()], new web3_js_1.PublicKey(generated_1.SOLAUTO_PROGRAM_ID));
31
31
  return positionAccount;
32
32
  }
33
- async function getReferralState(authority) {
33
+ function getReferralState(authority) {
34
34
  const str = "referral_state";
35
35
  const strBuffer = Buffer.from(str, "utf-8");
36
- const [ReferralState, _] = await web3_js_1.PublicKey.findProgramAddress([strBuffer, authority.toBuffer()], new web3_js_1.PublicKey(generated_1.SOLAUTO_PROGRAM_ID));
36
+ const [ReferralState, _] = web3_js_1.PublicKey.findProgramAddressSync([strBuffer, authority.toBuffer()], new web3_js_1.PublicKey(generated_1.SOLAUTO_PROGRAM_ID));
37
37
  return ReferralState;
38
38
  }
39
39
  async function getMarginfiAccountPDA(solautoPositionAccount, marginfiAccountSeedIdx) {
@@ -165,7 +165,7 @@ async function getReferralsByUser(umi, user) {
165
165
  // padding: [u8; 7],
166
166
  // authority: Pubkey,
167
167
  // referred_by_state: Pubkey,
168
- const userReferralState = await (0, accountUtils_1.getReferralState)(user);
168
+ const userReferralState = (0, accountUtils_1.getReferralState)(user);
169
169
  const accounts = await umi.rpc.getProgramAccounts(generated_1.SOLAUTO_PROGRAM_ID, {
170
170
  commitment: "finalized",
171
171
  dataSlice: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.81",
3
+ "version": "1.0.83",
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",
@@ -1,2 +1,3 @@
1
1
  export * from './solautoMarginfiClient';
2
- export * from './solautoClient';
2
+ export * from './solautoClient';
3
+ export * from './referralStateManager';
@@ -0,0 +1,88 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { NATIVE_MINT } from "@solana/spl-token";
3
+ import { publicKey, Signer, signerIdentity, TransactionBuilder, Umi } from "@metaplex-foundation/umi";
4
+ import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
5
+ import { WalletAdapter, walletAdapterIdentity } from "@metaplex-foundation/umi-signer-wallet-adapters";
6
+ import { claimReferralFees, createSolautoProgram, ReferralState, safeFetchReferralState, updateReferralStates } from "../generated";
7
+ import { getReferralState, getSolanaRpcConnection, getTokenAccount } from "../utils";
8
+
9
+ interface ReferralStateManagerArgs {
10
+ referralAuthority?: PublicKey;
11
+ signer?: Signer;
12
+ wallet?: WalletAdapter;
13
+ }
14
+
15
+ export class ReferralStateManager {
16
+ public umi!: Umi;
17
+ public signer!: Signer;
18
+
19
+ public referralAuthority!: PublicKey;
20
+ public referralState!: PublicKey;
21
+ public referralStateData!: ReferralState | null;
22
+
23
+ constructor(heliusApiKey: string) {
24
+ const [_, umi] = getSolanaRpcConnection(heliusApiKey);
25
+ this.umi = umi.use({
26
+ install(umi) {
27
+ umi.programs.add(createSolautoProgram(), false);
28
+ },
29
+ });
30
+ }
31
+
32
+ async initialize(args: ReferralStateManagerArgs) {
33
+ if (!args.signer && !args.wallet) {
34
+ throw new Error("Signer or wallet must be provided");
35
+ }
36
+ this.umi = this.umi.use(
37
+ args.signer
38
+ ? signerIdentity(args.signer)
39
+ : walletAdapterIdentity(args.wallet!, true)
40
+ );
41
+
42
+ this.signer = this.umi.identity;
43
+ this.referralState = getReferralState(args.referralAuthority ?? toWeb3JsPublicKey(this.signer.publicKey));
44
+ this.referralStateData = await safeFetchReferralState(this.umi, publicKey(this.referralState));
45
+ }
46
+
47
+ updateReferralStatesIx(destFeesMint?: PublicKey, referredBy?: PublicKey, lookupTable?: PublicKey): TransactionBuilder {
48
+ return updateReferralStates(this.umi, {
49
+ signer: this.signer,
50
+ signerReferralState: publicKey(this.referralState),
51
+ referralFeesDestMint: destFeesMint ? publicKey(destFeesMint) : null,
52
+ referredByState: referredBy
53
+ ? publicKey(getReferralState(referredBy))
54
+ : undefined,
55
+ referredByAuthority: referredBy
56
+ ? publicKey(referredBy)
57
+ : undefined,
58
+ addressLookupTable: lookupTable
59
+ ? publicKey(lookupTable)
60
+ : null,
61
+ });
62
+ }
63
+
64
+ claimReferralFeesIx(destFeesMint?: PublicKey): TransactionBuilder {
65
+ const referralFeesDestMint = destFeesMint ?? toWeb3JsPublicKey(this.referralStateData!.destFeesMint);
66
+ const referralDestTa = getTokenAccount(this.referralState, referralFeesDestMint);
67
+ const feesDestinationTa =
68
+ referralFeesDestMint !== NATIVE_MINT
69
+ ? publicKey(
70
+ getTokenAccount(
71
+ toWeb3JsPublicKey(this.signer.publicKey),
72
+ referralFeesDestMint
73
+ )
74
+ )
75
+ : undefined;
76
+
77
+ return claimReferralFees(this.umi, {
78
+ signer: this.signer,
79
+ signerWsolTa: publicKey(getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), NATIVE_MINT)),
80
+ referralAuthority: publicKey(this.referralAuthority),
81
+ referralState: publicKey(this.referralState),
82
+ referralFeesDestTa: publicKey(referralDestTa),
83
+ referralFeesDestMint: publicKey(referralFeesDestMint),
84
+ feesDestinationTa,
85
+ });
86
+ }
87
+
88
+ }
@@ -14,7 +14,6 @@ import {
14
14
  isSome,
15
15
  transactionBuilder,
16
16
  signerIdentity,
17
- some,
18
17
  } from "@metaplex-foundation/umi";
19
18
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
20
19
  import {
@@ -26,7 +25,6 @@ import {
26
25
  DCASettingsInpArgs,
27
26
  LendingPlatform,
28
27
  PositionState,
29
- ReferralState,
30
28
  SolautoActionArgs,
31
29
  SolautoPosition,
32
30
  SolautoRebalanceTypeArgs,
@@ -34,13 +32,10 @@ import {
34
32
  SolautoSettingsParametersInpArgs,
35
33
  UpdatePositionDataArgs,
36
34
  cancelDCA,
37
- claimReferralFees,
38
35
  closePosition,
39
36
  createSolautoProgram,
40
- safeFetchReferralState,
41
37
  safeFetchSolautoPosition,
42
38
  updatePosition,
43
- updateReferralStates,
44
39
  } from "../generated";
45
40
  import {
46
41
  getReferralState,
@@ -57,13 +52,13 @@ import {
57
52
  splTokenTransferUmiIx,
58
53
  } from "../utils/solanaUtils";
59
54
  import { FlashLoanDetails } from "../utils/solauto/rebalanceUtils";
60
- import { NATIVE_MINT } from "@solana/spl-token";
61
55
  import {
62
56
  MIN_POSITION_STATE_FRESHNESS_SECS,
63
57
  SOLAUTO_LUT,
64
58
  } from "../constants/solautoConstants";
65
59
  import { currentUnixSeconds } from "../utils/generalUtils";
66
60
  import { LivePositionUpdates } from "../utils/solauto/generalUtils";
61
+ import { ReferralStateManager } from "./referralStateManager";
67
62
 
68
63
  export interface SolautoClientArgs {
69
64
  authority?: PublicKey;
@@ -74,11 +69,11 @@ export interface SolautoClientArgs {
74
69
  supplyMint?: PublicKey;
75
70
  debtMint?: PublicKey;
76
71
 
77
- referralFeesDestMint?: PublicKey;
78
72
  referredByAuthority?: PublicKey;
79
73
  }
80
74
 
81
75
  export abstract class SolautoClient {
76
+ private heliusApiKey!: string;
82
77
  public umi!: Umi;
83
78
  public connection!: Connection;
84
79
  public lendingPlatform!: LendingPlatform;
@@ -100,10 +95,7 @@ export abstract class SolautoClient {
100
95
  public positionDebtTa!: PublicKey;
101
96
  public signerDebtTa!: PublicKey;
102
97
 
103
- public authorityReferralState!: PublicKey;
104
- public authorityReferralStateData!: ReferralState | null;
105
- public authorityReferralFeesDestMint!: PublicKey;
106
- public authorityReferralDestTa!: PublicKey;
98
+ public referralStateManager!: ReferralStateManager;
107
99
 
108
100
  public referredByState?: PublicKey;
109
101
  public referredByAuthority?: PublicKey;
@@ -121,7 +113,8 @@ export abstract class SolautoClient {
121
113
  heliusApiKey: string,
122
114
  public localTest?: boolean
123
115
  ) {
124
- const [connection, umi] = getSolanaRpcConnection(heliusApiKey);
116
+ this.heliusApiKey = heliusApiKey;
117
+ const [connection, umi] = getSolanaRpcConnection(this.heliusApiKey);
125
118
  this.connection = connection;
126
119
  this.umi = umi.use({
127
120
  install(umi) {
@@ -146,7 +139,7 @@ export abstract class SolautoClient {
146
139
  this.positionId = args.positionId;
147
140
  this.selfManaged = this.positionId === 0;
148
141
  this.lendingPlatform = lendingPlatform;
149
- this.solautoPosition = await getSolautoPositionAccount(
142
+ this.solautoPosition = getSolautoPositionAccount(
150
143
  this.authority,
151
144
  this.positionId
152
145
  );
@@ -177,35 +170,28 @@ export abstract class SolautoClient {
177
170
  this.debtMint
178
171
  );
179
172
 
180
- this.authorityReferralState = await getReferralState(this.authority);
181
- this.authorityReferralStateData = await safeFetchReferralState(
182
- this.umi,
183
- publicKey(this.authorityReferralState)
184
- );
185
- this.authorityReferralFeesDestMint = args.referralFeesDestMint
186
- ? args.referralFeesDestMint
187
- : this.authorityReferralStateData?.destFeesMint
188
- ? toWeb3JsPublicKey(this.authorityReferralStateData?.destFeesMint)
189
- : NATIVE_MINT;
190
- this.authorityReferralDestTa = getTokenAccount(
191
- this.authorityReferralState,
192
- this.authorityReferralFeesDestMint
193
- );
173
+ this.referralStateManager = new ReferralStateManager(this.heliusApiKey)
174
+ await this.referralStateManager.initialize({
175
+ referralAuthority: this.authority,
176
+ signer: args.signer,
177
+ wallet: args.wallet
178
+ });
194
179
 
180
+ const authorityReferralStateData = this.referralStateManager.referralStateData;
195
181
  const hasReferredBy =
196
- this.authorityReferralStateData &&
197
- this.authorityReferralStateData.referredByState !==
198
- publicKey(PublicKey.default);
182
+ authorityReferralStateData &&
183
+ authorityReferralStateData.referredByState !==
184
+ publicKey(PublicKey.default);
199
185
  const referredByAuthority =
200
186
  !hasReferredBy &&
201
- args.referredByAuthority &&
202
- !args.referredByAuthority.equals(toWeb3JsPublicKey(this.signer.publicKey))
187
+ args.referredByAuthority &&
188
+ !args.referredByAuthority.equals(toWeb3JsPublicKey(this.signer.publicKey))
203
189
  ? args.referredByAuthority
204
190
  : undefined;
205
191
  this.referredByState = hasReferredBy
206
- ? toWeb3JsPublicKey(this.authorityReferralStateData!.referredByState)
192
+ ? toWeb3JsPublicKey(authorityReferralStateData!.referredByState)
207
193
  : referredByAuthority
208
- ? await getReferralState(referredByAuthority!)
194
+ ? getReferralState(referredByAuthority!)
209
195
  : undefined;
210
196
  this.referredByAuthority = referredByAuthority;
211
197
  if (this.referredByState !== undefined) {
@@ -221,8 +207,8 @@ export abstract class SolautoClient {
221
207
  this.supplyMint
222
208
  );
223
209
 
224
- this.authorityLutAddress = this.authorityReferralStateData?.lookupTable
225
- ? toWeb3JsPublicKey(this.authorityReferralStateData?.lookupTable)
210
+ this.authorityLutAddress = authorityReferralStateData?.lookupTable
211
+ ? toWeb3JsPublicKey(authorityReferralStateData?.lookupTable)
226
212
  : undefined;
227
213
  this.upToDateLutAccounts = toWeb3JsPublicKey(this.signer.publicKey).equals(
228
214
  this.authority
@@ -270,6 +256,8 @@ export abstract class SolautoClient {
270
256
  this.livePositionUpdates.reset();
271
257
  }
272
258
 
259
+ abstract protocolAccount(): PublicKey;
260
+
273
261
  defaultLookupTables(): string[] {
274
262
  return [SOLAUTO_LUT];
275
263
  }
@@ -286,7 +274,7 @@ export abstract class SolautoClient {
286
274
  this.solautoPosition,
287
275
  this.positionSupplyTa,
288
276
  this.positionDebtTa,
289
- this.authorityReferralState,
277
+ this.referralStateManager.referralState,
290
278
  ...(this.referredBySupplyTa ? [this.referredBySupplyTa] : []),
291
279
  ];
292
280
  }
@@ -353,7 +341,7 @@ export abstract class SolautoClient {
353
341
  const addingReferredBy =
354
342
  accountsToAdd.length === 1 &&
355
343
  accountsToAdd[0].toString().toLowerCase() ===
356
- this.referredBySupplyTa?.toString().toLowerCase();
344
+ this.referredBySupplyTa?.toString().toLowerCase();
357
345
 
358
346
  if (tx.getInstructions().length > 0) {
359
347
  this.log("Updating authority lookup table...");
@@ -376,44 +364,6 @@ export abstract class SolautoClient {
376
364
  );
377
365
  }
378
366
 
379
- updateReferralStatesIx(): TransactionBuilder {
380
- return updateReferralStates(this.umi, {
381
- signer: this.signer,
382
- signerReferralState: publicKey(this.authorityReferralState),
383
- referralFeesDestMint: publicKey(this.authorityReferralFeesDestMint),
384
- referredByState: this.referredByState
385
- ? publicKey(this.referredByState)
386
- : undefined,
387
- referredByAuthority: this.referredByAuthority
388
- ? publicKey(this.referredByAuthority)
389
- : undefined,
390
- addressLookupTable: this.authorityLutAddress
391
- ? some(publicKey(this.authorityLutAddress))
392
- : null,
393
- });
394
- }
395
-
396
- claimReferralFeesIx(): TransactionBuilder {
397
- const feesDestinationTa =
398
- this.authorityReferralFeesDestMint !== NATIVE_MINT
399
- ? publicKey(
400
- getTokenAccount(
401
- toWeb3JsPublicKey(this.signer.publicKey),
402
- this.authorityReferralFeesDestMint
403
- )
404
- )
405
- : undefined;
406
- return claimReferralFees(this.umi, {
407
- signer: this.signer,
408
- signerWsolTa: publicKey(getTokenAccount(toWeb3JsPublicKey(this.signer.publicKey), NATIVE_MINT)),
409
- referralAuthority: publicKey(this.authorityReferralStateData!.authority),
410
- referralState: publicKey(this.authorityReferralState),
411
- referralFeesDestTa: publicKey(this.authorityReferralDestTa),
412
- referralFeesDestMint: publicKey(this.authorityReferralFeesDestMint),
413
- feesDestinationTa,
414
- });
415
- }
416
-
417
367
  openPosition(
418
368
  settingParams?: SolautoSettingsParametersInpArgs,
419
369
  dca?: DCASettingsInpArgs
@@ -575,7 +525,7 @@ export abstract class SolautoClient {
575
525
  BigInt(
576
526
  Math.round(
577
527
  Number(this.solautoPositionState!.debt.amountUsed.baseUnit) *
578
- 1.01
528
+ 1.01
579
529
  )
580
530
  )
581
531
  )
@@ -647,7 +597,7 @@ export abstract class SolautoClient {
647
597
  if (
648
598
  Boolean(this.solautoPositionState) &&
649
599
  Number(this.solautoPositionState!.lastUpdated) >
650
- currentUnixSeconds() - MIN_POSITION_STATE_FRESHNESS_SECS &&
600
+ currentUnixSeconds() - MIN_POSITION_STATE_FRESHNESS_SECS &&
651
601
  !this.livePositionUpdates.hasUpdates()
652
602
  ) {
653
603
  return this.solautoPositionState;
@@ -34,7 +34,6 @@ import {
34
34
  import { getMarginfiAccountPDA, getTokenAccount } from "../utils/accountUtils";
35
35
  import { generateRandomU64 } from "../utils/generalUtils";
36
36
  import {
37
- Bank,
38
37
  MARGINFI_PROGRAM_ID,
39
38
  MarginfiAccount,
40
39
  lendingAccountBorrow,
@@ -44,9 +43,7 @@ import {
44
43
  lendingAccountStartFlashloan,
45
44
  lendingAccountWithdraw,
46
45
  marginfiAccountInitialize,
47
- safeFetchAllBank,
48
46
  safeFetchAllMarginfiAccount,
49
- safeFetchBank,
50
47
  safeFetchMarginfiAccount,
51
48
  } from "../marginfi-sdk";
52
49
  import { JupSwapDetails } from "../utils/jupiterUtils";
@@ -196,6 +193,10 @@ export class SolautoMarginfiClient extends SolautoClient {
196
193
  emptyMarginfiAccounts.length > 0 ? emptyMarginfiAccounts[0] : undefined;
197
194
  }
198
195
 
196
+ protocolAccount(): PublicKey {
197
+ return this.marginfiAccountPk;
198
+ }
199
+
199
200
  defaultLookupTables(): string[] {
200
201
  return [MARGINFI_ACCOUNTS_LOOKUP_TABLE, ...super.defaultLookupTables()];
201
202
  }
@@ -243,7 +244,7 @@ export class SolautoMarginfiClient extends SolautoClient {
243
244
  solautoManager: publicKey(SOLAUTO_MANAGER),
244
245
  solautoFeesWallet: publicKey(this.solautoFeesWallet),
245
246
  solautoFeesSupplyTa: publicKey(this.solautoFeesSupplyTa),
246
- signerReferralState: publicKey(this.authorityReferralState),
247
+ signerReferralState: publicKey(this.referralStateManager.referralState),
247
248
  referredByState: this.referredByState
248
249
  ? publicKey(this.referredByState)
249
250
  : undefined,
@@ -448,7 +449,7 @@ export class SolautoMarginfiClient extends SolautoClient {
448
449
  ixsSysvar: publicKey(SYSVAR_INSTRUCTIONS_PUBKEY),
449
450
  solautoFeesSupplyTa:
450
451
  rebalanceStep === "B" ? publicKey(this.solautoFeesSupplyTa) : undefined,
451
- authorityReferralState: publicKey(this.authorityReferralState),
452
+ authorityReferralState: publicKey(this.referralStateManager.referralState),
452
453
  referredBySupplyTa: this.referredBySupplyTa
453
454
  ? publicKey(this.referredBySupplyTa)
454
455
  : undefined,
@@ -109,15 +109,15 @@ async function transactionChoresBefore(
109
109
  let chores = transactionBuilder();
110
110
 
111
111
  if (
112
- client.authorityReferralStateData === null ||
112
+ client.referralStateManager.referralState === null ||
113
113
  (client.referredByState !== undefined &&
114
- client.authorityReferralStateData.referredByState ===
115
- publicKey(PublicKey.default)) ||
114
+ client.referralStateManager.referralStateData!.referredByState ===
115
+ publicKey(PublicKey.default)) ||
116
116
  (client.authorityLutAddress !== undefined &&
117
- client.authorityReferralStateData.lookupTable ==
118
- publicKey(PublicKey.default))
117
+ client.referralStateManager.referralStateData!.lookupTable ==
118
+ publicKey(PublicKey.default))
119
119
  ) {
120
- chores = chores.add(client.updateReferralStatesIx());
120
+ chores = chores.add(client.referralStateManager.updateReferralStatesIx(undefined, client.referredByAuthority, client.authorityLutAddress));
121
121
  }
122
122
 
123
123
  if (client.selfManaged) {
@@ -379,7 +379,7 @@ function getRebalanceInstructions(tx: TransactionBuilder): Instruction[] {
379
379
  if (data.discriminator === discriminator) {
380
380
  return true;
381
381
  }
382
- } catch {}
382
+ } catch { }
383
383
  return false;
384
384
  }
385
385
  });
@@ -400,7 +400,7 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
400
400
  if (data.discriminator === discriminator) {
401
401
  solautoActions?.push(data.solautoAction);
402
402
  }
403
- } catch {}
403
+ } catch { }
404
404
  }
405
405
 
406
406
  if (x.programId === MARGINFI_PROGRAM_ID) {
@@ -423,7 +423,7 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
423
423
  fields: [data.amount],
424
424
  });
425
425
  }
426
- } catch {}
426
+ } catch { }
427
427
 
428
428
  try {
429
429
  const serializer = getLendingAccountBorrowInstructionDataSerializer();
@@ -444,7 +444,7 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
444
444
  fields: [data.amount],
445
445
  });
446
446
  }
447
- } catch {}
447
+ } catch { }
448
448
 
449
449
  try {
450
450
  const serializer = getLendingAccountWithdrawInstructionDataSerializer();
@@ -466,16 +466,16 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
466
466
  fields: [
467
467
  data.withdrawAll
468
468
  ? {
469
- __kind: "All",
470
- }
469
+ __kind: "All",
470
+ }
471
471
  : {
472
- __kind: "Some",
473
- fields: [data.amount],
474
- },
472
+ __kind: "Some",
473
+ fields: [data.amount],
474
+ },
475
475
  ],
476
476
  });
477
477
  }
478
- } catch {}
478
+ } catch { }
479
479
 
480
480
  try {
481
481
  const serializer = getLendingAccountRepayInstructionDataSerializer();
@@ -497,16 +497,16 @@ function getSolautoActions(tx: TransactionBuilder): SolautoAction[] {
497
497
  fields: [
498
498
  data.repayAll
499
499
  ? {
500
- __kind: "All",
501
- }
500
+ __kind: "All",
501
+ }
502
502
  : {
503
- __kind: "Some",
504
- fields: [data.amount],
505
- },
503
+ __kind: "Some",
504
+ fields: [data.amount],
505
+ },
506
506
  ],
507
507
  });
508
508
  }
509
- } catch {}
509
+ } catch { }
510
510
  }
511
511
 
512
512
  // TODO support other platforms
@@ -554,9 +554,9 @@ export async function buildSolautoRebalanceTransaction(
554
554
  attemptNum?: number
555
555
  ): Promise<
556
556
  | {
557
- tx: TransactionBuilder;
558
- lookupTableAddresses: string[];
559
- }
557
+ tx: TransactionBuilder;
558
+ lookupTableAddresses: string[];
559
+ }
560
560
  | undefined
561
561
  > {
562
562
  client.solautoPositionState = await client.getFreshPositionState();
@@ -566,9 +566,9 @@ export async function buildSolautoRebalanceTransaction(
566
566
  !eligibleForRebalance(
567
567
  client.solautoPositionState!,
568
568
  client.livePositionUpdates.settings ??
569
- client.solautoPositionData?.position.settingParams!,
569
+ client.solautoPositionData?.position.settingParams!,
570
570
  client.livePositionUpdates.activeDca ??
571
- client.solautoPositionData?.position.dca!,
571
+ client.solautoPositionData?.position.dca!,
572
572
  currentUnixSeconds()
573
573
  ))
574
574
  ) {
@@ -624,14 +624,14 @@ export async function buildSolautoRebalanceTransaction(
624
624
  ),
625
625
  ...(addFirstRebalance
626
626
  ? [
627
- client.rebalance(
628
- "A",
629
- swapDetails,
630
- rebalanceType,
631
- flashLoan,
632
- targetLiqUtilizationRateBps
633
- ),
634
- ]
627
+ client.rebalance(
628
+ "A",
629
+ swapDetails,
630
+ rebalanceType,
631
+ flashLoan,
632
+ targetLiqUtilizationRateBps
633
+ ),
634
+ ]
635
635
  : []),
636
636
  swapIx,
637
637
  client.rebalance(
@@ -1,7 +1,6 @@
1
1
  import bs58 from "bs58";
2
2
  import {
3
3
  AddressLookupTableInput,
4
- Instruction,
5
4
  transactionBuilder,
6
5
  TransactionBuilder,
7
6
  } from "@metaplex-foundation/umi";
@@ -15,7 +14,6 @@ import {
15
14
  retryWithExponentialBackoff,
16
15
  } from "../utils/generalUtils";
17
16
  import { getTransactionChores } from "./transactionUtils";
18
- import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
19
17
  import { PriorityFeeSetting } from "../types";
20
18
  // import { sendJitoBundledTransactions } from "../utils/jitoUtils";
21
19
 
@@ -213,12 +211,8 @@ export class TransactionsManager {
213
211
  await this.lookupTables.getLutInputs(item.lookupTableAddresses)
214
212
  );
215
213
  if (!transaction.fitsInOneTransaction(this.client.umi)) {
216
- // TODO: revert me
217
- // throw new Error(
218
- // `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
219
- // );
220
- transactionSets.push(
221
- new TransactionSet(this.client, this.lookupTables, [item])
214
+ throw new Error(
215
+ `Transaction exceeds max transaction size (${transaction.getTransactionSize(this.client.umi)})`
222
216
  );
223
217
  } else {
224
218
  let newSet = new TransactionSet(this.client, this.lookupTables, [item]);
@@ -26,11 +26,11 @@ export function getTokenAccounts(wallet: PublicKey, tokenMints: PublicKey[]): Pu
26
26
  return tokenMints.map(x => getTokenAccount(wallet, x));
27
27
  }
28
28
 
29
- export async function getSolautoPositionAccount(
29
+ export function getSolautoPositionAccount(
30
30
  signer: PublicKey,
31
31
  positionId: number
32
32
  ) {
33
- const [positionAccount, _] = await PublicKey.findProgramAddress(
33
+ const [positionAccount, _] = PublicKey.findProgramAddressSync(
34
34
  [bufferFromU8(positionId), signer.toBuffer()],
35
35
  new PublicKey(SOLAUTO_PROGRAM_ID)
36
36
  );
@@ -38,11 +38,11 @@ export async function getSolautoPositionAccount(
38
38
  return positionAccount;
39
39
  }
40
40
 
41
- export async function getReferralState(authority: PublicKey) {
41
+ export function getReferralState(authority: PublicKey) {
42
42
  const str = "referral_state";
43
43
  const strBuffer = Buffer.from(str, "utf-8");
44
44
 
45
- const [ReferralState, _] = await PublicKey.findProgramAddress(
45
+ const [ReferralState, _] = PublicKey.findProgramAddressSync(
46
46
  [strBuffer, authority.toBuffer()],
47
47
  new PublicKey(SOLAUTO_PROGRAM_ID)
48
48
  );
@@ -250,7 +250,7 @@ export async function getReferralsByUser(
250
250
  // authority: Pubkey,
251
251
  // referred_by_state: Pubkey,
252
252
 
253
- const userReferralState = await getReferralState(user);
253
+ const userReferralState = getReferralState(user);
254
254
  const accounts = await umi.rpc.getProgramAccounts(SOLAUTO_PROGRAM_ID, {
255
255
  commitment: "finalized",
256
256
  dataSlice: {