@alphafi/alphafi-sdk 0.0.27 → 0.0.29
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/dist/cjs/graphql/getMultiReceipts.d.ts.map +1 -1
- package/dist/cjs/graphql/getMultiReceipts.js +37 -26
- package/dist/cjs/graphql/getMultiReceipts.js.map +1 -1
- package/dist/cjs/graphql/types.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js +128 -119
- package/dist/cjs/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js +2 -1
- package/dist/cjs/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
- package/dist/esm/graphql/getMultiReceipts.d.ts.map +1 -1
- package/dist/esm/graphql/getMultiReceipts.js +37 -26
- package/dist/esm/graphql/getMultiReceipts.js.map +1 -1
- package/dist/esm/graphql/types.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.d.ts.map +1 -1
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js +128 -119
- package/dist/esm/sui-sdk/events/fetchAutoCompoundingEvents.js.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.d.ts.map +1 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js +2 -1
- package/dist/esm/sui-sdk/functions/fetchUserVaultBalances.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMultiReceipts.d.ts","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsDxC,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"getMultiReceipts.d.ts","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsDxC,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAqDpC"}
|
|
@@ -54,32 +54,43 @@ const receiptTypes = {
|
|
|
54
54
|
async function fetchMultiReceipts(address) {
|
|
55
55
|
const multiReceipts = [];
|
|
56
56
|
let hasNextPage = true;
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
query
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
57
|
+
try {
|
|
58
|
+
while (hasNextPage) {
|
|
59
|
+
const query = (0, getMultiReceipts_js_1.getMultiReceiptsQuery)(receiptTypes);
|
|
60
|
+
const GET_RECEIPTS = (0, core_1.gql) `
|
|
61
|
+
${query}
|
|
62
|
+
`;
|
|
63
|
+
const result = await client_js_1.default.query({
|
|
64
|
+
query: GET_RECEIPTS,
|
|
65
|
+
variables: {
|
|
66
|
+
address: address,
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const { data } = result;
|
|
70
|
+
const receipts = data.owner;
|
|
71
|
+
hasNextPage = false;
|
|
72
|
+
Object.keys(receipts).forEach((key) => {
|
|
73
|
+
if (key !== "__typename") {
|
|
74
|
+
const { pageInfo, nodes } = receipts[key];
|
|
75
|
+
hasNextPage = hasNextPage || pageInfo.hasNextPage;
|
|
76
|
+
if (hasNextPage)
|
|
77
|
+
receiptTypes[key].cursor = pageInfo.endCursor;
|
|
78
|
+
else
|
|
79
|
+
receiptTypes[key].cursor = "0";
|
|
80
|
+
nodes.forEach((node) => {
|
|
81
|
+
multiReceipts.push(node);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
console.error("Error fetching receipts from GraphQL:", error);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
Object.keys(receiptTypes).forEach((key) => {
|
|
93
|
+
receiptTypes[key].cursor = "";
|
|
83
94
|
});
|
|
84
95
|
}
|
|
85
96
|
const receiptMap = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMultiReceipts.js","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":";;AAyDA,
|
|
1
|
+
{"version":3,"file":"getMultiReceipts.js","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApolloQueryResult, gql } from \"@apollo/client/core\";\nimport client from \"./client.js\";\nimport { getMultiReceiptsQuery } from \"./queries/getMultiReceipts.js\";\nimport { ReceiptGQL } from \"./types.js\";\n\ntype ReceiptType = {\n type: string;\n cursor: string;\n};\n\nconst receiptTypes: { [key: string]: ReceiptType } = {\n alphaPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphapool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusSuiPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusPoolBaseAReceipts: {\n type: \"0x2793db7aa0e0209afc84f0adb1b258973cf1c9da55c35ee85c18f2ed4912bb6f::alphafi_cetus_pool_base_a::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusSuiV2PoolReceipts: {\n type: \"0x1a22b26f139b34c9de9718cf7e53159b2b939ec8f46f4c040776b7a3d580dd28::alphafi_cetus_sui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviPoolReceipts: {\n type: \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviLoopSuiVsuiPoolReceipts: {\n type: \"0x531989a4be74dd43b25e7bb1eeade871f4524bdf437a8eaa30b4ac2a932b5579::alphafi_navi_sui_vsui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviNativeUsdcUsdtPoolReceipts: {\n type: \"0xad4f82d9956085bdab812d46fb2ea4d95c35e9e936cb53d04a79d3989ef97774::alphafi_navi_native_usdc_usdt_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n bucketPoolReceipts: {\n type: \"0xa095412a92ff0f063cbea962f2f88b1a93cbc85c72bebf5dd7d90a8e2d6375ae::alphafi_bucket_pool_v1::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviUsdyPoolReceipts: {\n type: \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviV2PoolReceipts: {\n type: \"0xb84dd393b055dd0ab669557c53b0296a2e707eb650f7a5600db6fe01cfbe1c9e::alphafi_navi_pool_v2::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n};\n\nexport async function fetchMultiReceipts(\n address: string,\n): Promise<Map<string, ReceiptGQL[]>> {\n const multiReceipts: any[] = [];\n let hasNextPage = true;\n\n try {\n while (hasNextPage) {\n const query = getMultiReceiptsQuery(receiptTypes);\n const GET_RECEIPTS = gql`\n ${query}\n `;\n\n const result: ApolloQueryResult<any> = await client.query({\n query: GET_RECEIPTS,\n variables: {\n address: address,\n },\n });\n\n const { data } = result;\n const receipts = data.owner;\n hasNextPage = false;\n\n Object.keys(receipts).forEach((key) => {\n if (key !== \"__typename\") {\n const { pageInfo, nodes } = receipts[key];\n hasNextPage = hasNextPage || pageInfo.hasNextPage;\n if (hasNextPage) receiptTypes[key].cursor = pageInfo.endCursor;\n else receiptTypes[key].cursor = \"0\";\n nodes.forEach((node: any) => {\n multiReceipts.push(node);\n });\n }\n });\n }\n } catch (error) {\n console.error(\"Error fetching receipts from GraphQL:\", error);\n throw error;\n } finally {\n Object.keys(receiptTypes).forEach((key) => {\n receiptTypes[key].cursor = \"\";\n });\n }\n\n const receiptMap: Map<string, ReceiptGQL[]> = new Map();\n multiReceipts.forEach((receipt) => {\n const name = receipt.contents.json.name;\n let arr = receiptMap.get(name);\n if (!arr) arr = [];\n arr.push(receipt);\n receiptMap.set(name, arr);\n });\n\n return receiptMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graphql/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n endCursor: string | null;\n startCursor: string | null;\n}\n\nexport interface KeyValue {\n key: {\n name: string;\n };\n value: string;\n}\n\nexport interface LastAccRewardPerXToken {\n contents: KeyValue[];\n}\n\nexport interface LockedBalance {\n id: string;\n size: string;\n head: string;\n tail: string;\n}\n\nexport interface PendingRewards {\n contents: KeyValue[];\n}\n\nexport type
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graphql/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n endCursor: string | null;\n startCursor: string | null;\n}\n\nexport interface KeyValue {\n key: {\n name: string;\n };\n value: string;\n}\n\nexport interface LastAccRewardPerXToken {\n contents: KeyValue[];\n}\n\nexport interface LockedBalance {\n id: string;\n size: string;\n head: string;\n tail: string;\n}\n\nexport interface PendingRewards {\n contents: KeyValue[];\n}\n\nexport type ReceiptGQL = {\n address: string;\n version: string;\n digest: string;\n hasPublicTransfer: boolean;\n contents: {\n type: {\n repr: string;\n };\n json: {\n id: string;\n owner: string;\n name: string;\n image_url: string;\n pool_id: string;\n xTokenBalance: string;\n last_acc_reward_per_xtoken: {\n contents: {\n key: {\n name: string;\n };\n value: string;\n }[];\n };\n locked_balance: {\n head: string;\n id: string;\n size: string;\n tail: string;\n };\n unlocked_xtokens: string;\n pending_rewards: {\n contents: {\n key: {\n name: string;\n };\n value: string;\n }[];\n };\n };\n };\n};\n\nexport interface ReceiptMoveObjectContents {\n id: string;\n owner: string;\n name: string;\n image_url: string;\n pool_id: string;\n xTokenBalance: string;\n last_acc_reward_per_xtoken: LastAccRewardPerXToken;\n locked_balance: LockedBalance;\n unlocked_xtokens: string;\n pending_rewards: PendingRewards;\n}\n\nexport interface AsReceiptMoveObject {\n status: string;\n contents: {\n json: ReceiptMoveObjectContents;\n };\n}\n\nexport interface ReceiptNode {\n asMoveObject: AsReceiptMoveObject;\n}\n\nexport interface ReceiptsResponse {\n objects: {\n pageInfo: PageInfo;\n nodes: ReceiptNode[];\n };\n}\n\nexport interface LockedTableNode {\n name: { json: string };\n value: {\n json: {\n prev: string | null;\n next: string | null;\n value: string;\n };\n };\n}\n\nexport interface DynamicFieldsResponse {\n dynamicFields: {\n pageInfo: PageInfo;\n nodes: LockedTableNode[];\n };\n}\n"]}
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,iDAK6B;AAJ3B,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AAGd,+CAIwB;AAHtB,yGAAA,SAAS,OAAA;AACT,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AAGtB,6DAO+B;AAN7B,sHAAA,eAAe,OAAA;AACf,2HAAA,oBAAoB,OAAA;AACpB,iIAAA,0BAA0B,OAAA;AAC1B,iIAAA,0BAA0B,OAAA;AAC1B,oIAAA,6BAA6B,OAAA;AAC7B,0IAAA,mCAAmC,OAAA;AAGrC,qDAI2B;AAHzB,+GAAA,YAAY,OAAA;AACZ,0HAAA,uBAAuB,OAAA;AACvB,0HAAA,uBAAuB,OAAA;AAGzB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,yDAI6B;AAH3B,qHAAA,gBAAgB,OAAA;AAChB,qHAAA,gBAAgB,OAAA;AAChB,yHAAA,oBAAoB,OAAA;AAGtB,2CAAgE;AAAvD,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAEzC,mEAGkC;AAFhC,6HAAA,mBAAmB,OAAA;AACnB,+HAAA,qBAAqB,OAAA;AAGvB,iFAIyC;AAHvC,2IAAA,0BAA0B,OAAA;AAC1B,8IAAA,6BAA6B,OAAA;AAC7B,mJAAA,kCAAkC,OAAA;AAGpC,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAEhC,4DAAkC;AAElC,eAAe;AACf,iEAAuC;AACvC,iEAAuC;AACvC,wEAA8C;AAC9C,wEAA8C;AAE9C,qEAA0E;AAAjE,6GAAA,WAAW,OAAA;AAAE,yGAAA,OAAO,OAAA;AAE7B,2DAA8E;AAArE,oHAAA,iBAAiB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAE5C,4CAQ0B;AAPxB,mGAAA,QAAQ,OAAA;AACR,+GAAA,oBAAoB,OAAA;AACpB,mHAAA,wBAAwB,OAAA;AACxB,6GAAA,kBAAkB,OAAA;AAClB,iHAAA,sBAAsB,OAAA;AACtB,sGAAA,WAAW,OAAA;AACX,0GAAA,eAAe,OAAA;AAGjB,8CAA0C;AAAjC,iGAAA,KAAK,OAAA;AAEd,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,4CAAqD;AAA5C,4GAAA,iBAAiB,OAAA;AAE1B,gGAA4F;AAAnF,2IAAA,0BAA0B,OAAA;AACnC,gGAA4F;AAAnF,2IAAA,0BAA0B,OAAA;AASnC,qDAA2B","sourcesContent":["export {\n setSuiNodeUrl,\n setSuiClient,\n getSuiNodeUrl,\n getSuiClient,\n} from \"./sui-sdk/client.js\";\n\nexport {\n getVaults,\n getSingleAssetVaults,\n getDoubleAssetVaults,\n} from \"./getVaults.js\";\n\nexport {\n getVaultBalance,\n getAlphaVaultBalance,\n getSingleAssetVaultBalance,\n getDoubleAssetVaultBalance,\n getVaultBalanceForActiveUsers,\n getXTokenVaultBalanceForActiveUsers,\n} from \"./getVaultBalances.js\";\n\nexport {\n getAllVaults,\n getAllDoubleAssetVaults,\n getAllSingleAssetVaults,\n} from \"./getAllVaults.js\";\n\nexport { getAirdropShare } from \"./getAirdropShare.js\";\n\nexport {\n alphaLpBreakdown,\n cetusLpBreakdown,\n lastAutocompoundTime,\n} from \"./vaultFunctions.js\";\n\nexport { getApr, getAprs, getApy, getApys } from \"./getAprs.js\";\n\nexport {\n getRebalanceHistory,\n getRebalanceHistories,\n} from \"./getRebalanceHistory.js\";\n\nexport {\n getHoldersFromTransactions,\n getUserTokensFromTransactions,\n getUserTokensInUsdFromTransactions,\n} from \"./getHoldersFromTransactions.js\";\n\nexport { getLastAutoCompoundTime } from \"./getLastAutoCompoundTime.js\";\n\nexport * from \"./common/types.js\";\n\n// src/index.ts\nexport * from \"./graphql/fetchData.js\";\nexport * from \"./graphql/parseData.js\";\nexport * from \"./graphql/executeMutations.js\";\nexport * from \"./graphql/getMultiReceipts.js\";\n\nexport { getReceipts, getPool } from \"./sui-sdk/functions/getReceipts.js\";\n\nexport { liquidityToTokens, multiTokensToUsd } from \"./utils/userHoldings.js\";\n\nexport {\n poolInfo,\n getCetusSqrtPriceMap,\n getCetusInvestorTicksMap,\n getInvestorPoolMap,\n getPoolExchangeRateMap,\n poolCoinMap,\n poolCoinPairMap,\n} from \"./common/maps.js\";\n\nexport { coins } from \"./common/coins.js\";\n\nexport { getAlphaUnlocks } from \"./getAlphaUnlocks.js\";\n\nexport { poolIdPoolNameMap } from \"./common/maps.js\";\n\nexport { fetchLiquidityChangeEvents } from \"./sui-sdk/events/fetchLiquidityChangeEvents.js\";\nexport { fetchAutoCompoundingEvents } from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\n\nexport {\n LiquidityChangeEventNode,\n AutoCompoundingEventNode,\n} from \"./sui-sdk/events/types.js\";\n\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,iDAK6B;AAJ3B,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AAGd,+CAIwB;AAHtB,yGAAA,SAAS,OAAA;AACT,oHAAA,oBAAoB,OAAA;AACpB,oHAAA,oBAAoB,OAAA;AAGtB,6DAO+B;AAN7B,sHAAA,eAAe,OAAA;AACf,2HAAA,oBAAoB,OAAA;AACpB,iIAAA,0BAA0B,OAAA;AAC1B,iIAAA,0BAA0B,OAAA;AAC1B,oIAAA,6BAA6B,OAAA;AAC7B,0IAAA,mCAAmC,OAAA;AAGrC,qDAI2B;AAHzB,+GAAA,YAAY,OAAA;AACZ,0HAAA,uBAAuB,OAAA;AACvB,0HAAA,uBAAuB,OAAA;AAGzB,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,yDAI6B;AAH3B,qHAAA,gBAAgB,OAAA;AAChB,qHAAA,gBAAgB,OAAA;AAChB,yHAAA,oBAAoB,OAAA;AAGtB,2CAAgE;AAAvD,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAAE,oGAAA,MAAM,OAAA;AAAE,qGAAA,OAAO,OAAA;AAEzC,mEAGkC;AAFhC,6HAAA,mBAAmB,OAAA;AACnB,+HAAA,qBAAqB,OAAA;AAGvB,iFAIyC;AAHvC,2IAAA,0BAA0B,OAAA;AAC1B,8IAAA,6BAA6B,OAAA;AAC7B,mJAAA,kCAAkC,OAAA;AAGpC,2EAAuE;AAA9D,qIAAA,uBAAuB,OAAA;AAEhC,4DAAkC;AAElC,eAAe;AACf,iEAAuC;AACvC,iEAAuC;AACvC,wEAA8C;AAC9C,wEAA8C;AAE9C,qEAA0E;AAAjE,6GAAA,WAAW,OAAA;AAAE,yGAAA,OAAO,OAAA;AAE7B,2DAA8E;AAArE,oHAAA,iBAAiB,OAAA;AAAE,mHAAA,gBAAgB,OAAA;AAE5C,4CAQ0B;AAPxB,mGAAA,QAAQ,OAAA;AACR,+GAAA,oBAAoB,OAAA;AACpB,mHAAA,wBAAwB,OAAA;AACxB,6GAAA,kBAAkB,OAAA;AAClB,iHAAA,sBAAsB,OAAA;AACtB,sGAAA,WAAW,OAAA;AACX,0GAAA,eAAe,OAAA;AAGjB,8CAA0C;AAAjC,iGAAA,KAAK,OAAA;AAEd,2DAAuD;AAA9C,qHAAA,eAAe,OAAA;AAExB,4CAAqD;AAA5C,4GAAA,iBAAiB,OAAA;AAE1B,gGAA4F;AAAnF,2IAAA,0BAA0B,OAAA;AACnC,gGAA4F;AAAnF,2IAAA,0BAA0B,OAAA;AASnC,qDAA2B","sourcesContent":["export {\n setSuiNodeUrl,\n setSuiClient,\n getSuiNodeUrl,\n getSuiClient,\n} from \"./sui-sdk/client.js\";\n\nexport {\n getVaults,\n getSingleAssetVaults,\n getDoubleAssetVaults,\n} from \"./getVaults.js\";\n\nexport {\n getVaultBalance,\n getAlphaVaultBalance,\n getSingleAssetVaultBalance,\n getDoubleAssetVaultBalance,\n getVaultBalanceForActiveUsers,\n getXTokenVaultBalanceForActiveUsers,\n} from \"./getVaultBalances.js\";\n\nexport {\n getAllVaults,\n getAllDoubleAssetVaults,\n getAllSingleAssetVaults,\n} from \"./getAllVaults.js\";\n\nexport { getAirdropShare } from \"./getAirdropShare.js\";\n\nexport {\n alphaLpBreakdown,\n cetusLpBreakdown,\n lastAutocompoundTime,\n} from \"./vaultFunctions.js\";\n\nexport { getApr, getAprs, getApy, getApys } from \"./getAprs.js\";\n\nexport {\n getRebalanceHistory,\n getRebalanceHistories,\n} from \"./getRebalanceHistory.js\";\n\nexport {\n getHoldersFromTransactions,\n getUserTokensFromTransactions,\n getUserTokensInUsdFromTransactions,\n} from \"./getHoldersFromTransactions.js\";\n\nexport { getLastAutoCompoundTime } from \"./getLastAutoCompoundTime.js\";\n\nexport * from \"./common/types.js\";\n\n// src/index.ts\nexport * from \"./graphql/fetchData.js\";\nexport * from \"./graphql/parseData.js\";\nexport * from \"./graphql/executeMutations.js\";\nexport * from \"./graphql/getMultiReceipts.js\";\n\nexport { getReceipts, getPool } from \"./sui-sdk/functions/getReceipts.js\";\n\nexport { liquidityToTokens, multiTokensToUsd } from \"./utils/userHoldings.js\";\n\nexport {\n poolInfo,\n getCetusSqrtPriceMap,\n getCetusInvestorTicksMap,\n getInvestorPoolMap,\n getPoolExchangeRateMap,\n poolCoinMap,\n poolCoinPairMap,\n} from \"./common/maps.js\";\n\nexport { coins } from \"./common/coins.js\";\n\nexport { getAlphaUnlocks } from \"./getAlphaUnlocks.js\";\n\nexport { poolIdPoolNameMap } from \"./common/maps.js\";\n\nexport { fetchLiquidityChangeEvents } from \"./sui-sdk/events/fetchLiquidityChangeEvents.js\";\nexport { fetchAutoCompoundingEvents } from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\n\nexport {\n LiquidityChangeEventNode,\n AutoCompoundingEventNode,\n} from \"./sui-sdk/events/types.js\";\n\nexport { ReceiptGQL } from \"./graphql/types.js\";\n\nexport * from \"./types.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAutoCompoundingEvents.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAEjC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gCAAgC,GACvC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkHrC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"fetchAutoCompoundingEvents.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAEjC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gCAAgC,GACvC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkHrC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAsJjB;AA6CD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAWnC"}
|
|
@@ -113,132 +113,141 @@ async function fetchAutoCompoundingEvents(params) {
|
|
|
113
113
|
return autoCompoundingEvents;
|
|
114
114
|
}
|
|
115
115
|
async function calculateAprForInvestor(events) {
|
|
116
|
-
// Sort events by timestamp to process them in order
|
|
117
|
-
events.sort((a, b) => a.timestamp - b.timestamp);
|
|
118
116
|
let totalGrowth = 0;
|
|
119
117
|
let totalTimeSpan = 0;
|
|
120
|
-
let
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
let
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
118
|
+
let apr = 0;
|
|
119
|
+
try {
|
|
120
|
+
// Sort events by timestamp to process them in order
|
|
121
|
+
events.sort((a, b) => a.timestamp - b.timestamp);
|
|
122
|
+
let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event
|
|
123
|
+
let previousGrowthRate = 0;
|
|
124
|
+
let previousTimeDiff = 0;
|
|
125
|
+
let prevCompoundA = 0n;
|
|
126
|
+
let prevCompoundB = 0n;
|
|
127
|
+
const investorPoolMap = await (0, maps_js_1.getInvestorPoolMap)();
|
|
128
|
+
// const matchInvestor =
|
|
129
|
+
// "0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43";
|
|
130
|
+
// if (events && events.length > 0 && events[0].investor_id === matchInvestor) {
|
|
131
|
+
// console.log(
|
|
132
|
+
// "Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)",
|
|
133
|
+
// );
|
|
134
|
+
// }
|
|
135
|
+
for (const event of events) {
|
|
136
|
+
// Calculate the time difference from the previous event
|
|
137
|
+
let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);
|
|
138
|
+
// Calculate growth rate
|
|
139
|
+
let growthRate = 0;
|
|
140
|
+
if ("total_amount_a" in event && "total_amount_b" in event) {
|
|
141
|
+
let growthA = 0;
|
|
142
|
+
let growthB = 0;
|
|
143
|
+
if (Number(event.total_amount_a) === 0) {
|
|
144
|
+
prevCompoundA += event.compound_amount_a;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
prevCompoundA = 0n;
|
|
148
|
+
}
|
|
149
|
+
if (prevCompoundA > 0n) {
|
|
150
|
+
growthA =
|
|
151
|
+
Number(event.total_amount_a) === 0
|
|
152
|
+
? 0
|
|
153
|
+
: Number(event.compound_amount_a + prevCompoundA) /
|
|
154
|
+
Number(event.total_amount_a - prevCompoundA);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
growthA =
|
|
158
|
+
Number(event.total_amount_a) === 0
|
|
159
|
+
? 0
|
|
160
|
+
: Number(event.compound_amount_a) / Number(event.total_amount_a);
|
|
161
|
+
}
|
|
162
|
+
if (Number(event.total_amount_b) === 0) {
|
|
163
|
+
prevCompoundB += event.compound_amount_b;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
prevCompoundB = 0n;
|
|
167
|
+
}
|
|
168
|
+
if (prevCompoundB > 0n) {
|
|
169
|
+
growthB =
|
|
170
|
+
Number(event.total_amount_b) == 0
|
|
171
|
+
? 0
|
|
172
|
+
: Number(event.compound_amount_b + prevCompoundB) /
|
|
173
|
+
Number(event.total_amount_b - prevCompoundB);
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
growthB =
|
|
177
|
+
Number(event.total_amount_b) == 0
|
|
178
|
+
? 0
|
|
179
|
+
: Number(event.compound_amount_b) / Number(event.total_amount_b);
|
|
180
|
+
}
|
|
181
|
+
// if (
|
|
182
|
+
// event.investor_id ===
|
|
183
|
+
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
184
|
+
// ) {
|
|
185
|
+
// console.log(
|
|
186
|
+
// timeDiff / (1000 * 60),
|
|
187
|
+
// event.timestamp,
|
|
188
|
+
// event.timestamp - previousTimestamp,
|
|
189
|
+
// );
|
|
190
|
+
// }
|
|
191
|
+
// if (
|
|
192
|
+
// event.investor_id ===
|
|
193
|
+
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
194
|
+
// ) {
|
|
195
|
+
// console.log(
|
|
196
|
+
// event.compound_amount_a,
|
|
197
|
+
// event.total_amount_a,
|
|
198
|
+
// growthA,
|
|
199
|
+
// event.compound_amount_b,
|
|
200
|
+
// event.total_amount_b,
|
|
201
|
+
// growthB,
|
|
202
|
+
// );
|
|
203
|
+
// }
|
|
204
|
+
growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B
|
|
205
|
+
// if (event.investor_id === matchInvestor) {
|
|
206
|
+
// console.log(
|
|
207
|
+
// `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,
|
|
208
|
+
// );
|
|
209
|
+
// }
|
|
210
|
+
if (Math.abs(growthA - growthB) > 0.5) {
|
|
211
|
+
// skip row, fill with previous event
|
|
212
|
+
growthRate = previousGrowthRate;
|
|
213
|
+
timeDiff = previousTimeDiff;
|
|
214
|
+
}
|
|
215
|
+
if (growthRate > 0.005) {
|
|
216
|
+
growthRate = 0;
|
|
217
|
+
}
|
|
162
218
|
}
|
|
163
|
-
else {
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
Number(event.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
: Number(event.compound_amount_b) / Number(event.total_amount_b);
|
|
178
|
-
}
|
|
179
|
-
// if (
|
|
180
|
-
// event.investor_id ===
|
|
181
|
-
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
182
|
-
// ) {
|
|
183
|
-
// console.log(
|
|
184
|
-
// timeDiff / (1000 * 60),
|
|
185
|
-
// event.timestamp,
|
|
186
|
-
// event.timestamp - previousTimestamp,
|
|
187
|
-
// );
|
|
188
|
-
// }
|
|
189
|
-
// if (
|
|
190
|
-
// event.investor_id ===
|
|
191
|
-
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
192
|
-
// ) {
|
|
193
|
-
// console.log(
|
|
194
|
-
// event.compound_amount_a,
|
|
195
|
-
// event.total_amount_a,
|
|
196
|
-
// growthA,
|
|
197
|
-
// event.compound_amount_b,
|
|
198
|
-
// event.total_amount_b,
|
|
199
|
-
// growthB,
|
|
200
|
-
// );
|
|
201
|
-
// }
|
|
202
|
-
growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B
|
|
203
|
-
// if (event.investor_id === matchInvestor) {
|
|
204
|
-
// console.log(
|
|
205
|
-
// `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,
|
|
206
|
-
// );
|
|
207
|
-
// }
|
|
208
|
-
if (Math.abs(growthA - growthB) > 0.5) {
|
|
209
|
-
// skip row, fill with previous event
|
|
210
|
-
growthRate = previousGrowthRate;
|
|
211
|
-
timeDiff = previousTimeDiff;
|
|
212
|
-
}
|
|
213
|
-
if (growthRate > 0.005) {
|
|
214
|
-
growthRate = 0;
|
|
219
|
+
else if ("total_amount" in event) {
|
|
220
|
+
let compoundAmount = Number(event.compound_amount);
|
|
221
|
+
let totalAmount = Number(event.total_amount);
|
|
222
|
+
if ("cur_total_debt" in event && "accrued_interest" in event) {
|
|
223
|
+
compoundAmount = Number(event.compound_amount - event.accrued_interest);
|
|
224
|
+
totalAmount = Number(event.total_amount - event.cur_total_debt);
|
|
225
|
+
}
|
|
226
|
+
// NaviAutoCompoundingEvent
|
|
227
|
+
growthRate = isNaN(compoundAmount / totalAmount)
|
|
228
|
+
? 0
|
|
229
|
+
: compoundAmount / totalAmount;
|
|
230
|
+
const poolName = investorPoolMap.get(event.investor_id);
|
|
231
|
+
const coinName = maps_js_1.poolCoinMap[poolName];
|
|
232
|
+
growthRate = growthRate * Math.pow(10, 9 - coins_js_1.coins[coinName].expo);
|
|
215
233
|
}
|
|
234
|
+
// Accumulate the time-weighted growth
|
|
235
|
+
totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;
|
|
236
|
+
previousGrowthRate = growthRate;
|
|
237
|
+
// Accumulate the total time span
|
|
238
|
+
totalTimeSpan += timeDiff;
|
|
239
|
+
previousTimeDiff = timeDiff;
|
|
240
|
+
// Update the previous timestamp to the current event's timestamp
|
|
241
|
+
previousTimestamp = event.timestamp;
|
|
216
242
|
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
224
|
-
// NaviAutoCompoundingEvent
|
|
225
|
-
growthRate = isNaN(compoundAmount / totalAmount)
|
|
226
|
-
? 0
|
|
227
|
-
: compoundAmount / totalAmount;
|
|
228
|
-
const poolName = investorPoolMap.get(event.investor_id);
|
|
229
|
-
const coinName = maps_js_1.poolCoinMap[poolName];
|
|
230
|
-
growthRate = growthRate * Math.pow(10, 9 - coins_js_1.coins[coinName].expo);
|
|
243
|
+
apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
console.error("Error calculating apr from events.", error);
|
|
247
|
+
if (events.length > 0) {
|
|
248
|
+
console.error("Investor-ID: ", events[0].investor_id);
|
|
231
249
|
}
|
|
232
|
-
// Accumulate the time-weighted growth
|
|
233
|
-
totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;
|
|
234
|
-
previousGrowthRate = growthRate;
|
|
235
|
-
// Accumulate the total time span
|
|
236
|
-
totalTimeSpan += timeDiff;
|
|
237
|
-
previousTimeDiff = timeDiff;
|
|
238
|
-
// Update the previous timestamp to the current event's timestamp
|
|
239
|
-
previousTimestamp = event.timestamp;
|
|
240
250
|
}
|
|
241
|
-
const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;
|
|
242
251
|
return apr;
|
|
243
252
|
}
|
|
244
253
|
async function calculateAprForInvestors(events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n //RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n // const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n // if (params.poolNames) {\n // params.poolNames.forEach((poolName) => {\n // const eventType = poolInfo[poolName].rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // } else {\n // // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n // Object.values(poolInfo).forEach((info) => {\n // const eventType = info.rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // }\n\n const eventTypes = Array.from(eventTypesSet);\n // const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n // const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n // const events = (\n // await fetchEvents({\n // startTime: params.startTime,\n // endTime: params.endTime,\n // eventTypes: [eventType],\n // })\n // ).filter((e) => {\n // if (params.poolNames) {\n // return params.poolNames\n // .map((poolName) => poolInfo[poolName].investorId)\n // .includes((e as AutoCompoundingEventNode).investor_id);\n // } else {\n // return true;\n // }\n // });\n // return events;\n // });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n // const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n // const rebalancingEvents = rebalanceEvents.map((e) => {\n // return e as RebalanceEventNode;\n // });\n\n // const investorPoolMap = await getInvestorPoolMap();\n\n // for (const x of autoCompoundingEvents) {\n // if (\n // investorPoolMap.get(x.investor_id) &&\n // poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n // \"CETUS\"\n // ) {\n // if (\n // \"total_amount_a\" in x &&\n // x.total_amount_a == 0n &&\n // x.total_amount_b == 0n\n // ) {\n // for (const y of rebalancingEvents) {\n // if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n // x.total_amount_a = BigInt(y.amount_a_before);\n // x.total_amount_b = BigInt(y.amount_b_before);\n // }\n // }\n // }\n // }\n // }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n let previousGrowthRate = 0;\n let previousTimeDiff = 0;\n let prevCompoundA = 0n;\n let prevCompoundB = 0n;\n\n const investorPoolMap = await getInvestorPoolMap();\n\n // const matchInvestor =\n // \"0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43\";\n // if (events && events.length > 0 && events[0].investor_id === matchInvestor) {\n // console.log(\n // \"Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)\",\n // );\n // }\n for (const event of events) {\n // Calculate the time difference from the previous event\n let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n\n if (Number(event.total_amount_a) === 0) {\n prevCompoundA += event.compound_amount_a;\n } else {\n prevCompoundA = 0n;\n }\n if (prevCompoundA > 0n) {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a + prevCompoundA) /\n Number(event.total_amount_a - prevCompoundA);\n } else {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n }\n\n if (Number(event.total_amount_b) === 0) {\n prevCompoundB += event.compound_amount_b;\n } else {\n prevCompoundB = 0n;\n }\n\n if (prevCompoundB > 0n) {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b + prevCompoundB) /\n Number(event.total_amount_b - prevCompoundB);\n } else {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n }\n\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // timeDiff / (1000 * 60),\n // event.timestamp,\n // event.timestamp - previousTimestamp,\n // );\n // }\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // event.compound_amount_a,\n // event.total_amount_a,\n // growthA,\n // event.compound_amount_b,\n // event.total_amount_b,\n // growthB,\n // );\n // }\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n // if (event.investor_id === matchInvestor) {\n // console.log(\n // `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,\n // );\n // }\n if (Math.abs(growthA - growthB) > 0.5) {\n // skip row, fill with previous event\n growthRate = previousGrowthRate;\n timeDiff = previousTimeDiff;\n }\n if (growthRate > 0.005) {\n growthRate = 0;\n }\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(event.compound_amount - event.accrued_interest);\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;\n previousGrowthRate = growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n previousTimeDiff = timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n //RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n // const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n // if (params.poolNames) {\n // params.poolNames.forEach((poolName) => {\n // const eventType = poolInfo[poolName].rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // } else {\n // // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n // Object.values(poolInfo).forEach((info) => {\n // const eventType = info.rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // }\n\n const eventTypes = Array.from(eventTypesSet);\n // const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n // const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n // const events = (\n // await fetchEvents({\n // startTime: params.startTime,\n // endTime: params.endTime,\n // eventTypes: [eventType],\n // })\n // ).filter((e) => {\n // if (params.poolNames) {\n // return params.poolNames\n // .map((poolName) => poolInfo[poolName].investorId)\n // .includes((e as AutoCompoundingEventNode).investor_id);\n // } else {\n // return true;\n // }\n // });\n // return events;\n // });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n // const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n // const rebalancingEvents = rebalanceEvents.map((e) => {\n // return e as RebalanceEventNode;\n // });\n\n // const investorPoolMap = await getInvestorPoolMap();\n\n // for (const x of autoCompoundingEvents) {\n // if (\n // investorPoolMap.get(x.investor_id) &&\n // poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n // \"CETUS\"\n // ) {\n // if (\n // \"total_amount_a\" in x &&\n // x.total_amount_a == 0n &&\n // x.total_amount_b == 0n\n // ) {\n // for (const y of rebalancingEvents) {\n // if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n // x.total_amount_a = BigInt(y.amount_a_before);\n // x.total_amount_b = BigInt(y.amount_b_before);\n // }\n // }\n // }\n // }\n // }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let apr = 0;\n\n try {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n let previousGrowthRate = 0;\n let previousTimeDiff = 0;\n let prevCompoundA = 0n;\n let prevCompoundB = 0n;\n\n const investorPoolMap = await getInvestorPoolMap();\n\n // const matchInvestor =\n // \"0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43\";\n // if (events && events.length > 0 && events[0].investor_id === matchInvestor) {\n // console.log(\n // \"Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)\",\n // );\n // }\n for (const event of events) {\n // Calculate the time difference from the previous event\n let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n\n if (Number(event.total_amount_a) === 0) {\n prevCompoundA += event.compound_amount_a;\n } else {\n prevCompoundA = 0n;\n }\n if (prevCompoundA > 0n) {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a + prevCompoundA) /\n Number(event.total_amount_a - prevCompoundA);\n } else {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n }\n\n if (Number(event.total_amount_b) === 0) {\n prevCompoundB += event.compound_amount_b;\n } else {\n prevCompoundB = 0n;\n }\n\n if (prevCompoundB > 0n) {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b + prevCompoundB) /\n Number(event.total_amount_b - prevCompoundB);\n } else {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n }\n\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // timeDiff / (1000 * 60),\n // event.timestamp,\n // event.timestamp - previousTimestamp,\n // );\n // }\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // event.compound_amount_a,\n // event.total_amount_a,\n // growthA,\n // event.compound_amount_b,\n // event.total_amount_b,\n // growthB,\n // );\n // }\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n // if (event.investor_id === matchInvestor) {\n // console.log(\n // `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,\n // );\n // }\n if (Math.abs(growthA - growthB) > 0.5) {\n // skip row, fill with previous event\n growthRate = previousGrowthRate;\n timeDiff = previousTimeDiff;\n }\n if (growthRate > 0.005) {\n growthRate = 0;\n }\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(\n event.compound_amount - event.accrued_interest,\n );\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;\n previousGrowthRate = growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n previousTimeDiff = timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n } catch (error) {\n console.error(\"Error calculating apr from events.\", error);\n if (events.length > 0) {\n console.error(\"Investor-ID: \", events[0].investor_id);\n }\n }\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchUserVaultBalances.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EAET,MAAM,uBAAuB,CAAC;AAW/B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"fetchUserVaultBalances.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EAET,MAAM,uBAAuB,CAAC;AAW/B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CA6F1C"}
|
|
@@ -60,7 +60,8 @@ async function fetchUserVaultBalances(address, poolName) {
|
|
|
60
60
|
vaultBalance = res;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
else if (maps_js_1.poolInfo[poolName].parentProtocolName === "NAVI"
|
|
63
|
+
else if (maps_js_1.poolInfo[poolName].parentProtocolName === "NAVI" ||
|
|
64
|
+
maps_js_1.poolInfo[poolName].parentProtocolName === "BUCKET") {
|
|
64
65
|
const portfolioAmount = await (0, getPortfolioAmounts_js_1.getSingleAssetPortfolioAmount)(poolName, {
|
|
65
66
|
suiClient,
|
|
66
67
|
address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchUserVaultBalances.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"fetchUserVaultBalances.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"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","sourcesContent":["import { poolInfo } from \"../../common/maps.js\";\nimport {\n AlphaFiVaultBalance,\n PoolName,\n SingleAssetPoolNames,\n} from \"../../common/types.js\";\nimport { getSuiClient } from \"../client.js\";\nimport {\n getAlphaPortfolioAmount,\n getAlphaPortfolioAmountInUSD,\n getPortfolioAmount,\n getDoubleAssetPortfolioAmountInUSD,\n getSingleAssetPortfolioAmount,\n getSingleAssetPortfolioAmountInUSD,\n} from \"./getPortfolioAmounts.js\";\n\nexport async function fetchUserVaultBalances(\n address: string,\n poolName: PoolName,\n): Promise<AlphaFiVaultBalance | undefined> {\n const suiClient = getSuiClient();\n\n let vaultBalance: AlphaFiVaultBalance | undefined;\n if (poolInfo[poolName].parentProtocolName === \"ALPHAFI\") {\n const lockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: true,\n });\n const lockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: true },\n );\n const unlockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: false,\n });\n const unlockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: false },\n );\n const portfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\"ALPHA\", {\n suiClient,\n address,\n });\n if (\n lockedPortfolioAmount !== undefined &&\n lockedPortfolioAmountInUSD !== undefined &&\n unlockedPortfolioAmount !== undefined &&\n unlockedPortfolioAmountInUSD !== undefined &&\n portfolioAmount !== undefined &&\n portfolioAmountInUSD !== undefined\n ) {\n const res: AlphaFiVaultBalance = {\n lockedAlphaCoins: lockedPortfolioAmount,\n lockedAlphaCoinsInUSD: lockedPortfolioAmountInUSD,\n unlockedAlphaCoins: unlockedPortfolioAmount,\n unlockedAlphaCoinsInUSD: unlockedPortfolioAmountInUSD,\n totalAlphaCoins: portfolioAmount,\n totalAlphaCoinsInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n } else if (poolInfo[poolName].parentProtocolName === \"CETUS\") {\n const portfolioAmount = await getPortfolioAmount(poolName as PoolName, {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getDoubleAssetPortfolioAmountInUSD(\n poolName as PoolName,\n { suiClient, address },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: AlphaFiVaultBalance = {\n coinA: portfolioAmount[0].toString(),\n coinB: portfolioAmount[1].toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n } else if (\n poolInfo[poolName].parentProtocolName === \"NAVI\" ||\n poolInfo[poolName].parentProtocolName === \"BUCKET\"\n ) {\n const portfolioAmount = await getSingleAssetPortfolioAmount(\n poolName as SingleAssetPoolNames,\n {\n suiClient,\n address,\n },\n );\n const portfolioAmountInUSD = await getSingleAssetPortfolioAmountInUSD(\n poolName as SingleAssetPoolNames,\n {\n suiClient,\n address,\n },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: AlphaFiVaultBalance = {\n coin: portfolioAmount.toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n }\n return vaultBalance;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMultiReceipts.d.ts","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsDxC,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"getMultiReceipts.d.ts","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAsDxC,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAqDpC"}
|
|
@@ -50,32 +50,43 @@ const receiptTypes = {
|
|
|
50
50
|
export async function fetchMultiReceipts(address) {
|
|
51
51
|
const multiReceipts = [];
|
|
52
52
|
let hasNextPage = true;
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
query
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
53
|
+
try {
|
|
54
|
+
while (hasNextPage) {
|
|
55
|
+
const query = getMultiReceiptsQuery(receiptTypes);
|
|
56
|
+
const GET_RECEIPTS = gql `
|
|
57
|
+
${query}
|
|
58
|
+
`;
|
|
59
|
+
const result = await client.query({
|
|
60
|
+
query: GET_RECEIPTS,
|
|
61
|
+
variables: {
|
|
62
|
+
address: address,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
const { data } = result;
|
|
66
|
+
const receipts = data.owner;
|
|
67
|
+
hasNextPage = false;
|
|
68
|
+
Object.keys(receipts).forEach((key) => {
|
|
69
|
+
if (key !== "__typename") {
|
|
70
|
+
const { pageInfo, nodes } = receipts[key];
|
|
71
|
+
hasNextPage = hasNextPage || pageInfo.hasNextPage;
|
|
72
|
+
if (hasNextPage)
|
|
73
|
+
receiptTypes[key].cursor = pageInfo.endCursor;
|
|
74
|
+
else
|
|
75
|
+
receiptTypes[key].cursor = "0";
|
|
76
|
+
nodes.forEach((node) => {
|
|
77
|
+
multiReceipts.push(node);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error("Error fetching receipts from GraphQL:", error);
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
Object.keys(receiptTypes).forEach((key) => {
|
|
89
|
+
receiptTypes[key].cursor = "";
|
|
79
90
|
});
|
|
80
91
|
}
|
|
81
92
|
const receiptMap = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMultiReceipts.js","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAQtE,MAAM,YAAY,GAAmC;IACnD,iBAAiB,EAAE;QACjB,IAAI,EAAE,wFAAwF;QAC9F,MAAM,EAAE,EAAE;KACI;IAChB,oBAAoB,EAAE;QACpB,IAAI,EAAE,qGAAqG;QAC3G,MAAM,EAAE,EAAE;KACI;IAChB,iBAAiB,EAAE;QACjB,IAAI,EAAE,iGAAiG;QACvG,MAAM,EAAE,EAAE;KACI;IAChB,sBAAsB,EAAE;QACtB,IAAI,EAAE,wGAAwG;QAC9G,MAAM,EAAE,EAAE;KACI;IAChB,sBAAsB,EAAE;QACtB,IAAI,EAAE,qGAAqG;QAC3G,MAAM,EAAE,EAAE;KACI;IAChB,gBAAgB,EAAE;QAChB,IAAI,EAAE,gGAAgG;QACtG,MAAM,EAAE,EAAE;KACI;IAChB,2BAA2B,EAAE;QAC3B,IAAI,EAAE,yGAAyG;QAC/G,MAAM,EAAE,EAAE;KACI;IAChB,8BAA8B,EAAE;QAC9B,IAAI,EAAE,iHAAiH;QACvH,MAAM,EAAE,EAAE;KACI;IAChB,kBAAkB,EAAE;QAClB,IAAI,EAAE,qGAAqG;QAC3G,MAAM,EAAE,EAAE;KACI;IAChB,oBAAoB,EAAE;QACpB,IAAI,EAAE,gGAAgG;QACtG,MAAM,EAAE,EAAE;KACI;IAChB,kBAAkB,EAAE;QAClB,IAAI,EAAE,mGAAmG;QACzG,MAAM,EAAE,EAAE;KACI;CACjB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe;IAEf,MAAM,aAAa,GAAU,EAAE,CAAC;IAChC,IAAI,WAAW,GAAG,IAAI,CAAC;IAEvB,OAAO,WAAW,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"getMultiReceipts.js","sourceRoot":"","sources":["../../../src/graphql/getMultiReceipts.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApolloQueryResult, gql } from \"@apollo/client/core\";\nimport client from \"./client.js\";\nimport { getMultiReceiptsQuery } from \"./queries/getMultiReceipts.js\";\nimport { ReceiptGQL } from \"./types.js\";\n\ntype ReceiptType = {\n type: string;\n cursor: string;\n};\n\nconst receiptTypes: { [key: string]: ReceiptType } = {\n alphaPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphapool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusSuiPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_sui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusPoolReceipts: {\n type: \"0x9bbd650b8442abb082c20f3bc95a9434a8d47b4bef98b0832dab57c1a8ba7123::alphafi_cetus_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusPoolBaseAReceipts: {\n type: \"0x2793db7aa0e0209afc84f0adb1b258973cf1c9da55c35ee85c18f2ed4912bb6f::alphafi_cetus_pool_base_a::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n cetusSuiV2PoolReceipts: {\n type: \"0x1a22b26f139b34c9de9718cf7e53159b2b939ec8f46f4c040776b7a3d580dd28::alphafi_cetus_sui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviPoolReceipts: {\n type: \"0x8f7d2c35e19c65213bc2153086969a55ec207b5a25ebdee303a6d9edd9c053e3::alphafi_navi_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviLoopSuiVsuiPoolReceipts: {\n type: \"0x531989a4be74dd43b25e7bb1eeade871f4524bdf437a8eaa30b4ac2a932b5579::alphafi_navi_sui_vsui_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviNativeUsdcUsdtPoolReceipts: {\n type: \"0xad4f82d9956085bdab812d46fb2ea4d95c35e9e936cb53d04a79d3989ef97774::alphafi_navi_native_usdc_usdt_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n bucketPoolReceipts: {\n type: \"0xa095412a92ff0f063cbea962f2f88b1a93cbc85c72bebf5dd7d90a8e2d6375ae::alphafi_bucket_pool_v1::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviUsdyPoolReceipts: {\n type: \"0xbcdbe865d8b2e84bbc217c12edb9cbad14a71ff8a0a1d849263c6b4b377780f1::alphafi_navi_pool::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n naviV2PoolReceipts: {\n type: \"0xb84dd393b055dd0ab669557c53b0296a2e707eb650f7a5600db6fe01cfbe1c9e::alphafi_navi_pool_v2::Receipt\",\n cursor: \"\",\n } as ReceiptType,\n};\n\nexport async function fetchMultiReceipts(\n address: string,\n): Promise<Map<string, ReceiptGQL[]>> {\n const multiReceipts: any[] = [];\n let hasNextPage = true;\n\n try {\n while (hasNextPage) {\n const query = getMultiReceiptsQuery(receiptTypes);\n const GET_RECEIPTS = gql`\n ${query}\n `;\n\n const result: ApolloQueryResult<any> = await client.query({\n query: GET_RECEIPTS,\n variables: {\n address: address,\n },\n });\n\n const { data } = result;\n const receipts = data.owner;\n hasNextPage = false;\n\n Object.keys(receipts).forEach((key) => {\n if (key !== \"__typename\") {\n const { pageInfo, nodes } = receipts[key];\n hasNextPage = hasNextPage || pageInfo.hasNextPage;\n if (hasNextPage) receiptTypes[key].cursor = pageInfo.endCursor;\n else receiptTypes[key].cursor = \"0\";\n nodes.forEach((node: any) => {\n multiReceipts.push(node);\n });\n }\n });\n }\n } catch (error) {\n console.error(\"Error fetching receipts from GraphQL:\", error);\n throw error;\n } finally {\n Object.keys(receiptTypes).forEach((key) => {\n receiptTypes[key].cursor = \"\";\n });\n }\n\n const receiptMap: Map<string, ReceiptGQL[]> = new Map();\n multiReceipts.forEach((receipt) => {\n const name = receipt.contents.json.name;\n let arr = receiptMap.get(name);\n if (!arr) arr = [];\n arr.push(receipt);\n receiptMap.set(name, arr);\n });\n\n return receiptMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graphql/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n endCursor: string | null;\n startCursor: string | null;\n}\n\nexport interface KeyValue {\n key: {\n name: string;\n };\n value: string;\n}\n\nexport interface LastAccRewardPerXToken {\n contents: KeyValue[];\n}\n\nexport interface LockedBalance {\n id: string;\n size: string;\n head: string;\n tail: string;\n}\n\nexport interface PendingRewards {\n contents: KeyValue[];\n}\n\nexport type
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/graphql/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PageInfo {\n hasNextPage: boolean;\n hasPreviousPage: boolean;\n endCursor: string | null;\n startCursor: string | null;\n}\n\nexport interface KeyValue {\n key: {\n name: string;\n };\n value: string;\n}\n\nexport interface LastAccRewardPerXToken {\n contents: KeyValue[];\n}\n\nexport interface LockedBalance {\n id: string;\n size: string;\n head: string;\n tail: string;\n}\n\nexport interface PendingRewards {\n contents: KeyValue[];\n}\n\nexport type ReceiptGQL = {\n address: string;\n version: string;\n digest: string;\n hasPublicTransfer: boolean;\n contents: {\n type: {\n repr: string;\n };\n json: {\n id: string;\n owner: string;\n name: string;\n image_url: string;\n pool_id: string;\n xTokenBalance: string;\n last_acc_reward_per_xtoken: {\n contents: {\n key: {\n name: string;\n };\n value: string;\n }[];\n };\n locked_balance: {\n head: string;\n id: string;\n size: string;\n tail: string;\n };\n unlocked_xtokens: string;\n pending_rewards: {\n contents: {\n key: {\n name: string;\n };\n value: string;\n }[];\n };\n };\n };\n};\n\nexport interface ReceiptMoveObjectContents {\n id: string;\n owner: string;\n name: string;\n image_url: string;\n pool_id: string;\n xTokenBalance: string;\n last_acc_reward_per_xtoken: LastAccRewardPerXToken;\n locked_balance: LockedBalance;\n unlocked_xtokens: string;\n pending_rewards: PendingRewards;\n}\n\nexport interface AsReceiptMoveObject {\n status: string;\n contents: {\n json: ReceiptMoveObjectContents;\n };\n}\n\nexport interface ReceiptNode {\n asMoveObject: AsReceiptMoveObject;\n}\n\nexport interface ReceiptsResponse {\n objects: {\n pageInfo: PageInfo;\n nodes: ReceiptNode[];\n };\n}\n\nexport interface LockedTableNode {\n name: { json: string };\n value: {\n json: {\n prev: string | null;\n next: string | null;\n value: string;\n };\n };\n}\n\nexport interface DynamicFieldsResponse {\n dynamicFields: {\n pageInfo: PageInfo;\n nodes: LockedTableNode[];\n };\n}\n"]}
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,cAAc,mBAAmB,CAAC;AAElC,eAAe;AACf,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAS5F,cAAc,YAAY,CAAC","sourcesContent":["export {\n setSuiNodeUrl,\n setSuiClient,\n getSuiNodeUrl,\n getSuiClient,\n} from \"./sui-sdk/client.js\";\n\nexport {\n getVaults,\n getSingleAssetVaults,\n getDoubleAssetVaults,\n} from \"./getVaults.js\";\n\nexport {\n getVaultBalance,\n getAlphaVaultBalance,\n getSingleAssetVaultBalance,\n getDoubleAssetVaultBalance,\n getVaultBalanceForActiveUsers,\n getXTokenVaultBalanceForActiveUsers,\n} from \"./getVaultBalances.js\";\n\nexport {\n getAllVaults,\n getAllDoubleAssetVaults,\n getAllSingleAssetVaults,\n} from \"./getAllVaults.js\";\n\nexport { getAirdropShare } from \"./getAirdropShare.js\";\n\nexport {\n alphaLpBreakdown,\n cetusLpBreakdown,\n lastAutocompoundTime,\n} from \"./vaultFunctions.js\";\n\nexport { getApr, getAprs, getApy, getApys } from \"./getAprs.js\";\n\nexport {\n getRebalanceHistory,\n getRebalanceHistories,\n} from \"./getRebalanceHistory.js\";\n\nexport {\n getHoldersFromTransactions,\n getUserTokensFromTransactions,\n getUserTokensInUsdFromTransactions,\n} from \"./getHoldersFromTransactions.js\";\n\nexport { getLastAutoCompoundTime } from \"./getLastAutoCompoundTime.js\";\n\nexport * from \"./common/types.js\";\n\n// src/index.ts\nexport * from \"./graphql/fetchData.js\";\nexport * from \"./graphql/parseData.js\";\nexport * from \"./graphql/executeMutations.js\";\nexport * from \"./graphql/getMultiReceipts.js\";\n\nexport { getReceipts, getPool } from \"./sui-sdk/functions/getReceipts.js\";\n\nexport { liquidityToTokens, multiTokensToUsd } from \"./utils/userHoldings.js\";\n\nexport {\n poolInfo,\n getCetusSqrtPriceMap,\n getCetusInvestorTicksMap,\n getInvestorPoolMap,\n getPoolExchangeRateMap,\n poolCoinMap,\n poolCoinPairMap,\n} from \"./common/maps.js\";\n\nexport { coins } from \"./common/coins.js\";\n\nexport { getAlphaUnlocks } from \"./getAlphaUnlocks.js\";\n\nexport { poolIdPoolNameMap } from \"./common/maps.js\";\n\nexport { fetchLiquidityChangeEvents } from \"./sui-sdk/events/fetchLiquidityChangeEvents.js\";\nexport { fetchAutoCompoundingEvents } from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\n\nexport {\n LiquidityChangeEventNode,\n AutoCompoundingEventNode,\n} from \"./sui-sdk/events/types.js\";\n\nexport {
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,0BAA0B,EAC1B,6BAA6B,EAC7B,mCAAmC,GACpC,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEhE,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,0BAA0B,EAC1B,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,cAAc,mBAAmB,CAAC;AAElC,eAAe;AACf,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oCAAoC,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE9E,OAAO,EACL,QAAQ,EACR,oBAAoB,EACpB,wBAAwB,EACxB,kBAAkB,EAClB,sBAAsB,EACtB,WAAW,EACX,eAAe,GAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAC5F,OAAO,EAAE,0BAA0B,EAAE,MAAM,gDAAgD,CAAC;AAS5F,cAAc,YAAY,CAAC","sourcesContent":["export {\n setSuiNodeUrl,\n setSuiClient,\n getSuiNodeUrl,\n getSuiClient,\n} from \"./sui-sdk/client.js\";\n\nexport {\n getVaults,\n getSingleAssetVaults,\n getDoubleAssetVaults,\n} from \"./getVaults.js\";\n\nexport {\n getVaultBalance,\n getAlphaVaultBalance,\n getSingleAssetVaultBalance,\n getDoubleAssetVaultBalance,\n getVaultBalanceForActiveUsers,\n getXTokenVaultBalanceForActiveUsers,\n} from \"./getVaultBalances.js\";\n\nexport {\n getAllVaults,\n getAllDoubleAssetVaults,\n getAllSingleAssetVaults,\n} from \"./getAllVaults.js\";\n\nexport { getAirdropShare } from \"./getAirdropShare.js\";\n\nexport {\n alphaLpBreakdown,\n cetusLpBreakdown,\n lastAutocompoundTime,\n} from \"./vaultFunctions.js\";\n\nexport { getApr, getAprs, getApy, getApys } from \"./getAprs.js\";\n\nexport {\n getRebalanceHistory,\n getRebalanceHistories,\n} from \"./getRebalanceHistory.js\";\n\nexport {\n getHoldersFromTransactions,\n getUserTokensFromTransactions,\n getUserTokensInUsdFromTransactions,\n} from \"./getHoldersFromTransactions.js\";\n\nexport { getLastAutoCompoundTime } from \"./getLastAutoCompoundTime.js\";\n\nexport * from \"./common/types.js\";\n\n// src/index.ts\nexport * from \"./graphql/fetchData.js\";\nexport * from \"./graphql/parseData.js\";\nexport * from \"./graphql/executeMutations.js\";\nexport * from \"./graphql/getMultiReceipts.js\";\n\nexport { getReceipts, getPool } from \"./sui-sdk/functions/getReceipts.js\";\n\nexport { liquidityToTokens, multiTokensToUsd } from \"./utils/userHoldings.js\";\n\nexport {\n poolInfo,\n getCetusSqrtPriceMap,\n getCetusInvestorTicksMap,\n getInvestorPoolMap,\n getPoolExchangeRateMap,\n poolCoinMap,\n poolCoinPairMap,\n} from \"./common/maps.js\";\n\nexport { coins } from \"./common/coins.js\";\n\nexport { getAlphaUnlocks } from \"./getAlphaUnlocks.js\";\n\nexport { poolIdPoolNameMap } from \"./common/maps.js\";\n\nexport { fetchLiquidityChangeEvents } from \"./sui-sdk/events/fetchLiquidityChangeEvents.js\";\nexport { fetchAutoCompoundingEvents } from \"./sui-sdk/events/fetchAutoCompoundingEvents.js\";\n\nexport {\n LiquidityChangeEventNode,\n AutoCompoundingEventNode,\n} from \"./sui-sdk/events/types.js\";\n\nexport { ReceiptGQL } from \"./graphql/types.js\";\n\nexport * from \"./types.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAutoCompoundingEvents.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAEjC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gCAAgC,GACvC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkHrC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"fetchAutoCompoundingEvents.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAwB,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EACL,wBAAwB,EACxB,gCAAgC,EAEjC,MAAM,YAAY,CAAC;AAEpB,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gCAAgC,GACvC,OAAO,CAAC,wBAAwB,EAAE,CAAC,CAkHrC;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAsJjB;AA6CD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,wBAAwB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAWnC"}
|
|
@@ -108,132 +108,141 @@ export async function fetchAutoCompoundingEvents(params) {
|
|
|
108
108
|
return autoCompoundingEvents;
|
|
109
109
|
}
|
|
110
110
|
export async function calculateAprForInvestor(events) {
|
|
111
|
-
// Sort events by timestamp to process them in order
|
|
112
|
-
events.sort((a, b) => a.timestamp - b.timestamp);
|
|
113
111
|
let totalGrowth = 0;
|
|
114
112
|
let totalTimeSpan = 0;
|
|
115
|
-
let
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
//
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
let
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
113
|
+
let apr = 0;
|
|
114
|
+
try {
|
|
115
|
+
// Sort events by timestamp to process them in order
|
|
116
|
+
events.sort((a, b) => a.timestamp - b.timestamp);
|
|
117
|
+
let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event
|
|
118
|
+
let previousGrowthRate = 0;
|
|
119
|
+
let previousTimeDiff = 0;
|
|
120
|
+
let prevCompoundA = 0n;
|
|
121
|
+
let prevCompoundB = 0n;
|
|
122
|
+
const investorPoolMap = await getInvestorPoolMap();
|
|
123
|
+
// const matchInvestor =
|
|
124
|
+
// "0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43";
|
|
125
|
+
// if (events && events.length > 0 && events[0].investor_id === matchInvestor) {
|
|
126
|
+
// console.log(
|
|
127
|
+
// "Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)",
|
|
128
|
+
// );
|
|
129
|
+
// }
|
|
130
|
+
for (const event of events) {
|
|
131
|
+
// Calculate the time difference from the previous event
|
|
132
|
+
let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);
|
|
133
|
+
// Calculate growth rate
|
|
134
|
+
let growthRate = 0;
|
|
135
|
+
if ("total_amount_a" in event && "total_amount_b" in event) {
|
|
136
|
+
let growthA = 0;
|
|
137
|
+
let growthB = 0;
|
|
138
|
+
if (Number(event.total_amount_a) === 0) {
|
|
139
|
+
prevCompoundA += event.compound_amount_a;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
prevCompoundA = 0n;
|
|
143
|
+
}
|
|
144
|
+
if (prevCompoundA > 0n) {
|
|
145
|
+
growthA =
|
|
146
|
+
Number(event.total_amount_a) === 0
|
|
147
|
+
? 0
|
|
148
|
+
: Number(event.compound_amount_a + prevCompoundA) /
|
|
149
|
+
Number(event.total_amount_a - prevCompoundA);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
growthA =
|
|
153
|
+
Number(event.total_amount_a) === 0
|
|
154
|
+
? 0
|
|
155
|
+
: Number(event.compound_amount_a) / Number(event.total_amount_a);
|
|
156
|
+
}
|
|
157
|
+
if (Number(event.total_amount_b) === 0) {
|
|
158
|
+
prevCompoundB += event.compound_amount_b;
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
prevCompoundB = 0n;
|
|
162
|
+
}
|
|
163
|
+
if (prevCompoundB > 0n) {
|
|
164
|
+
growthB =
|
|
165
|
+
Number(event.total_amount_b) == 0
|
|
166
|
+
? 0
|
|
167
|
+
: Number(event.compound_amount_b + prevCompoundB) /
|
|
168
|
+
Number(event.total_amount_b - prevCompoundB);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
growthB =
|
|
172
|
+
Number(event.total_amount_b) == 0
|
|
173
|
+
? 0
|
|
174
|
+
: Number(event.compound_amount_b) / Number(event.total_amount_b);
|
|
175
|
+
}
|
|
176
|
+
// if (
|
|
177
|
+
// event.investor_id ===
|
|
178
|
+
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
179
|
+
// ) {
|
|
180
|
+
// console.log(
|
|
181
|
+
// timeDiff / (1000 * 60),
|
|
182
|
+
// event.timestamp,
|
|
183
|
+
// event.timestamp - previousTimestamp,
|
|
184
|
+
// );
|
|
185
|
+
// }
|
|
186
|
+
// if (
|
|
187
|
+
// event.investor_id ===
|
|
188
|
+
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
189
|
+
// ) {
|
|
190
|
+
// console.log(
|
|
191
|
+
// event.compound_amount_a,
|
|
192
|
+
// event.total_amount_a,
|
|
193
|
+
// growthA,
|
|
194
|
+
// event.compound_amount_b,
|
|
195
|
+
// event.total_amount_b,
|
|
196
|
+
// growthB,
|
|
197
|
+
// );
|
|
198
|
+
// }
|
|
199
|
+
growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B
|
|
200
|
+
// if (event.investor_id === matchInvestor) {
|
|
201
|
+
// console.log(
|
|
202
|
+
// `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,
|
|
203
|
+
// );
|
|
204
|
+
// }
|
|
205
|
+
if (Math.abs(growthA - growthB) > 0.5) {
|
|
206
|
+
// skip row, fill with previous event
|
|
207
|
+
growthRate = previousGrowthRate;
|
|
208
|
+
timeDiff = previousTimeDiff;
|
|
209
|
+
}
|
|
210
|
+
if (growthRate > 0.005) {
|
|
211
|
+
growthRate = 0;
|
|
212
|
+
}
|
|
157
213
|
}
|
|
158
|
-
else {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
Number(event.
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
: Number(event.compound_amount_b) / Number(event.total_amount_b);
|
|
173
|
-
}
|
|
174
|
-
// if (
|
|
175
|
-
// event.investor_id ===
|
|
176
|
-
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
177
|
-
// ) {
|
|
178
|
-
// console.log(
|
|
179
|
-
// timeDiff / (1000 * 60),
|
|
180
|
-
// event.timestamp,
|
|
181
|
-
// event.timestamp - previousTimestamp,
|
|
182
|
-
// );
|
|
183
|
-
// }
|
|
184
|
-
// if (
|
|
185
|
-
// event.investor_id ===
|
|
186
|
-
// "0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6"
|
|
187
|
-
// ) {
|
|
188
|
-
// console.log(
|
|
189
|
-
// event.compound_amount_a,
|
|
190
|
-
// event.total_amount_a,
|
|
191
|
-
// growthA,
|
|
192
|
-
// event.compound_amount_b,
|
|
193
|
-
// event.total_amount_b,
|
|
194
|
-
// growthB,
|
|
195
|
-
// );
|
|
196
|
-
// }
|
|
197
|
-
growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B
|
|
198
|
-
// if (event.investor_id === matchInvestor) {
|
|
199
|
-
// console.log(
|
|
200
|
-
// `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,
|
|
201
|
-
// );
|
|
202
|
-
// }
|
|
203
|
-
if (Math.abs(growthA - growthB) > 0.5) {
|
|
204
|
-
// skip row, fill with previous event
|
|
205
|
-
growthRate = previousGrowthRate;
|
|
206
|
-
timeDiff = previousTimeDiff;
|
|
207
|
-
}
|
|
208
|
-
if (growthRate > 0.005) {
|
|
209
|
-
growthRate = 0;
|
|
214
|
+
else if ("total_amount" in event) {
|
|
215
|
+
let compoundAmount = Number(event.compound_amount);
|
|
216
|
+
let totalAmount = Number(event.total_amount);
|
|
217
|
+
if ("cur_total_debt" in event && "accrued_interest" in event) {
|
|
218
|
+
compoundAmount = Number(event.compound_amount - event.accrued_interest);
|
|
219
|
+
totalAmount = Number(event.total_amount - event.cur_total_debt);
|
|
220
|
+
}
|
|
221
|
+
// NaviAutoCompoundingEvent
|
|
222
|
+
growthRate = isNaN(compoundAmount / totalAmount)
|
|
223
|
+
? 0
|
|
224
|
+
: compoundAmount / totalAmount;
|
|
225
|
+
const poolName = investorPoolMap.get(event.investor_id);
|
|
226
|
+
const coinName = poolCoinMap[poolName];
|
|
227
|
+
growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);
|
|
210
228
|
}
|
|
229
|
+
// Accumulate the time-weighted growth
|
|
230
|
+
totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;
|
|
231
|
+
previousGrowthRate = growthRate;
|
|
232
|
+
// Accumulate the total time span
|
|
233
|
+
totalTimeSpan += timeDiff;
|
|
234
|
+
previousTimeDiff = timeDiff;
|
|
235
|
+
// Update the previous timestamp to the current event's timestamp
|
|
236
|
+
previousTimestamp = event.timestamp;
|
|
211
237
|
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
// NaviAutoCompoundingEvent
|
|
220
|
-
growthRate = isNaN(compoundAmount / totalAmount)
|
|
221
|
-
? 0
|
|
222
|
-
: compoundAmount / totalAmount;
|
|
223
|
-
const poolName = investorPoolMap.get(event.investor_id);
|
|
224
|
-
const coinName = poolCoinMap[poolName];
|
|
225
|
-
growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);
|
|
238
|
+
apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
console.error("Error calculating apr from events.", error);
|
|
242
|
+
if (events.length > 0) {
|
|
243
|
+
console.error("Investor-ID: ", events[0].investor_id);
|
|
226
244
|
}
|
|
227
|
-
// Accumulate the time-weighted growth
|
|
228
|
-
totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;
|
|
229
|
-
previousGrowthRate = growthRate;
|
|
230
|
-
// Accumulate the total time span
|
|
231
|
-
totalTimeSpan += timeDiff;
|
|
232
|
-
previousTimeDiff = timeDiff;
|
|
233
|
-
// Update the previous timestamp to the current event's timestamp
|
|
234
|
-
previousTimestamp = event.timestamp;
|
|
235
245
|
}
|
|
236
|
-
const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;
|
|
237
246
|
return apr;
|
|
238
247
|
}
|
|
239
248
|
async function calculateAprForInvestors(events) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n //RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n // const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n // if (params.poolNames) {\n // params.poolNames.forEach((poolName) => {\n // const eventType = poolInfo[poolName].rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // } else {\n // // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n // Object.values(poolInfo).forEach((info) => {\n // const eventType = info.rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // }\n\n const eventTypes = Array.from(eventTypesSet);\n // const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n // const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n // const events = (\n // await fetchEvents({\n // startTime: params.startTime,\n // endTime: params.endTime,\n // eventTypes: [eventType],\n // })\n // ).filter((e) => {\n // if (params.poolNames) {\n // return params.poolNames\n // .map((poolName) => poolInfo[poolName].investorId)\n // .includes((e as AutoCompoundingEventNode).investor_id);\n // } else {\n // return true;\n // }\n // });\n // return events;\n // });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n // const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n // const rebalancingEvents = rebalanceEvents.map((e) => {\n // return e as RebalanceEventNode;\n // });\n\n // const investorPoolMap = await getInvestorPoolMap();\n\n // for (const x of autoCompoundingEvents) {\n // if (\n // investorPoolMap.get(x.investor_id) &&\n // poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n // \"CETUS\"\n // ) {\n // if (\n // \"total_amount_a\" in x &&\n // x.total_amount_a == 0n &&\n // x.total_amount_b == 0n\n // ) {\n // for (const y of rebalancingEvents) {\n // if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n // x.total_amount_a = BigInt(y.amount_a_before);\n // x.total_amount_b = BigInt(y.amount_b_before);\n // }\n // }\n // }\n // }\n // }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n let previousGrowthRate = 0;\n let previousTimeDiff = 0;\n let prevCompoundA = 0n;\n let prevCompoundB = 0n;\n\n const investorPoolMap = await getInvestorPoolMap();\n\n // const matchInvestor =\n // \"0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43\";\n // if (events && events.length > 0 && events[0].investor_id === matchInvestor) {\n // console.log(\n // \"Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)\",\n // );\n // }\n for (const event of events) {\n // Calculate the time difference from the previous event\n let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n\n if (Number(event.total_amount_a) === 0) {\n prevCompoundA += event.compound_amount_a;\n } else {\n prevCompoundA = 0n;\n }\n if (prevCompoundA > 0n) {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a + prevCompoundA) /\n Number(event.total_amount_a - prevCompoundA);\n } else {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n }\n\n if (Number(event.total_amount_b) === 0) {\n prevCompoundB += event.compound_amount_b;\n } else {\n prevCompoundB = 0n;\n }\n\n if (prevCompoundB > 0n) {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b + prevCompoundB) /\n Number(event.total_amount_b - prevCompoundB);\n } else {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n }\n\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // timeDiff / (1000 * 60),\n // event.timestamp,\n // event.timestamp - previousTimestamp,\n // );\n // }\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // event.compound_amount_a,\n // event.total_amount_a,\n // growthA,\n // event.compound_amount_b,\n // event.total_amount_b,\n // growthB,\n // );\n // }\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n // if (event.investor_id === matchInvestor) {\n // console.log(\n // `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,\n // );\n // }\n if (Math.abs(growthA - growthB) > 0.5) {\n // skip row, fill with previous event\n growthRate = previousGrowthRate;\n timeDiff = previousTimeDiff;\n }\n if (growthRate > 0.005) {\n growthRate = 0;\n }\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(event.compound_amount - event.accrued_interest);\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;\n previousGrowthRate = growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n previousTimeDiff = timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n const apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fetchAutoCompoundingEvents.js","sourceRoot":"","sources":["../../../../src/sui-sdk/events/fetchAutoCompoundingEvents.ts"],"names":[],"mappings":"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","sourcesContent":["import { coins } from \"../../common/coins.js\";\nimport {\n getInvestorPoolMap,\n poolCoinMap,\n poolInfo,\n} from \"../../common/maps.js\";\nimport { PoolName, SingleAssetPoolNames } from \"../../common/types.js\";\nimport { fetchEvents } from \"./fetchEvents.js\";\nimport {\n AutoCompoundingEventNode,\n FetchAutoCompoundingEventsParams,\n //RebalanceEventNode,\n} from \"./types.js\";\n\nexport async function fetchAutoCompoundingEvents(\n params: FetchAutoCompoundingEventsParams,\n): Promise<AutoCompoundingEventNode[]> {\n const eventTypesSet = new Set<string>();\n // const rebalanceEventTypesSet = new Set<string>();\n if (params.poolNames) {\n params.poolNames.forEach((poolName) => {\n const eventType = poolInfo[poolName].autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n } else {\n // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n Object.values(poolInfo).forEach((info) => {\n const eventType = info.autoCompoundingEventType;\n if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n eventTypesSet.add(eventType);\n }\n });\n }\n // for rebalance\n // if (params.poolNames) {\n // params.poolNames.forEach((poolName) => {\n // const eventType = poolInfo[poolName].rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // } else {\n // // Iterate over all the values in poolInfo and add each autoCompoundingEventType to the Set\n // Object.values(poolInfo).forEach((info) => {\n // const eventType = info.rebalanceEventType;\n // if (eventType !== undefined && eventType !== null && eventType !== \"\") {\n // rebalanceEventTypesSet.add(eventType);\n // }\n // });\n // }\n\n const eventTypes = Array.from(eventTypesSet);\n // const rebalanceEventTypes = Array.from(rebalanceEventTypesSet);\n\n const eventsPromises = eventTypes.map(async (eventType) => {\n const events = (\n await fetchEvents({\n startTime: params.startTime,\n endTime: params.endTime,\n eventTypes: [eventType],\n })\n ).filter((e) => {\n if (params.poolNames) {\n return params.poolNames\n .map((poolName) => poolInfo[poolName].investorId)\n .includes((e as AutoCompoundingEventNode).investor_id);\n } else {\n return true;\n }\n });\n return events;\n });\n // const rebalanceEventsPromises = rebalanceEventTypes.map(async (eventType) => {\n // const events = (\n // await fetchEvents({\n // startTime: params.startTime,\n // endTime: params.endTime,\n // eventTypes: [eventType],\n // })\n // ).filter((e) => {\n // if (params.poolNames) {\n // return params.poolNames\n // .map((poolName) => poolInfo[poolName].investorId)\n // .includes((e as AutoCompoundingEventNode).investor_id);\n // } else {\n // return true;\n // }\n // });\n // return events;\n // });\n\n const events = (await Promise.all(eventsPromises)).flat();\n\n const autoCompoundingEvents = events.map((e) => {\n return e as AutoCompoundingEventNode;\n });\n\n // const rebalanceEvents = (await Promise.all(rebalanceEventsPromises)).flat();\n\n // const rebalancingEvents = rebalanceEvents.map((e) => {\n // return e as RebalanceEventNode;\n // });\n\n // const investorPoolMap = await getInvestorPoolMap();\n\n // for (const x of autoCompoundingEvents) {\n // if (\n // investorPoolMap.get(x.investor_id) &&\n // poolInfo[investorPoolMap.get(x.investor_id)!].parentProtocolName ==\n // \"CETUS\"\n // ) {\n // if (\n // \"total_amount_a\" in x &&\n // x.total_amount_a == 0n &&\n // x.total_amount_b == 0n\n // ) {\n // for (const y of rebalancingEvents) {\n // if (y.investor_id == x.investor_id && y.timestamp == x.timestamp) {\n // // works if its guaranteed that for one timestamp there is only one rebalance for one pool\n // x.total_amount_a = BigInt(y.amount_a_before);\n // x.total_amount_b = BigInt(y.amount_b_before);\n // }\n // }\n // }\n // }\n // }\n\n return autoCompoundingEvents;\n}\n\nexport async function calculateAprForInvestor(\n events: AutoCompoundingEventNode[],\n): Promise<number> {\n let totalGrowth = 0;\n let totalTimeSpan = 0;\n let apr = 0;\n\n try {\n // Sort events by timestamp to process them in order\n events.sort((a, b) => a.timestamp - b.timestamp);\n\n let previousTimestamp = events[0].timestamp; // Start with the timestamp of the first event\n let previousGrowthRate = 0;\n let previousTimeDiff = 0;\n let prevCompoundA = 0n;\n let prevCompoundB = 0n;\n\n const investorPoolMap = await getInvestorPoolMap();\n\n // const matchInvestor =\n // \"0x05fa099d1df7b5bfb2e420d5ee2d63508db17c40ce7c4e0ca0305cd5df974e43\";\n // if (events && events.length > 0 && events[0].investor_id === matchInvestor) {\n // console.log(\n // \"Compund A,Total A,Compound B,Total B,Freebalance A,Freebalance B,GrowthA,GrowthB,AvgGrowth,Timestamp,TimeDiff (Min)\",\n // );\n // }\n for (const event of events) {\n // Calculate the time difference from the previous event\n let timeDiff = event.timestamp - previousTimestamp; // / (1000 * 60 * 60 * 24);\n\n // Calculate growth rate\n let growthRate = 0;\n if (\"total_amount_a\" in event && \"total_amount_b\" in event) {\n let growthA = 0;\n let growthB = 0;\n\n if (Number(event.total_amount_a) === 0) {\n prevCompoundA += event.compound_amount_a;\n } else {\n prevCompoundA = 0n;\n }\n if (prevCompoundA > 0n) {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a + prevCompoundA) /\n Number(event.total_amount_a - prevCompoundA);\n } else {\n growthA =\n Number(event.total_amount_a) === 0\n ? 0\n : Number(event.compound_amount_a) / Number(event.total_amount_a);\n }\n\n if (Number(event.total_amount_b) === 0) {\n prevCompoundB += event.compound_amount_b;\n } else {\n prevCompoundB = 0n;\n }\n\n if (prevCompoundB > 0n) {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b + prevCompoundB) /\n Number(event.total_amount_b - prevCompoundB);\n } else {\n growthB =\n Number(event.total_amount_b) == 0\n ? 0\n : Number(event.compound_amount_b) / Number(event.total_amount_b);\n }\n\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // timeDiff / (1000 * 60),\n // event.timestamp,\n // event.timestamp - previousTimestamp,\n // );\n // }\n // if (\n // event.investor_id ===\n // \"0xd060e81548aee885bd3d37ae0caec181185be792bf45412e0d0acccd1e0174e6\"\n // ) {\n // console.log(\n // event.compound_amount_a,\n // event.total_amount_a,\n // growthA,\n // event.compound_amount_b,\n // event.total_amount_b,\n // growthB,\n // );\n // }\n growthRate = (growthA + growthB) / 2; // Averaging growth rates for token A and B\n // if (event.investor_id === matchInvestor) {\n // console.log(\n // `${event.compound_amount_a},${event.total_amount_a},${event.compound_amount_b},${event.total_amount_b},${event.free_balance_a},${event.free_balance_b},${growthA},${growthB},${growthRate},${event.timestamp},${(event.timestamp - previousTimestamp) / (1000 * 60)}`,\n // );\n // }\n if (Math.abs(growthA - growthB) > 0.5) {\n // skip row, fill with previous event\n growthRate = previousGrowthRate;\n timeDiff = previousTimeDiff;\n }\n if (growthRate > 0.005) {\n growthRate = 0;\n }\n } else if (\"total_amount\" in event) {\n let compoundAmount: number = Number(event.compound_amount);\n let totalAmount: number = Number(event.total_amount);\n if (\"cur_total_debt\" in event && \"accrued_interest\" in event) {\n compoundAmount = Number(\n event.compound_amount - event.accrued_interest,\n );\n totalAmount = Number(event.total_amount - event.cur_total_debt);\n }\n // NaviAutoCompoundingEvent\n growthRate = isNaN(compoundAmount / totalAmount)\n ? 0\n : compoundAmount / totalAmount;\n const poolName = investorPoolMap.get(\n event.investor_id,\n ) as SingleAssetPoolNames;\n const coinName = poolCoinMap[poolName];\n\n growthRate = growthRate * Math.pow(10, 9 - coins[coinName].expo);\n }\n\n // Accumulate the time-weighted growth\n totalGrowth = (totalGrowth + 1) * (1 + growthRate) - 1;\n previousGrowthRate = growthRate;\n\n // Accumulate the total time span\n totalTimeSpan += timeDiff;\n previousTimeDiff = timeDiff;\n\n // Update the previous timestamp to the current event's timestamp\n previousTimestamp = event.timestamp;\n }\n\n apr = (totalGrowth / totalTimeSpan) * (1000 * 60 * 60 * 24 * 365) * 100;\n } catch (error) {\n console.error(\"Error calculating apr from events.\", error);\n if (events.length > 0) {\n console.error(\"Investor-ID: \", events[0].investor_id);\n }\n }\n\n return apr;\n}\n\nasync function calculateAprForInvestors(\n events: AutoCompoundingEventNode[],\n): Promise<Record<string, number>> {\n const investorEvents: Record<string, AutoCompoundingEventNode[]> = {};\n\n // Step 1: Segregate events by investor_id\n for (const event of events) {\n const investorId = event.investor_id;\n if (!investorEvents[investorId]) {\n investorEvents[investorId] = [];\n }\n investorEvents[investorId].push(event);\n }\n\n // Step 2: Calculate APR for each event and aggregate for each investor\n const aprPromises: Promise<{ investorId: string; apr: number }>[] = [];\n\n for (const investorId in investorEvents) {\n const investorEventList = investorEvents[investorId];\n // Push a promise that resolves to an object containing the investorId and the corresponding APR\n aprPromises.push(\n calculateAprForInvestor(investorEventList).then((apr) => ({\n investorId,\n apr,\n })),\n );\n }\n\n // Resolve all promises and map them to the corresponding APR\n const aprs = await Promise.all(aprPromises);\n\n // Convert the array of results into an object mapping investorId to APR\n const aprMap = aprs.reduce(\n (map, result) => {\n map[result.investorId] = result.apr;\n return map;\n },\n {} as Record<string, number>,\n );\n\n return aprMap;\n}\n\nexport async function calculateAprForPools(\n events: AutoCompoundingEventNode[],\n): Promise<Record<PoolName, number>> {\n const aprMap: Record<string, number> = {};\n const investorPoolNameMap = await getInvestorPoolMap();\n const investorAprMap = await calculateAprForInvestors(events);\n for (const investorId in investorAprMap) {\n const poolName = investorPoolNameMap.get(investorId);\n if (poolName) {\n aprMap[poolName] = investorAprMap[investorId];\n }\n }\n return aprMap;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchUserVaultBalances.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EAET,MAAM,uBAAuB,CAAC;AAW/B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"fetchUserVaultBalances.d.ts","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,QAAQ,EAET,MAAM,uBAAuB,CAAC;AAW/B,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CA6F1C"}
|
|
@@ -57,7 +57,8 @@ export async function fetchUserVaultBalances(address, poolName) {
|
|
|
57
57
|
vaultBalance = res;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
-
else if (poolInfo[poolName].parentProtocolName === "NAVI"
|
|
60
|
+
else if (poolInfo[poolName].parentProtocolName === "NAVI" ||
|
|
61
|
+
poolInfo[poolName].parentProtocolName === "BUCKET") {
|
|
61
62
|
const portfolioAmount = await getSingleAssetPortfolioAmount(poolName, {
|
|
62
63
|
suiClient,
|
|
63
64
|
address,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchUserVaultBalances.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAMhD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,kCAAkC,EAClC,6BAA6B,EAC7B,kCAAkC,GACnC,MAAM,0BAA0B,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,QAAkB;IAElB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IAEjC,IAAI,
|
|
1
|
+
{"version":3,"file":"fetchUserVaultBalances.js","sourceRoot":"","sources":["../../../../src/sui-sdk/functions/fetchUserVaultBalances.ts"],"names":[],"mappings":"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","sourcesContent":["import { poolInfo } from \"../../common/maps.js\";\nimport {\n AlphaFiVaultBalance,\n PoolName,\n SingleAssetPoolNames,\n} from \"../../common/types.js\";\nimport { getSuiClient } from \"../client.js\";\nimport {\n getAlphaPortfolioAmount,\n getAlphaPortfolioAmountInUSD,\n getPortfolioAmount,\n getDoubleAssetPortfolioAmountInUSD,\n getSingleAssetPortfolioAmount,\n getSingleAssetPortfolioAmountInUSD,\n} from \"./getPortfolioAmounts.js\";\n\nexport async function fetchUserVaultBalances(\n address: string,\n poolName: PoolName,\n): Promise<AlphaFiVaultBalance | undefined> {\n const suiClient = getSuiClient();\n\n let vaultBalance: AlphaFiVaultBalance | undefined;\n if (poolInfo[poolName].parentProtocolName === \"ALPHAFI\") {\n const lockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: true,\n });\n const lockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: true },\n );\n const unlockedPortfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n isLocked: false,\n });\n const unlockedPortfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\n \"ALPHA\",\n { suiClient, address, isLocked: false },\n );\n const portfolioAmount = await getAlphaPortfolioAmount(\"ALPHA\", {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getAlphaPortfolioAmountInUSD(\"ALPHA\", {\n suiClient,\n address,\n });\n if (\n lockedPortfolioAmount !== undefined &&\n lockedPortfolioAmountInUSD !== undefined &&\n unlockedPortfolioAmount !== undefined &&\n unlockedPortfolioAmountInUSD !== undefined &&\n portfolioAmount !== undefined &&\n portfolioAmountInUSD !== undefined\n ) {\n const res: AlphaFiVaultBalance = {\n lockedAlphaCoins: lockedPortfolioAmount,\n lockedAlphaCoinsInUSD: lockedPortfolioAmountInUSD,\n unlockedAlphaCoins: unlockedPortfolioAmount,\n unlockedAlphaCoinsInUSD: unlockedPortfolioAmountInUSD,\n totalAlphaCoins: portfolioAmount,\n totalAlphaCoinsInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n } else if (poolInfo[poolName].parentProtocolName === \"CETUS\") {\n const portfolioAmount = await getPortfolioAmount(poolName as PoolName, {\n suiClient,\n address,\n });\n const portfolioAmountInUSD = await getDoubleAssetPortfolioAmountInUSD(\n poolName as PoolName,\n { suiClient, address },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: AlphaFiVaultBalance = {\n coinA: portfolioAmount[0].toString(),\n coinB: portfolioAmount[1].toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n } else if (\n poolInfo[poolName].parentProtocolName === \"NAVI\" ||\n poolInfo[poolName].parentProtocolName === \"BUCKET\"\n ) {\n const portfolioAmount = await getSingleAssetPortfolioAmount(\n poolName as SingleAssetPoolNames,\n {\n suiClient,\n address,\n },\n );\n const portfolioAmountInUSD = await getSingleAssetPortfolioAmountInUSD(\n poolName as SingleAssetPoolNames,\n {\n suiClient,\n address,\n },\n );\n if (portfolioAmount !== undefined && portfolioAmountInUSD !== undefined) {\n const res: AlphaFiVaultBalance = {\n coin: portfolioAmount.toString(),\n valueInUSD: portfolioAmountInUSD,\n };\n vaultBalance = res;\n }\n }\n return vaultBalance;\n}\n"]}
|