@mento-protocol/mento-sdk 2.0.0-beta.1 → 2.0.0-beta.11

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.
Files changed (110) hide show
  1. package/dist/abis/index.d.ts +4 -3
  2. package/dist/abis/index.d.ts.map +1 -1
  3. package/dist/abis/index.js +1 -0
  4. package/dist/abis/index.js.map +1 -1
  5. package/dist/abis/uniswapV3.d.ts +4 -0
  6. package/dist/abis/uniswapV3.d.ts.map +1 -0
  7. package/dist/abis/uniswapV3.js +15 -0
  8. package/dist/abis/uniswapV3.js.map +1 -0
  9. package/dist/adapters/implementations/ethersAdapter.d.ts +0 -1
  10. package/dist/adapters/implementations/ethersAdapter.d.ts.map +1 -1
  11. package/dist/adapters/implementations/ethersAdapter.js +0 -3
  12. package/dist/adapters/implementations/ethersAdapter.js.map +1 -1
  13. package/dist/adapters/implementations/ethersV5Adapter.d.ts +0 -1
  14. package/dist/adapters/implementations/ethersV5Adapter.d.ts.map +1 -1
  15. package/dist/adapters/implementations/ethersV5Adapter.js +0 -3
  16. package/dist/adapters/implementations/ethersV5Adapter.js.map +1 -1
  17. package/dist/adapters/implementations/viemAdapter.d.ts +0 -1
  18. package/dist/adapters/implementations/viemAdapter.d.ts.map +1 -1
  19. package/dist/adapters/implementations/viemAdapter.js +0 -3
  20. package/dist/adapters/implementations/viemAdapter.js.map +1 -1
  21. package/dist/adapters/proxies/ethersAdapterProxy.d.ts +0 -2
  22. package/dist/adapters/proxies/ethersAdapterProxy.d.ts.map +1 -1
  23. package/dist/adapters/proxies/ethersAdapterProxy.js +9 -15
  24. package/dist/adapters/proxies/ethersAdapterProxy.js.map +1 -1
  25. package/dist/adapters/proxies/ethersV5AdapterProxy.d.ts +0 -2
  26. package/dist/adapters/proxies/ethersV5AdapterProxy.d.ts.map +1 -1
  27. package/dist/adapters/proxies/ethersV5AdapterProxy.js +9 -15
  28. package/dist/adapters/proxies/ethersV5AdapterProxy.js.map +1 -1
  29. package/dist/adapters/proxies/viemAdapterProxy.d.ts +0 -3
  30. package/dist/adapters/proxies/viemAdapterProxy.d.ts.map +1 -1
  31. package/dist/adapters/proxies/viemAdapterProxy.js +9 -15
  32. package/dist/adapters/proxies/viemAdapterProxy.js.map +1 -1
  33. package/dist/constants/aaveConfig.d.ts +7 -0
  34. package/dist/constants/aaveConfig.d.ts.map +1 -0
  35. package/dist/constants/aaveConfig.js +22 -0
  36. package/dist/constants/aaveConfig.js.map +1 -0
  37. package/dist/constants/index.d.ts +3 -0
  38. package/dist/constants/index.d.ts.map +1 -1
  39. package/dist/constants/index.js +3 -0
  40. package/dist/constants/index.js.map +1 -1
  41. package/dist/constants/mentoAddresses.d.ts +7 -0
  42. package/dist/constants/mentoAddresses.d.ts.map +1 -0
  43. package/dist/constants/mentoAddresses.js +10 -0
  44. package/dist/constants/mentoAddresses.js.map +1 -0
  45. package/dist/constants/protocolAddresses.d.ts +5 -0
  46. package/dist/constants/protocolAddresses.d.ts.map +1 -0
  47. package/dist/constants/protocolAddresses.js +8 -0
  48. package/dist/constants/protocolAddresses.js.map +1 -0
  49. package/dist/constants/stableTokenMetadata.d.ts +1 -2
  50. package/dist/constants/stableTokenMetadata.d.ts.map +1 -1
  51. package/dist/constants/stableTokenMetadata.js +2 -18
  52. package/dist/constants/stableTokenMetadata.js.map +1 -1
  53. package/dist/services/collateralAssetService.d.ts.map +1 -1
  54. package/dist/services/collateralAssetService.js +7 -4
  55. package/dist/services/collateralAssetService.js.map +1 -1
  56. package/dist/services/index.d.ts +5 -2
  57. package/dist/services/index.d.ts.map +1 -1
  58. package/dist/services/index.js +3 -0
  59. package/dist/services/index.js.map +1 -1
  60. package/dist/services/stableTokenService.d.ts +1 -0
  61. package/dist/services/stableTokenService.d.ts.map +1 -1
  62. package/dist/services/stableTokenService.js +7 -2
  63. package/dist/services/stableTokenService.js.map +1 -1
  64. package/dist/services/supply/ISupplyCalculator.d.ts +14 -0
  65. package/dist/services/supply/ISupplyCalculator.d.ts.map +1 -0
  66. package/dist/services/supply/ISupplyCalculator.js +3 -0
  67. package/dist/services/supply/ISupplyCalculator.js.map +1 -0
  68. package/dist/services/supply/aaveSupplyCalculator.d.ts +21 -0
  69. package/dist/services/supply/aaveSupplyCalculator.d.ts.map +1 -0
  70. package/dist/services/supply/aaveSupplyCalculator.js +46 -0
  71. package/dist/services/supply/aaveSupplyCalculator.js.map +1 -0
  72. package/dist/services/supply/calculatorFactory.d.ts +8 -0
  73. package/dist/services/supply/calculatorFactory.d.ts.map +1 -0
  74. package/dist/services/supply/calculatorFactory.js +3 -0
  75. package/dist/services/supply/calculatorFactory.js.map +1 -0
  76. package/dist/services/supply/defaultCalculatorFactory.d.ts +9 -0
  77. package/dist/services/supply/defaultCalculatorFactory.d.ts.map +1 -0
  78. package/dist/services/supply/defaultCalculatorFactory.js +28 -0
  79. package/dist/services/supply/defaultCalculatorFactory.js.map +1 -0
  80. package/dist/services/supply/index.d.ts +7 -0
  81. package/dist/services/supply/index.d.ts.map +1 -0
  82. package/dist/services/supply/index.js +23 -0
  83. package/dist/services/supply/index.js.map +1 -0
  84. package/dist/services/supply/multisigSupplyCalculator.d.ts +9 -0
  85. package/dist/services/supply/multisigSupplyCalculator.d.ts.map +1 -0
  86. package/dist/services/supply/multisigSupplyCalculator.js +33 -0
  87. package/dist/services/supply/multisigSupplyCalculator.js.map +1 -0
  88. package/dist/services/supply/uniV3SupplyCalculator.d.ts +21 -0
  89. package/dist/services/supply/uniV3SupplyCalculator.d.ts.map +1 -0
  90. package/dist/services/supply/uniV3SupplyCalculator.js +233 -0
  91. package/dist/services/supply/uniV3SupplyCalculator.js.map +1 -0
  92. package/dist/services/supplyAdjustmentService.d.ts +14 -0
  93. package/dist/services/supplyAdjustmentService.d.ts.map +1 -0
  94. package/dist/services/supplyAdjustmentService.js +46 -0
  95. package/dist/services/supplyAdjustmentService.js.map +1 -0
  96. package/dist/services/tokenMetadataService.d.ts +2 -2
  97. package/dist/services/tokenMetadataService.d.ts.map +1 -1
  98. package/dist/services/tokenMetadataService.js +0 -1
  99. package/dist/services/tokenMetadataService.js.map +1 -1
  100. package/dist/types/exchange.d.ts +1 -7
  101. package/dist/types/exchange.d.ts.map +1 -1
  102. package/dist/types/provider.d.ts +0 -1
  103. package/dist/types/provider.d.ts.map +1 -1
  104. package/dist/types/token.d.ts +17 -4
  105. package/dist/types/token.d.ts.map +1 -1
  106. package/package.json +4 -5
  107. package/dist/services/exchangeService.d.ts +0 -18
  108. package/dist/services/exchangeService.d.ts.map +0 -1
  109. package/dist/services/exchangeService.js +0 -78
  110. package/dist/services/exchangeService.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"collateralAssetService.js","sourceRoot":"","sources":["../../src/services/collateralAssetService.ts"],"names":[],"mappings":";;;AAAA,kCAAyD;AAMzD,4CAAiD;AACjD,oCAAyC;AACzC,iEAA6D;AAE7D,MAAa,sBAAsB;IAGjC,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAI,2CAAoB,CAAC,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAChD,MAAM,oBAAoB,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,eAAe,CAAC,CAAA;QACzE,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAE7D,MAAM,SAAS,GAAG,CAAC,MAAM,IAAA,sBAAc,EAAC,GAAG,EAAE,CAC3C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,oBAAoB;YAC7B,GAAG,EAAE,yBAAkB;YACvB,YAAY,EAAE,cAAc;SAC7B,CAAC,CACH,CAA2B,CAAA;QAE5B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;QACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAA;QAChE,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAsB,EAAE,CAAA;QACpC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,sBAAc,EAAC,GAAG,EAAE,CAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,cAAc;gBACvB,GAAG,EAAE,kBAAW;gBAChB,YAAY,EAAE,mBAAmB;gBACjC,IAAI,EAAE,CAAC,OAAO,CAAC;aAChB,CAAC,CACH,CAAY,CAAA;YAEb,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAC/D,OAAO,CACR,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA/CD,wDA+CC"}
