@haven-fi/solauto-sdk 1.0.69 → 1.0.71
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/clients/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/clients/solautoMarginfiClient.js +7 -9
- package/dist/constants/marginfiAccounts.d.ts.map +1 -1
- package/dist/constants/marginfiAccounts.js +14 -4
- package/dist/constants/pythConstants.d.ts +2 -0
- package/dist/constants/pythConstants.d.ts.map +1 -1
- package/dist/constants/pythConstants.js +2 -0
- package/dist/constants/tokenConstants.d.ts +10 -4
- package/dist/constants/tokenConstants.d.ts.map +1 -1
- package/dist/constants/tokenConstants.js +21 -8
- package/dist/generated/accounts/solautoPosition.d.ts +7 -1
- package/dist/generated/accounts/solautoPosition.d.ts.map +1 -1
- package/dist/generated/accounts/solautoPosition.js +6 -2
- package/dist/generated/types/feeType.d.ts +15 -0
- package/dist/generated/types/feeType.d.ts.map +1 -0
- package/dist/generated/types/feeType.js +20 -0
- package/dist/generated/types/index.d.ts +1 -0
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +1 -0
- package/dist/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +1 -1
- package/dist/types/accounts.d.ts +0 -1
- package/dist/types/accounts.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.d.ts +1 -4
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +9 -15
- package/dist/utils/numberUtils.d.ts +2 -1
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +3 -2
- package/dist/utils/solauto/generalUtils.js +2 -2
- package/dist/utils/solauto/rebalanceUtils.d.ts +2 -2
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +1 -1
- package/dist/utils/solauto/rebalanceUtils.js +2 -2
- package/local/updateMarginfiLUT.ts +1 -1
- package/package.json +1 -1
- package/src/clients/solautoMarginfiClient.ts +10 -15
- package/src/constants/marginfiAccounts.ts +15 -5
- package/src/constants/pythConstants.ts +4 -2
- package/src/constants/tokenConstants.ts +26 -8
- package/src/generated/accounts/solautoPosition.ts +15 -2
- package/src/generated/types/feeType.ts +23 -0
- package/src/generated/types/index.ts +1 -0
- package/src/transactions/transactionUtils.ts +1 -0
- package/src/types/accounts.ts +0 -1
- package/src/utils/marginfiUtils.ts +13 -23
- package/src/utils/numberUtils.ts +3 -2
- package/src/utils/solauto/generalUtils.ts +3 -3
- package/src/utils/solauto/rebalanceUtils.ts +3 -1
- package/tests/transactions/solautoMarginfi.ts +25 -22
- package/tests/unit/rebalanceCalculations.ts +5 -1
@@ -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;
|
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;AASnE,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;IAG7C,iCAAiC,CAAC,EAAE,MAAM,CAAC;IAC3C,6BAA6B,EAAG,SAAS,CAAC;IAC1C,2BAA2B,CAAC,EAAE,eAAe,CAAC;IAE/C,UAAU,CAAC,IAAI,EAAE,yBAAyB;IAuC1C,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;IA6ElE,iCAAiC,IAAI,kBAAkB;IASjD,qBAAqB,IAAI,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;CAiBlE"}
|
@@ -40,12 +40,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
40
40
|
this.marginfiGroup = marginfiAccountData
|
41
41
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(marginfiAccountData.group)
|
42
42
|
: args.marginfiGroup ?? new web3_js_1.PublicKey(marginfiAccounts_1.DEFAULT_MARGINFI_GROUP);
|
43
|
-
this.marginfiSupplyAccounts =
|
44
|
-
|
45
|
-
|
46
|
-
this.marginfiDebtAccounts = (0, marginfiUtils_1.findMarginfiAccounts)({
|
47
|
-
mint: this.debtMint.toString(),
|
48
|
-
});
|
43
|
+
this.marginfiSupplyAccounts =
|
44
|
+
marginfiAccounts_1.MARGINFI_ACCOUNTS[this.supplyMint.toString()];
|
45
|
+
this.marginfiDebtAccounts = marginfiAccounts_1.MARGINFI_ACCOUNTS[this.debtMint.toString()];
|
49
46
|
if (!this.initialized) {
|
50
47
|
await this.setIntermediaryMarginfiDetails();
|
51
48
|
}
|
@@ -78,7 +75,9 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
78
75
|
return [
|
79
76
|
...super.lutAccountsToAdd(),
|
80
77
|
this.marginfiAccountPk,
|
81
|
-
...(this.signer.publicKey.toString() === this.authority.toString()
|
78
|
+
...(this.signer.publicKey.toString() === this.authority.toString()
|
79
|
+
? [this.intermediaryMarginfiAccountPk]
|
80
|
+
: []),
|
82
81
|
];
|
83
82
|
}
|
84
83
|
marginfiAccountInitialize() {
|
@@ -344,8 +343,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
344
343
|
isWritable: false,
|
345
344
|
},
|
346
345
|
{
|
347
|
-
pubkey: (0, umi_1.publicKey)((0, marginfiUtils_1.findMarginfiAccounts)(
|
348
|
-
.priceOracle),
|
346
|
+
pubkey: (0, umi_1.publicKey)((0, marginfiUtils_1.findMarginfiAccounts)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.bankPk)).priceOracle),
|
349
347
|
isSigner: false,
|
350
348
|
isWritable: false,
|
351
349
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAA;
|
1
|
+
{"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,qBAAqB,CAAA;CAyBrE,CAAC;AAEF,eAAO,MAAM,8BAA8B,iDAAiD,CAAC"}
|
@@ -5,19 +5,29 @@ const spl_token_1 = require("@solana/spl-token");
|
|
5
5
|
const tokenConstants_1 = require("./tokenConstants");
|
6
6
|
exports.DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
7
7
|
exports.MARGINFI_ACCOUNTS = {
|
8
|
-
|
9
|
-
mint: spl_token_1.NATIVE_MINT.toString(),
|
8
|
+
[spl_token_1.NATIVE_MINT.toString()]: {
|
10
9
|
bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
|
11
10
|
liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
|
12
11
|
vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
|
13
12
|
priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"
|
14
13
|
},
|
15
|
-
|
16
|
-
mint: tokenConstants_1.USDC_MINT,
|
14
|
+
[tokenConstants_1.USDC_MINT]: {
|
17
15
|
bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
|
18
16
|
liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
|
19
17
|
vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
|
20
18
|
priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX"
|
19
|
+
},
|
20
|
+
[tokenConstants_1.B_SOL]: {
|
21
|
+
bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
|
22
|
+
liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
|
23
|
+
vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
|
24
|
+
priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
|
25
|
+
},
|
26
|
+
[tokenConstants_1.JUP]: {
|
27
|
+
bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
|
28
|
+
liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
|
29
|
+
vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
|
30
|
+
priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
|
21
31
|
}
|
22
32
|
};
|
23
33
|
exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
|
@@ -1,5 +1,7 @@
|
|
1
1
|
export declare const PYTH_PRICE_FEED_IDS: {
|
2
2
|
[x: string]: string;
|
3
3
|
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: string;
|
4
|
+
bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1: string;
|
5
|
+
JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN: string;
|
4
6
|
};
|
5
7
|
//# sourceMappingURL=pythConstants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"pythConstants.d.ts","sourceRoot":"","sources":["../../src/constants/pythConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB
|
1
|
+
{"version":3,"file":"pythConstants.d.ts","sourceRoot":"","sources":["../../src/constants/pythConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;CAO/B,CAAC"}
|
@@ -7,4 +7,6 @@ const tokenConstants_1 = require("./tokenConstants");
|
|
7
7
|
exports.PYTH_PRICE_FEED_IDS = {
|
8
8
|
[spl_token_1.NATIVE_MINT.toString()]: "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
|
9
9
|
[tokenConstants_1.USDC_MINT]: "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
|
10
|
+
[tokenConstants_1.B_SOL]: "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
|
11
|
+
[tokenConstants_1.JUP]: "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
|
10
12
|
};
|
@@ -1,8 +1,14 @@
|
|
1
1
|
export declare const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
2
|
+
export declare const B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
|
3
|
+
export declare const JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
|
2
4
|
export declare const ALL_SUPPORTED_TOKENS: string[];
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
interface TokenInfo {
|
6
|
+
decimals: number;
|
7
|
+
isStableCoin?: boolean;
|
8
|
+
isLST?: boolean;
|
9
|
+
}
|
10
|
+
export declare const TOKEN_INFO: {
|
11
|
+
[key: string]: TokenInfo;
|
6
12
|
};
|
7
|
-
export
|
13
|
+
export {};
|
8
14
|
//# sourceMappingURL=tokenConstants.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,iDAAiD,CAAC;
|
1
|
+
{"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS,iDAAiD,CAAC;AACxE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AAGjE,eAAO,MAAM,oBAAoB,UAKhC,CAAC;AAEF,UAAU,SAAS;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAelD,CAAC"}
|
@@ -1,17 +1,30 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
3
|
+
exports.TOKEN_INFO = exports.ALL_SUPPORTED_TOKENS = exports.JUP = exports.B_SOL = exports.USDC_MINT = void 0;
|
4
4
|
const spl_token_1 = require("@solana/spl-token");
|
5
|
-
// When adding token ensure a price feed is provided in pythConstants.ts & the token is
|
5
|
+
// When adding token ensure a price feed is provided in pythConstants.ts & the token is in TOKEN_INFO
|
6
6
|
exports.USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
7
|
+
exports.B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
|
8
|
+
exports.JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
|
7
9
|
exports.ALL_SUPPORTED_TOKENS = [
|
8
10
|
spl_token_1.NATIVE_MINT.toString(),
|
9
11
|
exports.USDC_MINT,
|
12
|
+
exports.B_SOL,
|
13
|
+
exports.JUP,
|
10
14
|
];
|
11
|
-
exports.
|
12
|
-
[spl_token_1.NATIVE_MINT.toString()]:
|
13
|
-
|
15
|
+
exports.TOKEN_INFO = {
|
16
|
+
[spl_token_1.NATIVE_MINT.toString()]: {
|
17
|
+
decimals: 9,
|
18
|
+
},
|
19
|
+
[exports.USDC_MINT]: {
|
20
|
+
decimals: 6,
|
21
|
+
isStableCoin: true
|
22
|
+
},
|
23
|
+
[exports.B_SOL]: {
|
24
|
+
decimals: 9,
|
25
|
+
isLST: true
|
26
|
+
},
|
27
|
+
[exports.JUP]: {
|
28
|
+
decimals: 6
|
29
|
+
}
|
14
30
|
};
|
15
|
-
exports.STABLECOINS = [
|
16
|
-
exports.USDC_MINT
|
17
|
-
];
|
@@ -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 { PodBool, PodBoolArgs, PositionData, PositionDataArgs, PositionState, PositionStateArgs, RebalanceData, RebalanceDataArgs } from '../types';
|
10
|
+
import { FeeType, FeeTypeArgs, 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,6 +18,8 @@ export type SolautoPositionAccountData = {
|
|
18
18
|
position: PositionData;
|
19
19
|
state: PositionState;
|
20
20
|
rebalance: RebalanceData;
|
21
|
+
feeType: FeeType;
|
22
|
+
padding2: Array<number>;
|
21
23
|
padding: Array<number>;
|
22
24
|
};
|
23
25
|
export type SolautoPositionAccountDataArgs = {
|
@@ -29,6 +31,8 @@ export type SolautoPositionAccountDataArgs = {
|
|
29
31
|
position: PositionDataArgs;
|
30
32
|
state: PositionStateArgs;
|
31
33
|
rebalance: RebalanceDataArgs;
|
34
|
+
feeType: FeeTypeArgs;
|
35
|
+
padding2: Array<number>;
|
32
36
|
padding: Array<number>;
|
33
37
|
};
|
34
38
|
export declare function getSolautoPositionAccountDataSerializer(): Serializer<SolautoPositionAccountDataArgs, SolautoPositionAccountData>;
|
@@ -46,6 +50,8 @@ export declare function getSolautoPositionGpaBuilder(context: Pick<Context, 'rpc
|
|
46
50
|
position: PositionDataArgs;
|
47
51
|
state: PositionStateArgs;
|
48
52
|
rebalance: RebalanceDataArgs;
|
53
|
+
feeType: FeeTypeArgs;
|
54
|
+
padding2: Array<number>;
|
49
55
|
padding: Array<number>;
|
50
56
|
}>;
|
51
57
|
export declare function getSolautoPositionSize(): number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoPosition.d.ts","sourceRoot":"","sources":["../../../src/generated/accounts/solautoPosition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,OAAO,EACP,GAAG,EACH,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAKtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,
|
1
|
+
{"version":3,"file":"solautoPosition.d.ts","sourceRoot":"","sources":["../../../src/generated/accounts/solautoPosition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,OAAO,EACP,GAAG,EACH,SAAS,EACT,UAAU,EACV,oBAAoB,EACpB,qBAAqB,EAKtB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EAMlB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAElE,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,iBAAiB,CAAC;IACzB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAgB,uCAAuC,IAAI,UAAU,CACnE,8BAA8B,EAC9B,0BAA0B,CAC3B,CAiBA;AAED,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,UAAU,GACrB,eAAe,CAKjB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,CAAC,CAO1B;AAED,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,SAAS,EAAE,SAAS,GAAG,GAAG,EAC1B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAMjC;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,UAAU,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,EAC7B,UAAU,EAAE,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,EAClC,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,EAAE,CAAC,CAU5B;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,UAAU,CAAC;UAQhC,KAAK,CAAC,MAAM,CAAC;gBACP,KAAK,CAAC,MAAM,CAAC;iBACZ,WAAW;cACd,KAAK,CAAC,MAAM,CAAC;eACZ,SAAS;cACV,gBAAgB;WACnB,iBAAiB;eACb,iBAAiB;aACnB,WAAW;cACV,KAAK,CAAC,MAAM,CAAC;aACd,KAAK,CAAC,MAAM,CAAC;GAiB3B;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C"}
|
@@ -28,7 +28,9 @@ function getSolautoPositionAccountDataSerializer() {
|
|
28
28
|
['position', (0, types_1.getPositionDataSerializer)()],
|
29
29
|
['state', (0, types_1.getPositionStateSerializer)()],
|
30
30
|
['rebalance', (0, types_1.getRebalanceDataSerializer)()],
|
31
|
-
['
|
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 })],
|
32
34
|
], { description: 'SolautoPositionAccountData' });
|
33
35
|
}
|
34
36
|
function deserializeSolautoPosition(rawAccount) {
|
@@ -68,7 +70,9 @@ function getSolautoPositionGpaBuilder(context) {
|
|
68
70
|
position: [40, (0, types_1.getPositionDataSerializer)()],
|
69
71
|
state: [360, (0, types_1.getPositionStateSerializer)()],
|
70
72
|
rebalance: [648, (0, types_1.getRebalanceDataSerializer)()],
|
71
|
-
|
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 })],
|
72
76
|
})
|
73
77
|
.deserializeUsing((account) => deserializeSolautoPosition(account));
|
74
78
|
}
|
@@ -0,0 +1,15 @@
|
|
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
|
@@ -0,0 +1 @@
|
|
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"}
|
@@ -0,0 +1,20 @@
|
|
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
|
+
}
|
@@ -9,6 +9,7 @@ export * from './automationSettings';
|
|
9
9
|
export * from './automationSettingsInp';
|
10
10
|
export * from './dCASettings';
|
11
11
|
export * from './dCASettingsInp';
|
12
|
+
export * from './feeType';
|
12
13
|
export * from './lendingPlatform';
|
13
14
|
export * from './podBool';
|
14
15
|
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,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,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"}
|
@@ -25,6 +25,7 @@ __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);
|
28
29
|
__exportStar(require("./lendingPlatform"), exports);
|
29
30
|
__exportStar(require("./podBool"), exports);
|
30
31
|
__exportStar(require("./positionData"), exports);
|
@@ -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,
|
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"}
|
@@ -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(), (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(), client.solautoPositionData.feeType, (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);
|
package/dist/types/accounts.d.ts
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/types/accounts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACrB"}
|
@@ -4,10 +4,7 @@ import { Bank } from "../marginfi-sdk";
|
|
4
4
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
5
5
|
import { PositionState } from "../generated";
|
6
6
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
7
|
-
export declare function findMarginfiAccounts(
|
8
|
-
mint?: string;
|
9
|
-
bank?: string;
|
10
|
-
}): MarginfiAssetAccounts;
|
7
|
+
export declare function findMarginfiAccounts(bank: PublicKey): MarginfiAssetAccounts;
|
11
8
|
export declare function getMaxLtvAndLiqThreshold(umi: Umi, supply: {
|
12
9
|
mint: PublicKey;
|
13
10
|
bank?: Bank | null;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAKL,MAAM,iBAAiB,CAAC;AAUzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,qBAAqB,CAU3E;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA2D3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CA6CA;AAgED,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA+IpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CA0B3B"}
|
@@ -15,28 +15,22 @@ const solautoConstants_1 = require("../constants/solautoConstants");
|
|
15
15
|
const marginfiAccounts_1 = require("../constants/marginfiAccounts");
|
16
16
|
const generalAccounts_1 = require("../constants/generalAccounts");
|
17
17
|
const solanaUtils_1 = require("./solanaUtils");
|
18
|
-
function findMarginfiAccounts(
|
18
|
+
function findMarginfiAccounts(bank) {
|
19
19
|
for (const key in marginfiAccounts_1.MARGINFI_ACCOUNTS) {
|
20
20
|
const account = marginfiAccounts_1.MARGINFI_ACCOUNTS[key];
|
21
|
-
if (
|
22
|
-
return account;
|
23
|
-
}
|
24
|
-
if (bank && account.bank.toString().toLowerCase() === bank.toLowerCase()) {
|
21
|
+
if (account.bank.toString().toLowerCase() === bank.toString().toLowerCase()) {
|
25
22
|
return account;
|
26
23
|
}
|
27
24
|
}
|
28
|
-
throw new Error(`Marginfi accounts not found by the
|
25
|
+
throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
|
29
26
|
}
|
30
27
|
async function getMaxLtvAndLiqThreshold(umi, supply, debt, supplyPrice) {
|
31
28
|
if (!supply.bank || supply.bank === null) {
|
32
|
-
supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
33
|
-
mint: supply.mint.toString(),
|
34
|
-
}).bank));
|
29
|
+
supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[supply.mint.toString()].bank));
|
35
30
|
}
|
36
|
-
if ((!debt.bank || debt.bank === null) &&
|
37
|
-
debt.
|
38
|
-
|
39
|
-
}).bank));
|
31
|
+
if ((!debt.bank || debt.bank === null) &&
|
32
|
+
!debt.mint.equals(web3_js_1.PublicKey.default)) {
|
33
|
+
debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[debt.mint.toString()].bank));
|
40
34
|
}
|
41
35
|
if (!supplyPrice) {
|
42
36
|
const [price] = await (0, generalUtils_1.getTokenPrices)([
|
@@ -141,10 +135,10 @@ async function getTokenUsage(umi, bank, isAsset, shares, amountUsedAdjustment) {
|
|
141
135
|
async function getMarginfiAccountPositionState(umi, marginfiAccountPk, supplyMint, debtMint, livePositionUpdates) {
|
142
136
|
let marginfiAccount = await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(marginfiAccountPk));
|
143
137
|
let supplyBank = supplyMint && supplyMint !== web3_js_1.PublicKey.default
|
144
|
-
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
138
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[supplyMint.toString()].bank))
|
145
139
|
: null;
|
146
140
|
let debtBank = debtMint && debtMint !== web3_js_1.PublicKey.default
|
147
|
-
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
141
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(marginfiAccounts_1.MARGINFI_ACCOUNTS[debtMint.toString()].bank))
|
148
142
|
: null;
|
149
143
|
let supplyUsage = undefined;
|
150
144
|
let debtUsage = undefined;
|
@@ -1,3 +1,4 @@
|
|
1
|
+
import { FeeType } from "../generated";
|
1
2
|
export declare function getLiqUtilzationRateBps(supplyUsd: number, debtUsd: number, liqThresholdBps: number): number;
|
2
3
|
export declare function toBaseUnit(value: number, decimals: number): bigint;
|
3
4
|
export declare function fromBaseUnit(value: bigint, decimals: number): number;
|
@@ -6,7 +7,7 @@ export declare function toBps(value: number): number;
|
|
6
7
|
export declare function bytesToI80F48(bytes: number[]): number;
|
7
8
|
export declare function uint8ArrayToBigInt(uint8Array: Uint8Array): bigint;
|
8
9
|
export declare function getDebtAdjustmentUsd(liqThresholdBps: number, supplyUsd: number, debtUsd: number, targetLiqUtilizationRateBps: number, adjustmentFeeBps?: number): number;
|
9
|
-
export declare function getSolautoFeesBps(isReferred: boolean,
|
10
|
+
export declare function getSolautoFeesBps(isReferred: boolean, feeType: FeeType, positionNetWorthUsd: number): {
|
10
11
|
solauto: number;
|
11
12
|
referrer: number;
|
12
13
|
total: number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,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,OAAO,EAAE,OAAO,EAChB,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"}
|
@@ -14,6 +14,7 @@ exports.maxBoostToBps = maxBoostToBps;
|
|
14
14
|
exports.maxRepayFromBps = maxRepayFromBps;
|
15
15
|
exports.maxRepayToBps = maxRepayToBps;
|
16
16
|
const constants_1 = require("../constants");
|
17
|
+
const generated_1 = require("../generated");
|
17
18
|
function getLiqUtilzationRateBps(supplyUsd, debtUsd, liqThresholdBps) {
|
18
19
|
if (supplyUsd === 0) {
|
19
20
|
return 0;
|
@@ -66,13 +67,13 @@ function getDebtAdjustmentUsd(liqThresholdBps, supplyUsd, debtUsd, targetLiqUtil
|
|
66
67
|
(1 - targetLiqUtilizationRate * (1 - adjustmentFee) * liqThreshold);
|
67
68
|
return debtAdjustmentUsd;
|
68
69
|
}
|
69
|
-
function getSolautoFeesBps(isReferred,
|
70
|
+
function getSolautoFeesBps(isReferred, feeType, positionNetWorthUsd) {
|
70
71
|
const minSize = 10000; // Minimum position size
|
71
72
|
const maxSize = 1000000; // Maximum position size
|
72
73
|
const maxFeeBps = 500; // Fee in basis points for minSize (5%)
|
73
74
|
const minFeeBps = 100; // Fee in basis points for maxSize (1%)
|
74
75
|
let feeBps = 0;
|
75
|
-
if (
|
76
|
+
if (feeType === generated_1.FeeType.Small) {
|
76
77
|
feeBps = 100;
|
77
78
|
}
|
78
79
|
else if (positionNetWorthUsd <= minSize) {
|
@@ -235,8 +235,8 @@ async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
|
|
235
235
|
};
|
236
236
|
}
|
237
237
|
function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
|
238
|
-
const supplyDecimals = constants_1.
|
239
|
-
const debtDecimals = constants_1.
|
238
|
+
const supplyDecimals = constants_1.TOKEN_INFO[supply.mint.toString()].decimals;
|
239
|
+
const debtDecimals = constants_1.TOKEN_INFO[debt.mint.toString()].decimals;
|
240
240
|
const supplyUsd = supply.amountUsed * supply.price;
|
241
241
|
const debtUsd = debt.amountUsed * debt.price;
|
242
242
|
return {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { SolautoClient } from "../../clients/solautoClient";
|
3
|
-
import { DCASettings, PositionState, SolautoSettingsParameters } from "../../generated";
|
3
|
+
import { DCASettings, FeeType, 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, currentUnixTime: number, supplyPrice: number, debtPrice: number, targetLiqUtilizationRateBps?: number, limitGapBps?: number): RebalanceValues;
|
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;
|
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,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"}
|
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;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,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,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"}
|
@@ -79,7 +79,7 @@ function getTargetRateAndDcaAmount(state, settings, dca, currentUnixTime, target
|
|
79
79
|
};
|
80
80
|
}
|
81
81
|
}
|
82
|
-
function getRebalanceValues(state, settings, dca, currentUnixTime, supplyPrice, debtPrice, targetLiqUtilizationRateBps, limitGapBps) {
|
82
|
+
function getRebalanceValues(state, settings, dca, feeType, 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, currentUnixTime, supplyPrice,
|
|
91
91
|
const increasingLeverage = amountUsdToDcaIn > 0 || state.liqUtilizationRateBps < targetRateBps;
|
92
92
|
let adjustmentFeeBps = 0;
|
93
93
|
if (increasingLeverage) {
|
94
|
-
adjustmentFeeBps = (0, numberUtils_1.getSolautoFeesBps)(false,
|
94
|
+
adjustmentFeeBps = (0, numberUtils_1.getSolautoFeesBps)(false, feeType, (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;
|
package/package.json
CHANGED
@@ -16,6 +16,7 @@ import { SolautoClient, SolautoClientArgs } from "./solautoClient";
|
|
16
16
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
17
17
|
import {
|
18
18
|
DEFAULT_MARGINFI_GROUP,
|
19
|
+
MARGINFI_ACCOUNTS,
|
19
20
|
MARGINFI_ACCOUNTS_LOOKUP_TABLE,
|
20
21
|
} from "../constants/marginfiAccounts";
|
21
22
|
import {
|
@@ -108,12 +109,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
108
109
|
? toWeb3JsPublicKey(marginfiAccountData.group)
|
109
110
|
: args.marginfiGroup ?? new PublicKey(DEFAULT_MARGINFI_GROUP);
|
110
111
|
|
111
|
-
this.marginfiSupplyAccounts =
|
112
|
-
|
113
|
-
|
114
|
-
this.marginfiDebtAccounts = findMarginfiAccounts({
|
115
|
-
mint: this.debtMint.toString(),
|
116
|
-
})!;
|
112
|
+
this.marginfiSupplyAccounts =
|
113
|
+
MARGINFI_ACCOUNTS[this.supplyMint.toString()]!;
|
114
|
+
this.marginfiDebtAccounts = MARGINFI_ACCOUNTS[this.debtMint.toString()]!;
|
117
115
|
|
118
116
|
if (!this.initialized) {
|
119
117
|
await this.setIntermediaryMarginfiDetails();
|
@@ -171,7 +169,9 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
171
169
|
return [
|
172
170
|
...super.lutAccountsToAdd(),
|
173
171
|
this.marginfiAccountPk,
|
174
|
-
...(this.signer.publicKey.toString() === this.authority.toString()
|
172
|
+
...(this.signer.publicKey.toString() === this.authority.toString()
|
173
|
+
? [this.intermediaryMarginfiAccountPk]
|
174
|
+
: []),
|
175
175
|
];
|
176
176
|
}
|
177
177
|
|
@@ -358,17 +358,13 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
358
358
|
: this.positionDebtTa
|
359
359
|
);
|
360
360
|
vaultDebtTa = publicKey(this.marginfiDebtAccounts.liquidityVault);
|
361
|
-
debtVaultAuthority = publicKey(
|
362
|
-
this.marginfiDebtAccounts.vaultAuthority
|
363
|
-
);
|
361
|
+
debtVaultAuthority = publicKey(this.marginfiDebtAccounts.vaultAuthority);
|
364
362
|
}
|
365
363
|
|
366
364
|
let supplyPriceOracle: UmiPublicKey | undefined = undefined;
|
367
365
|
let debtPriceOracle: UmiPublicKey | undefined = undefined;
|
368
366
|
if (args.__kind === "Withdraw" || args.__kind === "Borrow") {
|
369
|
-
supplyPriceOracle = publicKey(
|
370
|
-
this.marginfiSupplyAccounts.priceOracle
|
371
|
-
);
|
367
|
+
supplyPriceOracle = publicKey(this.marginfiSupplyAccounts.priceOracle);
|
372
368
|
debtPriceOracle = publicKey(this.marginfiDebtAccounts.priceOracle);
|
373
369
|
}
|
374
370
|
|
@@ -512,8 +508,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
512
508
|
},
|
513
509
|
{
|
514
510
|
pubkey: publicKey(
|
515
|
-
findMarginfiAccounts(
|
516
|
-
.priceOracle
|
511
|
+
findMarginfiAccounts(toWeb3JsPublicKey(x.bankPk)).priceOracle
|
517
512
|
),
|
518
513
|
isSigner: false,
|
519
514
|
isWritable: false,
|
@@ -1,23 +1,33 @@
|
|
1
1
|
import { NATIVE_MINT } from "@solana/spl-token";
|
2
|
-
import { USDC_MINT } from "./tokenConstants";
|
2
|
+
import { B_SOL, JUP, USDC_MINT } from "./tokenConstants";
|
3
3
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
4
4
|
|
5
5
|
export const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
6
6
|
|
7
7
|
export const MARGINFI_ACCOUNTS: { [key: string]: MarginfiAssetAccounts } = {
|
8
|
-
|
9
|
-
mint: NATIVE_MINT.toString(),
|
8
|
+
[NATIVE_MINT.toString()]: {
|
10
9
|
bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
|
11
10
|
liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
|
12
11
|
vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
|
13
12
|
priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"
|
14
13
|
},
|
15
|
-
|
16
|
-
mint: USDC_MINT,
|
14
|
+
[USDC_MINT]: {
|
17
15
|
bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
|
18
16
|
liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
|
19
17
|
vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
|
20
18
|
priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX"
|
19
|
+
},
|
20
|
+
[B_SOL]: {
|
21
|
+
bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
|
22
|
+
liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
|
23
|
+
vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
|
24
|
+
priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
|
25
|
+
},
|
26
|
+
[JUP]: {
|
27
|
+
bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
|
28
|
+
liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
|
29
|
+
vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
|
30
|
+
priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
|
21
31
|
}
|
22
32
|
};
|
23
33
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { NATIVE_MINT } from "@solana/spl-token";
|
2
|
-
import { USDC_MINT } from "./tokenConstants";
|
2
|
+
import { B_SOL, JUP, USDC_MINT } from "./tokenConstants";
|
3
3
|
|
4
4
|
// https://pyth.network/developers/price-feed-ids#solana-stable
|
5
5
|
export const PYTH_PRICE_FEED_IDS = {
|
@@ -7,4 +7,6 @@ export const PYTH_PRICE_FEED_IDS = {
|
|
7
7
|
"0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
|
8
8
|
[USDC_MINT]:
|
9
9
|
"0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
|
10
|
-
|
10
|
+
[B_SOL]: "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
|
11
|
+
[JUP]: "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
|
12
|
+
};
|
@@ -1,19 +1,37 @@
|
|
1
1
|
import { NATIVE_MINT } from "@solana/spl-token";
|
2
2
|
|
3
|
-
// When adding token ensure a price feed is provided in pythConstants.ts & the token is
|
3
|
+
// When adding token ensure a price feed is provided in pythConstants.ts & the token is in TOKEN_INFO
|
4
4
|
export const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
|
5
|
+
export const B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
|
6
|
+
export const JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
|
5
7
|
|
6
8
|
|
7
9
|
export const ALL_SUPPORTED_TOKENS = [
|
8
10
|
NATIVE_MINT.toString(),
|
9
11
|
USDC_MINT,
|
12
|
+
B_SOL,
|
13
|
+
JUP,
|
10
14
|
];
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
+
interface TokenInfo {
|
17
|
+
decimals: number;
|
18
|
+
isStableCoin?: boolean;
|
19
|
+
isLST?: boolean;
|
20
|
+
}
|
16
21
|
|
17
|
-
export const
|
18
|
-
|
19
|
-
|
22
|
+
export const TOKEN_INFO: { [key: string]: TokenInfo } = {
|
23
|
+
[NATIVE_MINT.toString()]: {
|
24
|
+
decimals: 9,
|
25
|
+
},
|
26
|
+
[USDC_MINT]: {
|
27
|
+
decimals: 6,
|
28
|
+
isStableCoin: true
|
29
|
+
},
|
30
|
+
[B_SOL]: {
|
31
|
+
decimals: 9,
|
32
|
+
isLST: true
|
33
|
+
},
|
34
|
+
[JUP]: {
|
35
|
+
decimals: 6
|
36
|
+
}
|
37
|
+
};
|
@@ -28,6 +28,8 @@ import {
|
|
28
28
|
u8,
|
29
29
|
} from '@metaplex-foundation/umi/serializers';
|
30
30
|
import {
|
31
|
+
FeeType,
|
32
|
+
FeeTypeArgs,
|
31
33
|
PodBool,
|
32
34
|
PodBoolArgs,
|
33
35
|
PositionData,
|
@@ -36,6 +38,7 @@ import {
|
|
36
38
|
PositionStateArgs,
|
37
39
|
RebalanceData,
|
38
40
|
RebalanceDataArgs,
|
41
|
+
getFeeTypeSerializer,
|
39
42
|
getPodBoolSerializer,
|
40
43
|
getPositionDataSerializer,
|
41
44
|
getPositionStateSerializer,
|
@@ -53,6 +56,8 @@ export type SolautoPositionAccountData = {
|
|
53
56
|
position: PositionData;
|
54
57
|
state: PositionState;
|
55
58
|
rebalance: RebalanceData;
|
59
|
+
feeType: FeeType;
|
60
|
+
padding2: Array<number>;
|
56
61
|
padding: Array<number>;
|
57
62
|
};
|
58
63
|
|
@@ -65,6 +70,8 @@ export type SolautoPositionAccountDataArgs = {
|
|
65
70
|
position: PositionDataArgs;
|
66
71
|
state: PositionStateArgs;
|
67
72
|
rebalance: RebalanceDataArgs;
|
73
|
+
feeType: FeeTypeArgs;
|
74
|
+
padding2: Array<number>;
|
68
75
|
padding: Array<number>;
|
69
76
|
};
|
70
77
|
|
@@ -82,7 +89,9 @@ export function getSolautoPositionAccountDataSerializer(): Serializer<
|
|
82
89
|
['position', getPositionDataSerializer()],
|
83
90
|
['state', getPositionStateSerializer()],
|
84
91
|
['rebalance', getRebalanceDataSerializer()],
|
85
|
-
['
|
92
|
+
['feeType', getFeeTypeSerializer()],
|
93
|
+
['padding2', array(u8(), { size: 7 })],
|
94
|
+
['padding', array(u32(), { size: 30 })],
|
86
95
|
],
|
87
96
|
{ description: 'SolautoPositionAccountData' }
|
88
97
|
) as Serializer<SolautoPositionAccountDataArgs, SolautoPositionAccountData>;
|
@@ -170,6 +179,8 @@ export function getSolautoPositionGpaBuilder(
|
|
170
179
|
position: PositionDataArgs;
|
171
180
|
state: PositionStateArgs;
|
172
181
|
rebalance: RebalanceDataArgs;
|
182
|
+
feeType: FeeTypeArgs;
|
183
|
+
padding2: Array<number>;
|
173
184
|
padding: Array<number>;
|
174
185
|
}>({
|
175
186
|
bump: [0, array(u8(), { size: 1 })],
|
@@ -180,7 +191,9 @@ export function getSolautoPositionGpaBuilder(
|
|
180
191
|
position: [40, getPositionDataSerializer()],
|
181
192
|
state: [360, getPositionStateSerializer()],
|
182
193
|
rebalance: [648, getRebalanceDataSerializer()],
|
183
|
-
|
194
|
+
feeType: [704, getFeeTypeSerializer()],
|
195
|
+
padding2: [705, array(u8(), { size: 7 })],
|
196
|
+
padding: [712, array(u32(), { size: 30 })],
|
184
197
|
})
|
185
198
|
.deserializeUsing<SolautoPosition>((account) =>
|
186
199
|
deserializeSolautoPosition(account)
|
@@ -0,0 +1,23 @@
|
|
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
|
+
}
|
@@ -10,6 +10,7 @@ export * from './automationSettings';
|
|
10
10
|
export * from './automationSettingsInp';
|
11
11
|
export * from './dCASettings';
|
12
12
|
export * from './dCASettingsInp';
|
13
|
+
export * from './feeType';
|
13
14
|
export * from './lendingPlatform';
|
14
15
|
export * from './podBool';
|
15
16
|
export * from './positionData';
|
@@ -580,6 +580,7 @@ export async function buildSolautoRebalanceTransaction(
|
|
580
580
|
client.solautoPositionState!,
|
581
581
|
client.solautoPositionSettings(),
|
582
582
|
client.solautoPositionActiveDca(),
|
583
|
+
client.solautoPositionData!.feeType,
|
583
584
|
currentUnixSeconds(),
|
584
585
|
PRICES[client.supplyMint.toString()].price,
|
585
586
|
PRICES[client.debtMint.toString()].price,
|
package/src/types/accounts.ts
CHANGED
@@ -23,23 +23,16 @@ import { USD_DECIMALS } from "../constants/generalAccounts";
|
|
23
23
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
24
24
|
import { currentUnixSecondsSolana } from "./solanaUtils";
|
25
25
|
|
26
|
-
export function findMarginfiAccounts({
|
27
|
-
mint,
|
28
|
-
bank,
|
29
|
-
}: {
|
30
|
-
mint?: string;
|
31
|
-
bank?: string;
|
32
|
-
}): MarginfiAssetAccounts {
|
26
|
+
export function findMarginfiAccounts(bank: PublicKey): MarginfiAssetAccounts {
|
33
27
|
for (const key in MARGINFI_ACCOUNTS) {
|
34
28
|
const account = MARGINFI_ACCOUNTS[key];
|
35
|
-
if (
|
36
|
-
|
37
|
-
|
38
|
-
if (bank && account.bank.toString().toLowerCase() === bank.toLowerCase()) {
|
29
|
+
if (
|
30
|
+
account.bank.toString().toLowerCase() === bank.toString().toLowerCase()
|
31
|
+
) {
|
39
32
|
return account;
|
40
33
|
}
|
41
34
|
}
|
42
|
-
throw new Error(`Marginfi accounts not found by the
|
35
|
+
throw new Error(`Marginfi accounts not found by the bank: ${bank}`);
|
43
36
|
}
|
44
37
|
|
45
38
|
export async function getMaxLtvAndLiqThreshold(
|
@@ -57,21 +50,18 @@ export async function getMaxLtvAndLiqThreshold(
|
|
57
50
|
if (!supply.bank || supply.bank === null) {
|
58
51
|
supply.bank = await safeFetchBank(
|
59
52
|
umi,
|
60
|
-
publicKey(
|
61
|
-
findMarginfiAccounts({
|
62
|
-
mint: supply.mint.toString(),
|
63
|
-
}).bank
|
64
|
-
)
|
53
|
+
publicKey(MARGINFI_ACCOUNTS[supply.mint.toString()].bank)
|
65
54
|
);
|
66
55
|
}
|
67
56
|
|
68
|
-
if (
|
57
|
+
if (
|
58
|
+
(!debt.bank || debt.bank === null) &&
|
59
|
+
!debt.mint.equals(PublicKey.default)
|
60
|
+
) {
|
69
61
|
debt.bank = await safeFetchBank(
|
70
62
|
umi,
|
71
63
|
publicKey(
|
72
|
-
|
73
|
-
mint: debt.mint.toString(),
|
74
|
-
}).bank
|
64
|
+
MARGINFI_ACCOUNTS[debt.mint.toString()].bank
|
75
65
|
)
|
76
66
|
);
|
77
67
|
}
|
@@ -248,14 +238,14 @@ export async function getMarginfiAccountPositionState(
|
|
248
238
|
supplyMint && supplyMint !== PublicKey.default
|
249
239
|
? await safeFetchBank(
|
250
240
|
umi,
|
251
|
-
publicKey(
|
241
|
+
publicKey(MARGINFI_ACCOUNTS[supplyMint.toString()].bank)
|
252
242
|
)
|
253
243
|
: null;
|
254
244
|
let debtBank: Bank | null =
|
255
245
|
debtMint && debtMint !== PublicKey.default
|
256
246
|
? await safeFetchBank(
|
257
247
|
umi,
|
258
|
-
publicKey(
|
248
|
+
publicKey(MARGINFI_ACCOUNTS[debtMint.toString()].bank)
|
259
249
|
)
|
260
250
|
: null;
|
261
251
|
|
package/src/utils/numberUtils.ts
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import { MAX_REPAY_GAP_BPS } from "../constants";
|
2
|
+
import { FeeType } from "../generated";
|
2
3
|
|
3
4
|
export function getLiqUtilzationRateBps(
|
4
5
|
supplyUsd: number,
|
@@ -88,7 +89,7 @@ export function getDebtAdjustmentUsd(
|
|
88
89
|
|
89
90
|
export function getSolautoFeesBps(
|
90
91
|
isReferred: boolean,
|
91
|
-
|
92
|
+
feeType: FeeType,
|
92
93
|
positionNetWorthUsd: number
|
93
94
|
): {
|
94
95
|
solauto: number;
|
@@ -101,7 +102,7 @@ export function getSolautoFeesBps(
|
|
101
102
|
const minFeeBps = 100; // Fee in basis points for maxSize (1%)
|
102
103
|
|
103
104
|
let feeBps: number = 0;
|
104
|
-
if (
|
105
|
+
if (feeType === FeeType.Small) {
|
105
106
|
feeBps = 100;
|
106
107
|
} else if (positionNetWorthUsd <= minSize) {
|
107
108
|
feeBps = maxFeeBps;
|
@@ -23,7 +23,7 @@ import { getReferralState } from "../accountUtils";
|
|
23
23
|
import { toWeb3JsPublicKey } from "@metaplex-foundation/umi-web3js-adapters";
|
24
24
|
import {
|
25
25
|
ALL_SUPPORTED_TOKENS,
|
26
|
-
|
26
|
+
TOKEN_INFO,
|
27
27
|
USD_DECIMALS,
|
28
28
|
} from "../../constants";
|
29
29
|
import {
|
@@ -368,8 +368,8 @@ export function createFakePositionState(
|
|
368
368
|
maxLtvBps: number,
|
369
369
|
liqThresholdBps: number
|
370
370
|
): PositionState {
|
371
|
-
const supplyDecimals =
|
372
|
-
const debtDecimals =
|
371
|
+
const supplyDecimals = TOKEN_INFO[supply.mint.toString()].decimals;
|
372
|
+
const debtDecimals = TOKEN_INFO[debt.mint.toString()].decimals;
|
373
373
|
|
374
374
|
const supplyUsd = supply.amountUsed * supply.price;
|
375
375
|
const debtUsd = debt.amountUsed * debt.price;
|
@@ -2,6 +2,7 @@ import { PublicKey } from "@solana/web3.js";
|
|
2
2
|
import { SolautoClient } from "../../clients/solautoClient";
|
3
3
|
import {
|
4
4
|
DCASettings,
|
5
|
+
FeeType,
|
5
6
|
PositionState,
|
6
7
|
PositionTokenUsage,
|
7
8
|
SolautoSettingsParameters,
|
@@ -170,6 +171,7 @@ export function getRebalanceValues(
|
|
170
171
|
state: PositionState,
|
171
172
|
settings: SolautoSettingsParameters | undefined,
|
172
173
|
dca: DCASettings | undefined,
|
174
|
+
feeType: FeeType,
|
173
175
|
currentUnixTime: number,
|
174
176
|
supplyPrice: number,
|
175
177
|
debtPrice: number,
|
@@ -204,7 +206,7 @@ export function getRebalanceValues(
|
|
204
206
|
if (increasingLeverage) {
|
205
207
|
adjustmentFeeBps = getSolautoFeesBps(
|
206
208
|
false,
|
207
|
-
|
209
|
+
feeType,
|
208
210
|
fromBaseUnit(state.netWorth.baseAmountUsdValue, USD_DECIMALS)
|
209
211
|
).total;
|
210
212
|
}
|
@@ -5,12 +5,11 @@ import {
|
|
5
5
|
SolautoMarginfiClient,
|
6
6
|
} from "../../src/clients/solautoMarginfiClient";
|
7
7
|
import {
|
8
|
-
LendingPlatform,
|
9
8
|
solautoAction,
|
10
9
|
SolautoSettingsParametersInpArgs,
|
11
10
|
} from "../../src/generated";
|
12
11
|
import { buildSolautoRebalanceTransaction } from "../../src/transactions/transactionUtils";
|
13
|
-
import {
|
12
|
+
import { maxBoostToBps, maxRepayFromBps, maxRepayToBps, toBaseUnit } from "../../src/utils/numberUtils";
|
14
13
|
import { NATIVE_MINT } from "@solana/spl-token";
|
15
14
|
import { getTokenPrices } from "../../src/utils/generalUtils";
|
16
15
|
import {
|
@@ -21,12 +20,12 @@ import { PublicKey } from "@solana/web3.js";
|
|
21
20
|
import { USDC_MINT } from "../../src/constants";
|
22
21
|
|
23
22
|
describe("Solauto Marginfi tests", async () => {
|
24
|
-
|
25
|
-
const signer = setupTest("solauto-manager");
|
23
|
+
const signer = setupTest();
|
24
|
+
// const signer = setupTest("solauto-manager");
|
26
25
|
|
27
26
|
const payForTransactions = false;
|
28
27
|
const useJitoBundle = false;
|
29
|
-
const positionId =
|
28
|
+
const positionId = 2;
|
30
29
|
|
31
30
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
32
31
|
const client = new SolautoMarginfiClient(process.env.HELIUS_API_KEY!, true);
|
@@ -67,22 +66,26 @@ describe("Solauto Marginfi tests", async () => {
|
|
67
66
|
// }, "open position")
|
68
67
|
// );
|
69
68
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
69
|
+
// const initialSupplyUsd = 150;
|
70
|
+
// transactionItems.push(
|
71
|
+
// new TransactionItem(async () => {
|
72
|
+
// const [supplyPrice] = await getTokenPrices([supply]);
|
73
|
+
// return {
|
74
|
+
// tx: client.protocolInteraction(
|
75
|
+
// solautoAction("Deposit", [
|
76
|
+
// toBaseUnit(initialSupplyUsd / supplyPrice, supplyDecimals),
|
77
|
+
// ])
|
78
|
+
// ),
|
79
|
+
// };
|
80
|
+
// }, "deposit")
|
81
|
+
// );
|
83
82
|
// }
|
84
83
|
|
85
|
-
// const
|
84
|
+
// const maxLtvBps = client.solautoPositionState!.maxLtvBps;
|
85
|
+
// const liqThresholdBps = client.solautoPositionState!.liqThresholdBps;
|
86
|
+
// const maxRepayFrom = maxRepayFromBps(maxLtvBps, liqThresholdBps);
|
87
|
+
// const maxRepayTo = maxRepayToBps(maxLtvBps, liqThresholdBps);
|
88
|
+
// const maxBoostTo = maxBoostToBps(maxLtvBps, liqThresholdBps);
|
86
89
|
// transactionItems.push(
|
87
90
|
// new TransactionItem(
|
88
91
|
// async () => ({
|
@@ -90,10 +93,10 @@ describe("Solauto Marginfi tests", async () => {
|
|
90
93
|
// positionId: client.positionId,
|
91
94
|
// settingParams: some({
|
92
95
|
// ...settingParams,
|
96
|
+
// boostToBps: maxBoostTo,
|
93
97
|
// boostGap: 50,
|
94
|
-
//
|
95
|
-
// repayGap:
|
96
|
-
// repayToBps: maxLiqRate
|
98
|
+
// repayToBps: maxRepayTo,
|
99
|
+
// repayGap: maxRepayFrom - maxRepayTo
|
97
100
|
// }),
|
98
101
|
// dca: null,
|
99
102
|
// }),
|
@@ -9,6 +9,7 @@ import { publicKey } from "@metaplex-foundation/umi";
|
|
9
9
|
import { SolautoClient } from "../../src/clients/solautoClient";
|
10
10
|
import {
|
11
11
|
DCASettings,
|
12
|
+
FeeType,
|
12
13
|
LendingPlatform,
|
13
14
|
SolautoRebalanceType,
|
14
15
|
SolautoSettingsParameters,
|
@@ -48,6 +49,7 @@ function assertAccurateRebalance(
|
|
48
49
|
client.solautoPositionState!,
|
49
50
|
client.solautoPositionSettings(),
|
50
51
|
client.solautoPositionActiveDca(),
|
52
|
+
client.solautoPositionData!.feeType,
|
51
53
|
currentUnixSeconds(),
|
52
54
|
PRICES[client.supplyMint.toString()].price,
|
53
55
|
PRICES[client.debtMint.toString()].price,
|
@@ -58,7 +60,7 @@ function assertAccurateRebalance(
|
|
58
60
|
if (increasingLeverage) {
|
59
61
|
adjustmentFeeBps = getSolautoFeesBps(
|
60
62
|
client.referredByState !== undefined,
|
61
|
-
client.
|
63
|
+
client.solautoPositionData!.feeType,
|
62
64
|
fromBaseUnit(
|
63
65
|
client.solautoPositionState?.netWorth.baseAmountUsdValue ?? BigInt(0),
|
64
66
|
USD_DECIMALS
|
@@ -178,7 +180,9 @@ async function getFakePosition(
|
|
178
180
|
padding2: [],
|
179
181
|
padding: new Uint8Array([]),
|
180
182
|
},
|
183
|
+
feeType: FeeType.Default,
|
181
184
|
padding1: [],
|
185
|
+
padding2: [],
|
182
186
|
padding: [],
|
183
187
|
publicKey: publicKey(PublicKey.default),
|
184
188
|
header: {
|