@haven-fi/solauto-sdk 1.0.67 → 1.0.69

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,7 +7,7 @@
7
7
  */
8
8
  import { Account, Context, Pda, PublicKey, RpcAccount, RpcGetAccountOptions, RpcGetAccountsOptions } from '@metaplex-foundation/umi';
9
9
  import { Serializer } from '@metaplex-foundation/umi/serializers';
10
- import { FeeType, FeeTypeArgs, PodBool, PodBoolArgs, PositionData, PositionDataArgs, PositionState, PositionStateArgs, RebalanceData, RebalanceDataArgs } from '../types';
10
+ import { PodBool, PodBoolArgs, PositionData, PositionDataArgs, PositionState, PositionStateArgs, RebalanceData, RebalanceDataArgs } from '../types';
11
11
  export type SolautoPosition = Account<SolautoPositionAccountData>;
12
12
  export type SolautoPositionAccountData = {
13
13
  bump: Array<number>;
@@ -18,8 +18,6 @@ export type SolautoPositionAccountData = {
18
18
  position: PositionData;
19
19
  state: PositionState;
20
20
  rebalance: RebalanceData;
21
- feeType: FeeType;
22
- padding2: Array<number>;
23
21
  padding: Array<number>;
24
22
  };
25
23
  export type SolautoPositionAccountDataArgs = {
@@ -31,8 +29,6 @@ export type SolautoPositionAccountDataArgs = {
31
29
  position: PositionDataArgs;
32
30
  state: PositionStateArgs;
33
31
  rebalance: RebalanceDataArgs;
34
- feeType: FeeTypeArgs;
35
- padding2: Array<number>;
36
32
  padding: Array<number>;
37
33
  };
38
34
  export declare function getSolautoPositionAccountDataSerializer(): Serializer<SolautoPositionAccountDataArgs, SolautoPositionAccountData>;
@@ -50,8 +46,6 @@ export declare function getSolautoPositionGpaBuilder(context: Pick<Context, 'rpc
50
46
  position: PositionDataArgs;
51
47
  state: PositionStateArgs;
52
48
  rebalance: RebalanceDataArgs;
53
- feeType: FeeTypeArgs;
54
- padding2: Array<number>;
55
49
  padding: Array<number>;
56
50
  }>;
57
51
  export declare function getSolautoPositionSize(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"solautoPosition.d.ts","sourceRoot":"","sources":["../../../src/generated/accounts/solautoPosition.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solautoPosition.d.ts","sourceRoot":"","sources":["../../../src/generated/accounts/solautoPosition.ts"],"names":[],"mappings":"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"}
@@ -28,9 +28,7 @@ function getSolautoPositionAccountDataSerializer() {
28
28
  ['position', (0, types_1.getPositionDataSerializer)()],
29
29
  ['state', (0, types_1.getPositionStateSerializer)()],
30
30
  ['rebalance', (0, types_1.getRebalanceDataSerializer)()],
31
- ['feeType', (0, types_1.getFeeTypeSerializer)()],
32
- ['padding2', (0, serializers_1.array)((0, serializers_1.u8)(), { size: 7 })],
33
- ['padding', (0, serializers_1.array)((0, serializers_1.u32)(), { size: 30 })],
31
+ ['padding', (0, serializers_1.array)((0, serializers_1.u32)(), { size: 32 })],
34
32
  ], { description: 'SolautoPositionAccountData' });
35
33
  }
36
34
  function deserializeSolautoPosition(rawAccount) {
@@ -70,9 +68,7 @@ function getSolautoPositionGpaBuilder(context) {
70
68
  position: [40, (0, types_1.getPositionDataSerializer)()],
71
69
  state: [360, (0, types_1.getPositionStateSerializer)()],
72
70
  rebalance: [648, (0, types_1.getRebalanceDataSerializer)()],
73
- feeType: [704, (0, types_1.getFeeTypeSerializer)()],
74
- padding2: [705, (0, serializers_1.array)((0, serializers_1.u8)(), { size: 7 })],
75
- padding: [712, (0, serializers_1.array)((0, serializers_1.u32)(), { size: 30 })],
71
+ padding: [704, (0, serializers_1.array)((0, serializers_1.u32)(), { size: 32 })],
76
72
  })
77
73
  .deserializeUsing((account) => deserializeSolautoPosition(account));
78
74
  }
@@ -9,7 +9,6 @@ export * from './automationSettings';
9
9
  export * from './automationSettingsInp';
10
10
  export * from './dCASettings';
11
11
  export * from './dCASettingsInp';
12
- export * from './feeType';
13
12
  export * from './lendingPlatform';
14
13
  export * from './podBool';
15
14
  export * from './positionData';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generated/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generated/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC"}
@@ -25,7 +25,6 @@ __exportStar(require("./automationSettings"), exports);
25
25
  __exportStar(require("./automationSettingsInp"), exports);
26
26
  __exportStar(require("./dCASettings"), exports);
27
27
  __exportStar(require("./dCASettingsInp"), exports);
28
- __exportStar(require("./feeType"), exports);
29
28
  __exportStar(require("./lendingPlatform"), exports);
30
29
  __exportStar(require("./podBool"), exports);
31
30
  __exportStar(require("./positionData"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAGL,OAAO,IAAI,eAAe,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,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,CA0HA;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;IACE,EAAE,EAAE,kBAAkB,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC,GACD,SAAS,CACZ,CA0HA;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"}
@@ -329,7 +329,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
329
329
  client.log("Not eligible for a rebalance");
330
330
  return undefined;
331
331
  }
332
- const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), client.solautoPositionData?.feeType ?? generated_1.FeeType.Small, (0, generalUtils_1.currentUnixSeconds)(), constants_1.PRICES[client.supplyMint.toString()].price, constants_1.PRICES[client.debtMint.toString()].price, targetLiqUtilizationRateBps);
332
+ const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), constants_1.PRICES[client.supplyMint.toString()].price, constants_1.PRICES[client.debtMint.toString()].price, targetLiqUtilizationRateBps);
333
333
  client.log("Rebalance values: ", values);
