@wuwei-labs/srsly 4.3.0 → 4.4.2

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 (98) hide show
  1. package/dist/cjs/audit/audit.js +400 -0
  2. package/dist/cjs/audit/audit.js.map +1 -0
  3. package/dist/cjs/audit/events.js +227 -0
  4. package/dist/cjs/audit/events.js.map +1 -0
  5. package/dist/cjs/audit/index.js +8 -0
  6. package/dist/cjs/audit/index.js.map +1 -0
  7. package/dist/cjs/audit/types.js +3 -0
  8. package/dist/cjs/audit/types.js.map +1 -0
  9. package/dist/cjs/generated/codama/types/feesPaid.js +33 -0
  10. package/dist/cjs/generated/codama/types/feesPaid.js.map +1 -0
  11. package/dist/cjs/generated/codama/types/fleet.js +0 -14
  12. package/dist/cjs/generated/codama/types/fleet.js.map +1 -1
  13. package/dist/cjs/generated/codama/types/index.js +3 -18
  14. package/dist/cjs/generated/codama/types/index.js.map +1 -1
  15. package/dist/cjs/generated/codama/types/ownerPaid.js +31 -0
  16. package/dist/cjs/generated/codama/types/ownerPaid.js.map +1 -0
  17. package/dist/cjs/generated/codama/types/rentalAccepted.js +8 -0
  18. package/dist/cjs/generated/codama/types/rentalAccepted.js.map +1 -1
  19. package/dist/cjs/generated/codama/types/rentalCancelled.js +6 -2
  20. package/dist/cjs/generated/codama/types/rentalCancelled.js.map +1 -1
  21. package/dist/cjs/generated/codama/types/rentalClosed.js +4 -2
  22. package/dist/cjs/generated/codama/types/rentalClosed.js.map +1 -1
  23. package/dist/cjs/generated/codama/types/rentalSettled.js +35 -0
  24. package/dist/cjs/generated/codama/types/rentalSettled.js.map +1 -0
  25. package/dist/cjs/generated/codama/types/shipStats.js +0 -2
  26. package/dist/cjs/generated/codama/types/shipStats.js.map +1 -1
  27. package/dist/cjs/idl/srsly.json +6748 -0
  28. package/dist/cjs/instructions/reserveRental.js +9 -6
  29. package/dist/cjs/instructions/reserveRental.js.map +1 -1
  30. package/dist/cjs/kit/index.js +2 -1
  31. package/dist/cjs/kit/index.js.map +1 -1
  32. package/dist/cjs/package.json +1 -1
  33. package/dist/cjs/version.js +1 -1
  34. package/dist/esm/audit/audit.js +397 -0
  35. package/dist/esm/audit/audit.js.map +1 -0
  36. package/dist/esm/audit/events.js +221 -0
  37. package/dist/esm/audit/events.js.map +1 -0
  38. package/dist/esm/audit/index.js +3 -0
  39. package/dist/esm/audit/index.js.map +1 -0
  40. package/dist/esm/audit/types.js +2 -0
  41. package/dist/esm/audit/types.js.map +1 -0
  42. package/dist/esm/generated/codama/types/feesPaid.js +28 -0
  43. package/dist/esm/generated/codama/types/feesPaid.js.map +1 -0
  44. package/dist/esm/generated/codama/types/fleet.js +1 -15
  45. package/dist/esm/generated/codama/types/fleet.js.map +1 -1
  46. package/dist/esm/generated/codama/types/index.js +3 -18
  47. package/dist/esm/generated/codama/types/index.js.map +1 -1
  48. package/dist/esm/generated/codama/types/ownerPaid.js +26 -0
  49. package/dist/esm/generated/codama/types/ownerPaid.js.map +1 -0
  50. package/dist/esm/generated/codama/types/rentalAccepted.js +9 -1
  51. package/dist/esm/generated/codama/types/rentalAccepted.js.map +1 -1
  52. package/dist/esm/generated/codama/types/rentalCancelled.js +6 -2
  53. package/dist/esm/generated/codama/types/rentalCancelled.js.map +1 -1
  54. package/dist/esm/generated/codama/types/rentalClosed.js +4 -2
  55. package/dist/esm/generated/codama/types/rentalClosed.js.map +1 -1
  56. package/dist/esm/generated/codama/types/rentalSettled.js +30 -0
  57. package/dist/esm/generated/codama/types/rentalSettled.js.map +1 -0
  58. package/dist/esm/generated/codama/types/shipStats.js +1 -3
  59. package/dist/esm/generated/codama/types/shipStats.js.map +1 -1
  60. package/dist/esm/idl/srsly.json +6748 -0
  61. package/dist/esm/instructions/reserveRental.js +9 -6
  62. package/dist/esm/instructions/reserveRental.js.map +1 -1
  63. package/dist/esm/kit/index.js +1 -0
  64. package/dist/esm/kit/index.js.map +1 -1
  65. package/dist/esm/package.json +1 -1
  66. package/dist/esm/version.js +1 -1
  67. package/dist/idl/srsly.json +122 -687
  68. package/dist/types/audit/audit.d.ts +10 -0
  69. package/dist/types/audit/audit.d.ts.map +1 -0
  70. package/dist/types/audit/events.d.ts +17 -0
  71. package/dist/types/audit/events.d.ts.map +1 -0
  72. package/dist/types/audit/index.d.ts +4 -0
  73. package/dist/types/audit/index.d.ts.map +1 -0
  74. package/dist/types/audit/types.d.ts +132 -0
  75. package/dist/types/audit/types.d.ts.map +1 -0
  76. package/dist/types/generated/codama/types/feesPaid.d.ts +28 -0
  77. package/dist/types/generated/codama/types/feesPaid.d.ts.map +1 -0
  78. package/dist/types/generated/codama/types/fleet.d.ts +0 -14
  79. package/dist/types/generated/codama/types/fleet.d.ts.map +1 -1
  80. package/dist/types/generated/codama/types/index.d.ts +3 -18
  81. package/dist/types/generated/codama/types/index.d.ts.map +1 -1
  82. package/dist/types/generated/codama/types/ownerPaid.d.ts +26 -0
  83. package/dist/types/generated/codama/types/ownerPaid.d.ts.map +1 -0
  84. package/dist/types/generated/codama/types/rentalAccepted.d.ts +12 -0
  85. package/dist/types/generated/codama/types/rentalAccepted.d.ts.map +1 -1
  86. package/dist/types/generated/codama/types/rentalCancelled.d.ts +10 -2
  87. package/dist/types/generated/codama/types/rentalCancelled.d.ts.map +1 -1
  88. package/dist/types/generated/codama/types/rentalClosed.d.ts +8 -2
  89. package/dist/types/generated/codama/types/rentalClosed.d.ts.map +1 -1
  90. package/dist/types/generated/codama/types/rentalSettled.d.ts +30 -0
  91. package/dist/types/generated/codama/types/rentalSettled.d.ts.map +1 -0
  92. package/dist/types/generated/codama/types/shipStats.d.ts +1 -3
  93. package/dist/types/generated/codama/types/shipStats.d.ts.map +1 -1
  94. package/dist/types/instructions/reserveRental.d.ts.map +1 -1
  95. package/dist/types/kit/index.d.ts +1 -0
  96. package/dist/types/kit/index.d.ts.map +1 -1
  97. package/dist/types/version.d.ts +1 -1
  98. package/package.json +8 -1
