@centrifuge/sdk 0.0.0-alpha.0

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 (147) hide show
  1. package/LICENSE +165 -0
  2. package/README.md +149 -0
  3. package/dist/Account.d.ts +11 -0
  4. package/dist/Account.d.ts.map +1 -0
  5. package/dist/Account.js +46 -0
  6. package/dist/Account.js.map +1 -0
  7. package/dist/Centrifuge.d.ts +7117 -0
  8. package/dist/Centrifuge.d.ts.map +1 -0
  9. package/dist/Centrifuge.js +464 -0
  10. package/dist/Centrifuge.js.map +1 -0
  11. package/dist/Entity.d.ts +12 -0
  12. package/dist/Entity.d.ts.map +1 -0
  13. package/dist/Entity.js +16 -0
  14. package/dist/Entity.js.map +1 -0
  15. package/dist/Pool.d.ts +27 -0
  16. package/dist/Pool.d.ts.map +1 -0
  17. package/dist/Pool.js +73 -0
  18. package/dist/Pool.js.map +1 -0
  19. package/dist/PoolNetwork.d.ts +82 -0
  20. package/dist/PoolNetwork.d.ts.map +1 -0
  21. package/dist/PoolNetwork.js +235 -0
  22. package/dist/PoolNetwork.js.map +1 -0
  23. package/dist/Reports/Processor.d.ts +38 -0
  24. package/dist/Reports/Processor.d.ts.map +1 -0
  25. package/dist/Reports/Processor.js +167 -0
  26. package/dist/Reports/Processor.js.map +1 -0
  27. package/dist/Reports/index.d.ts +24 -0
  28. package/dist/Reports/index.d.ts.map +1 -0
  29. package/dist/Reports/index.js +68 -0
  30. package/dist/Reports/index.js.map +1 -0
  31. package/dist/Reports/types.d.ts +102 -0
  32. package/dist/Reports/types.d.ts.map +1 -0
  33. package/dist/Reports/types.js +2 -0
  34. package/dist/Reports/types.js.map +1 -0
  35. package/dist/Vault.d.ts +96 -0
  36. package/dist/Vault.d.ts.map +1 -0
  37. package/dist/Vault.js +330 -0
  38. package/dist/Vault.js.map +1 -0
  39. package/dist/abi/CentrifugeRouter.abi.json +43 -0
  40. package/dist/abi/Currency.abi.json +14 -0
  41. package/dist/abi/Gateway.abi.json +1 -0
  42. package/dist/abi/InvestmentManager.abi.json +4 -0
  43. package/dist/abi/LiquidityPool.abi.json +79 -0
  44. package/dist/abi/PoolManager.abi.json +55 -0
  45. package/dist/abi/RestrictionManager.abi.json +22 -0
  46. package/dist/abi/Router.abi.json +1 -0
  47. package/dist/abi/index.d.ts +11 -0
  48. package/dist/abi/index.d.ts.map +1 -0
  49. package/dist/abi/index.js +20 -0
  50. package/dist/abi/index.js.map +1 -0
  51. package/dist/config/chains.d.ts +1575 -0
  52. package/dist/config/chains.d.ts.map +1 -0
  53. package/dist/config/chains.js +3 -0
  54. package/dist/config/chains.js.map +1 -0
  55. package/dist/config/lp.d.ts +17 -0
  56. package/dist/config/lp.d.ts.map +1 -0
  57. package/dist/config/lp.js +35 -0
  58. package/dist/config/lp.js.map +1 -0
  59. package/dist/constants.d.ts +3 -0
  60. package/dist/constants.d.ts.map +1 -0
  61. package/dist/constants.js +3 -0
  62. package/dist/constants.js.map +1 -0
  63. package/dist/index.d.ts +9 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +9 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/queries/poolFeeSnapshots.d.ts +48 -0
  68. package/dist/queries/poolFeeSnapshots.d.ts.map +1 -0
  69. package/dist/queries/poolFeeSnapshots.js +62 -0
  70. package/dist/queries/poolFeeSnapshots.js.map +1 -0
  71. package/dist/queries/poolSnapshots.d.ts +73 -0
  72. package/dist/queries/poolSnapshots.d.ts.map +1 -0
  73. package/dist/queries/poolSnapshots.js +106 -0
  74. package/dist/queries/poolSnapshots.js.map +1 -0
  75. package/dist/queries/trancheSnapshots.d.ts +70 -0
  76. package/dist/queries/trancheSnapshots.d.ts.map +1 -0
  77. package/dist/queries/trancheSnapshots.js +76 -0
  78. package/dist/queries/trancheSnapshots.js.map +1 -0
  79. package/dist/tests/mocks/mockPoolFeeSnapshot.d.ts +3 -0
  80. package/dist/tests/mocks/mockPoolFeeSnapshot.d.ts.map +1 -0
  81. package/dist/tests/mocks/mockPoolFeeSnapshot.js +68 -0
  82. package/dist/tests/mocks/mockPoolFeeSnapshot.js.map +1 -0
  83. package/dist/tests/mocks/mockPoolMetadata.d.ts +3 -0
  84. package/dist/tests/mocks/mockPoolMetadata.d.ts.map +1 -0
  85. package/dist/tests/mocks/mockPoolMetadata.js +118 -0
  86. package/dist/tests/mocks/mockPoolMetadata.js.map +1 -0
  87. package/dist/tests/mocks/mockPoolSnapshots.d.ts +3 -0
  88. package/dist/tests/mocks/mockPoolSnapshots.d.ts.map +1 -0
  89. package/dist/tests/mocks/mockPoolSnapshots.js +64 -0
  90. package/dist/tests/mocks/mockPoolSnapshots.js.map +1 -0
  91. package/dist/tests/mocks/mockTrancheSnapshots.d.ts +3 -0
  92. package/dist/tests/mocks/mockTrancheSnapshots.d.ts.map +1 -0
  93. package/dist/tests/mocks/mockTrancheSnapshots.js +112 -0
  94. package/dist/tests/mocks/mockTrancheSnapshots.js.map +1 -0
  95. package/dist/tests/setup.d.ts +16 -0
  96. package/dist/tests/setup.d.ts.map +1 -0
  97. package/dist/tests/setup.js +41 -0
  98. package/dist/tests/setup.js.map +1 -0
  99. package/dist/tests/tenderly.d.ts +76 -0
  100. package/dist/tests/tenderly.d.ts.map +1 -0
  101. package/dist/tests/tenderly.js +219 -0
  102. package/dist/tests/tenderly.js.map +1 -0
  103. package/dist/types/index.d.ts +2 -0
  104. package/dist/types/index.d.ts.map +1 -0
  105. package/dist/types/index.js +2 -0
  106. package/dist/types/index.js.map +1 -0
  107. package/dist/types/poolMetadata.d.ts +92 -0
  108. package/dist/types/poolMetadata.d.ts.map +1 -0
  109. package/dist/types/poolMetadata.js +2 -0
  110. package/dist/types/poolMetadata.js.map +1 -0
  111. package/dist/types/query.d.ts +11 -0
  112. package/dist/types/query.d.ts.map +1 -0
  113. package/dist/types/query.js +2 -0
  114. package/dist/types/query.js.map +1 -0
  115. package/dist/types/transaction.d.ts +47 -0
  116. package/dist/types/transaction.d.ts.map +1 -0
  117. package/dist/types/transaction.js +2 -0
  118. package/dist/types/transaction.js.map +1 -0
  119. package/dist/utils/BigInt.d.ts +80 -0
  120. package/dist/utils/BigInt.d.ts.map +1 -0
  121. package/dist/utils/BigInt.js +215 -0
  122. package/dist/utils/BigInt.js.map +1 -0
  123. package/dist/utils/date.d.ts +17 -0
  124. package/dist/utils/date.d.ts.map +1 -0
  125. package/dist/utils/date.js +36 -0
  126. package/dist/utils/date.js.map +1 -0
  127. package/dist/utils/decimal.d.ts +6 -0
  128. package/dist/utils/decimal.d.ts.map +1 -0
  129. package/dist/utils/decimal.js +13 -0
  130. package/dist/utils/decimal.js.map +1 -0
  131. package/dist/utils/pinToApi.d.ts +2 -0
  132. package/dist/utils/pinToApi.d.ts.map +1 -0
  133. package/dist/utils/pinToApi.js +10 -0
  134. package/dist/utils/pinToApi.js.map +1 -0
  135. package/dist/utils/query.d.ts +2 -0
  136. package/dist/utils/query.d.ts.map +1 -0
  137. package/dist/utils/query.js +37 -0
  138. package/dist/utils/query.js.map +1 -0
  139. package/dist/utils/rx.d.ts +19 -0
  140. package/dist/utils/rx.d.ts.map +1 -0
  141. package/dist/utils/rx.js +45 -0
  142. package/dist/utils/rx.js.map +1 -0
  143. package/dist/utils/transaction.d.ts +14 -0
  144. package/dist/utils/transaction.d.ts.map +1 -0
  145. package/dist/utils/transaction.js +33 -0
  146. package/dist/utils/transaction.js.map +1 -0
  147. package/package.json +72 -0
