@haven-fi/solauto-sdk 1.0.201 → 1.0.203

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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;AAG1D,eAAO,MAAM,sBAAsB,iDAAiD,CAAC;AAErF,eAAO,MAAM,cAAc,QAA+B,CAAC;AAE3D,eAAO,MAAM,iBAAiB,EAAE;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAA;CA2B5F,CAAC;AAEF,eAAO,MAAM,8BAA8B,iDAAiD,CAAC"}
1
+ {"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAG1D,eAAO,MAAM,sBAAsB,iDACa,CAAC;AAEjD,eAAO,MAAM,cAAc,QAA+B,CAAC;AAE3D,eAAO,MAAM,iBAAiB,EAAE;IAC9B,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CA0G7D,CAAC;AAEF,eAAO,MAAM,8BAA8B,iDACK,CAAC"}
@@ -1,8 +1,31 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = exports.MARGINFI_ACCOUNTS = exports.DEFAULT_PUBKEY = exports.DEFAULT_MARGINFI_GROUP = void 0;
4
27
  const spl_token_1 = require("@solana/spl-token");
5
- const tokenConstants_1 = require("./tokenConstants");
28
+ const tokens = __importStar(require("./tokenConstants"));
6
29
  const web3_js_1 = require("@solana/web3.js");
7
30
  exports.DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
8
31
  exports.DEFAULT_PUBKEY = web3_js_1.PublicKey.default.toString();
@@ -12,26 +35,104 @@ exports.MARGINFI_ACCOUNTS = {
12
35
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
13
36
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
14
37
  vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
15
- priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"
38
+ priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
16
39
  },
17
- [tokenConstants_1.USDC_MINT]: {
18
- bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
19
- liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
20
- vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
21
- priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX"
22
- },
23
- [tokenConstants_1.B_SOL]: {
40
+ [tokens.B_SOL]: {
24
41
  bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
25
42
  liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
26
43
  vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
27
44
  priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
28
45
  },
29
- [tokenConstants_1.JUP]: {
46
+ [tokens.M_SOL]: {
47
+ bank: "22DcjMZrMwC5Bpa5AGBsmjc5V9VuQrXG6N9ZtdUNyYGE",
48
+ liquidityVault: "B6HqNn83a2bLqo4i5ygjLHJgD11ePtQksUyx4MjD55DV",
49
+ vaultAuthority: "6YxGd65JbXzgFGWjE44jsyVeCnZp7Bb1wfL9jDia1n8w",
50
+ priceOracle: "5CKzb9j4ChgLUt8Gfm5CNGLN6khXKiqMbnGAW4cgXgxK",
51
+ },
52
+ [tokens.JITO_SOL]: {
53
+ bank: "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8",
54
+ liquidityVault: "38VGtXd2pDPq9FMh1z6AVjcHCoHgvWyMhdNyamDTeeks",
55
+ vaultAuthority: "7Ng54qf7BrCcZLqXmKA9WSR7SVRn4q6RX1YpLksBQ21A",
56
+ priceOracle: "AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g",
57
+ },
58
+ [tokens.LST]: {
59
+ bank: "DMoqjmsuoru986HgfjqrKEvPv8YBufvBGADHUonkadC5",
60
+ liquidityVault: "DMQUXpb6K5L8osgV4x3NeEPUoJCf2VBgnA8FQusDjSou",
61
+ vaultAuthority: "6PWVauGLhBFHUJspsnBVZHr56ZnbvmhSD2gS7czBHGpE",
62
+ priceOracle: "7aT9A5knp62jVvnEW33xaWopaPHa3Y7ggULyYiUsDhu8",
63
+ },
64
+ [tokens.INF]: {
65
+ bank: "AwLRW3aPMMftXEjgWhTkYwM9CGBHdtKecvahCJZBwAqY",
66
+ liquidityVault: "HQ1CGcqRshMhuonTGTnnmgw9ffcXxizGdZ6F6PKffWWi",
67
+ vaultAuthority: "AEZb1XH5bfLwqk3hBKDuLfWyJKdLTgDPCkgn64BJKcvV",
68
+ priceOracle: "DCNeMcAZGU7pAsqu5q2xMKerq35BnUuTkagt1dkR1xB",
69
+ },
70
+ [tokens.JUP]: {
30
71
  bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
31
72
  liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
32
73
  vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
33
74
  priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
34
- }
35
- }
75
+ },
76
+ [tokens.BONK]: {
77
+ bank: "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM",
78
+ liquidityVault: "7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
79
+ vaultAuthority: "26kcZkdjJc94PdhqiLiEaGiLCYgAVVUfpDaZyK4cqih3",
80
+ priceOracle: "DBE3N8uNjhKPRHfANdwGvCZghWXyLPdqdSbEW2XFwBiX",
81
+ },
82
+ [tokens.WIF]: {
83
+ bank: "9dpu8KL5ABYiD3WP2Cnajzg1XaotcJvZspv29Y1Y3tn1",
84
+ liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
85
+ vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L",
86
+ priceOracle: "6B23K3tkb51vLZA14jcEQVCA1pfHptzEHFA93V5dYwbT",
87
+ },
88
+ [tokens.JTO]: {
89
+ bank: "EdB7YADw4XUt6wErT8kHGCUok4mnTpWGzPUU9rWDebzb",
90
+ liquidityVault: "3bY1DEkXodGmPMG5f7ABA12228MBG5JdAAKf5cgkB6G1",
91
+ vaultAuthority: "H2b4f2fGSKFortxwzrMZBnYVfr2yrKVUakg4Md9be3Wv",
92
+ priceOracle: "7ajR2zA4MGMMTqRAVjghTKqPPn4kbrj3pYkAVRVwTGzP",
93
+ },
94
+ [tokens.JLP]: {
95
+ bank: "Amtw3n7GZe5SWmyhMhaFhDTi39zbTkLeWErBsmZXwpDa",
96
+ liquidityVault: "9xfyL8gxbV77VvhdgFmacHyLEG4h7d2eDWkSMfhXUPQ",
97
+ vaultAuthority: "F4RSGd4BRXscCqAVG3rFLiPVpo7v6j1drVqnvSM3rBKH",
98
+ priceOracle: "B1wxT1VK3i6DqCeXNdTHT5hBAJkLa3rxuTqBc7E7XRXV",
99
+ },
100
+ [tokens.WBTC]: {
101
+ bank: "BKsfDJCMbYep6gr9pq8PsmJbb5XGLHbAJzUV8vmorz7a",
102
+ liquidityVault: "CMNdnjfaDQZo3VMoX31wZQBnSGu5FMmb1CnBaU4tApZk",
103
+ vaultAuthority: "7P2TQHYgVJkXv1VPaREsL5Pi1gnNjVif5aF3pJewZ9kj",
104
+ priceOracle: "4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo",
105
+ },
106
+ [tokens.WETH]: {
107
+ bank: "BkUyfXjbBBALcfZvw76WAFRvYQ21xxMWWeoPtJrUqG3z",
108
+ liquidityVault: "AxPJtiTEDksJWvCqNHCziK4uUcabqfmwW41dqtZrPFkp",
109
+ vaultAuthority: "ELXogWuyXrFyUG1vevffVbEhVxdFrHf2GCJTtRGKBWdM",
110
+ priceOracle: "42amVS4KgzR9rA28tkVYqVXjq9Qa8dcZQMbH5EYFX6XC",
111
+ },
112
+ [tokens.HNT]: {
113
+ bank: "JBcir4DPRPYVUpks9hkS1jtHMXejfeBo4xJGv3AYYHg6",
114
+ liquidityVault: "E8Q7u5e9L9Uykx16em75ERT9wfbBPtkNL8gsRjoP8GB9",
115
+ vaultAuthority: "AjsyrYpgaH275DBSnvNWdGK33hVycSFuXN87FKnX6fVY",
116
+ priceOracle: "4DdmDswskDxXGpwHrXUfn2CNUm9rt21ac79GHNTN3J33",
117
+ },
118
+ [tokens.PYTH]: {
119
+ bank: "E4td8i8PT2BZkMygzW4MGHCv2KPPs57dvz5W2ZXf9Twu",
120
+ liquidityVault: "DUrAkkaMAckzes7so9T5frXm9YFFgjAAm3MMwHwTfVJq",
121
+ vaultAuthority: "9b5KdVnbbfEQ2qhLeFjWvcAx2VWe9XHx7ZgayZyL9a6C",
122
+ priceOracle: "8vjchtMuJNY4oFQdTi8yCe6mhCaNBFaUbktT482TpLPS",
123
+ },
124
+ [tokens.USDC]: {
125
+ bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
126
+ liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
127
+ vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
128
+ priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX",
129
+ },
130
+ [tokens.USDT]: {
131
+ bank: "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV",
132
+ liquidityVault: "77t6Fi9qj4s4z22K1toufHtstM8rEy7Y3ytxik7mcsTy",
133
+ vaultAuthority: "9r6z6KgkEytHCdQWNxvDQH98PsfU98f1m5PCg47mY2XE",
134
+ priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
135
+ },
136
+ },
36
137
  };
