@pearcurve/sdk 0.0.0-stage → 0.1.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 (113) hide show
  1. package/LICENSE +64 -0
  2. package/README.md +122 -2
  3. package/dist/abis/json/collateralTokenRegistry.json +257 -0
  4. package/dist/abis/json/errors.json +1034 -0
  5. package/dist/abis/json/feeManager.json +668 -0
  6. package/dist/abis/json/intentRegistry.json +1169 -0
  7. package/dist/abis/json/intentRegistryViews.json +958 -0
  8. package/dist/abis/json/loanAssetRegistry.json +220 -0
  9. package/dist/abis/json/loanHealthViewer.json +176 -0
  10. package/dist/abis/json/loanManager.json +1404 -0
  11. package/dist/abis/json/loanMarketCaps.json +1642 -0
  12. package/dist/abis/json/loanPositionToken.json +650 -0
  13. package/dist/abis/json/main.json +1951 -0
  14. package/dist/abis/json/matchingEngine.json +2060 -0
  15. package/dist/abis/json/priceOracle.json +453 -0
  16. package/dist/abis/json/protocolViewer.json +959 -0
  17. package/dist/abis/json/secondaryMarket.json +1348 -0
  18. package/dist/abis/json/strategyRegistry.json +237 -0
  19. package/dist/abis/json/termCurveOracle.json +346 -0
  20. package/dist/abis/json/yieldSource.json +298 -0
  21. package/dist/abis/json/yieldSourceRegistry.json +295 -0
  22. package/dist/abis.d.ts +21 -0
  23. package/dist/abis.d.ts.map +1 -0
  24. package/dist/abis.js +39 -0
  25. package/dist/abis.js.map +1 -0
  26. package/dist/borrowerSubmitPreflight.d.ts +14 -0
  27. package/dist/borrowerSubmitPreflight.d.ts.map +1 -0
  28. package/dist/borrowerSubmitPreflight.js +28 -0
  29. package/dist/borrowerSubmitPreflight.js.map +1 -0
  30. package/dist/bps.d.ts +11 -0
  31. package/dist/bps.d.ts.map +1 -0
  32. package/dist/bps.js +25 -0
  33. package/dist/bps.js.map +1 -0
  34. package/dist/clients.d.ts +23 -0
  35. package/dist/clients.d.ts.map +1 -0
  36. package/dist/clients.js +59 -0
  37. package/dist/clients.js.map +1 -0
  38. package/dist/decodeError.d.ts +24 -0
  39. package/dist/decodeError.d.ts.map +1 -0
  40. package/dist/decodeError.js +358 -0
  41. package/dist/decodeError.js.map +1 -0
  42. package/dist/encoding.d.ts +18 -0
  43. package/dist/encoding.d.ts.map +1 -0
  44. package/dist/encoding.js +94 -0
  45. package/dist/encoding.js.map +1 -0
  46. package/dist/index.d.ts +18 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +18 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/lenderSubmitPreflight.d.ts +20 -0
  51. package/dist/lenderSubmitPreflight.d.ts.map +1 -0
  52. package/dist/lenderSubmitPreflight.js +42 -0
  53. package/dist/lenderSubmitPreflight.js.map +1 -0
  54. package/dist/loanPositions.d.ts +23 -0
  55. package/dist/loanPositions.d.ts.map +1 -0
  56. package/dist/loanPositions.js +37 -0
  57. package/dist/loanPositions.js.map +1 -0
  58. package/dist/marketStats.d.ts +70 -0
  59. package/dist/marketStats.d.ts.map +1 -0
  60. package/dist/marketStats.js +117 -0
  61. package/dist/marketStats.js.map +1 -0
  62. package/dist/networkConfig.d.ts +48 -0
  63. package/dist/networkConfig.d.ts.map +1 -0
  64. package/dist/networkConfig.js +48 -0
  65. package/dist/networkConfig.js.map +1 -0
  66. package/dist/pause.d.ts +20 -0
  67. package/dist/pause.d.ts.map +1 -0
  68. package/dist/pause.js +40 -0
  69. package/dist/pause.js.map +1 -0
  70. package/dist/reads.d.ts +187 -0
  71. package/dist/reads.d.ts.map +1 -0
  72. package/dist/reads.js +353 -0
  73. package/dist/reads.js.map +1 -0
  74. package/dist/strategies.d.ts +14 -0
  75. package/dist/strategies.d.ts.map +1 -0
  76. package/dist/strategies.js +49 -0
  77. package/dist/strategies.js.map +1 -0
  78. package/dist/txGas.d.ts +19 -0
  79. package/dist/txGas.d.ts.map +1 -0
  80. package/dist/txGas.js +37 -0
  81. package/dist/txGas.js.map +1 -0
  82. package/dist/types.d.ts +69 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js +11 -0
  85. package/dist/types.js.map +1 -0
  86. package/dist/yieldMigrationPreflight.d.ts +29 -0
  87. package/dist/yieldMigrationPreflight.d.ts.map +1 -0
  88. package/dist/yieldMigrationPreflight.js +61 -0
  89. package/dist/yieldMigrationPreflight.js.map +1 -0
  90. package/dist/yieldSources.d.ts +33 -0
  91. package/dist/yieldSources.d.ts.map +1 -0
  92. package/dist/yieldSources.js +106 -0
  93. package/dist/yieldSources.js.map +1 -0
  94. package/package.json +47 -4
  95. package/src/abis/json/collateralTokenRegistry.json +257 -0
  96. package/src/abis/json/errors.json +1034 -0
  97. package/src/abis/json/feeManager.json +668 -0
  98. package/src/abis/json/intentRegistry.json +1169 -0
  99. package/src/abis/json/intentRegistryViews.json +958 -0
  100. package/src/abis/json/loanAssetRegistry.json +220 -0
  101. package/src/abis/json/loanHealthViewer.json +176 -0
  102. package/src/abis/json/loanManager.json +1404 -0
  103. package/src/abis/json/loanMarketCaps.json +1642 -0
  104. package/src/abis/json/loanPositionToken.json +650 -0
  105. package/src/abis/json/main.json +1951 -0
  106. package/src/abis/json/matchingEngine.json +2060 -0
  107. package/src/abis/json/priceOracle.json +453 -0
  108. package/src/abis/json/protocolViewer.json +959 -0
  109. package/src/abis/json/secondaryMarket.json +1348 -0
  110. package/src/abis/json/strategyRegistry.json +237 -0
  111. package/src/abis/json/termCurveOracle.json +346 -0
  112. package/src/abis/json/yieldSource.json +298 -0
  113. package/src/abis/json/yieldSourceRegistry.json +295 -0