1
+ {"version":3,"file":"collateralAssetService.js","sourceRoot":"","sources":["../../src/services/collateralAssetService.ts"],"names":[],"mappings":";;;AAAA,kCAAyD;AAEzD,4CAAyE;AACzE,oCAAyC;AACzC,iEAA6D;AAE7D,MAAa,sBAAsB;IAGjC,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAI,2CAAoB,CAAC,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAChD,MAAM,oBAAoB,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,yBAAa,CAAC,CAAA;QACvE,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,mBAAO,CAAC,CAAA;QAE3D,MAAM,SAAS,GAAG,CAAC,MAAM,IAAA,sBAAc,EAAC,GAAG,EAAE,CAC3C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACzB,OAAO,EAAE,oBAAoB;YAC7B,GAAG,EAAE,yBAAkB;YACvB,YAAY,EAAE,cAAc;SAC7B,CAAC,CACH,CAAe,CAAA;QAEhB,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;QACzC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,8DAA8D;QAC9D,MAAM,MAAM,GAAsB,EAAE,CAAA;QACpC,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;YACtC,MAAM,YAAY,GAAG,CAAC,MAAM,IAAA,sBAAc,EAAC,GAAG,EAAE,CAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACzB,OAAO,EAAE,cAAc;gBACvB,GAAG,EAAE,kBAAW;gBAChB,YAAY,EAAE,mBAAmB;gBACjC,IAAI,EAAE,CAAC,OAAO,CAAC;aAChB,CAAC,CACH,CAAY,CAAA;YAEb,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAC/D,OAAO,CACR,CAAA;gBACD,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO;oBACP,GAAG,QAAQ;iBACZ,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAlDD,wDAkDC"}
@@ -1,3 +1,6 @@
1
- export * from "./collateralAssetService";
2
- export * from "./stableTokenService";
1
+ export * from './collateralAssetService';
2
+ export * from './stableTokenService';
3
+ export * from './supplyAdjustmentService';
4
+ export * from './tokenMetadataService';
5
+ export * from './supply';
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,UAAU,CAAA"}
@@ -16,4 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./collateralAssetService"), exports);
18
18
  __exportStar(require("./stableTokenService"), exports);