37
138
  exports.MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
@@ -1,7 +1,20 @@
1
1
  export declare const PYTH_PRICE_FEED_IDS: {
2
2
  [x: string]: string;
3
- EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: string;
4
3
  bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1: string;
4
+ mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So: string;
5
+ J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn: string;
6
+ LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp: string;
7
+ "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm": string;
5
8
  JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN: string;
9
+ DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263: string;
10
+ EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm: string;
11
+ jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL: string;
12
+ "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4": string;
13
+ "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh": string;
14
+ "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs": string;
15
+ hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux: string;
16
+ HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3: string;
17
+ EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v: string;
18
+ Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB: string;
6
19
  };
7
20
  //# 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;;;;;CAO/B,CAAC"}
1
+ {"version":3,"file":"pythConstants.d.ts","sourceRoot":"","sources":["../../src/constants/pythConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;CAmC/B,CAAC"}
@@ -1,12 +1,48 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
2
25
  Object.defineProperty(exports, "__esModule", { value: true });
3
26
  exports.PYTH_PRICE_FEED_IDS = void 0;
4
27
  const spl_token_1 = require("@solana/spl-token");
5
- const tokenConstants_1 = require("./tokenConstants");
28
+ const tokens = __importStar(require("./tokenConstants"));
6
29
  // https://pyth.network/developers/price-feed-ids#solana-stable
7
30
  exports.PYTH_PRICE_FEED_IDS = {
8
31
  [spl_token_1.NATIVE_MINT.toString()]: "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
9
- [tokenConstants_1.USDC_MINT]: "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
10
- [tokenConstants_1.B_SOL]: "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
11
- [tokenConstants_1.JUP]: "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
32
+ [tokens.B_SOL]: "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
33
+ [tokens.M_SOL]: "0xc2289a6a43d2ce91c6f55caec370f4acc38a2ed477f58813334c6d03749ff2a4",
34
+ [tokens.JITO_SOL]: "0x67be9f519b95cf24338801051f9a808eff0a578ccb388db73b7f6fe1de019ffb",
35
+ [tokens.LST]: "0x12fb674ee496045b1d9cf7d5e65379acb026133c2ad69f3ed996fb9fe68e3a37",
36
+ [tokens.INF]: "0xf51570985c642c49c2d6e50156390fdba80bb6d5f7fa389d2f012ced4f7d208f",
37
+ [tokens.JUP]: "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
38
+ [tokens.BONK]: "0x72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419",
39
+ [tokens.WIF]: "0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc",
40
+ [tokens.JTO]: "0xb43660a5f790c69354b0729a5ef9d50d68f1df92107540210b9cccba1f947cc2",
41
+ [tokens.JLP]: "0xc811abc82b4bad1f9bd711a2773ccaa935b03ecef974236942cec5e0eb845a3a",
42
+ [tokens.WBTC]: "0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33",
43
+ [tokens.WETH]: "0x9d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6",
44
+ [tokens.HNT]: "0x649fdd7ec08e8e2a20f425729854e90293dcbe2376abc47197a14da6ff339756",
45
+ [tokens.PYTH]: "0x0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff",
46
+ [tokens.USDC]: "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
47
+ [tokens.USDT]: "0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
12
48
  };
@@ -1,6 +1,19 @@
1
- export declare const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
2
1
  export declare const B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
2
+ export declare const JITO_SOL = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
3
+ export declare const LST = "LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp";
4
+ export declare const M_SOL = "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So";
5
+ export declare const INF = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
3
6
  export declare const JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
7
+ export declare const BONK = "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263";
8
+ export declare const WIF = "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm";
9
+ export declare const JTO = "jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL";
10
+ export declare const JLP = "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4";
11
+ export declare const WBTC = "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh";
12
+ export declare const WETH = "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs";
13
+ export declare const HNT = "hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux";
14
+ export declare const PYTH = "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3";
15
+ export declare const USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
16
+ export declare const USDT = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB";
4
17
  export declare const ALL_SUPPORTED_TOKENS: string[];
5
18
  interface TokenInfo {
6
19
  ticker: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAIA,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,MAAM,EAAE,MAAM,CAAC;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;CAuBlD,CAAC"}
1
+ {"version":3,"file":"tokenConstants.d.ts","sourceRoot":"","sources":["../../src/constants/tokenConstants.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,QAAQ,iDAAiD,CAAC;AACvE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,KAAK,gDAAgD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,GAAG,iDAAiD,CAAC;AAClE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,GAAG,gDAAgD,CAAC;AACjE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AACnE,eAAO,MAAM,IAAI,iDAAiD,CAAC;AAEnE,eAAO,MAAM,oBAAoB,UAkBhC,CAAC;AAEF,UAAU,SAAS;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAgFlD,CAAC"}
@@ -1,39 +1,122 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TOKEN_INFO = exports.ALL_SUPPORTED_TOKENS = exports.JUP = exports.B_SOL = exports.USDC_MINT = void 0;
3
+ exports.TOKEN_INFO = exports.ALL_SUPPORTED_TOKENS = exports.USDT = exports.USDC = exports.PYTH = exports.HNT = exports.WETH = exports.WBTC = exports.JLP = exports.JTO = exports.WIF = exports.BONK = exports.JUP = exports.INF = exports.M_SOL = exports.LST = exports.JITO_SOL = exports.B_SOL = void 0;
4
4
  const spl_token_1 = require("@solana/spl-token");
5
5
  const web3_js_1 = require("@solana/web3.js");
6
6
  // When adding token ensure a price feed is provided in pythConstants.ts & the token is in TOKEN_INFO
7
- exports.USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
8
7
  exports.B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
8
+ exports.JITO_SOL = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
9
+ exports.LST = "LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp";
10
+ exports.M_SOL = "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So";
11
+ exports.INF = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
9
12
  exports.JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
13
+ exports.BONK = "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263";
14
+ exports.WIF = "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm";
15
+ exports.JTO = "jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL";
16
+ exports.JLP = "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4";
17
+ exports.WBTC = "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh";
18
+ exports.WETH = "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs";
19
+ exports.HNT = "hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux";
20
+ exports.PYTH = "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3";
21
+ exports.USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
22
+ exports.USDT = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB";
10
23
  exports.ALL_SUPPORTED_TOKENS = [
11
24
  spl_token_1.NATIVE_MINT.toString(),
12
- exports.USDC_MINT,
13
25
  exports.B_SOL,
26
+ exports.M_SOL,
27
+ exports.JITO_SOL,
28
+ exports.LST,
29
+ exports.INF,
14
30
  exports.JUP,
31
+ exports.BONK,
32
+ exports.WIF,
33
+ exports.JTO,
34
+ exports.JLP,
35
+ exports.WBTC,
36
+ exports.WETH,
37
+ exports.HNT,
38
+ exports.PYTH,
39
+ exports.USDC,
40
+ exports.USDT,
15
41
  ];
16
42
  exports.TOKEN_INFO = {
17
43
  [web3_js_1.PublicKey.default.toString()]: {
18
44
  ticker: "",
19
- decimals: 1
45
+ decimals: 1,
20
46
  },
21
47
  [spl_token_1.NATIVE_MINT.toString()]: {
22
48
  ticker: "SOL",
23
49
  decimals: 9,
24
50
  },
25
- [exports.USDC_MINT]: {
26
- ticker: "USDC",
27
- decimals: 6,
28
- isStableCoin: true
29
- },
30
51
  [exports.B_SOL]: {
31
- ticker: "BSOL",
52
+ ticker: "bSOL",
53
+ decimals: 9,
54
+ isLST: true,
55
+ },
56
+ [exports.M_SOL]: {
57
+ ticker: "mSOL",
58
+ decimals: 9,
59
+ isLST: true,
60
+ },
61
+ [exports.JITO_SOL]: {
62
+ ticker: "JitoSOL",
32
63
  decimals: 9,
33
- isLST: true
64
+ isLST: true,
65
+ },
66
+ [exports.LST]: {
67
+ ticker: "LST",
68
+ decimals: 9,
69
+ isLST: true,
70
+ },
71
+ [exports.INF]: {
72
+ ticker: "INF",
73
+ decimals: 9,
74
+ isLST: true,
34
75
  },
35
76
  [exports.JUP]: {
36
77
  ticker: "JUP",
78
+ decimals: 6,
79
+ },
80
+ [exports.BONK]: {
81
+ ticker: "BONK",
82
+ decimals: 5,
83
+ },
84
+ [exports.WIF]: {
85
+ ticker: "WIF",
37
86
  decimals: 6
38
- }
87
+ },
88
+ [exports.JTO]: {
89
+ ticker: "JTO",
90
+ decimals: 9,
91
+ },
92
+ [exports.JLP]: {
93
+ ticker: "JLP",
94
+ decimals: 6,
95
+ },
96
+ [exports.WBTC]: {
97
+ ticker: "WBTC",
98
+ decimals: 8,
99
+ },
100
+ [exports.WETH]: {
101
+ ticker: "WETH",
102
+ decimals: 8
103
+ },
104
+ [exports.HNT]: {
105
+ ticker: "HNT",
106
+ decimals: 8
107
+ },
108
+ [exports.PYTH]: {
109
+ ticker: "PYTH",
110
+ decimals: 6
111
+ },
112
+ [exports.USDC]: {
113
+ ticker: "USDC",
114
+ decimals: 6,
115
+ isStableCoin: true,
116
+ },
117
+ [exports.USDT]: {
118
+ ticker: "USDT",
119
+ decimals: 6,
120
+ isStableCoin: true,
121
+ },
39
122
  };
@@ -19,5 +19,6 @@ export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: P
19
19
  debtMint?: PublicKey;
20
20
  }[]>;
21
21
  export declare function getMarginfiAccountPositionState(umi: Umi, marginfiAccountPk: PublicKey, marginfiGroup?: PublicKey, supplyMint?: PublicKey, debtMint?: PublicKey, livePositionUpdates?: LivePositionUpdates): Promise<PositionState | undefined>;
22
- export declare function getUpToDateShareValues(umi: Umi, bank: Bank): Promise<[number, number]>;
22
+ export declare function calculateAnnualAPYs(bank: Bank): [number, number];
23
+ export declare function getUpToDateShareValues(bank: Bank): Promise<[number, number]>;
23
24
  //# sourceMappingURL=marginfiUtils.d.ts.map
@@ -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;AAiBzB,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,CAY3E;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,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,CAwC3B;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,CAwDA;AAgED,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,aAAa,CAAC,EAAE,SAAS,EACzB,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAmLpC;AA+DD,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAyB3B"}
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;AAiBzB,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,CAY3E;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,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,CAwC3B;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,CAwDA;AA6DD,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,SAAS,EAC5B,aAAa,CAAC,EAAE,SAAS,EACzB,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA+KpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB3B"}
@@ -5,6 +5,7 @@ exports.marginfiMaxLtvAndLiqThresholdBps = marginfiMaxLtvAndLiqThresholdBps;
5
5
  exports.getMaxLtvAndLiqThreshold = getMaxLtvAndLiqThreshold;
6
6
  exports.getAllMarginfiAccountsByAuthority = getAllMarginfiAccountsByAuthority;
7
7
  exports.getMarginfiAccountPositionState = getMarginfiAccountPositionState;
8
+ exports.calculateAnnualAPYs = calculateAnnualAPYs;
8
9
  exports.getUpToDateShareValues = getUpToDateShareValues;
9
10
  const web3_js_1 = require("@solana/web3.js");
10
11
  const umi_1 = require("@metaplex-foundation/umi");
@@ -103,13 +104,13 @@ async function getAllMarginfiAccountsByAuthority(umi, authority, compatibleWithS
103
104
  }));
