@sonarwatch/portfolio-plugins 0.0.1
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.
- package/CHANGELOG.md +5 -0
- package/README.md +11 -0
- package/package.json +28 -0
- package/src/generators/plugin/generator.d.ts +4 -0
- package/src/generators/plugin/generator.js +46 -0
- package/src/generators/plugin/generator.js.map +1 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +19 -0
- package/src/index.js.map +1 -0
- package/src/plugins/marginfi/constants.d.ts +7 -0
- package/src/plugins/marginfi/constants.js +13 -0
- package/src/plugins/marginfi/constants.js.map +1 -0
- package/src/plugins/marginfi/fetcherExecutor.d.ts +3 -0
- package/src/plugins/marginfi/fetcherExecutor.js +90 -0
- package/src/plugins/marginfi/fetcherExecutor.js.map +1 -0
- package/src/plugins/marginfi/filters.d.ts +3 -0
- package/src/plugins/marginfi/filters.js +41 -0
- package/src/plugins/marginfi/filters.js.map +1 -0
- package/src/plugins/marginfi/helpers.d.ts +9 -0
- package/src/plugins/marginfi/helpers.js +49 -0
- package/src/plugins/marginfi/helpers.js.map +1 -0
- package/src/plugins/marginfi/index.d.ts +3 -0
- package/src/plugins/marginfi/index.js +21 -0
- package/src/plugins/marginfi/index.js.map +1 -0
- package/src/plugins/marginfi/jobExecutor.d.ts +3 -0
- package/src/plugins/marginfi/jobExecutor.js +24 -0
- package/src/plugins/marginfi/jobExecutor.js.map +1 -0
- package/src/plugins/marginfi/structs/Bank.d.ts +72 -0
- package/src/plugins/marginfi/structs/Bank.js +74 -0
- package/src/plugins/marginfi/structs/Bank.js.map +1 -0
- package/src/plugins/marginfi/structs/MarginfiAccount.d.ts +26 -0
- package/src/plugins/marginfi/structs/MarginfiAccount.js +27 -0
- package/src/plugins/marginfi/structs/MarginfiAccount.js.map +1 -0
- package/src/plugins/marginfi/structs/common.d.ts +6 -0
- package/src/plugins/marginfi/structs/common.js +7 -0
- package/src/plugins/marginfi/structs/common.js.map +1 -0
- package/src/plugins/marginfi/types.d.ts +6 -0
- package/src/plugins/marginfi/types.js +3 -0
- package/src/plugins/marginfi/types.js.map +1 -0
- package/src/plugins/marinade/constants.d.ts +6 -0
- package/src/plugins/marinade/constants.js +12 -0
- package/src/plugins/marinade/constants.js.map +1 -0
- package/src/plugins/marinade/fetcherExecutor.d.ts +3 -0
- package/src/plugins/marinade/fetcherExecutor.js +50 -0
- package/src/plugins/marinade/fetcherExecutor.js.map +1 -0
- package/src/plugins/marinade/filters.d.ts +2 -0
- package/src/plugins/marinade/filters.js +15 -0
- package/src/plugins/marinade/filters.js.map +1 -0
- package/src/plugins/marinade/index.d.ts +3 -0
- package/src/plugins/marinade/index.js +21 -0
- package/src/plugins/marinade/index.js.map +1 -0
- package/src/plugins/marinade/jobExecutor.d.ts +3 -0
- package/src/plugins/marinade/jobExecutor.js +14 -0
- package/src/plugins/marinade/jobExecutor.js.map +1 -0
- package/src/plugins/marinade/structs.d.ts +12 -0
- package/src/plugins/marinade/structs.js +14 -0
- package/src/plugins/marinade/structs.js.map +1 -0
- package/src/plugins/raydium/constants.d.ts +2 -0
- package/src/plugins/raydium/constants.js +6 -0
- package/src/plugins/raydium/constants.js.map +1 -0
- package/src/plugins/raydium/fetcherExecutor.d.ts +3 -0
- package/src/plugins/raydium/fetcherExecutor.js +34 -0
- package/src/plugins/raydium/fetcherExecutor.js.map +1 -0
- package/src/plugins/raydium/index.d.ts +3 -0
- package/src/plugins/raydium/index.js +21 -0
- package/src/plugins/raydium/index.js.map +1 -0
- package/src/plugins/raydium/jobExecutor.d.ts +3 -0
- package/src/plugins/raydium/jobExecutor.js +14 -0
- package/src/plugins/raydium/jobExecutor.js.map +1 -0
- package/src/plugins/wallettokens/constants.d.ts +4 -0
- package/src/plugins/wallettokens/constants.js +9 -0
- package/src/plugins/wallettokens/constants.js.map +1 -0
- package/src/plugins/wallettokens/helpers.d.ts +3 -0
- package/src/plugins/wallettokens/helpers.js +73 -0
- package/src/plugins/wallettokens/helpers.js.map +1 -0
- package/src/plugins/wallettokens/index.d.ts +3 -0
- package/src/plugins/wallettokens/index.js +13 -0
- package/src/plugins/wallettokens/index.js.map +1 -0
- package/src/plugins/wallettokens/jobExecutors/solana.d.ts +3 -0
- package/src/plugins/wallettokens/jobExecutors/solana.js +36 -0
- package/src/plugins/wallettokens/jobExecutors/solana.js.map +1 -0
- package/src/plugins/wallettokens/types.d.ts +9 -0
- package/src/plugins/wallettokens/types.js +3 -0
- package/src/plugins/wallettokens/types.js.map +1 -0
- package/src/utils/clients/constants.d.ts +4 -0
- package/src/utils/clients/constants.js +23 -0
- package/src/utils/clients/constants.js.map +1 -0
- package/src/utils/clients/getClientAptos.d.ts +2 -0
- package/src/utils/clients/getClientAptos.js +15 -0
- package/src/utils/clients/getClientAptos.js.map +1 -0
- package/src/utils/clients/getClientSolana.d.ts +2 -0
- package/src/utils/clients/getClientSolana.js +17 -0
- package/src/utils/clients/getClientSolana.js.map +1 -0
- package/src/utils/clients/getClientSui.d.ts +2 -0
- package/src/utils/clients/getClientSui.js +17 -0
- package/src/utils/clients/getClientSui.js.map +1 -0
- package/src/utils/clients/getEvmClient.d.ts +3 -0
- package/src/utils/clients/getEvmClient.js +21 -0
- package/src/utils/clients/getEvmClient.js.map +1 -0
- package/src/utils/clients/getEvmClients.d.ts +3 -0
- package/src/utils/clients/getEvmClients.js +13 -0
- package/src/utils/clients/getEvmClients.js.map +1 -0
- package/src/utils/clients/index.d.ts +6 -0
- package/src/utils/clients/index.js +19 -0
- package/src/utils/clients/index.js.map +1 -0
- package/src/utils/clients/urlToRpcEndpoint.d.ts +2 -0
- package/src/utils/clients/urlToRpcEndpoint.js +19 -0
- package/src/utils/clients/urlToRpcEndpoint.js.map +1 -0
- package/src/utils/misc/getBasicAuthHeaders.d.ts +3 -0
- package/src/utils/misc/getBasicAuthHeaders.js +13 -0
- package/src/utils/misc/getBasicAuthHeaders.js.map +1 -0
- package/src/utils/misc/shuffleArray.d.ts +1 -0
- package/src/utils/misc/shuffleArray.js +16 -0
- package/src/utils/misc/shuffleArray.js.map +1 -0
- package/src/utils/misc/sleep.d.ts +1 -0
- package/src/utils/misc/sleep.js +12 -0
- package/src/utils/misc/sleep.js.map +1 -0
- package/src/utils/misc/tokenPriceToAssetToken.d.ts +2 -0
- package/src/utils/misc/tokenPriceToAssetToken.js +18 -0
- package/src/utils/misc/tokenPriceToAssetToken.js.map +1 -0
- package/src/utils/solana/beets/buffers.d.ts +13 -0
- package/src/utils/solana/beets/buffers.js +28 -0
- package/src/utils/solana/beets/buffers.js.map +1 -0
- package/src/utils/solana/beets/helpers.d.ts +1 -0
- package/src/utils/solana/beets/helpers.js +5 -0
- package/src/utils/solana/beets/helpers.js.map +1 -0
- package/src/utils/solana/beets/numbers.d.ts +16 -0
- package/src/utils/solana/beets/numbers.js +62 -0
- package/src/utils/solana/beets/numbers.js.map +1 -0
- package/src/utils/solana/constants.d.ts +2 -0
- package/src/utils/solana/constants.js +6 -0
- package/src/utils/solana/constants.js.map +1 -0
- package/src/utils/solana/getParsedProgramAccounts.d.ts +3 -0
- package/src/utils/solana/getParsedProgramAccounts.js +13 -0
- package/src/utils/solana/getParsedProgramAccounts.js.map +1 -0
- package/src/utils/solana/getProgramAccountsSafe.d.ts +2 -0
- package/src/utils/solana/getProgramAccountsSafe.js +21 -0
- package/src/utils/solana/getProgramAccountsSafe.js.map +1 -0
- package/src/utils/solana/getTokenAccountsByOwner.d.ts +2 -0
- package/src/utils/solana/getTokenAccountsByOwner.js +22 -0
- package/src/utils/solana/getTokenAccountsByOwner.js.map +1 -0
- package/src/utils/solana/index.d.ts +8 -0
- package/src/utils/solana/index.js +12 -0
- package/src/utils/solana/index.js.map +1 -0
- package/src/utils/solana/structs.d.ts +32 -0
- package/src/utils/solana/structs.js +35 -0
- package/src/utils/solana/structs.js.map +1 -0
- package/src/utils/solana/types.d.ts +7 -0
- package/src/utils/solana/types.js +3 -0
- package/src/utils/solana/types.js.map +1 -0
package/CHANGELOG.md
ADDED
package/README.md
ADDED
package/package.json
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"name": "@sonarwatch/portfolio-plugins",
|
3
|
+
"version": "0.0.1",
|
4
|
+
"type": "commonjs",
|
5
|
+
"generators": "./generators.json",
|
6
|
+
"dependencies": {
|
7
|
+
"@ethersproject/address": "^5.7.0",
|
8
|
+
"@ethersproject/bytes": "^5.7.0",
|
9
|
+
"@metaplex-foundation/beet": "^0.7.1",
|
10
|
+
"@metaplex-foundation/beet-solana": "^0.4.0",
|
11
|
+
"@mysten/sui.js": "^0.37.1",
|
12
|
+
"@solana/web3.js": "^1.77.3",
|
13
|
+
"aptos": "^1.12.0",
|
14
|
+
"axios": "^1.4.0",
|
15
|
+
"bignumber.js": "^9.1.1",
|
16
|
+
"bitcoin-address-validation": "^2.2.1",
|
17
|
+
"bn.js": "^5.2.1",
|
18
|
+
"decimal.js": "^10.4.3",
|
19
|
+
"unstorage": "^1.7.0",
|
20
|
+
"viem": "^1.2.9"
|
21
|
+
},
|
22
|
+
"peerDependencies": {
|
23
|
+
"@sonarwatch/portfolio-core": "0.0.3",
|
24
|
+
"tslib": "2.5.0"
|
25
|
+
},
|
26
|
+
"main": "./src/index.js",
|
27
|
+
"types": "./src/index.d.ts"
|
28
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.pluginGenerator = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
6
|
+
const path = tslib_1.__importStar(require("path"));
|
7
|
+
const toKebabCaseRegexp = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g;
|
8
|
+
function toKebabCase(str) {
|
9
|
+
var _a;
|
10
|
+
if (!str)
|
11
|
+
return '';
|
12
|
+
return (((_a = str
|
13
|
+
.match(toKebabCaseRegexp)) === null || _a === void 0 ? void 0 : _a.map((x) => x.toLowerCase()).join('-')) || '');
|
14
|
+
}
|
15
|
+
function trimAndUpper(text) {
|
16
|
+
return text.replace(/-/, '').toUpperCase();
|
17
|
+
}
|
18
|
+
function spaceAndUpper(text) {
|
19
|
+
return text.replace(/-/, ' ').toUpperCase();
|
20
|
+
}
|
21
|
+
function lowerFirstLetter(string) {
|
22
|
+
return string.charAt(0).toLocaleLowerCase() + string.slice(1);
|
23
|
+
}
|
24
|
+
function idToPascalCase(id) {
|
25
|
+
return id.replace(/(^\w|-\w)/g, trimAndUpper);
|
26
|
+
}
|
27
|
+
function idToSpacedPascalCase(id) {
|
28
|
+
return id.replace(/(^\w|-\w)/g, spaceAndUpper);
|
29
|
+
}
|
30
|
+
function pluginGenerator(tree, options) {
|
31
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
32
|
+
const id = toKebabCase(options.id);
|
33
|
+
const libraryRoot = (0, devkit_1.readProjectConfiguration)(tree, 'plugins').root;
|
34
|
+
(0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), libraryRoot, {
|
35
|
+
id,
|
36
|
+
networkIds: options.networkIds,
|
37
|
+
pascalCaseId: idToPascalCase(id),
|
38
|
+
spacedPascalCaseId: idToSpacedPascalCase(id),
|
39
|
+
loweredPascalCaseId: lowerFirstLetter(idToPascalCase(id)),
|
40
|
+
});
|
41
|
+
yield (0, devkit_1.formatFiles)(tree);
|
42
|
+
});
|
43
|
+
}
|
44
|
+
exports.pluginGenerator = pluginGenerator;
|
45
|
+
exports.default = pluginGenerator;
|
46
|
+
//# sourceMappingURL=generator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/generators/plugin/generator.ts"],"names":[],"mappings":";;;;AAAA,uCAKoB;AACpB,mDAA6B;AAG7B,MAAM,iBAAiB,GACrB,oEAAoE,CAAC;AAEvE,SAAS,WAAW,CAAC,GAAW;;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CACL,CAAA,MAAA,GAAG;SACA,KAAK,CAAC,iBAAiB,CAAC,0CACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAC3B,IAAI,CAAC,GAAG,CAAC,KAAI,EAAE,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AACD,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC;AACD,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU;IACtC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAsB,eAAe,CACnC,IAAU,EACV,OAA8B;;QAE9B,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;QACnE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE;YAC9D,EAAE;YACF,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;YAChC,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAC5C,mBAAmB,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CAAA;AAdD,0CAcC;AAED,kBAAe,eAAe,CAAC"}
|
package/src/index.d.ts
ADDED
package/src/index.js
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.fetchers = exports.jobs = void 0;
|
4
|
+
const wallettokens_1 = require("./plugins/wallettokens");
|
5
|
+
const marinade_1 = require("./plugins/marinade");
|
6
|
+
const raydium_1 = require("./plugins/raydium");
|
7
|
+
const marginfi_1 = require("./plugins/marginfi");
|
8
|
+
exports.jobs = [
|
9
|
+
...marginfi_1.jobs,
|
10
|
+
...marinade_1.jobs,
|
11
|
+
...raydium_1.jobs,
|
12
|
+
...wallettokens_1.jobs,
|
13
|
+
];
|
14
|
+
exports.fetchers = [
|
15
|
+
...marginfi_1.fetchers,
|
16
|
+
...marinade_1.fetchers,
|
17
|
+
...raydium_1.fetchers,
|
18
|
+
];
|
19
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;AACA,yDAAkE;AAClE,iDAG4B;AAC5B,+CAG2B;AAC3B,iDAG4B;AAEf,QAAA,IAAI,GAAU;IACzB,GAAG,eAAY;IACf,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,mBAAgB;CACpB,CAAC;AACW,QAAA,QAAQ,GAAc;IACjC,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,kBAAe;CACnB,CAAC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { PublicKey } from '@solana/web3.js';
|
2
|
+
import BigNumber from 'bignumber.js';
|
3
|
+
export declare const cachePrefix = "marginfi";
|
4
|
+
export declare const platformId = "marginfi";
|
5
|
+
export declare const MarginfiProgram: PublicKey;
|
6
|
+
export declare const MarginfiAccountAddress = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
|
7
|
+
export declare const solFactor: BigNumber;
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.solFactor = exports.MarginfiAccountAddress = exports.MarginfiProgram = exports.platformId = exports.cachePrefix = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const web3_js_1 = require("@solana/web3.js");
|
6
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
7
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
8
|
+
exports.cachePrefix = 'marginfi';
|
9
|
+
exports.platformId = 'marginfi';
|
10
|
+
exports.MarginfiProgram = new web3_js_1.PublicKey('MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA');
|
11
|
+
exports.MarginfiAccountAddress = '4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8';
|
12
|
+
exports.solFactor = new bignumber_js_1.default(Math.pow(10, portfolio_core_1.solanaNetwork.native.decimals));
|
13
|
+
//# sourceMappingURL=constants.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/constants.ts"],"names":[],"mappings":";;;;AAAA,6CAA4C;AAC5C,+DAA2D;AAC3D,wEAAqC;AAExB,QAAA,WAAW,GAAG,UAAU,CAAC;AACzB,QAAA,UAAU,GAAG,UAAU,CAAC;AAExB,QAAA,eAAe,GAAG,IAAI,mBAAS,CAC1C,6CAA6C,CAC9C,CAAC;AAEW,QAAA,sBAAsB,GACjC,8CAA8C,CAAC;AAEpC,QAAA,SAAS,GAAG,IAAI,sBAAS,CAAC,SAAA,EAAE,EAAI,8BAAa,CAAC,MAAM,CAAC,QAAQ,CAAA,CAAC,CAAC"}
|
@@ -0,0 +1,90 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const tslib_1 = require("tslib");
|
4
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
5
|
+
const constants_1 = require("./constants");
|
6
|
+
const MarginfiAccount_1 = require("./structs/MarginfiAccount");
|
7
|
+
const helpers_1 = require("./helpers");
|
8
|
+
const filters_1 = require("./filters");
|
9
|
+
const solana_1 = require("../../utils/solana");
|
10
|
+
const clients_1 = require("../../utils/clients");
|
11
|
+
const tokenPriceToAssetToken_1 = require("../../utils/misc/tokenPriceToAssetToken");
|
12
|
+
const fetcherExecutor = (owner, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
13
|
+
var _a;
|
14
|
+
const { tokenPriceCache } = context;
|
15
|
+
const connection = (0, clients_1.getClientSolana)();
|
16
|
+
const accounts = yield (0, solana_1.getParsedProgramAccounts)(connection, MarginfiAccount_1.marginfiAccountStruct, constants_1.MarginfiProgram, (0, filters_1.accountsFilter)(owner));
|
17
|
+
if (accounts.length === 0)
|
18
|
+
return [];
|
19
|
+
const lendingAccountBalances = (_a = accounts.at(0)) === null || _a === void 0 ? void 0 : _a.lendingAccount.balances;
|
20
|
+
const borrowedAssets = [];
|
21
|
+
const borrowedYields = [];
|
22
|
+
const suppliedAssets = [];
|
23
|
+
const suppliedYields = [];
|
24
|
+
const rewardAssets = [];
|
25
|
+
if (lendingAccountBalances) {
|
26
|
+
for (let index = 0; index < lendingAccountBalances.length; index += 1) {
|
27
|
+
const accountBalanceInfo = lendingAccountBalances[index];
|
28
|
+
const bankInfo = yield (context === null || context === void 0 ? void 0 : context.cache.get(accountBalanceInfo.bankPk.toString(), {
|
29
|
+
prefix: 'marginfi',
|
30
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
31
|
+
}));
|
32
|
+
if (!bankInfo)
|
33
|
+
continue;
|
34
|
+
const { lendingApr, borrowingApr } = (0, helpers_1.getInterestRates)(bankInfo);
|
35
|
+
const tokenPrice = yield tokenPriceCache.get(bankInfo.mint.toString(), portfolio_core_1.NetworkId.solana);
|
36
|
+
if (!accountBalanceInfo.assetShares.value.isZero()) {
|
37
|
+
const suppliedQuantity = (0, helpers_1.wrappedI80F48toBigNumber)(accountBalanceInfo.assetShares)
|
38
|
+
.times(bankInfo.dividedAssetShareValue)
|
39
|
+
.toNumber();
|
40
|
+
suppliedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(bankInfo.mint.toString(), suppliedQuantity, portfolio_core_1.NetworkId.solana, tokenPrice));
|
41
|
+
}
|
42
|
+
if (!accountBalanceInfo.liabilityShares.value.isZero()) {
|
43
|
+
const borrowedQuantity = (0, helpers_1.wrappedI80F48toBigNumber)(accountBalanceInfo.liabilityShares)
|
44
|
+
.times(bankInfo.dividedLiabilityShareValue)
|
45
|
+
.toNumber();
|
46
|
+
borrowedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(bankInfo.mint.toString(), borrowedQuantity, portfolio_core_1.NetworkId.solana, tokenPrice));
|
47
|
+
}
|
48
|
+
const bankLendingYields = [
|
49
|
+
{
|
50
|
+
apr: lendingApr,
|
51
|
+
apy: (0, portfolio_core_1.aprToApy)(lendingApr),
|
52
|
+
},
|
53
|
+
];
|
54
|
+
const bankBorrowedYields = [
|
55
|
+
{
|
56
|
+
apr: borrowingApr,
|
57
|
+
apy: (0, portfolio_core_1.aprToApy)(borrowingApr),
|
58
|
+
},
|
59
|
+
];
|
60
|
+
suppliedYields.push(bankLendingYields);
|
61
|
+
borrowedYields.push(bankBorrowedYields);
|
62
|
+
}
|
63
|
+
}
|
64
|
+
const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
|
65
|
+
if (borrowedAssets.length === 0 &&
|
66
|
+
suppliedAssets.length === 0 &&
|
67
|
+
rewardAssets.length === 0)
|
68
|
+
return [];
|
69
|
+
const element = {
|
70
|
+
type: portfolio_core_1.PortfolioElementType.borrowlend,
|
71
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
72
|
+
platformId: 'marginfi',
|
73
|
+
label: 'Lending',
|
74
|
+
value,
|
75
|
+
data: {
|
76
|
+
borrowedAssets,
|
77
|
+
borrowedValue,
|
78
|
+
borrowedYields,
|
79
|
+
suppliedAssets,
|
80
|
+
suppliedValue,
|
81
|
+
suppliedYields,
|
82
|
+
collateralRatio,
|
83
|
+
rewardAssets,
|
84
|
+
value,
|
85
|
+
},
|
86
|
+
};
|
87
|
+
return [element];
|
88
|
+
});
|
89
|
+
exports.default = fetcherExecutor;
|
90
|
+
//# sourceMappingURL=fetcherExecutor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"fetcherExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/fetcherExecutor.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.banksFilters = exports.accountsFilter = void 0;
|
4
|
+
const constants_1 = require("./constants");
|
5
|
+
const accountsFilter = (owner) => [
|
6
|
+
{
|
7
|
+
memcmp: {
|
8
|
+
bytes: 'CKkRR4La3xu',
|
9
|
+
offset: 0,
|
10
|
+
},
|
11
|
+
},
|
12
|
+
{
|
13
|
+
memcmp: {
|
14
|
+
bytes: constants_1.MarginfiAccountAddress,
|
15
|
+
offset: 8,
|
16
|
+
},
|
17
|
+
},
|
18
|
+
{
|
19
|
+
memcmp: {
|
20
|
+
bytes: owner,
|
21
|
+
offset: 40,
|
22
|
+
},
|
23
|
+
},
|
24
|
+
];
|
25
|
+
exports.accountsFilter = accountsFilter;
|
26
|
+
const banksFilters = () => [
|
27
|
+
{
|
28
|
+
memcmp: {
|
29
|
+
bytes: 'QnTef4UXSzF',
|
30
|
+
offset: 0,
|
31
|
+
},
|
32
|
+
},
|
33
|
+
{
|
34
|
+
memcmp: {
|
35
|
+
bytes: constants_1.MarginfiAccountAddress,
|
36
|
+
offset: 41,
|
37
|
+
},
|
38
|
+
},
|
39
|
+
];
|
40
|
+
exports.banksFilters = banksFilters;
|
41
|
+
//# sourceMappingURL=filters.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/filters.ts"],"names":[],"mappings":";;;AACA,2CAAqD;AAE9C,MAAM,cAAc,GAAG,CAAC,KAAa,EAA8B,EAAE,CAAC;IAC3E;QACE,MAAM,EAAE;YACN,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,kCAAsB;YAC7B,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC;AAnBW,QAAA,cAAc,kBAmBzB;AAEK,MAAM,YAAY,GAAG,GAA+B,EAAE,CAAC;IAC5D;QACE,MAAM,EAAE;YACN,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,kCAAsB;YAC7B,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC;AAbW,QAAA,YAAY,gBAavB"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
2
|
+
import { BankInfo } from './types';
|
3
|
+
export declare function wrappedI80F48toBigNumber({ value }: {
|
4
|
+
value: BigNumber;
|
5
|
+
}, scaleDecimal?: number): BigNumber;
|
6
|
+
export declare function getInterestRates(bank: BankInfo): {
|
7
|
+
lendingApr: number;
|
8
|
+
borrowingApr: number;
|
9
|
+
};
|
@@ -0,0 +1,49 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getInterestRates = exports.wrappedI80F48toBigNumber = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
|
6
|
+
const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
|
7
|
+
function wrappedI80F48toBigNumber({ value }, scaleDecimal = 0) {
|
8
|
+
if (!value)
|
9
|
+
return new bignumber_js_1.default(0);
|
10
|
+
const newValue = new bignumber_js_1.default(value);
|
11
|
+
const numbers = new decimal_js_1.default(`${newValue.isNegative() ? '-' : ''}0b${newValue.abs().toString(2)}p-48`).dividedBy(Math.pow(10, scaleDecimal));
|
12
|
+
return new bignumber_js_1.default(numbers.toString());
|
13
|
+
}
|
14
|
+
exports.wrappedI80F48toBigNumber = wrappedI80F48toBigNumber;
|
15
|
+
// AMELIORER LE PRINCIPE DENVOYER A CHAQUE FOIS LA BANK AUX FONCTIONS
|
16
|
+
// AMELIORER LE PRINCIPE DE UNWRAP LES I80F48 A CHAQUE FOIS
|
17
|
+
function getInterestRates(bank) {
|
18
|
+
const { insuranceFeeFixedApr, insuranceIrFee, protocolFixedFeeApr, protocolIrFee, } = bank.config.interestRateConfig;
|
19
|
+
const rateFee = wrappedI80F48toBigNumber(insuranceFeeFixedApr).plus(wrappedI80F48toBigNumber(protocolFixedFeeApr));
|
20
|
+
const fixedFee = wrappedI80F48toBigNumber(insuranceIrFee).plus(wrappedI80F48toBigNumber(protocolIrFee));
|
21
|
+
const interestRate = interestRateCurve(bank);
|
22
|
+
const utilizationRate = wrappedI80F48toBigNumber(bank.liabilityShareValue)
|
23
|
+
.times(wrappedI80F48toBigNumber(bank.totalLiabilityShares))
|
24
|
+
.div(wrappedI80F48toBigNumber(bank.assetShareValue).times(wrappedI80F48toBigNumber(bank.totalAssetShares)));
|
25
|
+
const lendingApy = interestRate.times(utilizationRate).toNumber();
|
26
|
+
const borrowingApy = interestRate
|
27
|
+
.times(new bignumber_js_1.default(1).plus(rateFee))
|
28
|
+
.plus(fixedFee)
|
29
|
+
.toNumber();
|
30
|
+
return { lendingApr: lendingApy, borrowingApr: borrowingApy };
|
31
|
+
}
|
32
|
+
exports.getInterestRates = getInterestRates;
|
33
|
+
function interestRateCurve(bank) {
|
34
|
+
const { optimalUtilizationRate, plateauInterestRate, maxInterestRate } = bank.config.interestRateConfig;
|
35
|
+
const utilizationRate = wrappedI80F48toBigNumber(bank.liabilityShareValue)
|
36
|
+
.times(wrappedI80F48toBigNumber(bank.totalLiabilityShares))
|
37
|
+
.div(wrappedI80F48toBigNumber(bank.assetShareValue).times(wrappedI80F48toBigNumber(bank.totalAssetShares)));
|
38
|
+
if (utilizationRate.lte(wrappedI80F48toBigNumber(optimalUtilizationRate))) {
|
39
|
+
return utilizationRate
|
40
|
+
.times(wrappedI80F48toBigNumber(plateauInterestRate))
|
41
|
+
.div(wrappedI80F48toBigNumber(optimalUtilizationRate));
|
42
|
+
}
|
43
|
+
return utilizationRate
|
44
|
+
.minus(wrappedI80F48toBigNumber(optimalUtilizationRate))
|
45
|
+
.div(new bignumber_js_1.default(1).minus(wrappedI80F48toBigNumber(optimalUtilizationRate)))
|
46
|
+
.times(wrappedI80F48toBigNumber(maxInterestRate).minus(wrappedI80F48toBigNumber(plateauInterestRate)))
|
47
|
+
.plus(wrappedI80F48toBigNumber(plateauInterestRate));
|
48
|
+
}
|
49
|
+
//# sourceMappingURL=helpers.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/helpers.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.fetchers = exports.jobs = void 0;
|
4
|
+
const tslib_1 = require("tslib");
|
5
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
6
|
+
const jobExecutor_1 = tslib_1.__importDefault(require("./jobExecutor"));
|
7
|
+
const fetcherExecutor_1 = tslib_1.__importDefault(require("./fetcherExecutor"));
|
8
|
+
exports.jobs = [
|
9
|
+
{
|
10
|
+
id: 'marginfi',
|
11
|
+
executor: jobExecutor_1.default,
|
12
|
+
},
|
13
|
+
];
|
14
|
+
exports.fetchers = [
|
15
|
+
{
|
16
|
+
id: 'marginfi',
|
17
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
18
|
+
executor: fetcherExecutor_1.default,
|
19
|
+
},
|
20
|
+
];
|
21
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/index.ts"],"names":[],"mappings":";;;;AAAA,+DAAqE;AACrE,wEAAwC;AACxC,gFAAgD;AAEnC,QAAA,IAAI,GAAU;IACzB;QACE,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,qBAAW;KACtB;CACF,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC;QACE,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,QAAQ,EAAE,yBAAe;KAC1B;CACF,CAAC"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const tslib_1 = require("tslib");
|
4
|
+
const portfolio_core_1 = require("@sonarwatch/portfolio-core");
|
5
|
+
const constants_1 = require("./constants");
|
6
|
+
const Bank_1 = require("./structs/Bank");
|
7
|
+
const filters_1 = require("./filters");
|
8
|
+
const helpers_1 = require("./helpers");
|
9
|
+
const solana_1 = require("../../utils/solana");
|
10
|
+
const clients_1 = require("../../utils/clients");
|
11
|
+
const jobExecutor = (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
12
|
+
const { cache } = context;
|
13
|
+
const connection = (0, clients_1.getClientSolana)();
|
14
|
+
const banksRawData = yield (0, solana_1.getParsedProgramAccounts)(connection, Bank_1.bankStruct, constants_1.MarginfiProgram, (0, filters_1.banksFilters)());
|
15
|
+
for (let index = 0; index < banksRawData.length; index += 1) {
|
16
|
+
const bank = banksRawData[index];
|
17
|
+
yield cache.set(bank.pubkey.toString(), Object.assign(Object.assign({}, bank), { dividedAssetShareValue: (0, helpers_1.wrappedI80F48toBigNumber)(bank.assetShareValue).div(Math.pow(10, bank.mintDecimals)), dividedLiabilityShareValue: (0, helpers_1.wrappedI80F48toBigNumber)(bank.liabilityShareValue).div(Math.pow(10, bank.mintDecimals)) }), {
|
18
|
+
prefix: 'marginfi',
|
19
|
+
networkId: portfolio_core_1.NetworkId.solana,
|
20
|
+
});
|
21
|
+
}
|
22
|
+
});
|
23
|
+
exports.default = jobExecutor;
|
24
|
+
//# sourceMappingURL=jobExecutor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"jobExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/jobExecutor.ts"],"names":[],"mappings":";;;AAAA,+DAA6E;AAC7E,2CAA8C;AAC9C,yCAA4C;AAC5C,uCAAyC;AACzC,uCAAqD;AACrD,+CAA8D;AAC9D,iDAAsD;AAEtD,MAAM,WAAW,GAAgB,CAAO,OAAgB,EAAE,EAAE;IAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAA,yBAAe,GAAE,CAAC;IAErC,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAwB,EACjD,UAAU,EACV,iBAAU,EACV,2BAAe,EACf,IAAA,sBAAY,GAAE,CACf,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;QAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,CAAC,GAAG,CACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kCAEjB,IAAI,KACP,sBAAsB,EAAE,IAAA,kCAAwB,EAC9C,IAAI,CAAC,eAAe,CACrB,CAAC,GAAG,CAAC,SAAA,EAAE,EAAI,IAAI,CAAC,YAAY,CAAA,CAAC,EAC9B,0BAA0B,EAAE,IAAA,kCAAwB,EAClD,IAAI,CAAC,mBAAmB,CACzB,CAAC,GAAG,CAAC,SAAA,EAAE,EAAI,IAAI,CAAC,YAAY,CAAA,CAAC,KAEhC;YACE,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;SAC5B,CACF,CAAC;KACH;AACH,CAAC,CAAA,CAAC;AACF,kBAAe,WAAW,CAAC"}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { FixableBeetStruct } from '@metaplex-foundation/beet';
|
3
|
+
import { PublicKey } from '@solana/web3.js';
|
4
|
+
import BigNumber from 'bignumber.js';
|
5
|
+
import { WrappedI80F48 } from './common';
|
6
|
+
export declare enum BankOperationalState {
|
7
|
+
Paused = 0,
|
8
|
+
Operational = 1,
|
9
|
+
ReduceOnly = 2
|
10
|
+
}
|
11
|
+
export declare enum RiskTier {
|
12
|
+
Collateral = 0,
|
13
|
+
Isolated = 1
|
14
|
+
}
|
15
|
+
export type InterestRateConfig = {
|
16
|
+
optimalUtilizationRate: WrappedI80F48;
|
17
|
+
plateauInterestRate: WrappedI80F48;
|
18
|
+
maxInterestRate: WrappedI80F48;
|
19
|
+
insuranceFeeFixedApr: WrappedI80F48;
|
20
|
+
insuranceIrFee: WrappedI80F48;
|
21
|
+
protocolFixedFeeApr: WrappedI80F48;
|
22
|
+
protocolIrFee: WrappedI80F48;
|
23
|
+
padding: BigNumber[];
|
24
|
+
};
|
25
|
+
export declare const interestRateConfigStruct: FixableBeetStruct<InterestRateConfig, Partial<InterestRateConfig>>;
|
26
|
+
export type BankConfig = {
|
27
|
+
assetWeightInit: WrappedI80F48;
|
28
|
+
assetWeightMaint: WrappedI80F48;
|
29
|
+
liabilityWeightInit: WrappedI80F48;
|
30
|
+
liabilityWeightMaint: WrappedI80F48;
|
31
|
+
depositLimit: number;
|
32
|
+
interestRateConfig: InterestRateConfig;
|
33
|
+
operationalState: BankOperationalState;
|
34
|
+
oracleSetup: BigNumber;
|
35
|
+
oracleKeys: PublicKey[];
|
36
|
+
borrowLimit: number;
|
37
|
+
riskTier: RiskTier;
|
38
|
+
padding: BigNumber[];
|
39
|
+
};
|
40
|
+
export declare const bankConfigStruct: FixableBeetStruct<BankConfig, Partial<BankConfig>>;
|
41
|
+
export type Bank = {
|
42
|
+
padding: Buffer;
|
43
|
+
mint: PublicKey;
|
44
|
+
mintDecimals: number;
|
45
|
+
group: PublicKey;
|
46
|
+
ignore1: number[];
|
47
|
+
assetShareValue: WrappedI80F48;
|
48
|
+
liabilityShareValue: WrappedI80F48;
|
49
|
+
liquidityVault: PublicKey;
|
50
|
+
blob: Buffer;
|
51
|
+
insuranceVault: PublicKey;
|
52
|
+
insuranceVaultBump: number;
|
53
|
+
insuranceVaultAuthorityBump: PublicKey;
|
54
|
+
ignore3: PublicKey;
|
55
|
+
collectedInsuranceFeesOutstanding: WrappedI80F48;
|
56
|
+
feeVault: PublicKey;
|
57
|
+
feeVaultBump: number;
|
58
|
+
feeVaultAuthorityBump: number;
|
59
|
+
ignore4: number[];
|
60
|
+
collectedGroupFeesOutstanding: WrappedI80F48;
|
61
|
+
totalLiabilityShares: WrappedI80F48;
|
62
|
+
totalAssetShares: WrappedI80F48;
|
63
|
+
lastUpdate: BigNumber;
|
64
|
+
config: BankConfig;
|
65
|
+
emissionsFlags: number;
|
66
|
+
emissionsRate: number;
|
67
|
+
emissionsMint: PublicKey;
|
68
|
+
emissionsRemaining: WrappedI80F48;
|
69
|
+
padding0: BigNumber[];
|
70
|
+
padding1: BigNumber[];
|
71
|
+
};
|
72
|
+
export declare const bankStruct: FixableBeetStruct<Bank, Partial<Bank>>;
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.bankStruct = exports.bankConfigStruct = exports.interestRateConfigStruct = exports.RiskTier = exports.BankOperationalState = void 0;
|
4
|
+
const beet_1 = require("@metaplex-foundation/beet");
|
5
|
+
const beet_solana_1 = require("@metaplex-foundation/beet-solana");
|
6
|
+
const common_1 = require("./common");
|
7
|
+
const solana_1 = require("../../../utils/solana");
|
8
|
+
var BankOperationalState;
|
9
|
+
(function (BankOperationalState) {
|
10
|
+
BankOperationalState[BankOperationalState["Paused"] = 0] = "Paused";
|
11
|
+
BankOperationalState[BankOperationalState["Operational"] = 1] = "Operational";
|
12
|
+
BankOperationalState[BankOperationalState["ReduceOnly"] = 2] = "ReduceOnly";
|
13
|
+
})(BankOperationalState || (exports.BankOperationalState = BankOperationalState = {}));
|
14
|
+
var RiskTier;
|
15
|
+
(function (RiskTier) {
|
16
|
+
RiskTier[RiskTier["Collateral"] = 0] = "Collateral";
|
17
|
+
RiskTier[RiskTier["Isolated"] = 1] = "Isolated";
|
18
|
+
})(RiskTier || (exports.RiskTier = RiskTier = {}));
|
19
|
+
exports.interestRateConfigStruct = new beet_1.FixableBeetStruct([
|
20
|
+
['optimalUtilizationRate', common_1.wrappedI80F48Struct],
|
21
|
+
['plateauInterestRate', common_1.wrappedI80F48Struct],
|
22
|
+
['maxInterestRate', common_1.wrappedI80F48Struct],
|
23
|
+
['insuranceFeeFixedApr', common_1.wrappedI80F48Struct],
|
24
|
+
['insuranceIrFee', common_1.wrappedI80F48Struct],
|
25
|
+
['protocolFixedFeeApr', common_1.wrappedI80F48Struct],
|
26
|
+
['protocolIrFee', common_1.wrappedI80F48Struct],
|
27
|
+
['padding', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 8)],
|
28
|
+
], (args) => args);
|
29
|
+
exports.bankConfigStruct = new beet_1.FixableBeetStruct([
|
30
|
+
['assetWeightInit', common_1.wrappedI80F48Struct],
|
31
|
+
['assetWeightMaint', common_1.wrappedI80F48Struct],
|
32
|
+
['liabilityWeightInit', common_1.wrappedI80F48Struct],
|
33
|
+
['liabilityWeightMaint', common_1.wrappedI80F48Struct],
|
34
|
+
['depositLimit', solana_1.u64],
|
35
|
+
['interestRateConfig', exports.interestRateConfigStruct],
|
36
|
+
['operationalState', beet_1.u8],
|
37
|
+
['oracleSetup', beet_1.u8],
|
38
|
+
['oracleKeys', (0, beet_1.uniformFixedSizeArray)(beet_solana_1.publicKey, 5)],
|
39
|
+
['borrowLimit', solana_1.u64],
|
40
|
+
['riskTier', beet_1.u8],
|
41
|
+
['padding', (0, beet_1.uniformFixedSizeArray)(solana_1.u64, 6)],
|
42
|
+
], (args) => args);
|
43
|
+
exports.bankStruct = new beet_1.FixableBeetStruct([
|
44
|
+
['padding', (0, solana_1.blob)(8)],
|
45
|
+
['mint', beet_solana_1.publicKey],
|
46
|
+
['mintDecimals', beet_1.u8],
|
47
|
+
['group', beet_solana_1.publicKey],
|
48
|
+
['ignore1', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 7)],
|
49
|
+
['assetShareValue', common_1.wrappedI80F48Struct],
|
50
|
+
['liabilityShareValue', common_1.wrappedI80F48Struct],
|
51
|
+
['liquidityVault', beet_solana_1.publicKey],
|
52
|
+
['blob', (0, solana_1.blob)(2)],
|
53
|
+
['insuranceVault', beet_solana_1.publicKey],
|
54
|
+
['insuranceVaultBump', beet_1.u8],
|
55
|
+
['insuranceVaultAuthorityBump', beet_1.u8],
|
56
|
+
['ignore3', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 4)],
|
57
|
+
['collectedInsuranceFeesOutstanding', common_1.wrappedI80F48Struct],
|
58
|
+
['feeVault', beet_solana_1.publicKey],
|
59
|
+
['feeVaultBump', beet_1.u8],
|
60
|
+
['feeVaultAuthorityBump', beet_1.u8],
|
61
|
+
['ignore4', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 6)],
|
62
|
+
['collectedGroupFeesOutstanding', common_1.wrappedI80F48Struct],
|
63
|
+
['totalLiabilityShares', common_1.wrappedI80F48Struct],
|
64
|
+
['totalAssetShares', common_1.wrappedI80F48Struct],
|
65
|
+
['lastUpdate', solana_1.i64],
|
66
|
+
['config', exports.bankConfigStruct],
|
67
|
+
['emissionsFlags', solana_1.u64],
|
68
|
+
['emissionsRate', solana_1.u64],
|
69
|
+
['emissionsMint', beet_solana_1.publicKey],
|
70
|
+
['emissionsRemaining', common_1.wrappedI80F48Struct],
|
71
|
+
['padding0', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 28)],
|
72
|
+
['padding1', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 32)],
|
73
|
+
], (args) => args);
|
74
|
+
//# sourceMappingURL=Bank.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Bank.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/marginfi/structs/Bank.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
import { BeetStruct, FixableBeetStruct } from '@metaplex-foundation/beet';
|
3
|
+
import { PublicKey } from '@solana/web3.js';
|
4
|
+
import { WrappedI80F48 } from './common';
|
5
|
+
export type Balance = {
|
6
|
+
active: number;
|
7
|
+
bankPk: PublicKey;
|
8
|
+
ignore: number[];
|
9
|
+
assetShares: WrappedI80F48;
|
10
|
+
liabilityShares: WrappedI80F48;
|
11
|
+
padding: Buffer[];
|
12
|
+
};
|
13
|
+
export declare const balanceStruct: BeetStruct<Balance, Partial<Balance>>;
|
14
|
+
export type LendingAccount = {
|
15
|
+
balances: Balance[];
|
16
|
+
padding: Buffer[];
|
17
|
+
};
|
18
|
+
export declare const lendingAccountStruct: FixableBeetStruct<LendingAccount, Partial<LendingAccount>>;
|
19
|
+
export type MarginfiAccount = {
|
20
|
+
padding1: Buffer;
|
21
|
+
group: PublicKey;
|
22
|
+
authority: PublicKey;
|
23
|
+
lendingAccount: LendingAccount;
|
24
|
+
padding: Buffer[];
|
25
|
+
};
|
26
|
+
export declare const marginfiAccountStruct: FixableBeetStruct<MarginfiAccount, Partial<MarginfiAccount>>;
|