19
+ __exportStar(require("./supplyAdjustmentService"), exports);
20
+ __exportStar(require("./tokenMetadataService"), exports);
21
+ __exportStar(require("./supply"), exports);
19
22
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAwC;AACxC,uDAAoC;AACpC,4DAAyC;AACzC,yDAAsC;AACtC,2CAAwB"}
@@ -2,6 +2,7 @@ import { ProviderAdapter, StableToken } from '../types';
2
2
  export declare class StableTokenService {
3
3
  private provider;
4
4
  private tokenMetadataService;
5
+ private supplyAdjustmentService;
5
6
  constructor(provider: ProviderAdapter);
6
7
  getStableTokens(): Promise<StableToken[]>;
7
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stableTokenService.d.ts","sourceRoot":"","sources":["../../src/services/stableTokenService.ts"],"names":[],"mappings":"AAME,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGzD,qBAAa,kBAAkB;IAGjB,OAAO,CAAC,QAAQ;IAF5B,OAAO,CAAC,oBAAoB,CAAsB;gBAE9B,QAAQ,EAAE,eAAe;IAIvC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CA6BhD"}
1
+ {"version":3,"file":"stableTokenService.d.ts","sourceRoot":"","sources":["../../src/services/stableTokenService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAKvD,qBAAa,kBAAkB;IAIjB,OAAO,CAAC,QAAQ;IAH5B,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,uBAAuB,CAAyB;gBAEpC,QAAQ,EAAE,eAAe;IAQvC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;CAiChD"}
@@ -3,15 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StableTokenService = void 0;
4
4
  const abis_1 = require("../abis");
5
5
  const constants_1 = require("../constants");
6
+ const supply_1 = require("./supply");
7
+ const supplyAdjustmentService_1 = require("./supplyAdjustmentService");
6
8
  const tokenMetadataService_1 = require("./tokenMetadataService");
7
9
  class StableTokenService {
8
10
  constructor(provider) {
9
11
  this.provider = provider;
10
12
  this.tokenMetadataService = new tokenMetadataService_1.TokenMetadataService(provider);
13
+ this.supplyAdjustmentService = new supplyAdjustmentService_1.SupplyAdjustmentService(provider, new supply_1.DefaultCalculatorFactory());
11
14
  }
12
15
  async getStableTokens() {
13
16
  const chainId = await this.provider.getChainId();
14
- const reserveAddress = (0, constants_1.getContractAddress)(chainId, 'Reserve');
17
+ const reserveAddress = (0, constants_1.getContractAddress)(chainId, constants_1.RESERVE);
15
18
  const tokenAddresses = (await this.provider.readContract({
16
19
  address: reserveAddress,
17
20
  abi: abis_1.RESERVE_ABI,
@@ -22,10 +25,12 @@ class StableTokenService {
22
25
  const metadata = await this.tokenMetadataService.getTokenMetadata(address);
23
26
  const totalSupply = await this.tokenMetadataService.getTotalSupply(address);
24
27
  const token = {
28
+ address,
25
29
  ...metadata,
26
30
  totalSupply,
27
- fiatTicker: (0, constants_1.getFiatTicker)(metadata.symbol),
28
31
  };
32
+ const adjustedSupply = await this.supplyAdjustmentService.getAdjustedSupply(token);
33
+ token.totalSupply = adjustedSupply;
29
34
  tokens.push(token);
30
35
  }
31
36
  return tokens;
@@ -1 +1 @@
1
- {"version":3,"file":"stableTokenService.js","sourceRoot":"","sources":["../../src/services/stableTokenService.ts"],"names":[],"mappings":";;;AAAA,kCAAqC;AACrC,4CAIqB;AAErB,iEAA6D;AAE7D,MAAa,kBAAkB;IAG7B,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAI,2CAAoB,CAAC,QAAQ,CAAC,CAAA;IAChE,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAChD,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,SAAS,CAAC,CAAA;QAE7D,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACvD,OAAO,EAAE,cAAc;YACvB,GAAG,EAAE,kBAAW;YAChB,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAa,CAAA;QAEf,MAAM,MAAM,GAAkB,EAAE,CAAA;QAEhC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC1E,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAChE,OAAO,CACR,CAAA;YAED,MAAM,KAAK,GAAG;gBACZ,GAAG,QAAQ;gBACX,WAAW;gBACX,UAAU,EAAE,IAAA,yBAAa,EAAC,QAAQ,CAAC,MAA2B,CAAC;aAChE,CAAA;YAED,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AApCD,gDAoCC"}
1
+ {"version":3,"file":"stableTokenService.js","sourceRoot":"","sources":["../../src/services/stableTokenService.ts"],"names":[],"mappings":";;;AAAA,kCAAqC;AACrC,4CAA0D;AAE1D,qCAAmD;AACnD,uEAAmE;AACnE,iEAA6D;AAE7D,MAAa,kBAAkB;IAI7B,YAAoB,QAAyB;QAAzB,aAAQ,GAAR,QAAQ,CAAiB;QAC3C,IAAI,CAAC,oBAAoB,GAAG,IAAI,2CAAoB,CAAC,QAAQ,CAAC,CAAA;QAC9D,IAAI,CAAC,uBAAuB,GAAG,IAAI,iDAAuB,CACxD,QAAQ,EACR,IAAI,iCAAwB,EAAE,CAC/B,CAAA;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAChD,MAAM,cAAc,GAAG,IAAA,8BAAkB,EAAC,OAAO,EAAE,mBAAO,CAAC,CAAA;QAE3D,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;YACvD,OAAO,EAAE,cAAc;YACvB,GAAG,EAAE,kBAAW;YAChB,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAa,CAAA;QAEf,MAAM,MAAM,GAAkB,EAAE,CAAA;QAEhC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;YACrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC1E,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAChE,OAAO,CACR,CAAA;YAED,MAAM,KAAK,GAAG;gBACZ,OAAO;gBACP,GAAG,QAAQ;gBACX,WAAW;aACZ,CAAA;YAED,MAAM,cAAc,GAClB,MAAM,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA;YAE7D,KAAK,CAAC,WAAW,GAAG,cAAc,CAAA;YAClC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AA7CD,gDA6CC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Interface for calculating non-circulating token supply.
3
+ *
4
+ * Determines the amount of tokens that should be excluded from total supply
5
+ * calculations because they are pre-minted or otherwise not available for
6
+ * trading (e.g., locked, reserved, or in protocol-owned positions).
7
+ *
8
+ * @param tokenAddress - The address of the token.
9
+ * @returns The amount to subtract from total supply.
10
+ */
11
+ export interface ISupplyCalculator {
12
+ getAmount(tokenAddress: string): Promise<bigint>;
13
+ }
14
+ //# sourceMappingURL=ISupplyCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISupplyCalculator.d.ts","sourceRoot":"","sources":["../../../src/services/supply/ISupplyCalculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;CACjD"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ISupplyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ISupplyCalculator.js","sourceRoot":"","sources":["../../../src/services/supply/ISupplyCalculator.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { ISupplyCalculator } from './ISupplyCalculator';
2
+ import { ProviderAdapter } from '../../types';
3
+ /**
4
+ * Calculates the amount of tokens supplied to AAVE protocol.
5
+ *
6
+ * When tokens are supplied to AAVE, the protocol mints corresponding "aTokens"
7
+ * as receipt tokens. The balance of the aTokens represents the total
8
+ * amount of the original token supplied to the protocol.
9
+ */
10
+ export declare class AAVESupplyCalculator implements ISupplyCalculator {
11
+ private readonly provider;
12
+ private holderAddresses;
13
+ constructor(provider: ProviderAdapter, holderAddresses: string[]);
14
+ /**
15
+ * Gets the balance of the corresponding aToken for the specified token address that is held by the holder addresses.
16
+ * @param tokenAddress - The address of the token to get the balance for.
17
+ * @returns The balance of the corresponding aToken.
18
+ */
19
+ getAmount(tokenAddress: string): Promise<bigint>;
20
+ }
21
+ //# sourceMappingURL=aaveSupplyCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aaveSupplyCalculator.d.ts","sourceRoot":"","sources":["../../../src/services/supply/aaveSupplyCalculator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAI7C;;;;;;GAMG;AACH,qBAAa,oBAAqB,YAAW,iBAAiB;IAG1D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,eAAe;gBADN,QAAQ,EAAE,eAAe,EAClC,eAAe,EAAE,MAAM,EAAE;IAGnC;;;;OAIG;IACG,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BvD"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AAVESupplyCalculator = void 0;
4
+ const abis_1 = require("../../abis");
5
+ const constants_1 = require("../../constants");
6
+ /**
7
+ * Calculates the amount of tokens supplied to AAVE protocol.
8
+ *
9
+ * When tokens are supplied to AAVE, the protocol mints corresponding "aTokens"
10
+ * as receipt tokens. The balance of the aTokens represents the total
11
+ * amount of the original token supplied to the protocol.
12
+ */
13
+ class AAVESupplyCalculator {
14
+ constructor(provider, holderAddresses) {
15
+ this.provider = provider;
16
+ this.holderAddresses = holderAddresses;
17
+ }
18
+ /**
19
+ * Gets the balance of the corresponding aToken for the specified token address that is held by the holder addresses.
20
+ * @param tokenAddress - The address of the token to get the balance for.
21
+ * @returns The balance of the corresponding aToken.
22
+ */
23
+ async getAmount(tokenAddress) {
24
+ const chainId = await this.provider.getChainId();
25
+ const chainMappings = constants_1.AAVE_TOKEN_MAPPINGS[chainId];
26
+ if (!chainMappings) {
27
+ return 0n; // No mappings for this chain, return 0
28
+ }
29
+ const aTokenAddress = chainMappings[tokenAddress];
30
+ if (!aTokenAddress) {
31
+ return 0n; // No aToken mapping for this token, return 0
32
+ }
33
+ const balances = await Promise.all(this.holderAddresses.map(async (holderAddress) => {
34
+ const balance = (await this.provider.readContract({
35
+ address: aTokenAddress,
36
+ abi: abis_1.ERC20_ABI,
37
+ functionName: 'balanceOf',
38
+ args: [holderAddress],
39
+ }));
40
+ return balance;
41
+ }));
42
+ return balances.reduce((acc, balance) => acc + balance, 0n);
43
+ }
44
+ }
45
+ exports.AAVESupplyCalculator = AAVESupplyCalculator;
46
+ //# sourceMappingURL=aaveSupplyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aaveSupplyCalculator.js","sourceRoot":"","sources":["../../../src/services/supply/aaveSupplyCalculator.ts"],"names":[],"mappings":";;;AAEA,qCAAsC;AACtC,+CAAqD;AAErD;;;;;;GAMG;AACH,MAAa,oBAAoB;IAE/B,YACmB,QAAyB,EAClC,eAAyB;QADhB,aAAQ,GAAR,QAAQ,CAAiB;QAClC,oBAAe,GAAf,eAAe,CAAU;IAChC,CAAC;IAEJ;;;;OAIG;IACH,KAAK,CAAC,SAAS,CAAC,YAAoB;QAClC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAA;QAEhD,MAAM,aAAa,GAAG,+BAAmB,CAAC,OAAO,CAAC,CAAA;QAClD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA,CAAC,uCAAuC;QACnD,CAAC;QACD,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,CAAA;QACjD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,EAAE,CAAA,CAAC,6CAA6C;QACzD,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;YAC/C,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAChD,OAAO,EAAE,aAAa;gBACtB,GAAG,EAAE,gBAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,aAAa,CAAC;aACtB,CAAC,CAAW,CAAA;YAEb,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CACH,CAAA;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC;CACF;AAvCD,oDAuCC"}
@@ -0,0 +1,8 @@
1
+ import { ISupplyCalculator } from './ISupplyCalculator';
2
+ import { ProviderAdapter } from '../../types';
3
+ export interface CalculatorFactory {
4
+ createUniV3Calculator(provider: ProviderAdapter): ISupplyCalculator;
5
+ createAAVECalculator(provider: ProviderAdapter): ISupplyCalculator;
6
+ createMultisigCalculator(provider: ProviderAdapter): ISupplyCalculator;
7
+ }
8
+ //# sourceMappingURL=calculatorFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculatorFactory.d.ts","sourceRoot":"","sources":["../../../src/services/supply/calculatorFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,MAAM,WAAW,iBAAiB;IAChC,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAAA;IACnE,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAAA;IAClE,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB,CAAA;CACvE"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=calculatorFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calculatorFactory.js","sourceRoot":"","sources":["../../../src/services/supply/calculatorFactory.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import { ProviderAdapter } from '../../types';
2
+ import { CalculatorFactory } from './calculatorFactory';
3
+ import { ISupplyCalculator } from './ISupplyCalculator';
4
+ export declare class DefaultCalculatorFactory implements CalculatorFactory {
5
+ createUniV3Calculator(provider: ProviderAdapter): ISupplyCalculator;
6
+ createAAVECalculator(provider: ProviderAdapter): ISupplyCalculator;
7
+ createMultisigCalculator(provider: ProviderAdapter): ISupplyCalculator;
8
+ }
9
+ //# sourceMappingURL=defaultCalculatorFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultCalculatorFactory.d.ts","sourceRoot":"","sources":["../../../src/services/supply/defaultCalculatorFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAG7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAIvD,qBAAa,wBAAyB,YAAW,iBAAiB;IAChE,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB;IASnE,oBAAoB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB;IAOlE,wBAAwB,CAAC,QAAQ,EAAE,eAAe,GAAG,iBAAiB;CAQvE"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DefaultCalculatorFactory = void 0;
4
+ const constants_1 = require("../../constants");
5
+ const aaveSupplyCalculator_1 = require("./aaveSupplyCalculator");
6
+ const uniV3SupplyCalculator_1 = require("./uniV3SupplyCalculator");
7
+ const multisigSupplyCalculator_1 = require("./multisigSupplyCalculator");
8
+ class DefaultCalculatorFactory {
9
+ createUniV3Calculator(provider) {
10
+ return new uniV3SupplyCalculator_1.UniV3SupplyCalculator(provider, constants_1.PROTOCOL_ADDRESSES.UNIV3_POSITION_MANAGER, constants_1.PROTOCOL_ADDRESSES.UNIV3_FACTORY, constants_1.MENTO_ADDRESSES.PROTOCOL_MULTISIG);
11
+ }
12
+ createAAVECalculator(provider) {
13
+ return new aaveSupplyCalculator_1.AAVESupplyCalculator(provider, [
14
+ constants_1.MENTO_ADDRESSES.OPERATIONAL_WALLET,
15
+ constants_1.MENTO_ADDRESSES.PROTOCOL_MULTISIG,
16
+ ]);
17
+ }
18
+ createMultisigCalculator(provider) {
19
+ return new multisigSupplyCalculator_1.MultisigSupplyCalculator(provider, [
20
+ constants_1.MENTO_ADDRESSES.PROTOCOL_MULTISIG,
21
+ constants_1.MENTO_ADDRESSES.OPERATIONAL_WALLET,
22
+ constants_1.MENTO_ADDRESSES.OPERATIONAL_WALLET_2,
23
+ constants_1.MENTO_ADDRESSES.REBALANCER_BOT,
24
+ ]);
25
+ }
26
+ }
27
+ exports.DefaultCalculatorFactory = DefaultCalculatorFactory;
28
+ //# sourceMappingURL=defaultCalculatorFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultCalculatorFactory.js","sourceRoot":"","sources":["../../../src/services/supply/defaultCalculatorFactory.ts"],"names":[],"mappings":";;;AACA,+CAAqE;AACrE,iEAA6D;AAG7D,mEAA+D;AAC/D,yEAAqE;AAErE,MAAa,wBAAwB;IACnC,qBAAqB,CAAC,QAAyB;QAC7C,OAAO,IAAI,6CAAqB,CAC9B,QAAQ,EACR,8BAAkB,CAAC,sBAAsB,EACzC,8BAAkB,CAAC,aAAa,EAChC,2BAAe,CAAC,iBAAiB,CAClC,CAAA;IACH,CAAC;IAED,oBAAoB,CAAC,QAAyB;QAC5C,OAAO,IAAI,2CAAoB,CAAC,QAAQ,EAAE;YACxC,2BAAe,CAAC,kBAAkB;YAClC,2BAAe,CAAC,iBAAiB;SAClC,CAAC,CAAA;IACJ,CAAC;IAED,wBAAwB,CAAC,QAAyB;QAChD,OAAO,IAAI,mDAAwB,CAAC,QAAQ,EAAE;YAC5C,2BAAe,CAAC,iBAAiB;YACjC,2BAAe,CAAC,kBAAkB;YAClC,2BAAe,CAAC,oBAAoB;YACpC,2BAAe,CAAC,cAAc;SAC/B,CAAC,CAAA;IACJ,CAAC;CACF;AAzBD,4DAyBC"}
@@ -0,0 +1,7 @@
1
+ export * from './uniV3SupplyCalculator';
2
+ export * from './multisigSupplyCalculator';
3
+ export * from './ISupplyCalculator';
4
+ export * from './aaveSupplyCalculator';
5
+ export * from './calculatorFactory';
6
+ export * from './defaultCalculatorFactory';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/supply/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAA;AACvC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,qBAAqB,CAAA;AACnC,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAA;AACnC,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./uniV3SupplyCalculator"), exports);
18
+ __exportStar(require("./multisigSupplyCalculator"), exports);
19
+ __exportStar(require("./ISupplyCalculator"), exports);
20
+ __exportStar(require("./aaveSupplyCalculator"), exports);
21
+ __exportStar(require("./calculatorFactory"), exports);
22
+ __exportStar(require("./defaultCalculatorFactory"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/supply/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,6DAA0C;AAC1C,sDAAmC;AACnC,yDAAsC;AACtC,sDAAmC;AACnC,6DAA0C"}
@@ -0,0 +1,9 @@
1
+ import { ProviderAdapter } from '../../types';
2
+ import { ISupplyCalculator } from './ISupplyCalculator';
3
+ export declare class MultisigSupplyCalculator implements ISupplyCalculator {
4
+ private provider;
5
+ private multisigAddresses;
6
+ constructor(provider: ProviderAdapter, multisigAddresses: string[]);
7
+ getAmount(tokenAddress: string): Promise<bigint>;
8
+ }
9
+ //# sourceMappingURL=multisigSupplyCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisigSupplyCalculator.d.ts","sourceRoot":"","sources":["../../../src/services/supply/multisigSupplyCalculator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAEvD,qBAAa,wBAAyB,YAAW,iBAAiB;IAE9D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,iBAAiB;gBADjB,QAAQ,EAAE,eAAe,EACzB,iBAAiB,EAAE,MAAM,EAAE;IAG/B,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAqBvD"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MultisigSupplyCalculator = void 0;
4
+ const abis_1 = require("../../abis");
5
+ class MultisigSupplyCalculator {
6
+ constructor(provider, multisigAddresses) {
7
+ this.provider = provider;
8
+ this.multisigAddresses = multisigAddresses;
9
+ }
10
+ async getAmount(tokenAddress) {
11
+ const balancePromises = this.multisigAddresses.map(async (multisigAddress) => {
12
+ try {
13
+ const balance = (await this.provider.readContract({
14
+ address: tokenAddress,
15
+ abi: abis_1.ERC20_ABI,
16
+ functionName: 'balanceOf',
17
+ args: [multisigAddress],
18
+ }));
19
+ return balance;
20
+ }
21
+ catch (error) {
22
+ // TODO: Failures are silent here which could lead to
23
+ // incorrect supply calculations. This will be addressed
24
+ // in the V2 release.
25
+ return BigInt(0);
26
+ }
27
+ });
28
+ const balances = await Promise.all(balancePromises);
29
+ return balances.reduce((sum, balance) => sum + balance, BigInt(0));
30
+ }
31
+ }
32
+ exports.MultisigSupplyCalculator = MultisigSupplyCalculator;
33
+ //# sourceMappingURL=multisigSupplyCalculator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multisigSupplyCalculator.js","sourceRoot":"","sources":["../../../src/services/supply/multisigSupplyCalculator.ts"],"names":[],"mappings":";;;AAAA,qCAAsC;AAItC,MAAa,wBAAwB;IACnC,YACU,QAAyB,EACzB,iBAA2B;QAD3B,aAAQ,GAAR,QAAQ,CAAiB;QACzB,sBAAiB,GAAjB,iBAAiB,CAAU;IAClC,CAAC;IAEJ,KAAK,CAAC,SAAS,CAAC,YAAoB;QAClC,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE;YAC3E,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;oBAChD,OAAO,EAAE,YAAY;oBACrB,GAAG,EAAE,gBAAS;oBACd,YAAY,EAAE,WAAW;oBACzB,IAAI,EAAE,CAAC,eAAe,CAAC;iBACxB,CAAC,CAAW,CAAA;gBACb,OAAO,OAAO,CAAA;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,qDAAqD;gBACrD,8DAA8D;gBAC9D,4BAA4B;gBAC5B,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;YAClB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,GAAG,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACpE,CAAC;CACF;AA3BD,4DA2BC"}
@@ -0,0 +1,21 @@
1
+ import { ProviderAdapter } from '../../types';
2
+ import { ISupplyCalculator } from './ISupplyCalculator';
3
+ export declare class UniV3SupplyCalculator implements ISupplyCalculator {
4
+ private provider;
5
+ private positionManagerAddress;
6
+ private factoryAddress;
7
+ private governanceAddress;
8
+ private readonly decimalsCache;
9
+ private readonly poolCache;
10
+ constructor(provider: ProviderAdapter, positionManagerAddress: string, factoryAddress: string, governanceAddress: string);
11
+ getAmount(tokenAddress: string): Promise<bigint>;
12
+ private normalizeNumberString;
13
+ private calculatePositionAmount;
14
+ private processPositionBatch;
15
+ private getPositionTokenIds;
16
+ private getPoolAddress;
17
+ private getTokenDecimals;
18
+ private readContract;
19
+ private calculateAmounts;
20
+ }
21
+ //# sourceMappingURL=uniV3SupplyCalculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uniV3SupplyCalculator.d.ts","sourceRoot":"","sources":["../../../src/services/supply/uniV3SupplyCalculator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAuB,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAOvD,qBAAa,qBAAsB,YAAW,iBAAiB;IAK3D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,iBAAiB;IAP3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAiC;IAC/D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAGjD,QAAQ,EAAE,eAAe,EACzB,sBAAsB,EAAE,MAAM,EAC9B,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,MAAM;IAG7B,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+CtD,OAAO,CAAC,qBAAqB;YAYf,uBAAuB;YAkCvB,oBAAoB;YAqEpB,mBAAmB;YAoCnB,cAAc;YAqBd,gBAAgB;IAuB9B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,gBAAgB;CAgDzB"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UniV3SupplyCalculator = void 0;
7
+ const abis_1 = require("../../abis");
8
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const utils_1 = require("../../utils");
10
+ const BATCH_SIZE = 5;
11
+ const BATCH_DELAY = 100;
12
+ class UniV3SupplyCalculator {
13
+ constructor(provider, positionManagerAddress, factoryAddress, governanceAddress) {
14
+ this.provider = provider;
15
+ this.positionManagerAddress = positionManagerAddress;
16
+ this.factoryAddress = factoryAddress;
17
+ this.governanceAddress = governanceAddress;
18
+ this.decimalsCache = new Map();
19
+ this.poolCache = new Map();
20
+ }
21
+ async getAmount(tokenAddress) {
22
+ try {
23
+ const positions = await this.getPositionTokenIds();
24
+ if (positions.length === 0)
25
+ return 0n;
26
+ let totalAmount = new bignumber_js_1.default(0);
27
+ // Process positions in batches
28
+ for (let i = 0; i < positions.length; i += BATCH_SIZE) {
29
+ const batchPositions = positions.slice(i, i + BATCH_SIZE);
30
+ const batchAmount = await (0, utils_1.retryOperation)(() => this.processPositionBatch(batchPositions, tokenAddress));
31
+ totalAmount = totalAmount.plus(batchAmount);
32
+ if (i + BATCH_SIZE < positions.length) {
33
+ await new Promise((resolve) => setTimeout(resolve, BATCH_DELAY));
34
+ }
35
+ }
36
+ // Convert to bigint, considering token decimals
37
+ const decimals = await this.getTokenDecimals(tokenAddress);
38
+ try {
39
+ const rawAmount = totalAmount
40
+ .integerValue(bignumber_js_1.default.ROUND_DOWN)
41
+ .abs() // Take absolute value as signs are handled by adjustment service
42
+ .toString(10);
43
+ // Remove any decimal points and handle scientific notation
44
+ const cleanAmount = this.normalizeNumberString(rawAmount);
45
+ return BigInt(cleanAmount);
46
+ }
47
+ catch (error) {
48
+ console.error('Error converting to bigint:', {
49
+ totalAmount: totalAmount.toString(),
50
+ decimals,
51
+ error,
52
+ });
53
+ return 0n;
54
+ }
55
+ }
56
+ catch (error) {
57
+ const errorMessage = `Univ3SupplyCalculator: Failed to calculate supply for token ${tokenAddress}: ${error}`;
58
+ throw new Error(errorMessage);
59
+ }
60
+ }
61
+ normalizeNumberString(value) {
62
+ if (value.includes('e')) {
63
+ const [mantissa, exponent] = value.split('e');
64
+ const e = parseInt(exponent);
65
+ if (e > 0) {
66
+ return mantissa.replace('.', '') + '0'.repeat(e);
67
+ }
68
+ return '0';
69
+ }
70
+ return value.split('.')[0];
71
+ }
72
+ async calculatePositionAmount(position, slot0, targetToken) {
73
+ const liquidity = new bignumber_js_1.default(position[7].toString());
74
+ const sqrtPriceX96 = new bignumber_js_1.default(slot0[0].toString());
75
+ const Q96 = new bignumber_js_1.default(2).pow(96);
76
+ const sqrtPriceX96Num = sqrtPriceX96.dividedBy(Q96);
77
+ const currentTick = sqrtPriceX96Num.isGreaterThan(0)
78
+ ? Math.floor(Math.log(sqrtPriceX96Num.toNumber() ** 2) / Math.log(1.0001))
79
+ : 0;
80
+ const tickLower = Number(position[5]);
81
+ const tickUpper = Number(position[6]);
82
+ const [amount0, amount1] = this.calculateAmounts(liquidity, currentTick, tickLower, tickUpper, sqrtPriceX96Num);
83
+ // Return positive amount if we should add to supply, negative if we should subtract
84
+ const isToken0 = position[2] === targetToken;
85
+ const amount = isToken0 ? amount0 : amount1;
86
+ // If target token is being deposited into the pool, we should subtract from supply
87
+ // This means if the position has liquidity of the target token, it's out of circulation
88
+ return amount;
89
+ }
90
+ async processPositionBatch(positionIds, targetToken) {
91
+ try {
92
+ // Fetch position data
93
+ const positionDataPromises = positionIds.map((id) => this.readContract({
94
+ address: this.positionManagerAddress,
95
+ abi: abis_1.UNIV3_POSITION_MANAGER_ABI,
96
+ functionName: 'positions',
97
+ args: [id],
98
+ }));
99
+ const positionData = (await Promise.all(positionDataPromises));
100
+ // Filter active positions that contain our target token
101
+ const activePositions = positionData.filter((pos) => {
102
+ const liquidity = new bignumber_js_1.default(pos[7].toString());
103
+ return (!liquidity.isZero() &&
104
+ (pos[2] === targetToken || pos[3] === targetToken));
105
+ });
106
+ if (activePositions.length === 0)
107
+ return new bignumber_js_1.default(0);
108
+ // Get pool addresses
109
+ const poolAddresses = await Promise.all(activePositions.map((pos) => this.getPoolAddress(pos[2], pos[3], Number(pos[4]))));
110
+ // Get slot0 data for all pools
111
+ const slot0Data = await Promise.all(poolAddresses.map((poolAddress) => this.readContract({
112
+ address: poolAddress,
113
+ abi: abis_1.UNIV3_POOL_ABI,
114
+ functionName: 'slot0',
115
+ })));
116
+ // Calculate total amount
117
+ let totalAmount = new bignumber_js_1.default(0);
118
+ for (let i = 0; i < activePositions.length; i++) {
119
+ const pos = activePositions[i];
120
+ const slot0 = slot0Data[i];
121
+ const amount = await this.calculatePositionAmount(pos, slot0, targetToken);
122
+ totalAmount = totalAmount.plus(amount);
123
+ }
124
+ return totalAmount;
125
+ }
126
+ catch (error) {
127
+ console.error('Failed to process position batch:', error);
128
+ return new bignumber_js_1.default(0);
129
+ }
130
+ }
131
+ async getPositionTokenIds() {
132
+ // Get governance balance
133
+ const balance = await this.readContract({
134
+ address: this.positionManagerAddress,
135
+ abi: abis_1.UNIV3_POSITION_MANAGER_ABI,
136
+ functionName: 'balanceOf',
137
+ args: [this.governanceAddress],
138
+ });
139
+ const numPositions = Number(balance);
140
+ if (numPositions === 0)
141
+ return [];
142
+ const tokenIds = [];
143
+ for (let i = 0; i < numPositions; i += BATCH_SIZE) {
144
+ const batchPromises = Array.from({ length: Math.min(BATCH_SIZE, numPositions - i) }, (_, index) => this.readContract({
145
+ address: this.positionManagerAddress,
146
+ abi: abis_1.UNIV3_POSITION_MANAGER_ABI,
147
+ functionName: 'tokenOfOwnerByIndex',
148
+ args: [this.governanceAddress, i + index],
149
+ }).then((id) => Number(id)));
150
+ const batchResults = await Promise.all(batchPromises);
151
+ tokenIds.push(...batchResults);
152
+ if (i + BATCH_SIZE < numPositions) {
153
+ await new Promise((resolve) => setTimeout(resolve, BATCH_DELAY));
154
+ }
155
+ }
156
+ return tokenIds;
157
+ }
158
+ async getPoolAddress(token0, token1, fee) {
159
+ const cacheKey = `${token0}-${token1}-${fee}`;
160
+ if (this.poolCache.has(cacheKey)) {
161
+ return this.poolCache.get(cacheKey);
162
+ }
163
+ const poolAddress = (await this.readContract({
164
+ address: this.factoryAddress,
165
+ abi: abis_1.UNIV3_FACTORY_ABI,
166
+ functionName: 'getPool',
167
+ args: [token0, token1, fee],
168
+ }));
169
+ this.poolCache.set(cacheKey, poolAddress);
170
+ return poolAddress;
171
+ }
172
+ async getTokenDecimals(tokenAddress) {
173
+ if (this.decimalsCache.has(tokenAddress)) {
174
+ return this.decimalsCache.get(tokenAddress);
175
+ }
176
+ try {
177
+ const decimals = (await this.readContract({
178
+ address: tokenAddress,
179
+ abi: abis_1.ERC20_ABI,
180
+ functionName: 'decimals',
181
+ }));
182
+ this.decimalsCache.set(tokenAddress, decimals);
183
+ return decimals;
184
+ }
185
+ catch (error) {
186
+ console.warn(`Failed to fetch decimals for ${tokenAddress}, using default:`, error);
187
+ return 18;
188
+ }
189
+ }
190
+ readContract(options) {
191
+ return this.provider.readContract(options);
192
+ }
193
+ calculateAmounts(liquidity, currentTick, tickLower, tickUpper, sqrtPrice) {
194
+ try {
195
+ const sqrtRatioLower = new bignumber_js_1.default(Math.sqrt(1.0001 ** tickLower));
196
+ const sqrtRatioUpper = new bignumber_js_1.default(Math.sqrt(1.0001 ** tickUpper));
197
+ let amount0 = new bignumber_js_1.default(0);
198
+ let amount1 = new bignumber_js_1.default(0);
199
+ if (currentTick < tickLower) {
200
+ const amount0Numerator = sqrtRatioUpper.minus(sqrtRatioLower);
201
+ const amount0Denominator = sqrtRatioUpper.multipliedBy(sqrtRatioLower);
202
+ if (!amount0Denominator.isZero()) {
203
+ amount0 = liquidity.multipliedBy(amount0Numerator.dividedBy(amount0Denominator));
204
+ }
205
+ }
206
+ else if (currentTick < tickUpper) {
207
+ const amount0Numerator = sqrtRatioUpper.minus(sqrtPrice);
208
+ const amount0Denominator = sqrtPrice.multipliedBy(sqrtRatioUpper);
209
+ if (!amount0Denominator.isZero()) {
210
+ amount0 = liquidity.multipliedBy(amount0Numerator.dividedBy(amount0Denominator));
211
+ }
212
+ amount1 = liquidity.multipliedBy(sqrtPrice.minus(sqrtRatioLower));
213
+ }
214
+ else {
215
+ amount1 = liquidity.multipliedBy(sqrtRatioUpper.minus(sqrtRatioLower));
216
+ }
217
+ return [
218
+ amount0.isFinite()
219
+ ? amount0.integerValue(bignumber_js_1.default.ROUND_DOWN)
220
+ : new bignumber_js_1.default(0),
221
+ amount1.isFinite()
222
+ ? amount1.integerValue(bignumber_js_1.default.ROUND_DOWN)
223
+ : new bignumber_js_1.default(0),
224
+ ];
225
+ }
226
+ catch (error) {
227
+ console.error('Error calculating amounts:', error);
228
+ return [new bignumber_js_1.default(0), new bignumber_js_1.default(0)];
229
+ }
230
+ }
231
+ }
232
+ exports.UniV3SupplyCalculator = UniV3SupplyCalculator;
233
+ //# sourceMappingURL=uniV3SupplyCalculator.js.map