104
105
  }
105
106
  }
106
- async function getTokenUsage(umi, bank, isAsset, shares, amountUsedAdjustment) {
107
+ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
107
108
  let amountUsed = 0;
108
109
  let amountCanBeUsed = 0;
109
110
  let marketPrice = 0;
110
111
  if (bank !== null) {
111
112
  [marketPrice] = await (0, generalUtils_1.fetchTokenPrices)([(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.mint)]);
112
- const [assetShareValue, liabilityShareValue] = await getUpToDateShareValues(umi, bank);
113
+ const [assetShareValue, liabilityShareValue] = await getUpToDateShareValues(bank);
113
114
  const shareValue = isAsset ? assetShareValue : liabilityShareValue;
114
115
  amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
115
116
  const totalDeposited = (0, numberUtils_1.bytesToI80F48)(bank.totalAssetShares.value) * assetShareValue;
@@ -172,7 +173,7 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
172
173
  if (!supplyMint) {
173
174
  supplyMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint);
174
175
  }
175
- supplyUsage = await getTokenUsage(umi, supplyBank, true, (0, numberUtils_1.bytesToI80F48)(supplyBalances[0].assetShares.value), livePositionUpdates?.supplyAdjustment);
176
+ supplyUsage = await getTokenUsage(supplyBank, true, (0, numberUtils_1.bytesToI80F48)(supplyBalances[0].assetShares.value), livePositionUpdates?.supplyAdjustment);
176
177
  }