334
334
  const swapDetails = (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, targetLiqUtilizationRateBps, attemptNum);
335
335
  const { jupQuote, lookupTableAddresses, setupInstructions, tokenLedgerIx, swapIx, } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
@@ -366,7 +366,7 @@ async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRate
366
366
  ]);
367
367
  }
368
368
  if (client.solautoPositionState.liqUtilizationRateBps >
369
- (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps)) {
369
+ (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.01)) {
370
370
  tx = tx.prepend(client.refresh());
371
371
  }
372
372
  return {
@@ -6,7 +6,13 @@ export declare function toBps(value: number): number;
6
6
  export declare function bytesToI80F48(bytes: number[]): number;
7
7
  export declare function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint;
8
8
  export declare function getDebtAdjustmentUsd(liqThresholdBps: number, supplyUsd: number, debtUsd: number, targetLiqUtilizationRateBps: number, adjustmentFeeBps?: number): number;
9
- export declare function getMaxLiqUtilizationRateBps(maxLtvBps: number, liqThresholdBps: number): number;
9
+ export declare function getSolautoFeesBps(isReferred: boolean, selfManaged: boolean, positionNetWorthUsd: number): {
10
+ solauto: number;
11
+ referrer: number;
12
+ total: number;
13
+ };
14
+ export declare function getMaxLiqUtilizationRateBps(maxLtvBps: number, liqThresholdBps: number, offsetFromMaxLtv: number): number;
15
+ export declare function maxBoostToBps(maxLtvBps: number, liqThresholdBps: number): number;
10
16
  export declare function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number): number;
11
17
  export declare function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number): number;
12
18
  //# sourceMappingURL=numberUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAEA,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAM3G;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEhE;AAEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAajE;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,2BAA2B,EAAE,MAAM,EACnC,gBAAgB,CAAC,EAAE,MAAM,UAQ1B;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,MAAM,CAER;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKzE;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":"AAEA,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,CAElE;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,oBAAoB,CAClC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,2BAA2B,EAAE,MAAM,EACnC,gBAAgB,CAAC,EAAE,MAAM,UAW1B;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,OAAO,EACnB,WAAW,EAAE,OAAO,EACpB,mBAAmB,EAAE,MAAM,GAC1B;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CA8BA;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAER;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAEvE;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
@@ -8,7 +8,9 @@ exports.toBps = toBps;
8
8
  exports.bytesToI80F48 = bytesToI80F48;
9
9
  exports.uint8ArrayToBigInt = uint8ArrayToBigInt;
10
10
  exports.getDebtAdjustmentUsd = getDebtAdjustmentUsd;
11
+ exports.getSolautoFeesBps = getSolautoFeesBps;
11
12
  exports.getMaxLiqUtilizationRateBps = getMaxLiqUtilizationRateBps;
13
+ exports.maxBoostToBps = maxBoostToBps;
12
14
  exports.maxRepayFromBps = maxRepayFromBps;
13
15
  exports.maxRepayToBps = maxRepayToBps;
14
16
  const constants_1 = require("../constants");
@@ -32,7 +34,7 @@ function toBps(value) {
32
34
  }
33
35
  function bytesToI80F48(bytes) {
34
36
  if (bytes.length !== 16) {
35
- throw new Error('Byte array must be exactly 16 bytes.');
37
+ throw new Error("Byte array must be exactly 16 bytes.");
36
38
  }
37
39
  const reversedBytes = bytes.slice().reverse();
38
40
  let integerPart = BigInt(0);
@@ -44,31 +46,65 @@ function bytesToI80F48(bytes) {
44
46
  fractionalPart = (fractionalPart << 8n) | BigInt(reversedBytes[i]);
45
47
  }
46
48
  const fullValue = integerPart * BigInt(2 ** 48) + fractionalPart;
47
- return Number(fullValue) / (2 ** 48);
49
+ return Number(fullValue) / 2 ** 48;
48
50
  }
49
51
  function uint8ArrayToBigInt(uint8Array) {
50
52
  if (uint8Array.length !== 8) {
51
- throw new Error('Uint8Array must be exactly 8 bytes long to convert to u64.');
53
+ throw new Error("Uint8Array must be exactly 8 bytes long to convert to u64.");
52
54
  }
53
55
  const buffer = uint8Array.buffer;
54
56
  const dataView = new DataView(buffer);
55
57
  const low = dataView.getUint32(0, true);
56
58
  const high = dataView.getUint32(4, true);
57
- return BigInt(high) << 32n | BigInt(low);
59
+ return (BigInt(high) << 32n) | BigInt(low);
58
60
  }