@@ -68,20 +68,23 @@ async function reserveRental(params, config) {
68
68
  throw new Error('duration is required');
69
69
  }
70
70
  const bidPoints = params.bidPoints ?? 0;
71
- let bidAtlasValue = params.bidAtlas ? (0, amount_1.convertAmount)(params.bidAtlas) : 0n;
71
+ let bidAtlasValue = params.bidAtlas !== undefined ? (0, amount_1.convertAmount)(params.bidAtlas) : 0n;
72
+ const userProvidedBid = params.bidPoints !== undefined || params.bidAtlas !== undefined;
72
73
  if (bidPoints > 0 && bidAtlasValue > 0n) {
73
74
  throw new Error('bidPoints and bidAtlas are mutually exclusive');
74
75
  }
75
- // Auto-fill the ATLAS bid with the live contract minimum when the caller
76
- // didn't pass either currency. Saves consumers a round-trip and keeps bid
77
- // floors honest without exposing the formula on every UI.
76
+ // Auto-fill the ATLAS bid when the caller omitted both bid params AND
77
+ // there is an existing defender to outbid. First reservations allow
78
+ // zero-bid, so we leave those untouched.
78
79
  const autoMinBid = params.autoMinBid ?? true;
79
- if (autoMinBid && bidPoints === 0 && bidAtlasValue === 0n) {
80
+ if (autoMinBid && !userProvidedBid) {
80
81
  const floor = await (0, bidMath_1.getMinimumBid)({
81
82
  contractAddress: params.contract,
82
83
  rpcUrl: config?.rpcUrl,
83
84
  });
84
- bidAtlasValue = floor.minBidStardust;
85
+ if (floor.defenderBidStardust > 0n) {
86
+ bidAtlasValue = floor.minBidStardust;
87
+ }
85
88
  }
86
89
  // Convert challenger to transaction signer
87
90
  const challengerSigner = (0, signer_1.toTransactionSigner)(params.challenger);
@@ -1 +1 @@
1
- {"version":3,"file":"reserveRental.js","sourceRoot":"","sources":["../../../src/instructions/reserveRental.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reserveRental.js","sourceRoot":"","sources":["../../../src/instructions/reserveRental.ts"],"names":[],"mappings":"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"}
@@ -52,7 +52,7 @@ var __importStar = (this && this.__importStar) || (function () {
52
52
  };
53
53
  })();
54
54
  Object.defineProperty(exports, "__esModule", { value: true });
55
- exports.codama = exports.claim = exports.VERSION = void 0;
55
+ exports.audit = exports.codama = exports.claim = exports.VERSION = void 0;
56
56
  var version_1 = require("../version");
57
57
  Object.defineProperty(exports, "VERSION", { enumerable: true, get: function () { return version_1.VERSION; } });
58
58
  __exportStar(require("../utils"), exports);
@@ -65,4 +65,5 @@ __exportStar(require("../cost"), exports);
65
65
  var slyvault_1 = require("@wuwei-labs/slyvault");
66
66
  Object.defineProperty(exports, "claim", { enumerable: true, get: function () { return slyvault_1.claim; } });
67
67
  exports.codama = __importStar(require("../generated/codama"));
68
+ exports.audit = __importStar(require("../audit"));
68
69
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sCAAqC;AAA5B,kGAAA,OAAO,OAAA;AAChB,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,0CAAwB;AAExB,sBAAsB;AACtB,iDAG8B;AAF5B,iGAAA,KAAK,OAAA;AAIP,8DAA8C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/kit/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,sCAAqC;AAA5B,kGAAA,OAAO,OAAA;AAChB,2CAAyB;AACzB,kDAAgC;AAChC,8CAA4B;AAC5B,4CAA0B;AAC1B,yCAAuB;AACvB,0CAAwB;AAExB,sBAAsB;AACtB,iDAG8B;AAF5B,iGAAA,KAAK,OAAA;AAIP,8DAA8C;AAC9C,kDAAkC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wuwei-labs/srsly",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "TypeScript SDK for SRSLY",
5
5
  "sideEffects": false,
6
6
  "publishConfig": {
@@ -3,5 +3,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.VERSION = void 0;
4
4
  // Auto-generated from package.json - DO NOT EDIT
5
5
  // Run "pnpm run generate:version" to update
6
- exports.VERSION = '4.3.0';
6
+ exports.VERSION = '4.4.0';
7
7
  //# sourceMappingURL=version.js.map
@@ -0,0 +1,397 @@
1
+ /**
2
+ * Contract audit — reconstructs the full payment lifecycle from on-chain events.
3
+ */
4
+ import { fetchContract } from '../accounts/contract';
5
+ import { getRpcUrl } from '../utils/config';
6
+ import { createRpc } from '../utils/rpc';
7
+ import { parseAnchorEvents } from './events';
8
+ const SRSLY_PROGRAM_ID = 'SRSLYxcFnjd5jG2DpJw4as6UEyjwJQK1U4J1TD1hvZH';
9
+ /**
10
+ * Fetch and reconstruct a contract's audit trail from transaction history.
11
+ */
12
+ export async function fetchContractAudit(rpcUrl, contract, options) {
13
+ const resolvedRpcUrl = rpcUrl || getRpcUrl();
14
+ const rpc = createRpc(resolvedRpcUrl);
15
+ // 1. Fetch on-chain contract state
16
+ const contractAccount = await fetchContract(contract, resolvedRpcUrl);
17
+ const onChain = {
18
+ totalEarned: contractAccount.data.totalEarned,
19
+ ownerClaimable: contractAccount.data.ownerClaimable,
20
+ feeClaimable: contractAccount.data.feeClaimable,
21
+ };
22
+ // 2. Fetch transaction signatures
23
+ const lastN = options?.all ? undefined : (options?.lastN ?? 10);
24
+ const sinceTimestamp = options?.since ? Math.floor(Date.now() / 1000) - options.since : undefined;
25
+ const log = options?.onProgress ?? (() => { });
26
+ const { events: allEvents, exhausted } = await fetchEventHistory(rpc, contract, resolvedRpcUrl, lastN, sinceTimestamp, log);
27
+ // 3. Group events into rental lifecycles
28
+ // Filter out in-progress rentals — incomplete data makes reconciliation meaningless
29
+ const allRentals = buildRentalAudits(allEvents)
30
+ .filter(r => r.status !== 'in-progress');
31
+ // Only consider full history when we scanned every signature (no cutoffs)
32
+ const isFullHistory = exhausted;
33
+ const rentals = lastN && allRentals.length > lastN
34
+ ? allRentals.slice(0, lastN)
35
+ : allRentals;
36
+ // 4. Compute summary
37
+ let ownerEarned = 0n;
38
+ let feeCollected = 0n;
39
+ let discount = 0n;
40
+ let refunds = 0n;
41
+ let ownerTransfers = 0n;
42
+ let allMatch = true;
43
+ for (const r of rentals) {
44
+ ownerEarned += r.totalOwnerEarned;
45
+ feeCollected += r.totalFeeCollected;
46
+ discount += r.totalDiscount;
47
+ refunds += r.totalRefund;
48
+ for (const t of r.ownerTransfers) {
49
+ ownerTransfers += t.amount;
50
+ }
51
+ if (r.reconciliation.status === 'mismatch')
52
+ allMatch = false;
53
+ }
54
+ return {
55
+ contract,
56
+ onChain,
57
+ isFullHistory,
58
+ rentals,
59
+ summary: {
60
+ ownerEarned,
61
+ feeCollected,
62
+ discount,
63
+ refunds,
64
+ ownerTransfers,
65
+ matchesTotalEarned: isFullHistory ? ownerEarned === onChain.totalEarned : null,
66
+ allRentalsMatch: allMatch,
67
+ },
68
+ };
69
+ }
70
+ /**
71
+ * Fetch all audit-relevant events from a contract's transaction history.
72
+ */
73
+ async function fetchEventHistory(rpc, contract, rpcUrl, maxRentals, sinceTimestamp, log) {
74
+ const allEvents = [];
75
+ let before;
76
+ let rentalCount = 0;
77
+ let txCount = 0;
78
+ let page = 0;
79
+ while (true) {
80
+ const params = { limit: 100 };
81
+ if (before)
82
+ params.before = before;
83
+ page++;
84
+ log(`Fetching signatures (page ${page})...`);
85
+ const signatures = await rpc.getSignaturesForAddress(contract, params).send();
86
+ if (!signatures || signatures.length === 0) {
87
+ log(`No more signatures found`);
88
+ break;
89
+ }
90
+ log(`Got ${signatures.length} signatures, parsing transactions...`);
91
+ for (const sigInfo of signatures) {
92
+ // Time-based cutoff
93
+ if (sinceTimestamp && sigInfo.blockTime && Number(sigInfo.blockTime) < sinceTimestamp) {
94
+ log(`Reached time cutoff after ${txCount} txs, ${allEvents.length} events, ${rentalCount} rentals`);
95
+ return { events: allEvents, exhausted: false };
96
+ }
97
+ // Skip failed txs
98
+ if (sigInfo.err)
99
+ continue;
100
+ txCount++;
101
+ const tx = await rpc.getTransaction(sigInfo.signature, {
102
+ encoding: 'json',
103
+ maxSupportedTransactionVersion: 0,
104
+ }).send();
105
+ if (!tx?.meta?.logMessages)
106
+ continue;
107
+ const events = parseAnchorEvents(tx.meta.logMessages, SRSLY_PROGRAM_ID, BigInt(tx.slot), sigInfo.signature);
108
+ for (const evt of events) {
109
+ allEvents.push(evt);
110
+ if (evt.type === 'RentalAccepted') {
111
+ rentalCount++;
112
+ log(`Found rental #${rentalCount} (${txCount} txs scanned, ${allEvents.length} events)`);
113
+ }
114
+ }
115
+ // Stop fetching once we have enough accepts to build N+1 lifecycles.
116
+ // The extra +1 ensures we don't cut off the Nth lifecycle's older events.
117
+ // The actual lastN trimming happens after grouping.
118
+ if (maxRentals && rentalCount > maxRentals) {
119
+ log(`Found ${rentalCount} rentals (need ${maxRentals}), ${txCount} txs scanned`);
120
+ return { events: allEvents, exhausted: false };
121
+ }
122
+ }
123
+ // Pagination
124
+ before = signatures[signatures.length - 1].signature;
125
+ }
126
+ log(`Done: ${txCount} txs scanned, ${allEvents.length} events, ${rentalCount} rentals`);
127
+ return { events: allEvents, exhausted: true };
128
+ }
129
+ /**
130
+ * Group events into per-rental audit records.
131
+ *
132
+ * Challenges:
133
+ * - Rental state PDAs are reused (reset on close) → same PDA, multiple lifecycles
134
+ * - Queued rentals get promoted to active PDA → RentalAccepted references queued PDA,
135
+ * but all subsequent events (settle/cancel/close) reference active PDA
136
+ *
137
+ * Strategy: match events by borrower (stable across PDA promotion).
138
+ * RentalSettled has no borrower — match by PDA, then fall back to the only
139
+ * open lifecycle without a close.
140
+ *
141
+ * OwnerPaid and FeesPaid are contract-level — associated with the most
142
+ * recently closed rental via temporal proximity.
143
+ */
144
+ function buildRentalAudits(events) {
145
+ // Process chronologically (events come newest-first from RPC)
146
+ const chronological = [...events].reverse();
147
+ // Track open lifecycles by borrower address (unique per contract at any time)
148
+ const openByBorrower = new Map();
149
+ // Secondary: track which PDA a lifecycle is currently on (for RentalSettled)
150
+ const pdaToBorrower = new Map();
151
+ const finalized = [];
152
+ const contractEvents = [];
153
+ for (const evt of chronological) {
154
+ switch (evt.type) {
155
+ case 'RentalAccepted': {
156
+ const borrower = evt.borrower;
157
+ const pda = evt.rentalState;
158
+ // If this borrower already has an open lifecycle, finalize it
159
+ const existing = openByBorrower.get(borrower);
160
+ if (existing?.accepted) {
161
+ finalized.push(existing);
162
+ }
163
+ // Start fresh lifecycle
164
+ const entry = {
165
+ accepted: evt,
166
+ settlements: [],
167
+ ownerTransfers: [],
168
+ };
169
+ openByBorrower.set(borrower, entry);
170
+ pdaToBorrower.set(pda, borrower);
171
+ break;
172
+ }
173
+ case 'RentalSettled': {
174
+ // RentalSettled has no borrower — resolve via PDA
175
+ const pda = evt.rentalState;
176
+ let borrower = pdaToBorrower.get(pda);
177
+ if (!borrower) {
178
+ // PDA changed (queued→active promotion). Find the only open
179
+ // lifecycle that hasn't been closed yet.
180
+ for (const [b, entry] of openByBorrower) {
181
+ if (entry.accepted && !entry.closed && !entry.cancelled) {
182
+ borrower = b;
183
+ // Update PDA mapping for future settles
184
+ pdaToBorrower.set(pda, b);
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ if (borrower) {
190
+ const entry = openByBorrower.get(borrower);
191
+ if (entry)
192
+ (entry.settlements ??= []).push(evt);
193
+ }
194
+ break;
195
+ }
196
+ case 'RentalCancelled': {
197
+ const borrower = evt.borrower;
198
+ const entry = openByBorrower.get(borrower);
199
+ if (entry) {
200
+ entry.cancelled = evt;
201
+ // Update PDA mapping (may have been promoted)
202
+ pdaToBorrower.set(evt.rentalState, borrower);
203
+ }
204
+ break;
205
+ }
206
+ case 'RentalClosed': {
207
+ const borrower = evt.borrower;
208
+ const entry = openByBorrower.get(borrower);
209
+ if (entry) {
210
+ entry.closed = evt;
211
+ pdaToBorrower.set(evt.rentalState, borrower);
212
+ }
213
+ break;
214
+ }
215
+ case 'FeesPaid':
216
+ case 'OwnerPaid': {
217
+ contractEvents.push({ evt, slot: evt.slot });
218
+ break;
219
+ }
220
+ }
221
+ }
222
+ // Finalize remaining open lifecycles
223
+ for (const entry of openByBorrower.values()) {
224
+ if (entry.accepted)
225
+ finalized.push(entry);
226
+ }
227
+ // Associate contract-level events with the nearest closed rental
228
+ const allWithCloseSlot = finalized
229
+ .filter(e => e.closed || e.cancelled)
230
+ .map(e => ({ entry: e, closeSlot: e.closed?.slot ?? e.cancelled.slot }))
231
+ .sort((a, b) => (a.closeSlot < b.closeSlot ? -1 : a.closeSlot > b.closeSlot ? 1 : 0));
232
+ for (const { evt, slot } of contractEvents) {
233
+ let best;
234
+ for (const { entry, closeSlot } of allWithCloseSlot) {
235
+ if (closeSlot <= slot)
236
+ best = entry;
237
+ else
238
+ break;
239
+ }
240
+ if (best) {
241
+ if (evt.type === 'FeesPaid') {
242
+ best.feesPaid = evt;
243
+ }
244
+ else {
245
+ (best.ownerTransfers ??= []).push(evt);
246
+ }
247
+ }
248
+ }
249
+ // Build final audits
250
+ const rentals = finalized
251
+ .filter(e => e.accepted)
252
+ .map(e => finalizeRental(e, []));
253
+ // Most recent first
254
+ rentals.sort((a, b) => {
255
+ const aTime = a.accepted.startTime;
256
+ const bTime = b.accepted.startTime;
257
+ return aTime > bTime ? -1 : aTime < bTime ? 1 : 0;
258
+ });
259
+ return rentals;
260
+ }
261
+ function finalizeRental(partial, _unassigned) {
262
+ const accepted = partial.accepted;
263
+ const settlements = partial.settlements ?? [];
264
+ const cancelled = partial.cancelled;
265
+ const closed = partial.closed;
266
+ const feesPaid = partial.feesPaid;
267
+ const ownerTransfers = partial.ownerTransfers ?? [];
268
+ // Derive status
269
+ let status = 'in-progress';
270
+ if (cancelled)
271
+ status = 'cancelled';
272
+ else if (closed)
273
+ status = 'completed';
274
+ // Compute dates (Solana timestamps are unix seconds)
275
+ const startTime = new Date(Number(accepted.startTime) * 1000);
276
+ const effectiveEndTime = cancelled ? cancelled.newEndTime : accepted.endTime;
277
+ const endTime = new Date(Number(effectiveEndTime) * 1000);
278
+ const durationSeconds = Number(effectiveEndTime - accepted.startTime);
279
+ // Sum actuals
280
+ let totalOwnerEarned = 0n;
281
+ let totalFeeCollected = 0n;
282
+ let totalRefund = 0n;
283
+ let totalDiscount = 0n;
284
+ for (const s of settlements) {
285
+ totalOwnerEarned += s.ownerEarned;
286
+ }
287
+ if (cancelled) {
288
+ totalOwnerEarned += cancelled.ownerEarned;
289
+ totalFeeCollected += cancelled.feeCollected;
290
+ totalRefund += cancelled.refund;
291
+ }
292
+ if (closed) {
293
+ totalOwnerEarned += closed.ownerEarned;
294
+ totalFeeCollected += closed.feeCollected;
295
+ }
296
+ if (feesPaid) {
297
+ totalDiscount += feesPaid.discount;
298
+ }
299
+ const reconciliation = computeReconciliation(accepted, totalOwnerEarned, totalFeeCollected, totalRefund, feesPaid);
300
+ return {
301
+ status,
302
+ borrower: accepted.borrower,
303
+ startTime,
304
+ endTime,
305
+ durationSeconds,
306
+ rate: accepted.rate,
307
+ feeBps: accepted.feeBps,
308
+ escrow: accepted.escrow,
309
+ serviceFee: accepted.serviceFee,
310
+ accepted,
311
+ settlements,
312
+ cancelled,
313
+ closed,
314
+ feesPaid,
315
+ ownerTransfers,
316
+ totalOwnerEarned,
317
+ totalFeeCollected,
318
+ totalDiscount,
319
+ totalRefund,
320
+ reconciliation,
321
+ };
322
+ }
323
+ /**
324
+ * Verify rental payment math e2e for all parties:
325
+ *
326
+ * Borrower:
327
+ * - Paid correct escrow (rate * duration / 86400)
328
+ * - Service fee correctly computed (escrow * fee_bps / 10000)
329
+ * - Refund + earned + fee = escrow (got back what they should)
330
+ * - Discount applied correctly if referrer present
331
+ *
332
+ * Owner:
333
+ * - Earned = escrow - fee - refund (conservation)
334
+ * - Fee ratio matches contracted fee_bps
335
+ *
336
+ * Protocol (slyvault):
337
+ * - Fee collected matches fee_bps proportion
338
+ * - Discount returned correctly to borrower
339
+ */
340
+ function computeReconciliation(accepted, actualOwnerEarned, actualFeeCollected, actualRefund, feesPaid) {
341
+ const escrow = accepted.escrow;
342
+ const duration = accepted.endTime - accepted.startTime;
343
+ // 1. Conservation: all escrow accounted for
344
+ const escrowAccounted = actualOwnerEarned + actualFeeCollected + actualRefund;
345
+ const escrowDelta = escrowAccounted - escrow;
346
+ // 2. Borrower paid correct amount: escrow should = rate * duration / 86400
347
+ const expectedEscrow = duration > 0n ? (accepted.rate * duration) / 86400n : 0n;
348
+ const escrowCorrect = abs(escrow - expectedEscrow) <= 1n;
349
+ // 3. Service fee correctly calculated: service_fee = escrow * fee_bps / 10000
350
+ const expectedServiceFee = (escrow * BigInt(accepted.feeBps)) / 10000n;
351
+ const serviceFeeCorrect = abs(accepted.serviceFee - expectedServiceFee) <= 1n;
352
+ // 4. Fee ratio on payout: fee / (earned + fee) should ≈ fee_bps / 10000
353
+ const grossPayment = actualOwnerEarned + actualFeeCollected;
354
+ const feeRatioBps = grossPayment > 0n
355
+ ? Number((actualFeeCollected * 10000n) / grossPayment)
356
+ : 0;
357
+ const expectedFeeBps = accepted.feeBps;
358
+ const feeRatioMatch = Math.abs(feeRatioBps - expectedFeeBps) <= 1;
359
+ // 5. Discount verification (if FeesPaid event with discount_bps > 0)
360
+ let discountVerified = null;
361
+ if (feesPaid && feesPaid.discountBps > 0) {
362
+ // discount should ≈ fee_collected * discount_bps / 10000
363
+ // (slyvault returns discount from its share)
364
+ const expectedDiscount = (feesPaid.feeCollected * BigInt(feesPaid.discountBps)) / 10000n;
365
+ discountVerified = abs(feesPaid.discount - expectedDiscount) <= 1n;
366
+ }
367
+ else if (feesPaid && feesPaid.discountBps === 0) {
368
+ // No discount expected — verify none given
369
+ discountVerified = feesPaid.discount === 0n;
370
+ }
371
+ const isMatch = abs(escrowDelta) <= 1n
372
+ && escrowCorrect
373
+ && serviceFeeCorrect
374
+ && feeRatioMatch
375
+ && (discountVerified === null || discountVerified);
376
+ return {
377
+ escrow,
378
+ escrowAccounted,
379
+ escrowDelta,
380
+ expectedEscrow,
381
+ escrowCorrect,
382
+ expectedServiceFee,
383
+ serviceFeeCorrect,
384
+ feeRatioBps,
385
+ expectedFeeBps,
386
+ feeRatioMatch,
387
+ discountVerified,
388
+ actualOwnerEarned,
389
+ actualFeeCollected,
390
+ actualRefund,
391
+ status: isMatch ? 'match' : 'mismatch',
392
+ };
393
+ }
394
+ function abs(n) {
395
+ return n < 0n ? -n : n;
396
+ }
397
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../src/audit/audit.ts"],"names":[],"mappings":"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"}