177
178
  if (debtBalances.length > 0) {
178
179
  if (debtBank === null) {
@@ -183,7 +184,7 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
183
184
  if (!debtMint) {
184
185
  debtMint = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(debtBank.mint);
185
186
  }
186
- debtUsage = await getTokenUsage(umi, debtBank, false, (0, numberUtils_1.bytesToI80F48)(debtBalances[0].liabilityShares.value), livePositionUpdates?.debtAdjustment);
187
+ debtUsage = await getTokenUsage(debtBank, false, (0, numberUtils_1.bytesToI80F48)(debtBalances[0].liabilityShares.value), livePositionUpdates?.debtAdjustment);
187
188
  }
188
189
  }
189
190
  if (supplyBank === null) {
@@ -194,14 +195,14 @@ async function getMarginfiAccountPositionState(umi, marginfiAccountPk, marginfiG
194
195
  return undefined;
195
196
  }
196
197
  if (!supplyUsage) {
197
- supplyUsage = await getTokenUsage(umi, supplyBank, true, 0, livePositionUpdates?.supplyAdjustment);
198
+ supplyUsage = await getTokenUsage(supplyBank, true, 0, livePositionUpdates?.supplyAdjustment);
198
199
  }
199
200
  if (constants_1.TOKEN_INFO[supplyBank.mint.toString()].isStableCoin &&
200
201
  (debtBank === null || constants_1.TOKEN_INFO[debtBank.mint.toString()].isStableCoin)) {
201
202
  return undefined;
202
203
  }
203
204
  if (!debtUsage) {
204
- debtUsage = await getTokenUsage(umi, debtBank, false, 0, livePositionUpdates?.debtAdjustment);
205
+ debtUsage = await getTokenUsage(debtBank, false, 0, livePositionUpdates?.debtAdjustment);
205
206
  }
206
207
  const supplyPrice = (0, generalUtils_1.safeGetPrice)(supplyMint);
207
208
  let [maxLtv, liqThreshold] = await getMaxLtvAndLiqThreshold(umi, marginfiGroup ?? new web3_js_1.PublicKey(marginfiAccounts_1.DEFAULT_MARGINFI_GROUP), {
@@ -234,10 +235,10 @@ function marginfiInterestRateCurve(bank, utilizationRatio) {
234
235
  const plateauIr = (0, numberUtils_1.bytesToI80F48)(bank.config.interestRateConfig.plateauInterestRate.value);
235
236
  const maxIr = (0, numberUtils_1.bytesToI80F48)(bank.config.interestRateConfig.maxInterestRate.value);
236
237
  if (utilizationRatio <= optimalUr) {
237
- return (utilizationRatio / optimalUr) * plateauIr;
238
+ return (utilizationRatio * plateauIr) / optimalUr;
238
239
  }
239
240
  else {
240
- return (((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr) +
241
+ return ((((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr)) +
241
242
  plateauIr);
242
243
  }
243
244
  }
@@ -250,7 +251,7 @@ function calcInterestRate(bank, utilizationRatio) {
250
251
  const insuranceFixedFeeApr = (0, numberUtils_1.bytesToI80F48)(bank.config.interestRateConfig.insuranceFeeFixedApr.value);
251
252
  const rateFee = protocolIrFee + insuranceIrFee;
252
253
  const totalFixedFeeApr = protocolFixedFeeApr + insuranceFixedFeeApr;
253
- const borrowingRate = baseRate * (1 + rateFee) * totalFixedFeeApr;
254
+ const borrowingRate = (baseRate * (1 + rateFee)) + totalFixedFeeApr;
254
255
  return [lendingRate, borrowingRate];
255
256
  }
256
257
  function calcAccruedInterestPaymentPerPeriod(apr, timeDelta, shareValue) {
@@ -258,14 +259,17 @@ function calcAccruedInterestPaymentPerPeriod(apr, timeDelta, shareValue) {
258
259
  const newValue = shareValue * (1 + irPerPeriod);
259
260
  return newValue;
260
261
  }
261
- async function getUpToDateShareValues(umi, bank) {
262
- let timeDelta = (0, generalUtils_1.currentUnixSeconds)() - Number(bank.lastUpdate);
262
+ function calculateAnnualAPYs(bank) {
263
263
  const totalAssets = (0, numberUtils_1.bytesToI80F48)(bank.totalAssetShares.value) *
264
264
  (0, numberUtils_1.bytesToI80F48)(bank.assetShareValue.value);
265
265
  const totalLiabilities = (0, numberUtils_1.bytesToI80F48)(bank.totalLiabilityShares.value) *
266
266
  (0, numberUtils_1.bytesToI80F48)(bank.liabilityShareValue.value);
267
267
  const utilizationRatio = totalLiabilities / totalAssets;
268
- const [lendingApr, borrowingApr] = calcInterestRate(bank, utilizationRatio);
268
+ return calcInterestRate(bank, utilizationRatio);
269
+ }
270
+ async function getUpToDateShareValues(bank) {
271
+ let timeDelta = (0, generalUtils_1.currentUnixSeconds)() - Number(bank.lastUpdate);
272
+ const [lendingApr, borrowingApr] = calculateAnnualAPYs(bank);
269
273
  return [
270
274
  calcAccruedInterestPaymentPerPeriod(lendingApr, timeDelta, (0, numberUtils_1.bytesToI80F48)(bank.assetShareValue.value)),
271
275
  calcAccruedInterestPaymentPerPeriod(borrowingApr, timeDelta, (0, numberUtils_1.bytesToI80F48)(bank.liabilityShareValue.value)),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@haven-fi/solauto-sdk",
3
- "version": "1.0.201",
3
+ "version": "1.0.203",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "description": "Typescript SDK for the Solauto program on the Solana blockchain",
@@ -23,7 +23,6 @@
23
23
  "@solana/spl-token": "^0.4.0",
24
24
  "@solana/web3.js": "^1.92.1",
25
25
  "@sqds/multisig": "^2.1.3",
26
- "@types/node": "^20.14.8",
27
26
  "bs58": "^5.0.0",
28
27
  "cross-fetch": "^4.0.0",
29
28
  "rpc-websockets": "7.11.0"
@@ -31,6 +30,7 @@
31
30
  "devDependencies": {
32
31
  "@types/chai": "^4.3.0",
33
32
  "@types/mocha": "^9.1.1",
33
+ "@types/node": "^20.16.11",
34
34
  "chai": "^4.3.4",
35
35
  "mocha": "^9.2.2",
36
36
  "ts-mocha": "^10.0.0",
@@ -1,39 +1,121 @@
1
1
  import { NATIVE_MINT } from "@solana/spl-token";
2
- import { B_SOL, JUP, USDC_MINT } from "./tokenConstants";
2
+ import * as tokens from "./tokenConstants";
3
3
  import { MarginfiAssetAccounts } from "../types/accounts";
4
4
  import { PublicKey } from "@solana/web3.js";
5
5
 
6
- export const DEFAULT_MARGINFI_GROUP = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
6
+ export const DEFAULT_MARGINFI_GROUP =
7
+ "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
7
8
 
8
9
  export const DEFAULT_PUBKEY = PublicKey.default.toString();
9
10
 
10
- export const MARGINFI_ACCOUNTS: { [group: string]: { [token: string]: MarginfiAssetAccounts } } = {
11
+ export const MARGINFI_ACCOUNTS: {
12
+ [group: string]: { [token: string]: MarginfiAssetAccounts };
13
+ } = {
11
14
  [DEFAULT_MARGINFI_GROUP.toString()]: {
12
15
  [NATIVE_MINT.toString()]: {
13
16
  bank: "CCKtUs6Cgwo4aaQUmBPmyoApH2gUDErxNZCAntD6LYGh",
14
17
  liquidityVault: "2eicbpitfJXDwqCuFAmPgDP7t2oUotnAzbGzRKLMgSLe",
15
18
  vaultAuthority: "DD3AeAssFvjqTvRTrRAtpfjkBF8FpVKnFuwnMLN9haXD",
16
- priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE"
19
+ priceOracle: "7UVimffxr9ow1uXYxsr4LHAcV58mLzhmwaeKvJ1pjLiE",
17
20
  },
18
- [USDC_MINT]: {
19
- bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
20
- liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
21
- vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
22
- priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX"
23
- },
24
- [B_SOL]: {
21
+ [tokens.B_SOL]: {
25
22
  bank: "6hS9i46WyTq1KXcoa2Chas2Txh9TJAVr6n1t3tnrE23K",
26
23
  liquidityVault: "2WMipeKDB2CENxbzdmnVrRbsxCA2LY6kCtBe6AAqDP9p",
27
24
  vaultAuthority: "8RcZHucpVHkHWRRdMhJZsxBK9mqKSYnMKGqtF84U8YEo",
28
25
  priceOracle: "5cN76Xm2Dtx9MnrQqBDeZZRsWruTTcw37UruznAdSvvE",
29
26
  },
30
- [JUP]: {
27
+ [tokens.M_SOL]: {
28
+ bank: "22DcjMZrMwC5Bpa5AGBsmjc5V9VuQrXG6N9ZtdUNyYGE",
29
+ liquidityVault: "B6HqNn83a2bLqo4i5ygjLHJgD11ePtQksUyx4MjD55DV",
30
+ vaultAuthority: "6YxGd65JbXzgFGWjE44jsyVeCnZp7Bb1wfL9jDia1n8w",
31
+ priceOracle: "5CKzb9j4ChgLUt8Gfm5CNGLN6khXKiqMbnGAW4cgXgxK",
32
+ },
33
+ [tokens.JITO_SOL]: {
34
+ bank: "Bohoc1ikHLD7xKJuzTyiTyCwzaL5N7ggJQu75A8mKYM8",
35
+ liquidityVault: "38VGtXd2pDPq9FMh1z6AVjcHCoHgvWyMhdNyamDTeeks",
36
+ vaultAuthority: "7Ng54qf7BrCcZLqXmKA9WSR7SVRn4q6RX1YpLksBQ21A",
37
+ priceOracle: "AxaxyeDT8JnWERSaTKvFXvPKkEdxnamKSqpWbsSjYg1g",
38
+ },
39
+ [tokens.LST]: {
40
+ bank: "DMoqjmsuoru986HgfjqrKEvPv8YBufvBGADHUonkadC5",
41
+ liquidityVault: "DMQUXpb6K5L8osgV4x3NeEPUoJCf2VBgnA8FQusDjSou",
42
+ vaultAuthority: "6PWVauGLhBFHUJspsnBVZHr56ZnbvmhSD2gS7czBHGpE",
43
+ priceOracle: "7aT9A5knp62jVvnEW33xaWopaPHa3Y7ggULyYiUsDhu8",
44
+ },
45
+ [tokens.INF]: {
46
+ bank: "AwLRW3aPMMftXEjgWhTkYwM9CGBHdtKecvahCJZBwAqY",
47
+ liquidityVault: "HQ1CGcqRshMhuonTGTnnmgw9ffcXxizGdZ6F6PKffWWi",
48
+ vaultAuthority: "AEZb1XH5bfLwqk3hBKDuLfWyJKdLTgDPCkgn64BJKcvV",
49
+ priceOracle: "DCNeMcAZGU7pAsqu5q2xMKerq35BnUuTkagt1dkR1xB",
50
+ },
51
+ [tokens.JUP]: {
31
52
  bank: "Guu5uBc8k1WK1U2ihGosNaCy57LSgCkpWAabtzQqrQf8",
32
53
  liquidityVault: "4w49W4fNDn778wsBa6TNq9hvebZKU17ymsptrEZ8zrsm",
33
54
  vaultAuthority: "2MBwwAhL3c73Jy7HkWd9ofzh1bU39JBabrZCFQR2tUof",
34
55
  priceOracle: "7dbob1psH1iZBS7qPsm3Kwbf5DzSXK8Jyg31CTgTnxH5",
35
- }
36
- }
56
+ },
57
+ [tokens.BONK]: {
58
+ bank: "DeyH7QxWvnbbaVB4zFrf4hoq7Q8z1ZT14co42BGwGtfM",
59
+ liquidityVault: "7FdQsXmCW3N5JQbknj3F9Yqq73er9VZJjGhEEMS8Ct2A",
60
+ vaultAuthority: "26kcZkdjJc94PdhqiLiEaGiLCYgAVVUfpDaZyK4cqih3",
61
+ priceOracle: "DBE3N8uNjhKPRHfANdwGvCZghWXyLPdqdSbEW2XFwBiX",
62
+ },
63
+ [tokens.WIF]: {
64
+ bank: "9dpu8KL5ABYiD3WP2Cnajzg1XaotcJvZspv29Y1Y3tn1",
65
+ liquidityVault: "4kT3EXc5dDVndUU9mV6EH3Jh3CSEvpcCZjuMkwqrtxUy",
66
+ vaultAuthority: "9gNrvvZ9RuTyRWooiEEypwcXU6kyXW8yWuhXU8tWUH5L",
67
+ priceOracle: "6B23K3tkb51vLZA14jcEQVCA1pfHptzEHFA93V5dYwbT",
68
+ },
69
+ [tokens.JTO]: {
70
+ bank: "EdB7YADw4XUt6wErT8kHGCUok4mnTpWGzPUU9rWDebzb",
71
+ liquidityVault: "3bY1DEkXodGmPMG5f7ABA12228MBG5JdAAKf5cgkB6G1",
72
+ vaultAuthority: "H2b4f2fGSKFortxwzrMZBnYVfr2yrKVUakg4Md9be3Wv",
73
+ priceOracle: "7ajR2zA4MGMMTqRAVjghTKqPPn4kbrj3pYkAVRVwTGzP",
74
+ },
75
+ [tokens.JLP]: {
76
+ bank: "Amtw3n7GZe5SWmyhMhaFhDTi39zbTkLeWErBsmZXwpDa",
77
+ liquidityVault: "9xfyL8gxbV77VvhdgFmacHyLEG4h7d2eDWkSMfhXUPQ",
78
+ vaultAuthority: "F4RSGd4BRXscCqAVG3rFLiPVpo7v6j1drVqnvSM3rBKH",
79
+ priceOracle: "B1wxT1VK3i6DqCeXNdTHT5hBAJkLa3rxuTqBc7E7XRXV",
80
+ },
81
+ [tokens.WBTC]: {
82
+ bank: "BKsfDJCMbYep6gr9pq8PsmJbb5XGLHbAJzUV8vmorz7a",
83
+ liquidityVault: "CMNdnjfaDQZo3VMoX31wZQBnSGu5FMmb1CnBaU4tApZk",
84
+ vaultAuthority: "7P2TQHYgVJkXv1VPaREsL5Pi1gnNjVif5aF3pJewZ9kj",
85
+ priceOracle: "4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo",
86
+ },
87
+ [tokens.WETH]: {
88
+ bank: "BkUyfXjbBBALcfZvw76WAFRvYQ21xxMWWeoPtJrUqG3z",
89
+ liquidityVault: "AxPJtiTEDksJWvCqNHCziK4uUcabqfmwW41dqtZrPFkp",
90
+ vaultAuthority: "ELXogWuyXrFyUG1vevffVbEhVxdFrHf2GCJTtRGKBWdM",
91
+ priceOracle: "42amVS4KgzR9rA28tkVYqVXjq9Qa8dcZQMbH5EYFX6XC",
92
+ },
93
+ [tokens.HNT]: {
94
+ bank: "JBcir4DPRPYVUpks9hkS1jtHMXejfeBo4xJGv3AYYHg6",
95
+ liquidityVault: "E8Q7u5e9L9Uykx16em75ERT9wfbBPtkNL8gsRjoP8GB9",
96
+ vaultAuthority: "AjsyrYpgaH275DBSnvNWdGK33hVycSFuXN87FKnX6fVY",
97
+ priceOracle: "4DdmDswskDxXGpwHrXUfn2CNUm9rt21ac79GHNTN3J33",
98
+ },
99
+ [tokens.PYTH]: {
100
+ bank: "E4td8i8PT2BZkMygzW4MGHCv2KPPs57dvz5W2ZXf9Twu",
101
+ liquidityVault: "DUrAkkaMAckzes7so9T5frXm9YFFgjAAm3MMwHwTfVJq",
102
+ vaultAuthority: "9b5KdVnbbfEQ2qhLeFjWvcAx2VWe9XHx7ZgayZyL9a6C",
103
+ priceOracle: "8vjchtMuJNY4oFQdTi8yCe6mhCaNBFaUbktT482TpLPS",
104
+ },
105
+ [tokens.USDC]: {
106
+ bank: "2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB",
107
+ liquidityVault: "7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat",
108
+ vaultAuthority: "3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG",
109
+ priceOracle: "Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX",
110
+ },
111
+ [tokens.USDT]: {
112
+ bank: "HmpMfL8942u22htC4EMiWgLX931g3sacXFR6KjuLgKLV",
113
+ liquidityVault: "77t6Fi9qj4s4z22K1toufHtstM8rEy7Y3ytxik7mcsTy",
114
+ vaultAuthority: "9r6z6KgkEytHCdQWNxvDQH98PsfU98f1m5PCg47mY2XE",
115
+ priceOracle: "HT2PLQBcG5EiCcNSaMHAjSgd9F98ecpATbk4Sk5oYuM",
116
+ },
117
+ },
37
118
  };
38
119
 
39
- export const MARGINFI_ACCOUNTS_LOOKUP_TABLE = "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
120
+ export const MARGINFI_ACCOUNTS_LOOKUP_TABLE =
121
+ "GAjmWmBPcH5Gxbiykasydj6RsCEaCLyHEvK6kHdFigc6";
@@ -1,12 +1,40 @@
1
1
  import { NATIVE_MINT } from "@solana/spl-token";
2
- import { B_SOL, JUP, USDC_MINT } from "./tokenConstants";
2
+ import * as tokens from "./tokenConstants";
3
3
 
4
4
  // https://pyth.network/developers/price-feed-ids#solana-stable
5
5
  export const PYTH_PRICE_FEED_IDS = {
6
6
  [NATIVE_MINT.toString()]:
7
7
  "0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",
8
- [USDC_MINT]:
8
+ [tokens.B_SOL]:
9
+ "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
10
+ [tokens.M_SOL]:
11
+ "0xc2289a6a43d2ce91c6f55caec370f4acc38a2ed477f58813334c6d03749ff2a4",
12
+ [tokens.JITO_SOL]:
13
+ "0x67be9f519b95cf24338801051f9a808eff0a578ccb388db73b7f6fe1de019ffb",
14
+ [tokens.LST]:
15
+ "0x12fb674ee496045b1d9cf7d5e65379acb026133c2ad69f3ed996fb9fe68e3a37",
16
+ [tokens.INF]:
17
+ "0xf51570985c642c49c2d6e50156390fdba80bb6d5f7fa389d2f012ced4f7d208f",
18
+ [tokens.JUP]:
19
+ "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
20
+ [tokens.BONK]:
21
+ "0x72b021217ca3fe68922a19aaf990109cb9d84e9ad004b4d2025ad6f529314419",
22
+ [tokens.WIF]:
23
+ "0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc",
24
+ [tokens.JTO]:
25
+ "0xb43660a5f790c69354b0729a5ef9d50d68f1df92107540210b9cccba1f947cc2",
26
+ [tokens.JLP]:
27
+ "0xc811abc82b4bad1f9bd711a2773ccaa935b03ecef974236942cec5e0eb845a3a",
28
+ [tokens.WBTC]:
29
+ "0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33",
30
+ [tokens.WETH]:
31
+ "0x9d4294bbcd1174d6f2003ec365831e64cc31d9f6f15a2b85399db8d5000960f6",
32
+ [tokens.HNT]:
33
+ "0x649fdd7ec08e8e2a20f425729854e90293dcbe2376abc47197a14da6ff339756",
34
+ [tokens.PYTH]:
35
+ "0x0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff",
36
+ [tokens.USDC]:
9
37
  "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",
10
- [B_SOL]: "0x89875379e70f8fbadc17aef315adf3a8d5d160b811435537e03c97e8aac97d9c",
11
- [JUP]: "0x0a0408d619e9380abad35060f9192039ed5042fa6f82301d0e48bb52be830996",
38
+ [tokens.USDT]:
39
+ "0x2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",
12
40
  };
@@ -2,46 +2,128 @@ import { NATIVE_MINT } from "@solana/spl-token";
2
2
  import { PublicKey } from "@solana/web3.js";
3
3
 
4
4
  // When adding token ensure a price feed is provided in pythConstants.ts & the token is in TOKEN_INFO
5
- export const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
6
5
  export const B_SOL = "bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1";
6
+ export const JITO_SOL = "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn";
7
+ export const LST = "LSTxxxnJzKDFSLr4dUkPcmCf5VyryEqzPLz5j4bpxFp";
8
+ export const M_SOL = "mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So";
9
+ export const INF = "5oVNBeEEQvYi1cX3ir8Dx5n1P7pdxydbGF2X4TxVusJm";
7
10
  export const JUP = "JUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN";
8
-
11
+ export const BONK = "DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263";
12
+ export const WIF = "EKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm";
13
+ export const JTO = "jtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL";
14
+ export const JLP = "27G8MtK7VtTcCHkpASjSDdkWWYfoqT6ggEuKidVJidD4";
15
+ export const WBTC = "3NZ9JMVBmGAqocybic2c7LQCJScmgsAZ6vQqTDzcqmJh";
16
+ export const WETH = "7vfCXTUXx5WJV5JADk17DUJ4ksgau7utNKj4b963voxs";
17
+ export const HNT = "hntyVP6YFm1Hg25TN9WGLqM12b8TQmcknKrdu1oxWux";
18
+ export const PYTH = "HZ1JovNiVvGrGNiiYvEozEVgZ58xaU3RKwX8eACQBCt3";
19
+ export const USDC = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";
20
+ export const USDT = "Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB";
9
21
 
10
22
  export const ALL_SUPPORTED_TOKENS = [
11
- NATIVE_MINT.toString(),
12
- USDC_MINT,
13
- B_SOL,
14
- JUP,
23
+ NATIVE_MINT.toString(),
24
+ B_SOL,
25
+ M_SOL,
26
+ JITO_SOL,
27
+ LST,
28
+ INF,
29
+ JUP,
30
+ BONK,
31
+ WIF,
32
+ JTO,
33
+ JLP,
34
+ WBTC,
35
+ WETH,
36
+ HNT,
37
+ PYTH,
38
+ USDC,
39
+ USDT,
15
40
  ];
16
41
 
17
42
  interface TokenInfo {
18
- ticker: string;
19
- decimals: number;
20
- isStableCoin?: boolean;
21
- isLST?: boolean;
43
+ ticker: string;
44
+ decimals: number;
45
+ isStableCoin?: boolean;
46
+ isLST?: boolean;
22
47
  }
23
48
 
24
49
  export const TOKEN_INFO: { [key: string]: TokenInfo } = {
25
- [PublicKey.default.toString()]: {
26
- ticker: "",
27
- decimals: 1
28
- },
29
- [NATIVE_MINT.toString()]: {
30
- ticker: "SOL",
31
- decimals: 9,
32
- },
33
- [USDC_MINT]: {
34
- ticker: "USDC",
35
- decimals: 6,
36
- isStableCoin: true
37
- },
38
- [B_SOL]: {
39
- ticker: "BSOL",
40
- decimals: 9,
41
- isLST: true
42
- },
43
- [JUP]: {
44
- ticker: "JUP",
45
- decimals: 6
46
- }
47
- };
50
+ [PublicKey.default.toString()]: {
51
+ ticker: "",
52
+ decimals: 1,
53
+ },
54
+ [NATIVE_MINT.toString()]: {
55
+ ticker: "SOL",
56
+ decimals: 9,
57
+ },
58
+ [B_SOL]: {
59
+ ticker: "bSOL",
60
+ decimals: 9,
61
+ isLST: true,
62
+ },
63
+ [M_SOL]: {
64
+ ticker: "mSOL",
65
+ decimals: 9,
66
+ isLST: true,
67
+ },
68
+ [JITO_SOL]: {
69
+ ticker: "JitoSOL",
70
+ decimals: 9,
71
+ isLST: true,
72
+ },
73
+ [LST]: {
74
+ ticker: "LST",
75
+ decimals: 9,
76
+ isLST: true,
77
+ },
78
+ [INF]: {
79
+ ticker: "INF",
80
+ decimals: 9,
81
+ isLST: true,
82
+ },
83
+ [JUP]: {
84
+ ticker: "JUP",
85
+ decimals: 6,
86
+ },
87
+ [BONK]: {
88
+ ticker: "BONK",
89
+ decimals: 5,
90
+ },
91
+ [WIF]: {
92
+ ticker: "WIF",
93
+ decimals: 6
94
+ },
95
+ [JTO]: {
96
+ ticker: "JTO",
97
+ decimals: 9,
98
+ },
99
+ [JLP]: {
100
+ ticker: "JLP",
101
+ decimals: 6,
102
+ },
103
+ [WBTC]: {
104
+ ticker: "WBTC",
105
+ decimals: 8,
106
+ },
107
+ [WETH]: {
108
+ ticker: "WETH",
109
+ decimals: 8
110
+ },
111
+ [HNT]: {
112
+ ticker: "HNT",
113
+ decimals: 8
114
+ },
115
+ [PYTH]: {
116
+ ticker: "PYTH",
117
+ decimals: 6
118
+ },
119
+ [USDC]: {
120
+ ticker: "USDC",
121
+ decimals: 6,
122
+ isStableCoin: true,
123
+ },
124
+ [USDT]: {
125
+ ticker: "USDT",
126
+ decimals: 6,
127
+ isStableCoin: true,
128
+ },
129
+ };
@@ -198,7 +198,6 @@ export async function getAllMarginfiAccountsByAuthority(
198
198
  }
199
199
 
200
200
  async function getTokenUsage(
201
- umi: Umi,
202
201
  bank: Bank | null,
203
202
  isAsset: boolean,
204
203
  shares: number,
@@ -210,10 +209,8 @@ async function getTokenUsage(
210
209
 
211
210
  if (bank !== null) {
212
211
  [marketPrice] = await fetchTokenPrices([toWeb3JsPublicKey(bank.mint)]);
213
- const [assetShareValue, liabilityShareValue] = await getUpToDateShareValues(
214
- umi,
215
- bank
216
- );
212
+ const [assetShareValue, liabilityShareValue] =
213
+ await getUpToDateShareValues(bank);
217
214
  const shareValue = isAsset ? assetShareValue : liabilityShareValue;
218
215
  amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
219
216
 
@@ -333,7 +330,6 @@ export async function getMarginfiAccountPositionState(
333
330
  supplyMint = toWeb3JsPublicKey(supplyBank!.mint);
334
331
  }
335
332
  supplyUsage = await getTokenUsage(
336
- umi,
337
333
  supplyBank!,
338
334
  true,
339
335
  bytesToI80F48(supplyBalances[0].assetShares.value),
@@ -351,7 +347,6 @@ export async function getMarginfiAccountPositionState(
351
347
  debtMint = toWeb3JsPublicKey(debtBank!.mint);
352
348
  }
353
349
  debtUsage = await getTokenUsage(
354
- umi,
355
350
  debtBank!,
356
351
  false,
357
352
  bytesToI80F48(debtBalances[0].liabilityShares.value),
@@ -375,7 +370,6 @@ export async function getMarginfiAccountPositionState(
375
370
 
376
371
  if (!supplyUsage) {
377
372
  supplyUsage = await getTokenUsage(
378
- umi,
379
373
  supplyBank,
380
374
  true,
381
375
  0,
@@ -392,7 +386,6 @@ export async function getMarginfiAccountPositionState(
392
386
 
393
387
  if (!debtUsage) {
394
388
  debtUsage = await getTokenUsage(
395
- umi,
396
389
  debtBank,
397
390
  false,
398
391
  0,
@@ -462,10 +455,10 @@ function marginfiInterestRateCurve(
462
455
  );
463
456
 
464
457
  if (utilizationRatio <= optimalUr) {
465
- return (utilizationRatio / optimalUr) * plateauIr;
458
+ return (utilizationRatio * plateauIr) / optimalUr;
466
459
  } else {
467
460
  return (
468
- ((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr) +
461
+ (((utilizationRatio - optimalUr) / (1 - optimalUr)) * (maxIr - plateauIr)) +
469
462
  plateauIr
470
463
  );
471
464
  }
@@ -493,7 +486,7 @@ function calcInterestRate(
493
486
  );
494
487
  const rateFee = protocolIrFee + insuranceIrFee;
495
488
  const totalFixedFeeApr = protocolFixedFeeApr + insuranceFixedFeeApr;
496
- const borrowingRate = baseRate * (1 + rateFee) * totalFixedFeeApr;
489
+ const borrowingRate = (baseRate * (1 + rateFee)) + totalFixedFeeApr;
497
490
 
498
491
  return [lendingRate, borrowingRate];
499
492
  }
@@ -508,12 +501,7 @@ function calcAccruedInterestPaymentPerPeriod(
508
501
  return newValue;
509
502
  }
510
503
 
511
- export async function getUpToDateShareValues(
512
- umi: Umi,
513
- bank: Bank
514
- ): Promise<[number, number]> {
515
- let timeDelta = currentUnixSeconds() - Number(bank.lastUpdate);
516
-
504
+ export function calculateAnnualAPYs(bank: Bank) {
517
505
  const totalAssets =
518
506
  bytesToI80F48(bank.totalAssetShares.value) *
519
507
  bytesToI80F48(bank.assetShareValue.value);
@@ -522,7 +510,14 @@ export async function getUpToDateShareValues(
522
510
  bytesToI80F48(bank.liabilityShareValue.value);
523
511
 
524
512
  const utilizationRatio = totalLiabilities / totalAssets;
525
- const [lendingApr, borrowingApr] = calcInterestRate(bank, utilizationRatio);
513
+ return calcInterestRate(bank, utilizationRatio);
514
+ }
515
+
516
+ export async function getUpToDateShareValues(
517
+ bank: Bank
518
+ ): Promise<[number, number]> {
519
+ let timeDelta = currentUnixSeconds() - Number(bank.lastUpdate);
520
+ const [lendingApr, borrowingApr] = calculateAnnualAPYs(bank);
526
521
 
527
522
  return [
528
523
  calcAccruedInterestPaymentPerPeriod(
@@ -17,7 +17,7 @@ import {
17
17
  TransactionsManager,
18
18
  } from "../../src/transactions/transactionsManager";
19
19
  import { PublicKey } from "@solana/web3.js";
20
- import { USDC_MINT } from "../../src/constants";
20
+ import { USDC } from "../../src/constants";
21
21
  import { buildHeliusApiUrl, getMarginfiAccountPositionState } from "../../src/utils";
22
22
 
23
23
  describe("Solauto Marginfi tests", async () => {
@@ -48,7 +48,7 @@ describe("Solauto Marginfi tests", async () => {
48
48
  // "4nNvUXF5YqHFcH2nGweSiuvy1ct7V5FXfoCLKFYUN36z"
49
49
  // ),
50
50
  // supplyMint: NATIVE_MINT,
51
- // debtMint: new PublicKey(USDC_MINT),
51
+ // debtMint: new PublicKey(USDC),
52
52
  }
53
53
  );
54
54
 
@@ -35,7 +35,7 @@ import {
35
35
  fetchTokenPrices,
36
36
  safeGetPrice,
37
37
  } from "../../src/utils/generalUtils";
38
- import { USDC_MINT } from "../../src/constants/tokenConstants";
38
+ import { USDC } from "../../src/constants/tokenConstants";
39
39
 
40
40
  const signer = setupTest(undefined, true);
41
41
 
@@ -115,7 +115,7 @@ async function getFakePosition(
115
115
  positionId: 1,
116
116
  signer,
117
117
  supplyMint: new PublicKey(NATIVE_MINT),
118
- debtMint: new PublicKey(USDC_MINT),
118
+ debtMint: new PublicKey(USDC),
119
119
  });
120
120
 
121
121
  const supplyUsd = 1000;
@@ -135,7 +135,7 @@ async function getFakePosition(
135
135
  fromBps(fakeLiqUtilizationRateBps)) /
136
136
  debtPrice,
137
137
  price: 1,
138
- mint: new PublicKey(USDC_MINT),
138
+ mint: new PublicKey(USDC),
139
139
  },
140
140
  maxLtvBps,
141
141
  liqThresholdBps
@@ -284,7 +284,7 @@ describe("Rebalance tests", async () => {
284
284
  before(async () => {
285
285
  [supplyPrice, debtPrice] = await fetchTokenPrices([
286
286
  NATIVE_MINT,
287
- new PublicKey(USDC_MINT),
287
+ new PublicKey(USDC),
288
288
  ]);
289
289
  });
290
290
 
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "types": ["mocha", "chai"],
3
+ "types": ["mocha", "chai", "node"],
4
4
  "typeRoots": ["./node_modules/@types"],
5
5
  "lib": ["es2020", "dom"],
6
6
  "module": "commonjs",