59
61
  function getDebtAdjustmentUsd(liqThresholdBps, supplyUsd, debtUsd, targetLiqUtilizationRateBps, adjustmentFeeBps) {
60
62
  const adjustmentFee = adjustmentFeeBps && adjustmentFeeBps > 0 ? fromBps(adjustmentFeeBps) : 0;
61
63
  const liqThreshold = fromBps(liqThresholdBps);
62
64
  const targetLiqUtilizationRate = fromBps(targetLiqUtilizationRateBps);
63
- const debtAdjustmentUsd = (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) / (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
65
+ const debtAdjustmentUsd = (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) /
66
+ (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
64
67
  return debtAdjustmentUsd;
65
68
  }
66
- function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps) {
67
- return toBps((fromBps(maxLtvBps) - 0.015) / fromBps(liqThresholdBps)) - 1; // -1 to account for any rounding issues
69
+ function getSolautoFeesBps(isReferred, selfManaged, positionNetWorthUsd) {
70
+ const minSize = 10000; // Minimum position size
71
+ const maxSize = 1000000; // Maximum position size
72
+ const maxFeeBps = 500; // Fee in basis points for minSize (5%)
73
+ const minFeeBps = 100; // Fee in basis points for maxSize (1%)
74
+ let feeBps = 0;
75
+ if (selfManaged) {
76
+ feeBps = 100;
77
+ }
78
+ else if (positionNetWorthUsd <= minSize) {
79
+ feeBps = maxFeeBps;
80
+ }
81
+ else if (positionNetWorthUsd >= maxSize) {
82
+ feeBps = minFeeBps;
83
+ }
84
+ else {
85
+ const t = (Math.log(positionNetWorthUsd) - Math.log(minSize)) /
86
+ (Math.log(maxSize) - Math.log(minSize));
87
+ feeBps = Math.round(minFeeBps + (maxFeeBps - minFeeBps) * (1 - t));
88
+ }
89
+ let referrer = 0;
90
+ if (isReferred) {
91
+ referrer = Math.floor(feeBps / 4);
92
+ }
93
+ return {
94
+ solauto: feeBps - referrer,
95
+ referrer,
96
+ total: feeBps,
97
+ };
98
+ }
99
+ function getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, offsetFromMaxLtv) {
100
+ return toBps((fromBps(maxLtvBps) - offsetFromMaxLtv) / fromBps(liqThresholdBps)) - 1; // -1 to account for any rounding issues
101
+ }
102
+ function maxBoostToBps(maxLtvBps, liqThresholdBps) {
103
+ return getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.015);
68
104
  }
69
105
  function maxRepayFromBps(maxLtvBps, liqThresholdBps) {
70
- return Math.min(9000, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000));
106
+ return Math.min(9000, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.005));
71
107
  }
72
108
  function maxRepayToBps(maxLtvBps, liqThresholdBps) {
73
- return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MAX_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps));
109
+ return Math.min(maxRepayFromBps(maxLtvBps, liqThresholdBps) - constants_1.MAX_REPAY_GAP_BPS, getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.005));
74
110
  }
@@ -1,17 +1,12 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { Umi } from "@metaplex-foundation/umi";
3
- import { AutomationSettings, DCASettings, DCASettingsInpArgs, FeeType, PositionState, SolautoSettingsParameters, SolautoSettingsParametersInpArgs } from "../../generated";
3
+ import { AutomationSettings, DCASettings, DCASettingsInpArgs, PositionState, SolautoSettingsParameters, SolautoSettingsParametersInpArgs } from "../../generated";
4
4
  import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
5
5
  export declare function nextAutomationPeriodTimestamp(automation: AutomationSettings): number;
6
6
  export declare function eligibleForNextAutomationPeriod(automation: AutomationSettings, currentUnixTime: number): boolean;
7
7
  export declare function getUpdatedValueFromAutomation(currValue: number, targetValue: number, automation: AutomationSettings, currentUnixTimestamp: number): number;
8
8
  export declare function getAdjustedSettingsFromAutomation(settings: SolautoSettingsParameters, currentUnixTime: number): SolautoSettingsParameters;
9
- export declare function getSolautoFeesBps(isReferred: boolean, feeType: FeeType): {
10
- solauto: number;
11
- referrer: number;
12
- total: number;
13
- };
14
- export declare function eligibleForRebalance(positionState: PositionState, positionSettings: SolautoSettingsParameters, positionDca: DCASettings | undefined, currentUnixSecs: number): RebalanceAction | undefined;
9
+ export declare function eligibleForRebalance(positionState: PositionState, positionSettings: SolautoSettingsParameters, positionDca: DCASettings | undefined, currentUnixTime: number): RebalanceAction | undefined;
15
10
  export declare function eligibleForRefresh(positionState: PositionState, positionSettings: SolautoSettingsParameters, currentUnixTime: number): boolean;
16
11
  export declare function getSolautoManagedPositions(umi: Umi, authority?: PublicKey): Promise<SolautoPositionDetails[]>;
17
12
  export declare function getAllReferralStates(umi: Umi): Promise<PublicKey[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,6 @@ exports.nextAutomationPeriodTimestamp = nextAutomationPeriodTimestamp;
5
5
  exports.eligibleForNextAutomationPeriod = eligibleForNextAutomationPeriod;
6
6
  exports.getUpdatedValueFromAutomation = getUpdatedValueFromAutomation;
7
7
  exports.getAdjustedSettingsFromAutomation = getAdjustedSettingsFromAutomation;
8
- exports.getSolautoFeesBps = getSolautoFeesBps;
9
8
  exports.eligibleForRebalance = eligibleForRebalance;
10
9
  exports.eligibleForRefresh = eligibleForRefresh;
11
10
  exports.getSolautoManagedPositions = getSolautoManagedPositions;
@@ -55,37 +54,25 @@ function getAdjustedSettingsFromAutomation(settings, currentUnixTime) {
55
54
  boostToBps,
56
55
  };
57
56
  }