@@ -0,0 +1,68 @@
1
+ import { Entity } from '../Entity.js';
2
+ import { poolSnapshotsPostProcess, poolSnapshotsQuery } from '../queries/poolSnapshots.js';
3
+ import { trancheSnapshotsPostProcess, trancheSnapshotsQuery, } from '../queries/trancheSnapshots.js';
4
+ import { combineLatest } from 'rxjs';
5
+ import { processor } from './Processor.js';
6
+ import { map } from 'rxjs';
7
+ import { poolFeeSnapshotQuery, poolFeeSnapshotsPostProcess, } from '../queries/poolFeeSnapshots.js';
8
+ export class Reports extends Entity {
9
+ pool;
10
+ constructor(centrifuge, pool) {
11
+ super(centrifuge, ['reports', pool.id]);
12
+ this.pool = pool;
13
+ }
14
+ balanceSheet(filter) {
15
+ return this._generateReport('balanceSheet', filter);
16
+ }
17
+ cashflow(filter) {
18
+ return this._generateReport('cashflow', filter);
19
+ }
20
+ profitAndLoss(filter) {
21
+ return this._generateReport('profitAndLoss', filter);
22
+ }
23
+ _generateReport(type, filter) {
24
+ return this._query([type, filter?.from, filter?.to, filter?.groupBy], () => {
25
+ const dateFilter = {
26
+ timestamp: {
27
+ greaterThan: filter?.from,
28
+ lessThanOrEqualTo: filter?.to && `${filter.to.split('T')[0]}T23:59:59.999Z`,
29
+ },
30
+ };
31
+ const metadata$ = this.pool.metadata();
32
+ const poolSnapshots$ = this.poolSnapshots({
33
+ ...dateFilter,
34
+ poolId: { equalTo: this.pool.id },
35
+ });
36
+ const trancheSnapshots$ = this.trancheSnapshots({
37
+ ...dateFilter,
38
+ tranche: { poolId: { equalTo: this.pool.id } },
39
+ });
40
+ const poolFeeSnapshots$ = this.poolFeeSnapshots({
41
+ ...dateFilter,
42
+ poolFeeId: { includes: this.pool.id },
43
+ });
44
+ switch (type) {
45
+ case 'balanceSheet':
46
+ return combineLatest([poolSnapshots$, trancheSnapshots$]).pipe(map(([poolSnapshots, trancheSnapshots]) => processor.balanceSheet({ poolSnapshots, trancheSnapshots }, filter)));
47
+ case 'cashflow':
48
+ return combineLatest([poolSnapshots$, poolFeeSnapshots$, metadata$]).pipe(map(([poolSnapshots, poolFeeSnapshots, metadata]) => processor.cashflow({ poolSnapshots, poolFeeSnapshots, metadata }, filter)));
49
+ case 'profitAndLoss':
50
+ return combineLatest([poolSnapshots$, poolFeeSnapshots$, metadata$]).pipe(map(([poolSnapshots, poolFeeSnapshots, metadata]) => processor.profitAndLoss({ poolSnapshots, poolFeeSnapshots, metadata }, filter)));
51
+ default:
52
+ throw new Error(`Unsupported report type: ${type}`);
53
+ }
54
+ }, {
55
+ valueCacheTime: 120,
56
+ });
57
+ }
58
+ poolFeeSnapshots(filter) {
59
+ return this._root._queryIndexer(poolFeeSnapshotQuery, { filter }, poolFeeSnapshotsPostProcess);
60
+ }
61
+ poolSnapshots(filter) {
62
+ return this._root._queryIndexer(poolSnapshotsQuery, { filter }, poolSnapshotsPostProcess);
63
+ }
64
+ trancheSnapshots(filter) {
65
+ return this._root._queryIndexer(trancheSnapshotsQuery, { filter }, trancheSnapshotsPostProcess);
66
+ }
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Reports/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { PoolFeeSnapshotsByDate } from '../queries/poolFeeSnapshots.js';
2
+ import { PoolSnapshot } from '../queries/poolSnapshots.js';
3
+ import { TrancheSnapshotsByDate } from '../queries/trancheSnapshots.js';
4
+ import { PoolMetadata } from '../types/poolMetadata.js';
5
+ import { Price } from '../utils/BigInt.js';
6
+ import { Currency } from '../utils/BigInt.js';
7
+ import { GroupBy } from '../utils/date.js';
8
+ export interface ReportFilter {
9
+ from?: string;
10
+ to?: string;
11
+ groupBy?: GroupBy;
12
+ }
13
+ export type BalanceSheetReport = {
14
+ type: 'balanceSheet';
15
+ timestamp: string;
16
+ assetValuation: Currency;
17
+ onchainReserve: Currency;
18
+ offchainCash: Currency;
19
+ accruedFees: Currency;
20
+ netAssetValue: Currency;
21
+ tranches?: {
22
+ name: string;
23
+ timestamp: string;
24
+ tokenId: string;
25
+ tokenSupply: Currency;
26
+ tokenPrice: Price | null;
27
+ trancheValue: Currency;
28
+ }[];
29
+ totalCapital?: Currency;
30
+ };
31
+ export type BalanceSheetData = {
32
+ poolSnapshots: PoolSnapshot[];
33
+ trancheSnapshots: TrancheSnapshotsByDate;
34
+ };
35
+ type CashflowReportBase = {
36
+ type: 'cashflow';
37
+ timestamp: string;
38
+ principalPayments: Currency;
39
+ interestPayments: Currency;
40
+ netCashflowAsset: Currency;
41
+ fees: {
42
+ name: string;
43
+ amount: Currency;
44
+ timestamp: string;
45
+ feeId: string;
46
+ }[];
47
+ netCashflowAfterFees: Currency;
48
+ investments: Currency;
49
+ redemptions: Currency;
50
+ activitiesCashflow: Currency;
51
+ totalCashflow: Currency;
52
+ endCashBalance: {
53
+ balance: Currency;
54
+ };
55
+ };
56
+ type CashflowReportPublicCredit = CashflowReportBase & {
57
+ subtype: 'publicCredit';
58
+ realizedPL?: Currency;
59
+ assetPurchases?: Currency;
60
+ };
61
+ type CashflowReportPrivateCredit = CashflowReportBase & {
62
+ subtype: 'privateCredit';
63
+ assetFinancing?: Currency;
64
+ };
65
+ export type CashflowReport = CashflowReportPublicCredit | CashflowReportPrivateCredit;
66
+ export type CashflowData = {
67
+ poolSnapshots: PoolSnapshot[];
68
+ poolFeeSnapshots: PoolFeeSnapshotsByDate;
69
+ metadata: PoolMetadata | undefined;
70
+ };
71
+ export type ProfitAndLossReportBase = {
72
+ type: 'profitAndLoss';
73
+ timestamp: string;
74
+ profitAndLossFromAsset: Currency;
75
+ interestPayments: Currency;
76
+ otherPayments: Currency;
77
+ totalExpenses: Currency;
78
+ totalProfitAndLoss: Currency;
79
+ fees: {
80
+ name: string;
81
+ amount: Currency;
82
+ timestamp: string;
83
+ feeId: string;
84
+ }[];
85
+ };
86
+ export type ProfitAndLossReportPublicCredit = ProfitAndLossReportBase & {
87
+ subtype: 'publicCredit';
88
+ totalIncome: Currency;
89
+ };
90
+ export type ProfitAndLossReportPrivateCredit = ProfitAndLossReportBase & {
91
+ subtype: 'privateCredit';
92
+ interestAccrued: Currency;
93
+ assetWriteOffs: Currency;
94
+ };
95
+ export type ProfitAndLossReport = ProfitAndLossReportPublicCredit | ProfitAndLossReportPrivateCredit;
96
+ export type ProfitAndLossData = {
97
+ poolSnapshots: PoolSnapshot[];
98
+ poolFeeSnapshots: PoolFeeSnapshotsByDate;
99
+ metadata: PoolMetadata | undefined;
100
+ };
101
+ export {};
102
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Reports/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/Reports/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,96 @@
1
+ import { Decimal } from 'decimal.js-light';
2
+ import type { Centrifuge } from './Centrifuge.js';
3
+ import { Entity } from './Entity.js';
4
+ import type { Pool } from './Pool.js';
5
+ import { PoolNetwork } from './PoolNetwork.js';
6
+ import type { HexString } from './types/index.js';
7
+ import { Currency, DecimalWrapper, Token } from './utils/BigInt.js';
8
+ /**
9
+ * Query and interact with a vault, which is the main entry point for investing and redeeming funds.
10
+ * A vault is the combination of a network, a pool, a tranche and an investment currency.
11
+ */
12
+ export declare class Vault extends Entity {
13
+ network: PoolNetwork;
14
+ trancheId: string;
15
+ pool: Pool;
16
+ chainId: number;
17
+ /**
18
+ * The contract address of the investment currency.
19
+ * @internal
20
+ */
21
+ _asset: HexString;
22
+ /**
23
+ * The contract address of the vault.
24
+ */
25
+ address: HexString;
26
+ constructor(_root: Centrifuge, network: PoolNetwork, trancheId: string, asset: HexString, address: HexString);
27
+ /**
28
+ * Get the contract address of the restriction mananger.
29
+ * @internal
30
+ */
31
+ _restrictionManager(): import("./index.js").Query<`0x${string}`>;
32
+ /**
33
+ * Get the details of the investment currency.
34
+ */
35
+ investmentCurrency(): import("./index.js").Query<import("./config/lp.js").CurrencyMetadata>;
36
+ /**
37
+ * Get the details of the share token.
38
+ */
39
+ shareCurrency(): import("./index.js").Query<import("./config/lp.js").CurrencyMetadata>;
40
+ /**
41
+ * Get the allowance of the investment currency for the CentrifugeRouter,
42
+ * which is the contract that moves funds into the vault on behalf of the investor.
43
+ * @param owner - The address of the owner
44
+ */
45
+ allowance(owner: string): import("./index.js").Query<Currency>;
46
+ /**
47
+ * Get the details of the investment of an investor in the vault and any pending investments or redemptions.
48
+ * @param investor - The address of the investor
49
+ */
50
+ investment(investor: string): import("./index.js").Query<{
51
+ shareBalance: Token;
52
+ investmentCurrencyBalance: Currency;
53
+ investmentCurrencyAllowance: Currency;
54
+ isAllowedToInvest: boolean;
55
+ claimableInvestShares: Token;
56
+ claimableInvestCurrencyEquivalent: Currency;
57
+ claimableRedeemCurrency: Currency;
58
+ claimableRedeemSharesEquivalent: Token;
59
+ pendingInvestCurrency: Currency;
60
+ pendingRedeemShares: Token;
61
+ claimableCancelInvestCurrency: Currency;
62
+ claimableCancelRedeemShares: Token;
63
+ hasPendingCancelInvestRequest: boolean;
64
+ hasPendingCancelRedeemRequest: boolean;
65
+ investmentCurrency: import("./config/lp.js").CurrencyMetadata;
66
+ shareCurrency: import("./config/lp.js").CurrencyMetadata;
67
+ }>;
68
+ /**
69
+ * Place an order to invest funds in the vault. If an order exists, it will increase the amount.
70
+ * @param investAmount - The amount to invest in the vault
71
+ */
72
+ increaseInvestOrder(investAmount: NumberInput): import("./index.js").Transaction;
73
+ /**
74
+ * Cancel an open investment order.
75
+ */
76
+ cancelInvestOrder(): import("./index.js").Transaction;
77
+ /**
78
+ * Place an order to redeem funds from the vault. If an order exists, it will increase the amount.
79
+ * @param redeemAmount - The amount of shares to redeem
80
+ */
81
+ increaseRedeemOrder(redeemAmount: NumberInput): import("./index.js").Transaction;
82
+ /**
83
+ * Cancel an open redemption order.
84
+ */
85
+ cancelRedeemOrder(): import("./index.js").Transaction;
86
+ /**
87
+ * Claim any outstanding fund shares after an investment has gone through, or funds after an redemption has gone through.
88
+ * @param receiver - The address that should receive the funds. If not provided, the investor's address is used.
89
+ * @param controller - The address of the user that has invested. Allows someone else to claim on behalf of the user
90
+ * if the user has set the CentrifugeRouter as an operator on the vault. If not provided, the investor's address is used.
91
+ */
92
+ claim(receiver?: string, controller?: string): import("./index.js").Transaction;
93
+ }
94
+ type NumberInput = number | bigint | DecimalWrapper | Decimal;
95
+ export {};
96
+ //# sourceMappingURL=Vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vault.d.ts","sourceRoot":"","sources":["../src/Vault.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAG9C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAInE;;;GAGG;AACH,qBAAa,KAAM,SAAQ,MAAM;IActB,OAAO,EAAE,WAAW;IACpB,SAAS,EAAE,MAAM;IAd1B,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,MAAM,EAAE,SAAS,CAAA;IACjB;;OAEG;IACH,OAAO,EAAE,SAAS,CAAA;gBAEhB,KAAK,EAAE,UAAU,EACV,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,MAAM,EACxB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS;IASpB;;;OAGG;IACH,mBAAmB;IAenB;;OAEG;IACH,kBAAkB;IAIlB;;OAEG;IACH,aAAa;IAIb;;;;OAIG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM;IAwCvB;;;OAGG;IACH,UAAU,CAAC,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;IA2G3B;;;OAGG;IACH,mBAAmB,CAAC,YAAY,EAAE,WAAW;IA8E7C;;OAEG;IACH,iBAAiB;IAoBjB;;;OAGG;IACH,mBAAmB,CAAC,YAAY,EAAE,WAAW;IAsB7C;;OAEG;IACH,iBAAiB;IAoBjB;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CA6B7C;AAED,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,cAAc,GAAG,OAAO,CAAA"}
package/dist/Vault.js ADDED
@@ -0,0 +1,330 @@
1
+ import { combineLatest, defer, map, switchMap } from 'rxjs';
2
+ import { encodeFunctionData, getContract } from 'viem';
3
+ import { Entity } from './Entity.js';
4
+ import { ABI } from './abi/index.js';
5
+ import { lpConfig } from './config/lp.js';
6
+ import { Currency, DecimalWrapper, Token } from './utils/BigInt.js';
7
+ import { repeatOnEvents } from './utils/rx.js';
8
+ import { doSignMessage, doTransaction, signPermit } from './utils/transaction.js';
9
+ /**
10
+ * Query and interact with a vault, which is the main entry point for investing and redeeming funds.
11
+ * A vault is the combination of a network, a pool, a tranche and an investment currency.
12
+ */
13
+ export class Vault extends Entity {
14
+ network;
15
+ trancheId;
16
+ pool;
17
+ chainId;
18
+ /**
19
+ * The contract address of the investment currency.
20
+ * @internal
21
+ */
22
+ _asset;
23
+ /**
24
+ * The contract address of the vault.
25
+ */
26
+ address;
27
+ constructor(_root, network, trancheId, asset, address) {
28
+ super(_root, ['vault', network.chainId, network.pool.id, trancheId, asset.toLowerCase()]);
29
+ this.network = network;
30
+ this.trancheId = trancheId;
31
+ this.chainId = network.chainId;
32
+ this.pool = network.pool;
33
+ this._asset = asset.toLowerCase();
34
+ this.address = address.toLowerCase();
35
+ }
36
+ /**
37
+ * Get the contract address of the restriction mananger.
38
+ * @internal
39
+ */
40
+ _restrictionManager() {
41
+ return this._query(['restrictionManager'], () => this.network._share(this.trancheId).pipe(switchMap((share) => this._root.getClient(this.chainId).readContract({
42
+ address: share,
43
+ abi: ABI.Currency,
44
+ functionName: 'hook',
45
+ }))));
46
+ }
47
+ /**
48
+ * Get the details of the investment currency.
49
+ */
50
+ investmentCurrency() {
51
+ return this._root.currency(this._asset, this.chainId);
52
+ }
53
+ /**
54
+ * Get the details of the share token.
55
+ */
56
+ shareCurrency() {
57
+ return this.network.shareCurrency(this.trancheId);
58
+ }
59
+ /**
60
+ * Get the allowance of the investment currency for the CentrifugeRouter,
61
+ * which is the contract that moves funds into the vault on behalf of the investor.
62
+ * @param owner - The address of the owner
63
+ */
64
+ allowance(owner) {
65
+ const address = owner.toLowerCase();
66
+ return this._query(['allowance', address], () => this.investmentCurrency().pipe(switchMap((currency) => defer(() => this._root
67
+ .getClient(this.chainId)
68
+ .readContract({
69
+ address: this._asset,
70
+ abi: ABI.Currency,
71
+ functionName: 'allowance',
72
+ args: [address, lpConfig[this.chainId].centrifugeRouter],
73
+ })
74
+ .then((val) => new Currency(val, currency.decimals))).pipe(repeatOnEvents(this._root, {
75
+ address: this._asset,
76
+ abi: ABI.Currency,
77
+ eventName: ['Approval', 'Transfer'],
78
+ filter: (events) => {
79
+ return events.some((event) => {
80
+ return (event.args.owner?.toLowerCase() === address ||
81
+ event.args.spender?.toLowerCase() === this._asset ||
82
+ event.args.from?.toLowerCase() === address);
83
+ });
84
+ },
85
+ }, this.chainId)))));
86
+ }
87
+ /**
88
+ * Get the details of the investment of an investor in the vault and any pending investments or redemptions.
89
+ * @param investor - The address of the investor
90
+ */
91
+ investment(investor) {
92
+ const address = investor.toLowerCase();
93
+ return this._query(['investment', address], () => combineLatest([
94
+ this.investmentCurrency(),
95
+ this.shareCurrency(),
96
+ this.network._investmentManager(),
97
+ this._restrictionManager(),
98
+ ]).pipe(switchMap(([investmentCurrency, shareCurrency, investmentManagerAddress, restrictionManagerAddress]) => combineLatest([
99
+ this._root.balance(investmentCurrency.address, address, this.chainId),
100
+ this._root.balance(shareCurrency.address, address, this.chainId),
101
+ this.allowance(address),
102
+ defer(async () => {
103
+ const client = this._root.getClient(this.chainId);
104
+ const vault = getContract({ address: this.address, abi: ABI.LiquidityPool, client });
105
+ const investmentManager = getContract({
106
+ address: investmentManagerAddress,
107
+ abi: ABI.InvestmentManager,
108
+ client,
109
+ });
110
+ const [isAllowedToInvest, maxDeposit, maxRedeem, investment] = await Promise.all([
111
+ vault.read.isPermissioned([address]),
112
+ vault.read.maxDeposit([address]),
113
+ vault.read.maxRedeem([address]),
114
+ investmentManager.read.investments([this.address, address]),
115
+ ]);
116
+ const [maxMint, maxWithdraw, , , pendingInvest, pendingRedeem, claimableCancelInvestCurrency, claimableCancelRedeemShares, hasPendingCancelInvestRequest, hasPendingCancelRedeemRequest,] = investment;
117
+ return {
118
+ isAllowedToInvest,
119
+ claimableInvestShares: new Token(maxMint, shareCurrency.decimals),
120
+ claimableInvestCurrencyEquivalent: new Currency(maxDeposit, investmentCurrency.decimals),
121
+ claimableRedeemCurrency: new Currency(maxWithdraw, investmentCurrency.decimals),
122
+ claimableRedeemSharesEquivalent: new Token(maxRedeem, shareCurrency.decimals),
123
+ pendingInvestCurrency: new Currency(pendingInvest, investmentCurrency.decimals),
124
+ pendingRedeemShares: new Token(pendingRedeem, shareCurrency.decimals),
125
+ claimableCancelInvestCurrency: new Currency(claimableCancelInvestCurrency, investmentCurrency.decimals),
126
+ claimableCancelRedeemShares: new Token(claimableCancelRedeemShares, shareCurrency.decimals),
127
+ hasPendingCancelInvestRequest,
128
+ hasPendingCancelRedeemRequest,
129
+ investmentCurrency,
130
+ shareCurrency,
131
+ };
132
+ }).pipe(repeatOnEvents(this._root, {
133
+ address: [this.address, restrictionManagerAddress],
134
+ abi: [ABI.LiquidityPool, ABI.RestrictionManager],
135
+ eventName: [
136
+ 'UpdateMember',
137
+ 'CancelDepositClaim',
138
+ 'CancelDepositClaimable',
139
+ 'CancelDepositRequest',
140
+ 'CancelRedeemClaim',
141
+ 'CancelRedeemClaimable',
142
+ 'CancelRedeemRequest',
143
+ 'Deposit',
144
+ 'DepositClaimable',
145
+ 'DepositRequest',
146
+ 'RedeemClaimable',
147
+ 'RedeemRequest',
148
+ 'Withdraw',
149
+ ],
150
+ filter: (events) => events.some((event) => event.args.receiver?.toLowerCase() === address ||
151
+ event.args.controller?.toLowerCase() === address ||
152
+ event.args.sender?.toLowerCase() === address ||
153
+ event.args.owner?.toLowerCase() === address ||
154
+ // UpdateMember event
155
+ (event.args.user?.toLowerCase() === address &&
156
+ event.args.token?.toLowerCase() === shareCurrency.address)),
157
+ }, this.chainId)),
158
+ ])), map(([currencyBalance, shareBalance, allowance, investment]) => ({
159
+ ...investment,
160
+ shareBalance: new Token(shareBalance.toBigInt(), investment.shareCurrency.decimals),
161
+ investmentCurrencyBalance: currencyBalance,
162
+ investmentCurrencyAllowance: allowance,
163
+ }))));
164
+ }
165
+ /**
166
+ * Place an order to invest funds in the vault. If an order exists, it will increase the amount.
167
+ * @param investAmount - The amount to invest in the vault
168
+ */
169
+ increaseInvestOrder(investAmount) {
170
+ const self = this;
171
+ return this._transactSequence(async function* ({ walletClient, publicClient, signer, signingAddress }) {
172
+ const { centrifugeRouter } = lpConfig[self.chainId];
173
+ const [estimate, investment] = await Promise.all([self.network._estimate(), self.investment(signingAddress)]);
174
+ const amount = toCurrency(investAmount, investment.investmentCurrency.decimals);
175
+ const { investmentCurrency, investmentCurrencyBalance, investmentCurrencyAllowance, isAllowedToInvest } = investment;
176
+ const supportsPermit = investmentCurrency.supportsPermit && 'send' in signer; // eth-permit uses the deprecated send method
177
+ const needsApproval = investmentCurrencyAllowance.lt(amount);
178
+ if (!isAllowedToInvest)
179
+ throw new Error('Not allowed to invest');
180
+ if (amount.gt(investmentCurrencyBalance))
181
+ throw new Error('Insufficient balance');
182
+ if (!amount.gt(0n))
183
+ throw new Error('Order amount must be greater than 0');
184
+ let permit = null;
185
+ if (needsApproval) {
186
+ if (supportsPermit) {
187
+ permit = yield* doSignMessage('Sign Permit', () => signPermit(walletClient, signer, self.chainId, signingAddress, investmentCurrency.address, centrifugeRouter, amount.toBigInt()));
188
+ }
189
+ else {
190
+ yield* doTransaction('Approve', publicClient, () => walletClient.writeContract({
191
+ address: investmentCurrency.address,
192
+ abi: ABI.Currency,
193
+ functionName: 'approve',
194
+ args: [centrifugeRouter, amount],
195
+ }));
196
+ }
197
+ }
198
+ const enableData = encodeFunctionData({
199
+ abi: ABI.CentrifugeRouter,
200
+ functionName: 'enableLockDepositRequest',
201
+ args: [self.address, amount],
202
+ });
203
+ const requestData = encodeFunctionData({
204
+ abi: ABI.CentrifugeRouter,
205
+ functionName: 'executeLockedDepositRequest',
206
+ args: [self.address, signingAddress, estimate],
207
+ });
208
+ const permitData = permit &&
209
+ encodeFunctionData({
210
+ abi: ABI.CentrifugeRouter,
211
+ functionName: 'permit',
212
+ args: [
213
+ investmentCurrency.address,
214
+ centrifugeRouter,
215
+ amount.toString(),
216
+ permit.deadline,
217
+ permit.v,
218
+ permit.r,
219
+ permit.s,
220
+ ],
221
+ });
222
+ yield* doTransaction('Invest', publicClient, () => walletClient.writeContract({
223
+ address: centrifugeRouter,
224
+ abi: ABI.CentrifugeRouter,
225
+ functionName: 'multicall',
226
+ args: [[enableData, requestData, permitData].filter(Boolean)],
227
+ value: estimate,
228
+ }));
229
+ }, this.chainId);
230
+ }
231
+ /**
232
+ * Cancel an open investment order.
233
+ */
234
+ cancelInvestOrder() {
235
+ const self = this;
236
+ return this._transactSequence(async function* ({ walletClient, signingAddress, publicClient }) {
237
+ const { centrifugeRouter } = lpConfig[self.chainId];
238
+ const [estimate, investment] = await Promise.all([self.network._estimate(), self.investment(signingAddress)]);
239
+ if (investment.pendingInvestCurrency.isZero())
240
+ throw new Error('No order to cancel');
241
+ yield* doTransaction('Cancel invest order', publicClient, () => walletClient.writeContract({
242
+ address: centrifugeRouter,
243
+ abi: ABI.CentrifugeRouter,
244
+ functionName: 'cancelDepositRequest',
245
+ args: [self.address, estimate],
246
+ value: estimate,
247
+ }));
248
+ }, this.chainId);
249
+ }
250
+ /**
251
+ * Place an order to redeem funds from the vault. If an order exists, it will increase the amount.
252
+ * @param redeemAmount - The amount of shares to redeem
253
+ */
254
+ increaseRedeemOrder(redeemAmount) {
255
+ const self = this;
256
+ return this._transactSequence(async function* ({ walletClient, signingAddress, publicClient }) {
257
+ const { centrifugeRouter } = lpConfig[self.chainId];
258
+ const [estimate, investment] = await Promise.all([self.network._estimate(), self.investment(signingAddress)]);
259
+ const amount = toCurrency(redeemAmount, investment.shareCurrency.decimals);
260
+ if (amount.gt(investment.shareBalance))
261
+ throw new Error('Insufficient balance');
262
+ if (!amount.gt(0n))
263
+ throw new Error('Order amount must be greater than 0');
264
+ yield* doTransaction('Redeem', publicClient, () => walletClient.writeContract({
265
+ address: centrifugeRouter,
266
+ abi: ABI.CentrifugeRouter,
267
+ functionName: 'requestRedeem',
268
+ args: [self.address, amount.toBigInt(), signingAddress, signingAddress, estimate],
269
+ value: estimate,
270
+ }));
271
+ }, this.chainId);
272
+ }
273
+ /**
274
+ * Cancel an open redemption order.
275
+ */
276
+ cancelRedeemOrder() {
277
+ const self = this;
278
+ return this._transactSequence(async function* ({ walletClient, signingAddress, publicClient }) {
279
+ const { centrifugeRouter } = lpConfig[self.chainId];
280
+ const [estimate, investment] = await Promise.all([self.network._estimate(), self.investment(signingAddress)]);
281
+ if (investment.pendingRedeemShares.isZero())
282
+ throw new Error('No order to cancel');
283
+ yield* doTransaction('Cancel redeem order', publicClient, () => walletClient.writeContract({
284
+ address: centrifugeRouter,
285
+ abi: ABI.CentrifugeRouter,
286
+ functionName: 'cancelRedeemRequest',
287
+ args: [self.address, estimate],
288
+ value: estimate,
289
+ }));
290
+ }, this.chainId);
291
+ }
292
+ /**
293
+ * Claim any outstanding fund shares after an investment has gone through, or funds after an redemption has gone through.
294
+ * @param receiver - The address that should receive the funds. If not provided, the investor's address is used.
295
+ * @param controller - The address of the user that has invested. Allows someone else to claim on behalf of the user
296
+ * if the user has set the CentrifugeRouter as an operator on the vault. If not provided, the investor's address is used.
297
+ */
298
+ claim(receiver, controller) {
299
+ const self = this;
300
+ return this._transactSequence(async function* ({ walletClient, signingAddress, publicClient }) {
301
+ const { centrifugeRouter } = lpConfig[self.chainId];
302
+ const investment = await self.investment(signingAddress);
303
+ const receiverAddress = receiver || signingAddress;
304
+ const controllerAddress = controller || signingAddress;
305
+ const functionName = investment.claimableCancelInvestCurrency.gt(0n)
306
+ ? 'claimCancelDepositRequest'
307
+ : investment.claimableCancelRedeemShares.gt(0n)
308
+ ? 'claimCancelRedeemRequest'
309
+ : investment.claimableInvestShares.gt(0n)
310
+ ? 'claimDeposit'
311
+ : investment.claimableRedeemCurrency.gt(0n)
312
+ ? 'claimRedeem'
313
+ : '';
314
+ if (!functionName)
315
+ throw new Error('No claimable funds');
316
+ yield* doTransaction('Claim', publicClient, () => walletClient.writeContract({
317
+ address: centrifugeRouter,
318
+ abi: ABI.CentrifugeRouter,
319
+ functionName,
320
+ args: [self.address, receiverAddress, controllerAddress],
321
+ }));
322
+ });
323
+ }
324
+ }
325
+ function toCurrency(val, decimals) {
326
+ return typeof val === 'number'
327
+ ? Currency.fromFloat(val, decimals)
328
+ : new Currency(val instanceof DecimalWrapper ? val.toBigInt() : val, decimals);
329
+ }
330
+ //# sourceMappingURL=Vault.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Vault.js","sourceRoot":"","sources":["../src/Vault.ts"],"names":[],"mappings":"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"}