@@ -0,0 +1,94 @@
1
+ import { FunctionFragment, Interface } from 'ethers';
2
+ import { mainAbi, matchingEngineAbi } from './abis.js';
3
+ const matchingEngineInterface = new Interface(matchingEngineAbi);
4
+ import { assertCollateralConfigBps } from './bps.js';
5
+ const mainInterface = new Interface(mainAbi);
6
+ /** Encode calldata for `Main.submitLenderIntent`. */
7
+ export function encodeSubmitLenderIntent(params, hintId = 0n) {
8
+ const withHint = hintId !== 0n;
9
+ const fragment = mainInterface.fragments.find((f) => f instanceof FunctionFragment && f.name === 'submitLenderIntent' && f.inputs.length === (withHint ? 2 : 1));
10
+ if (!fragment)
11
+ throw new Error('submitLenderIntent overload missing');
12
+ const tuple = toLenderTuple(params);
13
+ return mainInterface.encodeFunctionData(fragment, withHint ? [tuple, hintId] : [tuple]);
14
+ }
15
+ export function encodeSubmitBorrowerIntent(params) {
16
+ return mainInterface.encodeFunctionData('submitBorrowerIntent', [toBorrowerTuple(params)]);
17
+ }
18
+ /** `Main.matchBundleOnChain` — solver submits signed on-chain intent ID batch. */
19
+ export function encodeMatchBundleOnChain(sol) {
20
+ return mainInterface.encodeFunctionData('matchBundleOnChain', [toOnChainSolTuple(sol)]);
21
+ }
22
+ /** `MatchingEngine.previewMatchAutoOnChainWithNewBorrower` — view precheck for auto-match borrower params. */
23
+ export function encodePreviewMatchAutoOnChainWithNewBorrower(params) {
24
+ return matchingEngineInterface.encodeFunctionData('previewMatchAutoOnChainWithNewBorrower', [toBorrowerTuple(params)]);
25
+ }
26
+ /** `MatchingEngine.previewMatchAutoOnChainWithNewLender` — view precheck for auto-match lender params. */
27
+ export function encodePreviewMatchAutoOnChainWithNewLender(params, lender) {
28
+ if (lender) {
29
+ return matchingEngineInterface.encodeFunctionData('previewMatchAutoOnChainWithNewLender', [toLenderTuple(params), lender]);
30
+ }
31
+ return matchingEngineInterface.encodeFunctionData('previewMatchAutoOnChainWithNewLender', [toLenderTuple(params)]);
32
+ }
33
+ /** `MatchingEngine.previewMatchOnChain` — view precheck for manual on-chain ids. */
34
+ export function encodePreviewMatchOnChain(lenderIntentId, borrowerIntentId, fillAmount) {
35
+ return matchingEngineInterface.encodeFunctionData('previewMatchOnChain', [lenderIntentId, borrowerIntentId, fillAmount]);
36
+ }
37
+ export function encodeMatchManual(lenderIntentId, borrowerIntentId, fillAmount) {
38
+ return mainInterface.encodeFunctionData('matchOnChain', [lenderIntentId, borrowerIntentId, fillAmount]);
39
+ }
40
+ /** Build `ethers.Interface` for custom decoding or overloading. */
41
+ export function getMainInterface() {
42
+ return new Interface(mainAbi);
43
+ }
44
+ export function getMatchingEngineInterface() {
45
+ return new Interface(matchingEngineAbi);
46
+ }
47
+ // ─── Solidity tuple shapes (matches ABI components) ───────────────────────
48
+ function toLenderTuple(p) {
49
+ assertCollateralConfigBps({ token: p.collateralToken, ltv: p.ltv, lltv: p.lltv });
50
+ return {
51
+ asset: p.asset,
52
+ minPrincipal: p.minPrincipal,
53
+ maxPrincipal: p.maxPrincipal,
54
+ minRate: p.minRate,
55
+ minDuration: p.minDuration,
56
+ maxDuration: p.maxDuration,
57
+ collateralToken: p.collateralToken,
58
+ ltv: p.ltv,
59
+ lltv: p.lltv,
60
+ expiry: p.expiry,
61
+ yieldSource: p.yieldSource,
62
+ allowPartialFill: p.allowPartialFill,
63
+ maxPerBorrowerAddress: p.maxPerBorrowerAddress,
64
+ earlyRepaymentFeeBps: p.earlyRepaymentFeeBps,
65
+ blockEarlyRepayment: p.blockEarlyRepayment,
66
+ callbackReceiver: p.callbackReceiver,
67
+ };
68
+ }
69
+ function toBorrowerTuple(p) {
70
+ return {
71
+ asset: p.asset,
72
+ principal: p.principal,
73
+ maxRate: p.maxRate,
74
+ duration: p.duration,
75
+ collateral: p.collateral,
76
+ maxCollateralAmount: p.maxCollateralAmount,
77
+ expiry: p.expiry,
78
+ autoRefinanceThresholdRate: p.autoRefinanceThresholdRate,
79
+ solverTipBps: p.solverTipBps,
80
+ };
81
+ }
82
+ function toOnChainSolTuple(sol) {
83
+ return {
84
+ lenderIntentIds: sol.lenderIntentIds,
85
+ borrowerIntentIds: sol.borrowerIntentIds,
86
+ agreedRates: sol.agreedRates,
87
+ fillAmounts: sol.fillAmounts,
88
+ solverTip: sol.solverTip,
89
+ solver: sol.solver,
90
+ deadline: sol.deadline,
91
+ signature: sol.signature,
92
+ };
93
+ }
94
+ //# sourceMappingURL=encoding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encoding.js","sourceRoot":"","sources":["../src/encoding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export * from './bps.js';
2
+ export * from './abis.js';
3
+ export * from './networkConfig.js';
4
+ export * from './clients.js';
5
+ export * from './reads.js';
6
+ export * from './encoding.js';
7
+ export * from './decodeError.js';
8
+ export * from './pause.js';
9
+ export * from './types.js';
10
+ export * from './txGas.js';
11
+ export * from './yieldSources.js';
12
+ export * from './lenderSubmitPreflight.js';
13
+ export * from './borrowerSubmitPreflight.js';
14
+ export * from './yieldMigrationPreflight.js';
15
+ export * from './loanPositions.js';
16
+ export * from './marketStats.js';
17
+ export * from './strategies.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export * from './bps.js';
2
+ export * from './abis.js';
3
+ export * from './networkConfig.js';
4
+ export * from './clients.js';
5
+ export * from './reads.js';
6
+ export * from './encoding.js';
7
+ export * from './decodeError.js';
8
+ export * from './pause.js';
9
+ export * from './types.js';
10
+ export * from './txGas.js';
11
+ export * from './yieldSources.js';
12
+ export * from './lenderSubmitPreflight.js';
13
+ export * from './borrowerSubmitPreflight.js';
14
+ export * from './yieldMigrationPreflight.js';
15
+ export * from './loanPositions.js';
16
+ export * from './marketStats.js';
17
+ export * from './strategies.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,oBAAoB,CAAA;AAClC,cAAc,kBAAkB,CAAA;AAChC,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { Provider } from 'ethers';
2
+ export type AssertLenderSubmitLiquidityParams = {
3
+ intentRegistry: string;
4
+ loanManager: string;
5
+ owner: string;
6
+ asset: string;
7
+ /** `ZeroAddress` for wallet-mode lenders */
8
+ yieldSource: string;
9
+ maxPrincipal: bigint;
10
+ };
11
+ /** One base unit of the loan asset — mirrors on-chain `YIELD_BALANCE_ROUNDING_TOLERANCE`. */
12
+ export declare const YIELD_BALANCE_ROUNDING_TOLERANCE = 1n;
13
+ /**
14
+ * Client-side guard mirroring `IntentValidation.validateLenderParams`:
15
+ * `fungibleBalance + YIELD_BALANCE_ROUNDING_TOLERANCE >= committed + maxPrincipal` (yield mode).
16
+ * Call before `Main.submitLenderIntent` to avoid wasting gas on `InsufficientYieldSourceBalance`
17
+ * / wallet balance-revert paths.
18
+ */
19
+ export declare function assertLenderSubmitLiquidity(provider: Provider, p: AssertLenderSubmitLiquidityParams): Promise<void>;
20
+ //# sourceMappingURL=lenderSubmitPreflight.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lenderSubmitPreflight.d.ts","sourceRoot":"","sources":["../src/lenderSubmitPreflight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAQtC,MAAM,MAAM,iCAAiC,GAAG;IAC9C,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;CACrB,CAAA;AAED,6FAA6F;AAC7F,eAAO,MAAM,gCAAgC,KAAK,CAAA;AAElD;;;;;GAKG;AACH,wBAAsB,2BAA2B,CAC/C,QAAQ,EAAE,QAAQ,EAClB,CAAC,EAAE,iCAAiC,GACnC,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
@@ -0,0 +1,42 @@
1
+ import { Contract, ZeroAddress, getAddress } from 'ethers';
2
+ import { intentRegistryAbi, yieldSourceAbi } from './abis.js';
3
+ const ERC20_MIN_ABI = [
4
+ 'function balanceOf(address) view returns (uint256)',
5
+ 'function allowance(address,address) view returns (uint256)',
6
+ ];
7
+ /** One base unit of the loan asset — mirrors on-chain `YIELD_BALANCE_ROUNDING_TOLERANCE`. */
8
+ export const YIELD_BALANCE_ROUNDING_TOLERANCE = 1n;
9
+ /**
10
+ * Client-side guard mirroring `IntentValidation.validateLenderParams`:
11
+ * `fungibleBalance + YIELD_BALANCE_ROUNDING_TOLERANCE >= committed + maxPrincipal` (yield mode).
12
+ * Call before `Main.submitLenderIntent` to avoid wasting gas on `InsufficientYieldSourceBalance`
13
+ * / wallet balance-revert paths.
14
+ */
15
+ export async function assertLenderSubmitLiquidity(provider, p) {
16
+ const reg = new Contract(getAddress(p.intentRegistry), intentRegistryAbi, provider);
17
+ const ys = getAddress(p.yieldSource);
18
+ const owner = getAddress(p.owner);
19
+ const asset = getAddress(p.asset);
20
+ const lm = getAddress(p.loanManager);
21
+ const committed = await reg.committedCapacity(owner, ys, asset);
22
+ const needed = committed + p.maxPrincipal;
23
+ if (ys === ZeroAddress) {
24
+ const token = new Contract(asset, ERC20_MIN_ABI, provider);
25
+ const [bal, alw] = await Promise.all([
26
+ token.balanceOf(owner),
27
+ token.allowance(owner, lm),
28
+ ]);
29
+ const headroom = bal < alw ? bal : alw;
30
+ if (headroom < needed) {
31
+ throw new Error(`Insufficient wallet liquidity for this intent: need ${needed.toString()} base units (already booked ${committed.toString()} + new max ${p.maxPrincipal.toString()}), min(balance, LoanManager allowance) is ${headroom.toString()}. Approve LoanManager, reduce max capacity, or cancel other intents.`);
32
+ }
33
+ }
34
+ else {
35
+ const y = new Contract(ys, yieldSourceAbi, provider);
36
+ const bal = await y.balanceOf(owner, asset);
37
+ if (bal + YIELD_BALANCE_ROUNDING_TOLERANCE < needed) {
38
+ throw new Error(`Insufficient yield-source liquidity: need ${needed.toString()} base units (already booked ${committed.toString()} + new max ${p.maxPrincipal.toString()}), balance ${bal.toString()}. Deposit more, reduce max, or cancel other intents.`);
39
+ }
40
+ }
41
+ }
42
+ //# sourceMappingURL=lenderSubmitPreflight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lenderSubmitPreflight.js","sourceRoot":"","sources":["../src/lenderSubmitPreflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAE1D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE7D,MAAM,aAAa,GAAG;IACpB,oDAAoD;IACpD,4DAA4D;CACpD,CAAA;AAYV,6FAA6F;AAC7F,MAAM,CAAC,MAAM,gCAAgC,GAAG,EAAE,CAAA;AAElD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,QAAkB,EAClB,CAAoC;IAEpC,MAAM,GAAG,GAAG,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAA;IACnF,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IACjC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;IAEpC,MAAM,SAAS,GAAW,MAAM,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,CAAC,YAAY,CAAA;IAEzC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAA;QAC1D,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACnC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAoB;YACzC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAoB;SAC9C,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACtC,IAAI,QAAQ,GAAG,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uDAAuD,MAAM,CAAC,QAAQ,EAAE,+BAA+B,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,6CAA6C,QAAQ,CAAC,QAAQ,EAAE,sEAAsE,CACzS,CAAA;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,cAAc,EAAE,QAAQ,CAAC,CAAA;QACpD,MAAM,GAAG,GAAW,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACnD,IAAI,GAAG,GAAG,gCAAgC,GAAG,MAAM,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,6CAA6C,MAAM,CAAC,QAAQ,EAAE,+BAA+B,SAAS,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,CAAC,QAAQ,EAAE,sDAAsD,CAC3O,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { Contract, type ContractRunner, type TransactionResponse } from 'ethers';
2
+ import type { Address } from './types.js';
3
+ /**
4
+ * Resolves `Main.loanPositionToken()` and returns a contract instance with transfer ABI.
5
+ * @dev Requires a signer runner for writes.
6
+ */
7
+ export declare function getLoanPositionTokenFromMain(main: Contract): Promise<Contract>;
8
+ /**
9
+ * Transfers lender position NFT (`pcLOAN`) ownership.
10
+ * @returns Transaction response for `safeTransferFrom(from, to, loanId)`.
11
+ */
12
+ export declare function transferLoanPosition(loanPositionToken: Contract, from: Address, to: Address, loanId: bigint | number): Promise<TransactionResponse>;
13
+ /**
14
+ * Lists a position via `Main.listForSale(loanId, askPrice, paymentToken, expiry)`.
15
+ */
16
+ export declare function listLoanPosition(main: Contract, loanId: bigint | number, askPrice: bigint, paymentToken: Address, expiry: bigint): Promise<TransactionResponse>;
17
+ /**
18
+ * Delists a position via `Main.delistFromSale(loanId)`.
19
+ */
20
+ export declare function delistLoanPosition(main: Contract, loanId: bigint | number): Promise<TransactionResponse>;
21
+ /** Creates a typed contract instance for direct `pcLOAN` transfers. */
22
+ export declare function getLoanPositionToken(address: Address, runner: ContractRunner): Contract;
23
+ //# sourceMappingURL=loanPositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loanPositions.d.ts","sourceRoot":"","sources":["../src/loanPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAA;AAGhF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAKpF;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,iBAAiB,EAAE,QAAQ,EAC3B,IAAI,EAAE,OAAO,EACb,EAAE,EAAE,OAAO,EACX,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,OAAO,CAAC,mBAAmB,CAAC,CAE9B;AAED,uEAAuE;AACvE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,QAAQ,CAEvF"}
@@ -0,0 +1,37 @@
1
+ import { Contract } from 'ethers';
2
+ import { loanPositionTokenAbi } from './abis.js';
3
+ /**
4
+ * Resolves `Main.loanPositionToken()` and returns a contract instance with transfer ABI.
5
+ * @dev Requires a signer runner for writes.
6
+ */
7
+ export async function getLoanPositionTokenFromMain(main) {
8
+ const runner = main.runner;
9
+ if (!runner)
10
+ throw new Error('Main contract has no runner (attach provider or signer).');
11
+ const tokenAddress = await main.loanPositionToken();
12
+ return new Contract(tokenAddress, loanPositionTokenAbi, runner);
13
+ }
14
+ /**
15
+ * Transfers lender position NFT (`pcLOAN`) ownership.
16
+ * @returns Transaction response for `safeTransferFrom(from, to, loanId)`.
17
+ */
18
+ export async function transferLoanPosition(loanPositionToken, from, to, loanId) {
19
+ return loanPositionToken.safeTransferFrom(from, to, BigInt(loanId));
20
+ }
21
+ /**
22
+ * Lists a position via `Main.listForSale(loanId, askPrice, paymentToken, expiry)`.
23
+ */
24
+ export async function listLoanPosition(main, loanId, askPrice, paymentToken, expiry) {
25
+ return main.listForSale(BigInt(loanId), askPrice, paymentToken, expiry);
26
+ }
27
+ /**
28
+ * Delists a position via `Main.delistFromSale(loanId)`.
29
+ */
30
+ export async function delistLoanPosition(main, loanId) {
31
+ return main.delistFromSale(BigInt(loanId));
32
+ }
33
+ /** Creates a typed contract instance for direct `pcLOAN` transfers. */
34
+ export function getLoanPositionToken(address, runner) {
35
+ return new Contract(address, loanPositionTokenAbi, runner);
36
+ }
37
+ //# sourceMappingURL=loanPositions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loanPositions.js","sourceRoot":"","sources":["../src/loanPositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAiD,MAAM,QAAQ,CAAA;AAEhF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAGhD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,IAAc;IAC/D,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IACxF,MAAM,YAAY,GAAW,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAA;IAC3D,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,iBAA2B,EAC3B,IAAa,EACb,EAAW,EACX,MAAuB;IAEvB,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAc,EACd,MAAuB,EACvB,QAAgB,EAChB,YAAqB,EACrB,MAAc;IAEd,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAc,EACd,MAAuB;IAEvB,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;AAC5C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,oBAAoB,CAAC,OAAgB,EAAE,MAAsB;IAC3E,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,70 @@
1
+ /** Minimal lender intent row for aggregate stats (human token units). */
2
+ export type LenderIntentStatsRow = {
3
+ asset: string;
4
+ active: boolean;
5
+ maxPrincipal: number;
6
+ filledAmount: number;
7
+ };
8
+ /** Minimal loan row for aggregate stats (human token units). */
9
+ export type LoanStatsRow = {
10
+ asset: string;
11
+ collateral?: string;
12
+ principal: number;
13
+ collateralAmount?: number;
14
+ status?: number | string;
15
+ };
16
+ export type MarketAggregate = {
17
+ activeLoanCount: number;
18
+ /** @deprecated Prefer availableToLendUsd + yieldDepositedUsd */
19
+ suppliedUsd: number;
20
+ suppliedIncomplete: boolean;
21
+ availableToLendUsd: number;
22
+ availableToLendIncomplete: boolean;
23
+ yieldDepositedUsd: number;
24
+ yieldDepositedIncomplete: boolean;
25
+ collateralUsd: number | null;
26
+ collateralMissingPrice: boolean;
27
+ loanPrincipalUsd: number;
28
+ loanPrincipalIncomplete: boolean;
29
+ humanByAsset: Record<string, number>;
30
+ availableToLendHumanByAsset: Record<string, number>;
31
+ yieldTvlHumanByAsset: Record<string, number>;
32
+ };
33
+ /** Unfilled active lender intent headroom (human units per asset). */
34
+ export declare function availableToLendHumanByAsset(lenders: LenderIntentStatsRow[], assets: readonly string[]): Record<string, number>;
35
+ /** Principal on active loans per loan asset (human units). */
36
+ export declare function outstandingPrincipalHumanByAsset(activeLoans: LoanStatsRow[], assets: readonly string[]): Record<string, number>;
37
+ /** Idle lend capacity + outstanding principal per asset (human units). */
38
+ export declare function suppliedHumanByAsset(lenders: LenderIntentStatsRow[], activeLoans: LoanStatsRow[], assets: readonly string[]): Record<string, number>;
39
+ /** USD sum: includes only assets with an oracle price; `incomplete` if any non-zero position lacks a price. */
40
+ export declare function sumUsdHuman(humanByAsset: Record<string, number>, usdPerToken: Record<string, number | null | undefined>, assets: readonly string[]): {
41
+ usd: number;
42
+ incomplete: boolean;
43
+ };
44
+ /** Total collateral locked (USD) for active loans when oracle has each collateral token price. */
45
+ export declare function sumCollateralUsd(activeLoans: LoanStatsRow[], usdPerToken: Record<string, number | null | undefined>): {
46
+ usd: number | null;
47
+ missingPrice: boolean;
48
+ };
49
+ /** Principal outstanding in USD for active loans. */
50
+ export declare function sumLoanPrincipalUsd(activeLoans: LoanStatsRow[], usdPerToken: Record<string, number | null | undefined>): {
51
+ usd: number;
52
+ incomplete: boolean;
53
+ };
54
+ export type BuildMarketAggregateParams = {
55
+ lenders: LenderIntentStatsRow[];
56
+ loans: LoanStatsRow[];
57
+ usdPerToken: Record<string, number | null | undefined>;
58
+ /** Asset symbols to include (e.g. `['USDC','WETH']`). */
59
+ assets: readonly string[];
60
+ /** Optional per-symbol TVL in yield adapters (protocol or wallet scope). */
61
+ yieldTvlHumanByAsset?: Record<string, number>;
62
+ };
63
+ /**
64
+ * Protocol- or wallet-scoped market aggregates for dashboard KPIs.
65
+ * Compose with SDK reads: intents (`readLenderIntent`), loans (`readLoanBundle`),
66
+ * yield TVL (`readYieldSourceTotalAssets`), wallet yield (`readAllYieldSourceBalances`),
67
+ * and oracle prices (`readAssetPrice` / `readOraclePairPrice`).
68
+ */
69
+ export declare function buildMarketAggregate(p: BuildMarketAggregateParams): MarketAggregate;
70
+ //# sourceMappingURL=marketStats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketStats.d.ts","sourceRoot":"","sources":["../src/marketStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ function isActiveLoan(l) {
2
+ const s = l?.status;
3
+ if (typeof s === 'number')
4
+ return s === 0 || s === 1;
5
+ if (typeof s !== 'string')
6
+ return false;
7
+ const norm = s.trim().toLowerCase();
8
+ return norm === 'active' || norm === 'listed';
9
+ }
10
+ /** Unfilled active lender intent headroom (human units per asset). */
11
+ export function availableToLendHumanByAsset(lenders, assets) {
12
+ const out = {};
13
+ for (const asset of assets) {
14
+ out[asset] = lenders
15
+ .filter((i) => i.asset === asset && i.active)
16
+ .reduce((s, i) => s + Math.max(0, i.maxPrincipal - i.filledAmount), 0);
17
+ }
18
+ return out;
19
+ }
20
+ /** Principal on active loans per loan asset (human units). */
21
+ export function outstandingPrincipalHumanByAsset(activeLoans, assets) {
22
+ const out = {};
23
+ for (const asset of assets) {
24
+ out[asset] = activeLoans.filter((l) => l.asset === asset).reduce((s, l) => s + l.principal, 0);
25
+ }
26
+ return out;
27
+ }
28
+ /** Idle lend capacity + outstanding principal per asset (human units). */
29
+ export function suppliedHumanByAsset(lenders, activeLoans, assets) {
30
+ const avail = availableToLendHumanByAsset(lenders, assets);
31
+ const principal = outstandingPrincipalHumanByAsset(activeLoans, assets);
32
+ const out = {};
33
+ for (const asset of assets) {
34
+ out[asset] = (avail[asset] ?? 0) + (principal[asset] ?? 0);
35
+ }
36
+ return out;
37
+ }
38
+ /** USD sum: includes only assets with an oracle price; `incomplete` if any non-zero position lacks a price. */
39
+ export function sumUsdHuman(humanByAsset, usdPerToken, assets) {
40
+ let total = 0;
41
+ let incomplete = false;
42
+ for (const asset of assets) {
43
+ const human = humanByAsset[asset] ?? 0;
44
+ const px = usdPerToken[asset];
45
+ if (px != null)
46
+ total += human * px;
47
+ else if (human > 0)
48
+ incomplete = true;
49
+ }
50
+ return { usd: total, incomplete };
51
+ }
52
+ /** Total collateral locked (USD) for active loans when oracle has each collateral token price. */
53
+ export function sumCollateralUsd(activeLoans, usdPerToken) {
54
+ if (!activeLoans.length)
55
+ return { usd: 0, missingPrice: false };
56
+ let total = 0;
57
+ let missingPrice = false;
58
+ for (const l of activeLoans) {
59
+ const col = l.collateral;
60
+ const px = col != null ? usdPerToken[col] : null;
61
+ const amt = l.collateralAmount ?? 0;
62
+ if (px != null) {
63
+ total += amt * px;
64
+ }
65
+ else if (amt > 0) {
66
+ missingPrice = true;
67
+ }
68
+ }
69
+ return { usd: missingPrice ? null : total, missingPrice };
70
+ }
71
+ /** Principal outstanding in USD for active loans. */
72
+ export function sumLoanPrincipalUsd(activeLoans, usdPerToken) {
73
+ let total = 0;
74
+ let incomplete = false;
75
+ for (const l of activeLoans) {
76
+ const px = usdPerToken[l.asset];
77
+ if (px != null)
78
+ total += l.principal * px;
79
+ else if (l.principal > 0)
80
+ incomplete = true;
81
+ }
82
+ return { usd: total, incomplete };
83
+ }
84
+ /**
85
+ * Protocol- or wallet-scoped market aggregates for dashboard KPIs.
86
+ * Compose with SDK reads: intents (`readLenderIntent`), loans (`readLoanBundle`),
87
+ * yield TVL (`readYieldSourceTotalAssets`), wallet yield (`readAllYieldSourceBalances`),
88
+ * and oracle prices (`readAssetPrice` / `readOraclePairPrice`).
89
+ */
90
+ export function buildMarketAggregate(p) {
91
+ const { lenders, loans, usdPerToken, assets, yieldTvlHumanByAsset } = p;
92
+ const activeLoans = loans.filter(isActiveLoan);
93
+ const yieldExtra = yieldTvlHumanByAsset ?? {};
94
+ const availableHuman = availableToLendHumanByAsset(lenders, assets);
95
+ const humanByAsset = suppliedHumanByAsset(lenders, activeLoans, assets);
96
+ const availableToLend = sumUsdHuman(availableHuman, usdPerToken, assets);
97
+ const yieldDeposited = sumUsdHuman(yieldExtra, usdPerToken, assets);
98
+ const collateral = sumCollateralUsd(activeLoans, usdPerToken);
99
+ const principal = sumLoanPrincipalUsd(activeLoans, usdPerToken);
100
+ return {
101
+ activeLoanCount: activeLoans.length,
102
+ suppliedUsd: availableToLend.usd + principal.usd,
103
+ suppliedIncomplete: availableToLend.incomplete || principal.incomplete,
104
+ availableToLendUsd: availableToLend.usd,
105
+ availableToLendIncomplete: availableToLend.incomplete,
106
+ yieldDepositedUsd: yieldDeposited.usd,
107
+ yieldDepositedIncomplete: yieldDeposited.incomplete,
108
+ collateralUsd: collateral.usd,
109
+ collateralMissingPrice: collateral.missingPrice,
110
+ loanPrincipalUsd: principal.usd,
111
+ loanPrincipalIncomplete: principal.incomplete,
112
+ humanByAsset,
113
+ availableToLendHumanByAsset: availableHuman,
114
+ yieldTvlHumanByAsset: yieldExtra,
115
+ };
116
+ }
117
+ //# sourceMappingURL=marketStats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketStats.js","sourceRoot":"","sources":["../src/marketStats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Address } from './types.js';
2
+ /**
3
+ * Pearcurve deployment addresses for a single chain.
4
+ * Keys in {@link deployments} are EIP-155 chain IDs as decimal strings.
5
+ */
6
+ export type PearcurveDeployment = {
7
+ main: Address;
8
+ matchingEngine: Address;
9
+ intentRegistry: Address;
10
+ intentRegistryViews?: Address;
11
+ loanManager?: Address;
12
+ loanManagerValidation?: Address;
13
+ yieldSourceRegistry?: Address;
14
+ priceOracle?: Address;
15
+ loanHealthViewer?: Address;
16
+ protocolViewer?: Address;
17
+ secondaryMarket?: Address;
18
+ usdc?: Address;
19
+ usdt?: Address;
20
+ weth?: Address;
21
+ wbtc?: Address;
22
+ aaveV3YieldSource?: Address;
23
+ compoundV3YieldSourceUsdc?: Address;
24
+ compoundV3YieldSourceUsdt?: Address;
25
+ compoundV3YieldSourceWeth?: Address;
26
+ compoundV3YieldSourceWbtc?: Address;
27
+ eventLogsFromBlock?: number;
28
+ /**
29
+ * Set only for leftover June Arc deploys that still use `subAccountId` + `collateralConfigs[]`.
30
+ * Current Arc deploys omit this.
31
+ */
32
+ legacyIntentSubmit?: boolean;
33
+ };
34
+ export declare const PearcurveChainId: {
35
+ readonly LocalAnvil: 31337n;
36
+ readonly EthereumSepolia: 11155111n;
37
+ readonly EthereumMainnet: 1n;
38
+ /** Circle Arc mainnet — native gas is USDC (18 decimals). */
39
+ readonly ArcMainnet: 5042n;
40
+ readonly ArcTestnet: 5042002n;
41
+ };
42
+ /** Auto-synced from @pearcurve/contracts deployments/*.json by scripts/sync-deployments.mjs */
43
+ export declare const deployments: Partial<Record<string, PearcurveDeployment>>;
44
+ export declare function getDeployment(chainId: bigint): PearcurveDeployment | undefined;
45
+ export declare function requireDeployment(chainId: bigint): PearcurveDeployment;
46
+ /** Canonical protocol address from the SDK map. Env overlays belong in the app, not here. */
47
+ export declare function sdkDeploymentAddress(chainId: bigint, key: keyof PearcurveDeployment): Address | undefined;
48
+ //# sourceMappingURL=networkConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkConfig.d.ts","sourceRoot":"","sources":["../src/networkConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,OAAO,CAAA;IACb,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,yBAAyB,CAAC,EAAE,OAAO,CAAA;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,gBAAgB;;;;IAI3B,6DAA6D;;;CAGrD,CAAA;AAEV,+FAA+F;AAC/F,eAAO,MAAM,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAuBpE,CAAA;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAE9E;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAItE;AAED,6FAA6F;AAC7F,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,mBAAmB,GAC7B,OAAO,GAAG,SAAS,CAGrB"}
@@ -0,0 +1,48 @@
1
+ export const PearcurveChainId = {
2
+ LocalAnvil: 31337n,
3
+ EthereumSepolia: 11155111n,
4
+ EthereumMainnet: 1n,
5
+ /** Circle Arc mainnet — native gas is USDC (18 decimals). */
6
+ ArcMainnet: 5042n,
7
+ ArcTestnet: 5042002n,
8
+ };
9
+ /** Auto-synced from @pearcurve/contracts deployments/*.json by scripts/sync-deployments.mjs */
10
+ export const deployments = {
11
+ '5042002': {
12
+ main: '0x061ca0cc2a30853641d6245c292157ebcffaa273',
13
+ matchingEngine: '0x3e06f73074b938198f66c322010fa4e2ac0d52a3',
14
+ intentRegistry: '0x0dda05ff98996fcf2dc9e35952577e0e3a9cf46b',
15
+ intentRegistryViews: '0xd642f514b7b82838cf24279948bcc6b1663e4a5e',
16
+ loanManager: '0x0028bcc9bb747cac8cf16273845262f0f8a3be2c',
17
+ loanManagerValidation: '0x0e17509459a68425bdbdb4282e99598bebdc0276',
18
+ yieldSourceRegistry: '0x23b520d6b0d75401af71344f9823044a33aebc49',
19
+ priceOracle: '0x2057ac2eea9c3b7acff700175338b734e3a73e39',
20
+ loanHealthViewer: '0x05ee4cb10c04c173f56e5d75d0e3b949f9071910',
21
+ protocolViewer: '0x7450fe6e80989fd6cccdb7a1a8d9112ec2a5aff7',
22
+ secondaryMarket: '0x1748ad018e6699a56ccf5747048b390b4442dc9b',
23
+ usdc: '0x84e6255622b4bcbe7e7b07ed8d733c0e1575744e',
24
+ usdt: '0x4b6d333400744a4d77e757f5becf2c84215244c3',
25
+ weth: '0xaaf7a7a278a8f446b732160a9f63532309961ab5',
26
+ wbtc: '0x96a126e3a091490ab5cd20ce005c7c300545c569',
27
+ aaveV3YieldSource: '0x956932fcc2c3c88e21f4a9d6a6fe6b8b2d3e7fa8',
28
+ compoundV3YieldSourceUsdc: '0xaf129320ee2579ac3efefe68667b6247f2c9d858',
29
+ compoundV3YieldSourceUsdt: '0x552e9cdb95f7049f53e69e853111a571c6db9639',
30
+ compoundV3YieldSourceWeth: '0x409b212847dbcbde882c58010d797f955b3e8b5c',
31
+ compoundV3YieldSourceWbtc: '0x48cf73f8a7574dc40eedfd9e23e426ff337b1104'
32
+ }
33
+ };
34
+ export function getDeployment(chainId) {
35
+ return deployments[chainId.toString()];
36
+ }
37
+ export function requireDeployment(chainId) {
38
+ const d = getDeployment(chainId);
39
+ if (!d)
40
+ throw new Error('No Pearcurve deployment configured for chain id ' + chainId.toString());
41
+ return d;
42
+ }
43
+ /** Canonical protocol address from the SDK map. Env overlays belong in the app, not here. */
44
+ export function sdkDeploymentAddress(chainId, key) {
45
+ const value = getDeployment(chainId)?.[key];
46
+ return typeof value === 'string' && value.startsWith('0x') ? value : undefined;
47
+ }
48
+ //# sourceMappingURL=networkConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"networkConfig.js","sourceRoot":"","sources":["../src/networkConfig.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM;IAClB,eAAe,EAAE,SAAS;IAC1B,eAAe,EAAE,EAAE;IACnB,6DAA6D;IAC7D,UAAU,EAAE,KAAK;IACjB,UAAU,EAAE,QAAQ;CACZ,CAAA;AAEV,+FAA+F;AAC/F,MAAM,CAAC,MAAM,WAAW,GAAiD;IACvE,SAAS,EAAE;QACT,IAAI,EAAE,4CAA4C;QAClD,cAAc,EAAE,4CAA4C;QAC5D,cAAc,EAAE,4CAA4C;QAC5D,mBAAmB,EAAE,4CAA4C;QACjE,WAAW,EAAE,4CAA4C;QACzD,qBAAqB,EAAE,4CAA4C;QACnE,mBAAmB,EAAE,4CAA4C;QACjE,WAAW,EAAE,4CAA4C;QACzD,gBAAgB,EAAE,4CAA4C;QAC9D,cAAc,EAAE,4CAA4C;QAC5D,eAAe,EAAE,4CAA4C;QAC7D,IAAI,EAAE,4CAA4C;QAClD,IAAI,EAAE,4CAA4C;QAClD,IAAI,EAAE,4CAA4C;QAClD,IAAI,EAAE,4CAA4C;QAClD,iBAAiB,EAAE,4CAA4C;QAC/D,yBAAyB,EAAE,4CAA4C;QACvE,yBAAyB,EAAE,4CAA4C;QACvE,yBAAyB,EAAE,4CAA4C;QACvE,yBAAyB,EAAE,4CAA4C;KACxE;CACF,CAAA;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,MAAM,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IAChC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChG,OAAO,CAAC,CAAA;AACV,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,GAA8B;IAE9B,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAA;IAC3C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAChF,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { ContractRunner } from 'ethers';
2
+ import type { Address } from './types.js';
3
+ export declare enum MarketFeature {
4
+ Deposit = 0,
5
+ Withdraw = 1,
6
+ Borrow = 2,
7
+ Repay = 3,
8
+ Liquidate = 4,
9
+ Refinance = 5,
10
+ Match = 6,
11
+ Secondary = 7
12
+ }
13
+ /** Reads OpenZeppelin `Pausable.paused()` from Main. */
14
+ export declare function isProtocolPaused(mainAddress: Address, runner: ContractRunner): Promise<boolean>;
15
+ /** Reads market-level pause flag from Main. */
16
+ export declare function isMarketPaused(mainAddress: Address, market: Address, runner: ContractRunner): Promise<boolean>;
17
+ /** Reads market-feature-level pause flag from Main. */
18
+ export declare function isMarketFeaturePaused(mainAddress: Address, market: Address, feature: MarketFeature | number, runner: ContractRunner): Promise<boolean>;
19
+ export declare function mapPauseError(error: unknown): string | null;
20
+ //# sourceMappingURL=pause.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.d.ts","sourceRoot":"","sources":["../src/pause.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AAI5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEzC,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,KAAK,IAAI;IACT,SAAS,IAAI;IACb,SAAS,IAAI;IACb,KAAK,IAAI;IACT,SAAS,IAAI;CACd;AAED,wDAAwD;AACxD,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrG;AAED,+CAA+C;AAC/C,wBAAsB,cAAc,CAClC,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,uDAAuD;AACvD,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,aAAa,GAAG,MAAM,EAC/B,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAW3D"}