58
- function getSolautoFeesBps(isReferred, feeType) {
59
- const fees = feeType === generated_1.FeeType.Small ? 100 : 500;
60
- let referrer = 0;
61
- if (isReferred) {
62
- referrer = fees / 4;
63
- }
64
- return {
65
- solauto: fees - referrer,
66
- referrer,
67
- total: fees,
68
- };
69
- }
70
- function eligibleForRebalance(positionState, positionSettings, positionDca, currentUnixSecs) {
57
+ function eligibleForRebalance(positionState, positionSettings, positionDca, currentUnixTime) {
71
58
  if (positionDca &&
72
59
  positionDca.automation.targetPeriods > 0 &&
73
- eligibleForNextAutomationPeriod(positionDca.automation, currentUnixSecs)) {
60
+ eligibleForNextAutomationPeriod(positionDca.automation, currentUnixTime)) {
74
61
  return "dca";
75
62
  }
76
63
  if (positionState.supply.amountUsed.baseUnit === BigInt(0)) {
77
64
  return undefined;
78
65
  }
79
- const boostToBps = eligibleForRefresh(positionState, positionSettings, currentUnixSecs) &&
66
+ const boostToBps = eligibleForRefresh(positionState, positionSettings, currentUnixTime) &&
80
67
  positionSettings.automation.targetPeriods > 0
81
- ? getUpdatedValueFromAutomation(positionSettings.boostToBps, positionSettings.targetBoostToBps, positionSettings.automation, currentUnixSecs)
68
+ ? getUpdatedValueFromAutomation(positionSettings.boostToBps, positionSettings.targetBoostToBps, positionSettings.automation, currentUnixTime)
82
69
  : positionSettings.boostToBps;
83
70
  const repayFrom = positionSettings.repayToBps + positionSettings.repayGap;
84
71
  const boostFrom = boostToBps - positionSettings.boostGap;
85
- if (positionState.liqUtilizationRateBps <= boostFrom) {
72
+ if (positionState.liqUtilizationRateBps < boostFrom) {
86
73
  return "boost";
87
74
  }
88
- else if (positionState.liqUtilizationRateBps >= repayFrom) {
75
+ else if (positionState.liqUtilizationRateBps > repayFrom) {
89
76
  return "repay";
90
77
  }
91
78
  return undefined;
@@ -1,6 +1,6 @@
1
1
  import { PublicKey } from "@solana/web3.js";
2
2
  import { SolautoClient } from "../../clients/solautoClient";
3
- import { DCASettings, FeeType, PositionState, SolautoSettingsParameters } from "../../generated";
3
+ import { DCASettings, PositionState, SolautoSettingsParameters } from "../../generated";
4
4
  import { QuoteResponse } from "@jup-ag/api";
5
5
  import { JupSwapDetails } from "../jupiterUtils";
6
6
  export interface RebalanceValues {
@@ -9,7 +9,7 @@ export interface RebalanceValues {
9
9
  amountToDcaIn: number;
10
10
  amountUsdToDcaIn: number;
11
11
  }
12
- export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, feeType: FeeType, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number, limitGapBps?: number): RebalanceValues;
12
+ export declare function getRebalanceValues(state: PositionState, settings: SolautoSettingsParameters | undefined, dca: DCASettings | undefined, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number, limitGapBps?: number): RebalanceValues;
13
13
  export interface FlashLoanDetails {
14
14
  baseUnitAmount: bigint;
15
15
  mint: PublicKey;
@@ -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,OAAO,EACP,aAAa,EAEb,yBAAyB,EAC1B,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAiJjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,yBAAyB,GAAG,SAAS,EAC/C,GAAG,EAAE,WAAW,GAAG,SAAS,EAC5B,OAAO,EAAE,OAAO,EAChB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,2BAA2B,CAAC,EAAE,MAAM,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CAsEjB;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,CAkE9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAkChB"}
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,EAC1B,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAkJjD,MAAM,WAAW,eAAe;IAC9B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,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,EACpC,WAAW,CAAC,EAAE,MAAM,GACnB,eAAe,CA0EjB;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,CAmE9B;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,cAAc,CAkChB"}
@@ -19,8 +19,8 @@ function getAdditionalAmountToDcaIn(dca) {
19
19
  }
20
20
  function getStandardTargetLiqUtilizationRateBps(state, settings) {
21
21
  const adjustedSettings = (0, generalUtils_1.getAdjustedSettingsFromAutomation)(settings, (0, generalUtils_2.currentUnixSeconds)());
22
- const repayFrom = adjustedSettings.repayToBps + adjustedSettings.repayGap;
23
- const boostFrom = adjustedSettings.boostToBps - adjustedSettings.boostGap;
22
+ const repayFrom = settings.repayToBps + settings.repayGap;
23
+ const boostFrom = adjustedSettings.boostToBps - settings.boostGap;
24
24
  if (state.liqUtilizationRateBps < boostFrom) {
25
25
  return adjustedSettings.boostToBps;
26
26
  }
@@ -63,7 +63,7 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
63
63
  };
64
64
  }
65
65
  if (settings === undefined) {
66
- throw new Error("If rebalancing a self-managed position, settings, and DCA should be provided");
66
+ throw new Error("If rebalancing a self-managed position, settings and DCA should be provided");
67
67
  }
68
68
  if (isDcaRebalance(state, settings, dca, currentUnixTime)) {
69
69
  const amountToDcaIn = getAdditionalAmountToDcaIn(dca);
@@ -79,7 +79,7 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
79
79
  };
80
80
  }
81
81
  }
82
- function getRebalanceValues(state, settings, dca, feeType, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps, limitGapBps) {
82
+ function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps, limitGapBps) {
83
83
  if (state === undefined ||
84
84
  state.lastUpdated <
85
85
  BigInt(Math.round((0, generalUtils_2.currentUnixSeconds)() - solautoConstants_1.MIN_POSITION_STATE_FRESHNESS_SECS))) {
@@ -91,7 +91,7 @@ function getRebalanceValues(state, settings, dca, feeType, currentUnixTime, supp
91
91
  const increasingLeverage = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps < targetRateBps;
92
92
  let adjustmentFeeBps = 0;
93
93
  if (increasingLeverage) {
94
- adjustmentFeeBps = (0, generalUtils_1.getSolautoFeesBps)(false, feeType).total;
94
+ adjustmentFeeBps = (0, numberUtils_1.getSolautoFeesBps)(false, settings === undefined, (0, numberUtils_1.fromBaseUnit)(state.netWorth.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS)).total;
95
95
  }
96
96
  const supplyUsd = (0, numberUtils_1.fromBaseUnit)(state.supply.amountUsed.baseAmountUsdValue, generalAccounts_1.USD_DECIMALS) +
97
97
  amountUsdToDcaIn;
@@ -133,7 +133,7 @@ function getFlashLoanDetails(client, values, jupQuote) {
133
133
  const tempLiqUtilizationRateBps = (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, client.solautoPositionState.liqThresholdBps);
134
134
  const requiresFlashLoan = supplyUsd <= 0 ||
135
135
  tempLiqUtilizationRateBps >
136
- (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps);
136
+ (0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.01);
137
137
  let flashLoanToken = undefined;
138
138
  let flashLoanTokenPrice = 0;
139
139
  if (values.increasingLeverage) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.67",
3
+ "version": "1.0.69",
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",
@@ -28,8 +28,6 @@ import {
28
28
  u8,
29
29
  } from '@metaplex-foundation/umi/serializers';
30
30
  import {
31
- FeeType,
32
- FeeTypeArgs,
33
31
  PodBool,
34
32
  PodBoolArgs,
35
33
  PositionData,
@@ -38,7 +36,6 @@ import {
38
36
  PositionStateArgs,
39
37
  RebalanceData,
40
38
  RebalanceDataArgs,
41
- getFeeTypeSerializer,
42
39
  getPodBoolSerializer,
43
40
  getPositionDataSerializer,
44
41
  getPositionStateSerializer,
@@ -56,8 +53,6 @@ export type SolautoPositionAccountData = {
56
53
  position: PositionData;
57
54
  state: PositionState;
58
55
  rebalance: RebalanceData;
59
- feeType: FeeType;
60
- padding2: Array<number>;
61
56
  padding: Array<number>;
62
57
  };
63
58
 
@@ -70,8 +65,6 @@ export type SolautoPositionAccountDataArgs = {
70
65
  position: PositionDataArgs;
71
66
  state: PositionStateArgs;
72
67
  rebalance: RebalanceDataArgs;
73
- feeType: FeeTypeArgs;
74
- padding2: Array<number>;
75
68
  padding: Array<number>;
76
69
  };
77
70
 
@@ -89,9 +82,7 @@ export function getSolautoPositionAccountDataSerializer(): Serializer<
89
82
  ['position', getPositionDataSerializer()],
90
83
  ['state', getPositionStateSerializer()],
91
84
  ['rebalance', getRebalanceDataSerializer()],
92
- ['feeType', getFeeTypeSerializer()],
93
- ['padding2', array(u8(), { size: 7 })],
94
- ['padding', array(u32(), { size: 30 })],
85
+ ['padding', array(u32(), { size: 32 })],
95
86
  ],
96
87
  { description: 'SolautoPositionAccountData' }
97
88
  ) as Serializer<SolautoPositionAccountDataArgs, SolautoPositionAccountData>;
@@ -179,8 +170,6 @@ export function getSolautoPositionGpaBuilder(
179
170
  position: PositionDataArgs;
180
171
  state: PositionStateArgs;
181
172
  rebalance: RebalanceDataArgs;
182
- feeType: FeeTypeArgs;
183
- padding2: Array<number>;
184
173
  padding: Array<number>;
185
174
  }>({
186
175
  bump: [0, array(u8(), { size: 1 })],
@@ -191,9 +180,7 @@ export function getSolautoPositionGpaBuilder(
191
180
  position: [40, getPositionDataSerializer()],
192
181
  state: [360, getPositionStateSerializer()],
193
182
  rebalance: [648, getRebalanceDataSerializer()],
194
- feeType: [704, getFeeTypeSerializer()],
195
- padding2: [705, array(u8(), { size: 7 })],
196
- padding: [712, array(u32(), { size: 30 })],
183
+ padding: [704, array(u32(), { size: 32 })],
197
184
  })
198
185
  .deserializeUsing<SolautoPosition>((account) =>
199
186
  deserializeSolautoPosition(account)
@@ -10,7 +10,6 @@ export * from './automationSettings';
10
10
  export * from './automationSettingsInp';
11
11
  export * from './dCASettings';
12
12
  export * from './dCASettingsInp';
13
- export * from './feeType';
14
13
  export * from './lendingPlatform';
15
14
  export * from './podBool';
16
15
  export * from './positionData';
@@ -1,6 +1,5 @@
1
1
  import {
2
2
  Instruction,
3
- Signer,
4
3
  TransactionBuilder,
5
4
  Umi,
6
5
  publicKey,
@@ -14,7 +13,6 @@ import {
14
13
  Account as SplTokenAccount,
15
14
  } from "@solana/spl-token";
16
15
  import {
17
- FeeType,
18
16
  LendingPlatform,
19
17
  ReferralState,
20
18
  SOLAUTO_PROGRAM_ID,
@@ -582,7 +580,6 @@ export async function buildSolautoRebalanceTransaction(
582
580
  client.solautoPositionState!,
583
581
  client.solautoPositionSettings(),
584
582
  client.solautoPositionActiveDca(),
585
- client.solautoPositionData?.feeType ?? FeeType.Small,
586
583
  currentUnixSeconds(),
587
584
  PRICES[client.supplyMint.toString()].price,
588
585
  PRICES[client.debtMint.toString()].price,
@@ -672,7 +669,8 @@ export async function buildSolautoRebalanceTransaction(
672
669
  client.solautoPositionState!.liqUtilizationRateBps >
673
670
  getMaxLiqUtilizationRateBps(
674
671
  client.solautoPositionState!.maxLtvBps,
675
- client.solautoPositionState!.liqThresholdBps
672
+ client.solautoPositionState!.liqThresholdBps,
673
+ 0.01
676
674
  )
677
675
  ) {
678
676
  tx = tx.prepend(client.refresh());
@@ -1,17 +1,21 @@
1
1
  import { MAX_REPAY_GAP_BPS } from "../constants";
2
2
 
3
- export function getLiqUtilzationRateBps(supplyUsd: number, debtUsd: number, liqThresholdBps: number): number {
3
+ export function getLiqUtilzationRateBps(
4
+ supplyUsd: number,
5
+ debtUsd: number,
6
+ liqThresholdBps: number
7
+ ): number {
4
8
  if (supplyUsd === 0) {
5
9
  return 0;
6
10
  }
7
-
11
+
8
12
  return toBps(debtUsd / (supplyUsd * fromBps(liqThresholdBps)));
9
13
  }
10
14
 
11
15
  export function toBaseUnit(value: number, decimals: number): bigint {
12
- return BigInt(Math.round(value * Math.pow(10, decimals)));
13
- }
14
-
16
+ return BigInt(Math.round(value * Math.pow(10, decimals)));
17
+ }
18
+
15
19
  export function fromBaseUnit(value: bigint, decimals: number): number {
16
20
  return Number(value) / Math.pow(10, decimals);
17
21
  }
@@ -26,7 +30,7 @@ export function toBps(value: number): number {
26
30
 
27
31
  export function bytesToI80F48(bytes: number[]): number {
28
32
  if (bytes.length !== 16) {
29
- throw new Error('Byte array must be exactly 16 bytes.');
33
+ throw new Error("Byte array must be exactly 16 bytes.");
30
34
  }
31
35
 
32
36
  const reversedBytes = bytes.slice().reverse();
@@ -44,12 +48,14 @@ export function bytesToI80F48(bytes: number[]): number {
44
48
 
45
49
  const fullValue = integerPart * BigInt(2 ** 48) + fractionalPart;
46
50
 
47
- return Number(fullValue) / (2 ** 48);
51
+ return Number(fullValue) / 2 ** 48;
48
52
  }
49
53
 
50
54
  export function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint {
51
55
  if (uint8Array.length !== 8) {
52
- throw new Error('Uint8Array must be exactly 8 bytes long to convert to u64.');
56
+ throw new Error(
57
+ "Uint8Array must be exactly 8 bytes long to convert to u64."
58
+ );
53
59
  }
54
60
 
55
61
  const buffer = uint8Array.buffer;
@@ -59,7 +65,7 @@ export function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint {
59
65
  const low = dataView.getUint32(0, true);
60
66
  const high = dataView.getUint32(4, true);
61
67
 
62
- return BigInt(high) << 32n | BigInt(low);
68
+ return (BigInt(high) << 32n) | BigInt(low);
63
69
  }
64
70
 
65
71
  export function getDebtAdjustmentUsd(
@@ -69,31 +75,79 @@ export function getDebtAdjustmentUsd(
69
75
  targetLiqUtilizationRateBps: number,
70
76
  adjustmentFeeBps?: number
71
77
  ) {
72
- const adjustmentFee = adjustmentFeeBps && adjustmentFeeBps > 0 ? fromBps(adjustmentFeeBps) : 0;
78
+ const adjustmentFee =
79
+ adjustmentFeeBps && adjustmentFeeBps > 0 ? fromBps(adjustmentFeeBps) : 0;
73
80
  const liqThreshold = fromBps(liqThresholdBps);
74
81
  const targetLiqUtilizationRate = fromBps(targetLiqUtilizationRateBps);
75
82
 
76
- const debtAdjustmentUsd = (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) / (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
83
+ const debtAdjustmentUsd =
84
+ (targetLiqUtilizationRate * supplyUsd * liqThreshold - debtUsd) /
85
+ (1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
77
86
  return debtAdjustmentUsd;
78
87
  }
79
88
 
89
+ export function getSolautoFeesBps(
90
+ isReferred: boolean,
91
+ selfManaged: boolean,
92
+ positionNetWorthUsd: number
93
+ ): {
94
+ solauto: number;
95
+ referrer: number;
96
+ total: number;
97
+ } {
98
+ const minSize = 10000; // Minimum position size
99
+ const maxSize = 1000000; // Maximum position size
100
+ const maxFeeBps = 500; // Fee in basis points for minSize (5%)
101
+ const minFeeBps = 100; // Fee in basis points for maxSize (1%)
102
+
103
+ let feeBps: number = 0;
104
+ if (selfManaged) {
105
+ feeBps = 100;
106
+ } else if (positionNetWorthUsd <= minSize) {
107
+ feeBps = maxFeeBps;
108
+ } else if (positionNetWorthUsd >= maxSize) {
109
+ feeBps = minFeeBps;
110
+ } else {
111
+ const t =
112
+ (Math.log(positionNetWorthUsd) - Math.log(minSize)) /
113
+ (Math.log(maxSize) - Math.log(minSize));
114
+ feeBps = Math.round(minFeeBps + (maxFeeBps - minFeeBps) * (1 - t));
115
+ }
116
+
117
+ let referrer = 0;
118
+ if (isReferred) {
119
+ referrer = Math.floor(feeBps / 4);
120
+ }
121
+
122
+ return {
123
+ solauto: feeBps - referrer,
124
+ referrer,
125
+ total: feeBps,
126
+ };
127
+ }
128
+
80
129
  export function getMaxLiqUtilizationRateBps(
81
130
  maxLtvBps: number,
82
- liqThresholdBps: number
131
+ liqThresholdBps: number,
132
+ offsetFromMaxLtv: number
83
133
  ): number {
84
- return toBps((fromBps(maxLtvBps) - 0.015) / fromBps(liqThresholdBps)) - 1; // -1 to account for any rounding issues
134
+ return toBps((fromBps(maxLtvBps) - offsetFromMaxLtv) / fromBps(liqThresholdBps)) - 1; // -1 to account for any rounding issues
135
+ }
136
+
137
+ export function maxBoostToBps(maxLtvBps: number, liqThresholdBps: number) {
138
+ return getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.015);
85
139
  }
86
140
 
87
141
  export function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: number) {
88
142
  return Math.min(
89
143
  9000,
90
- getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000)
144
+ getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps - 1000, 0.005)
91
145
  );
92
146
  }
93
147
 
94
148
  export function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number) {
95
149
  return Math.min(
96
150
  maxRepayFromBps(maxLtvBps, liqThresholdBps) - MAX_REPAY_GAP_BPS,
97
- getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps)
151
+ getMaxLiqUtilizationRateBps(maxLtvBps, liqThresholdBps, 0.005)
98
152
  );
99
- }
153
+ }
@@ -4,7 +4,6 @@ import {
4
4
  AutomationSettings,
5
5
  DCASettings,
6
6
  DCASettingsInpArgs,
7
- FeeType,
8
7
  LendingPlatform,
9
8
  PositionState,
10
9
  SOLAUTO_PROGRAM_ID,
@@ -29,7 +28,6 @@ import {
29
28
  } from "../../constants";
30
29
  import {
31
30
  getAllMarginfiAccountsByAuthority,
32
- getMarginfiAccountPositionState,
33
31
  } from "../marginfiUtils";
34
32
  import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
35
33
 
@@ -102,37 +100,16 @@ export function getAdjustedSettingsFromAutomation(
102
100
  };
103
101
  }
104
102
 
105
- export function getSolautoFeesBps(
106
- isReferred: boolean,
107
- feeType: FeeType
108
- ): {
109
- solauto: number;
110
- referrer: number;
111
- total: number;
112
- } {
113
- const fees = feeType === FeeType.Small ? 100 : 500;
114
- let referrer = 0;
115
- if (isReferred) {
116
- referrer = fees / 4;
117
- }
118
-
119
- return {
120
- solauto: fees - referrer,
121
- referrer,
122
- total: fees,
123
- };
124
- }
125
-
126
103
  export function eligibleForRebalance(
127
104
  positionState: PositionState,
128
105
  positionSettings: SolautoSettingsParameters,
129
106
  positionDca: DCASettings | undefined,
130
- currentUnixSecs: number
107
+ currentUnixTime: number
131
108
  ): RebalanceAction | undefined {
132
109
  if (
133
110
  positionDca &&
134
111
  positionDca.automation.targetPeriods > 0 &&
135
- eligibleForNextAutomationPeriod(positionDca.automation, currentUnixSecs)
112
+ eligibleForNextAutomationPeriod(positionDca.automation, currentUnixTime)
136
113
  ) {
137
114
  return "dca";
138
115
  }
@@ -142,21 +119,21 @@ export function eligibleForRebalance(
142
119
  }
143
120
 
144
121
  const boostToBps =
145
- eligibleForRefresh(positionState, positionSettings, currentUnixSecs) &&
122
+ eligibleForRefresh(positionState, positionSettings, currentUnixTime) &&
146
123
  positionSettings.automation.targetPeriods > 0
147
124
  ? getUpdatedValueFromAutomation(
148
125
  positionSettings.boostToBps,
149
126
  positionSettings.targetBoostToBps,
150
127
  positionSettings.automation,
151
- currentUnixSecs
128
+ currentUnixTime
152
129
  )
153
130
  : positionSettings.boostToBps;
154
131
  const repayFrom = positionSettings.repayToBps + positionSettings.repayGap;
155
132
  const boostFrom = boostToBps - positionSettings.boostGap;
156
133
 
157
- if (positionState.liqUtilizationRateBps <= boostFrom) {
134
+ if (positionState.liqUtilizationRateBps < boostFrom) {
158
135
  return "boost";
159
- } else if (positionState.liqUtilizationRateBps >= repayFrom) {
136
+ } else if (positionState.liqUtilizationRateBps > repayFrom) {
160
137
  return "repay";
161
138
  }
162
139
 
@@ -2,7 +2,6 @@ import { PublicKey } from "@solana/web3.js";
2
2
  import { SolautoClient } from "../../clients/solautoClient";
3
3
  import {
4
4
  DCASettings,
5
- FeeType,
6
5
  PositionState,
7
6
  PositionTokenUsage,
8
7
  SolautoSettingsParameters,
@@ -10,7 +9,6 @@ import {
10
9
  import {
11
10
  eligibleForNextAutomationPeriod,
12
11
  getAdjustedSettingsFromAutomation,
13
- getSolautoFeesBps,
14
12
  getUpdatedValueFromAutomation,
15
13
  } from "./generalUtils";
16
14
  import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
@@ -23,6 +21,7 @@ import {
23
21
  getDebtAdjustmentUsd,
24
22
  getLiqUtilzationRateBps,
25
23
  getMaxLiqUtilizationRateBps,
24
+ getSolautoFeesBps,
26
25
  toBaseUnit,
27
26
  } from "../numberUtils";
28
27
  import { USD_DECIMALS } from "../../constants/generalAccounts";
@@ -57,8 +56,8 @@ function getStandardTargetLiqUtilizationRateBps(
57
56
  currentUnixSeconds()
58
57
  );
59
58
 
60
- const repayFrom = adjustedSettings.repayToBps + adjustedSettings.repayGap;
61
- const boostFrom = adjustedSettings.boostToBps - adjustedSettings.boostGap;
59
+ const repayFrom = settings.repayToBps + settings.repayGap;
60
+ const boostFrom = adjustedSettings.boostToBps - settings.boostGap;
62
61
 
63
62
  if (state.liqUtilizationRateBps < boostFrom) {
64
63
  return adjustedSettings.boostToBps;
@@ -136,7 +135,7 @@ function getTargetRateAndDcaAmount(
136
135
 
137
136
  if (settings === undefined) {
138
137
  throw new Error(
139
- "If rebalancing a self-managed position, settings, and DCA should be provided"
138
+ "If rebalancing a self-managed position, settings and DCA should be provided"
140
139
  );
141
140
  }
142
141
 
@@ -171,7 +170,6 @@ export function getRebalanceValues(
171
170
  state: PositionState,
172
171
  settings: SolautoSettingsParameters | undefined,
173
172
  dca: DCASettings | undefined,
174
- feeType: FeeType,
175
173
  currentUnixTime: number,
176
174
  supplyPrice: number,
177
175
  debtPrice: number,
@@ -204,7 +202,11 @@ export function getRebalanceValues(
204
202
  amountUsdToDcaIn > 0 || state.liqUtilizationRateBps < targetRateBps;
205
203
  let adjustmentFeeBps = 0;
206
204
  if (increasingLeverage) {
207
- adjustmentFeeBps = getSolautoFeesBps(false, feeType).total;
205
+ adjustmentFeeBps = getSolautoFeesBps(
206
+ false,
207
+ settings === undefined,
208
+ fromBaseUnit(state.netWorth.baseAmountUsdValue, USD_DECIMALS)
209
+ ).total;
208
210
  }
209
211
 
210
212
  const supplyUsd =
@@ -290,7 +292,8 @@ export function getFlashLoanDetails(
290
292
  tempLiqUtilizationRateBps >
291
293
  getMaxLiqUtilizationRateBps(
292
294
  client.solautoPositionState!.maxLtvBps,
293
- client.solautoPositionState!.liqThresholdBps
295
+ client.solautoPositionState!.liqThresholdBps,
296
+ 0.01
294
297
  );
295
298
 
296
299
  let flashLoanToken: PositionTokenUsage | undefined = undefined;
@@ -9,7 +9,6 @@ import { publicKey } from "@metaplex-foundation/umi";
9
9
  import { SolautoClient } from "../../src/clients/solautoClient";
10
10
  import {
11
11
  DCASettings,
12
- FeeType,
13
12
  LendingPlatform,
14
13
  SolautoRebalanceType,
15
14
  SolautoSettingsParameters,
@@ -18,6 +17,7 @@ import {
18
17
  fromBaseUnit,
19
18
  fromBps,
20
19
  getLiqUtilzationRateBps,
20
+ getSolautoFeesBps,
21
21
  toBaseUnit,
22
22
  } from "../../src/utils/numberUtils";
23
23
  import { USD_DECIMALS } from "../../src/constants/generalAccounts";
@@ -25,7 +25,6 @@ import {
25
25
  createFakePositionState,
26
26
  eligibleForNextAutomationPeriod,
27
27
  getAdjustedSettingsFromAutomation,
28
- getSolautoFeesBps,
29
28
  getUpdatedValueFromAutomation,
30
29
  positionStateWithLatestPrices,
31
30
  } from "../../src/utils/solauto/generalUtils";
@@ -49,7 +48,6 @@ function assertAccurateRebalance(
49
48
  client.solautoPositionState!,
50
49
  client.solautoPositionSettings(),
51
50
  client.solautoPositionActiveDca(),
52
- client.solautoPositionData?.feeType ?? FeeType.Small,
53
51
  currentUnixSeconds(),
54
52
  PRICES[client.supplyMint.toString()].price,
55
53
  PRICES[client.debtMint.toString()].price,
@@ -60,7 +58,11 @@ function assertAccurateRebalance(
60
58
  if (increasingLeverage) {
61
59
  adjustmentFeeBps = getSolautoFeesBps(
62
60
  client.referredByState !== undefined,
63
- client.solautoPositionData!.feeType
61
+ client.selfManaged,
62
+ fromBaseUnit(
63
+ client.solautoPositionState?.netWorth.baseAmountUsdValue ?? BigInt(0),
64
+ USD_DECIMALS
65
+ )
64
66
  ).total;
65
67
  }
66
68
 
@@ -176,9 +178,7 @@ async function getFakePosition(
176
178
  padding2: [],
177
179
  padding: new Uint8Array([]),
178
180
  },
179
- feeType: FeeType.Default,
180
181
  padding1: [],
181
- padding2: [],
182
182
  padding: [],
183
183
  publicKey: publicKey(PublicKey.default),
184
184
  header: {
@@ -194,12 +194,6 @@ async function getFakePosition(
194
194
 
195
195
  client.solautoPositionState!.lastUpdated = BigInt(currentUnixSeconds());
196
196
 
197
- assert(
198
- fakeLiqUtilizationRateBps ===
199
- client.solautoPositionState!.liqUtilizationRateBps,
200
- "Fake position not set up correctly"
201
- );
202
-
203
197
  return client;
204
198
  }
205
199
 
@@ -1,15 +0,0 @@
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
- import { Serializer } from '@metaplex-foundation/umi/serializers';
9
- export declare enum FeeType {
10
- Small = 0,
11
- Default = 1
12
- }
13
- export type FeeTypeArgs = FeeType;
14
- export declare function getFeeTypeSerializer(): Serializer<FeeTypeArgs, FeeType>;
15
- //# sourceMappingURL=feeType.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"feeType.d.ts","sourceRoot":"","sources":["../../../src/generated/types/feeType.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAc,MAAM,sCAAsC,CAAC;AAE9E,oBAAY,OAAO;IACjB,KAAK,IAAA;IACL,OAAO,IAAA;CACR;AAED,MAAM,MAAM,WAAW,GAAG,OAAO,CAAC;AAElC,wBAAgB,oBAAoB,IAAI,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,CAKvE"}
@@ -1,20 +0,0 @@
1
- "use strict";
2
- /**
3
- * This code was AUTOGENERATED using the kinobi library.
4
- * Please DO NOT EDIT THIS FILE, instead use visitors
5
- * to add features, then rerun kinobi to update it.
6
- *
7
- * @see https://github.com/metaplex-foundation/kinobi
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.FeeType = void 0;
11
- exports.getFeeTypeSerializer = getFeeTypeSerializer;
12
- const serializers_1 = require("@metaplex-foundation/umi/serializers");
13
- var FeeType;
14
- (function (FeeType) {
15
- FeeType[FeeType["Small"] = 0] = "Small";
16
- FeeType[FeeType["Default"] = 1] = "Default";
17
- })(FeeType || (exports.FeeType = FeeType = {}));
18
- function getFeeTypeSerializer() {
19
- return (0, serializers_1.scalarEnum)(FeeType, { description: 'FeeType' });
20
- }
@@ -1,23 +0,0 @@
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 FeeType {
12
- Small,
13
- Default,
14
- }
15
-
16
- export type FeeTypeArgs = FeeType;
17
-
18
- export function getFeeTypeSerializer(): Serializer<FeeTypeArgs, FeeType> {
19
- return scalarEnum<FeeType>(FeeType, { description: 'FeeType' }) as Serializer<
20
- FeeTypeArgs,
21
- FeeType
22
- >;
23
- }