@gvnrdao/dh-lit-actions 0.0.112 → 0.0.193

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 (93) hide show
  1. package/dist/admin-liquidation-validator.action.js +1 -0
  2. package/dist/admin-liquidation-validator.hash +1 -0
  3. package/dist/admin-liquidation-validator.meta.json +9 -0
  4. package/dist/always-signer.action.js +1 -0
  5. package/dist/always-signer.hash +1 -0
  6. package/dist/always-signer.meta.json +9 -0
  7. package/dist/authorization-dummy-b.action.js +1 -0
  8. package/dist/authorization-dummy-b.hash +1 -0
  9. package/dist/authorization-dummy-b.meta.json +9 -0
  10. package/dist/authorization-dummy.action.js +1 -0
  11. package/dist/authorization-dummy.hash +1 -0
  12. package/dist/authorization-dummy.meta.json +9 -0
  13. package/dist/btc-transaction-signer.action.js +1 -0
  14. package/dist/btc-transaction-signer.hash +1 -0
  15. package/dist/btc-transaction-signer.meta.json +9 -0
  16. package/dist/btc-withdrawal.action.js +1 -0
  17. package/dist/btc-withdrawal.hash +1 -0
  18. package/dist/btc-withdrawal.meta.json +9 -0
  19. package/dist/extend-position-validator.action.js +1 -0
  20. package/dist/extend-position-validator.hash +1 -0
  21. package/dist/extend-position-validator.meta.json +9 -0
  22. package/dist/liquidation-validator.action.js +1 -0
  23. package/dist/liquidation-validator.hash +1 -0
  24. package/dist/liquidation-validator.meta.json +9 -0
  25. package/dist/loan-vault-btc-balance.action.js +1 -0
  26. package/dist/loan-vault-btc-balance.hash +1 -0
  27. package/dist/loan-vault-btc-balance.meta.json +9 -0
  28. package/dist/pkp-validator-datil.action.js +1 -0
  29. package/dist/pkp-validator-datil.hash +1 -0
  30. package/dist/pkp-validator-datil.meta.json +9 -0
  31. package/dist/price-oracle.action.js +1 -0
  32. package/dist/price-oracle.hash +1 -0
  33. package/dist/price-oracle.meta.json +9 -0
  34. package/dist/process-payment-sign-only.action.js +1 -0
  35. package/dist/process-payment-sign-only.hash +1 -0
  36. package/dist/process-payment-sign-only.meta.json +9 -0
  37. package/dist/process-payment-validator.action.js +1 -0
  38. package/dist/process-payment-validator.hash +1 -0
  39. package/dist/process-payment-validator.meta.json +9 -0
  40. package/dist/ucd-mint-validator.action.js +1 -0
  41. package/dist/ucd-mint-validator.hash +1 -0
  42. package/dist/ucd-mint-validator.meta.json +9 -0
  43. package/package.json +7 -2
  44. package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.d.ts.map +1 -1
  45. package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.js +127 -108
  46. package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.js.map +1 -1
  47. package/pkg-dist/pkg-src/executors/chunks/price-oracle-executor.d.ts +47 -0
  48. package/pkg-dist/pkg-src/executors/chunks/price-oracle-executor.d.ts.map +1 -0
  49. package/pkg-dist/pkg-src/executors/chunks/price-oracle-executor.js +77 -0
  50. package/pkg-dist/pkg-src/executors/chunks/price-oracle-executor.js.map +1 -0
  51. package/pkg-dist/pkg-src/executors/index.d.ts +39 -0
  52. package/pkg-dist/pkg-src/executors/index.d.ts.map +1 -1
  53. package/pkg-dist/pkg-src/executors/index.js +41 -1
  54. package/pkg-dist/pkg-src/executors/index.js.map +1 -1
  55. package/pkg-dist/pkg-src/utils/chunks/cid-utils.d.ts.map +1 -1
  56. package/pkg-dist/pkg-src/utils/chunks/cid-utils.js +0 -5
  57. package/pkg-dist/pkg-src/utils/chunks/cid-utils.js.map +1 -1
  58. package/pkg-dist/src/constants/chunks/quantum-time.d.ts +5 -5
  59. package/pkg-dist/src/constants/chunks/quantum-time.js +5 -5
  60. package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts +0 -1
  61. package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts.map +1 -1
  62. package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts +7 -6
  63. package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts.map +1 -1
  64. package/pkg-dist/src/modules/bitcoin-data-provider.module.js +93 -97
  65. package/pkg-dist/src/modules/bitcoin-data-provider.module.js.map +1 -1
  66. package/pkg-dist/src/modules/business-rules-math.module.d.ts +2 -0
  67. package/pkg-dist/src/modules/business-rules-math.module.d.ts.map +1 -1
  68. package/pkg-dist/src/modules/business-rules-math.module.js +9 -2
  69. package/pkg-dist/src/modules/business-rules-math.module.js.map +1 -1
  70. package/pkg-dist/src/modules/lit-action-logger.module.d.ts +55 -0
  71. package/pkg-dist/src/modules/lit-action-logger.module.d.ts.map +1 -0
  72. package/pkg-dist/src/modules/lit-action-logger.module.js +184 -0
  73. package/pkg-dist/src/modules/lit-action-logger.module.js.map +1 -0
  74. package/pkg-dist/src/modules/price-oracle.module.d.ts +41 -3
  75. package/pkg-dist/src/modules/price-oracle.module.d.ts.map +1 -1
  76. package/pkg-dist/src/modules/price-oracle.module.js +265 -122
  77. package/pkg-dist/src/modules/price-oracle.module.js.map +1 -1
  78. package/pkg-dist/src/modules/protocol-parameters.module.d.ts +10 -0
  79. package/pkg-dist/src/modules/protocol-parameters.module.d.ts.map +1 -1
  80. package/pkg-dist/src/modules/protocol-parameters.module.js +49 -2
  81. package/pkg-dist/src/modules/protocol-parameters.module.js.map +1 -1
  82. package/pkg-dist/src/modules/quantum-time.module.d.ts +1 -1
  83. package/pkg-dist/src/modules/quantum-time.module.d.ts.map +1 -1
  84. package/pkg-dist/src/modules/quantum-time.module.js +18 -9
  85. package/pkg-dist/src/modules/quantum-time.module.js.map +1 -1
  86. package/pkg-dist/src/modules/vault-balance.module.d.ts +37 -3
  87. package/pkg-dist/src/modules/vault-balance.module.d.ts.map +1 -1
  88. package/pkg-dist/src/modules/vault-balance.module.js +116 -63
  89. package/pkg-dist/src/modules/vault-balance.module.js.map +1 -1
  90. package/pkg-dist/src/modules/vault-snapshot.d.ts +5 -3
  91. package/pkg-dist/src/modules/vault-snapshot.d.ts.map +1 -1
  92. package/pkg-dist/src/modules/vault-snapshot.js +9 -6
  93. package/pkg-dist/src/modules/vault-snapshot.js.map +1 -1
@@ -3,44 +3,81 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PriceOracleModule = void 0;
4
4
  const constants_1 = require("../constants");
5
5
  class PriceOracleModule {
6
- constructor(priceProvidersOrConfig, legacySources) {
6
+ constructor(priceProvidersOrConfig, legacySources, mode) {
7
+ this.mode = mode;
7
8
  // Backward compatibility: if second parameter is provided, use legacy API
8
9
  if (legacySources && Array.isArray(legacySources)) {
9
10
  this.sources = legacySources;
10
11
  }
11
- else if (priceProvidersOrConfig && Array.isArray(priceProvidersOrConfig)) {
12
+ else if (priceProvidersOrConfig &&
13
+ Array.isArray(priceProvidersOrConfig)) {
12
14
  // New API: priceProviders config array
13
15
  this.sources = this.buildSources(priceProvidersOrConfig);
14
16
  }
15
17
  else {
16
- // No config provided, use defaults
18
+ // No config provided, use defaults (all free providers without API keys)
17
19
  this.sources = this.buildSources();
18
20
  }
19
21
  this.sources.sort((a, b) => a.priority - b.priority);
22
+ // Validate provider count based on mode
23
+ this.validateProviderCount();
20
24
  }
21
25
  /**
22
- * Build price sources from config or use defaults
26
+ * Validate provider count based on mode
27
+ * - Production: Requires at least 3 providers for consensus
28
+ * - Development: Allows as few as 1 provider for testing
29
+ */
30
+ validateProviderCount() {
31
+ if (this.mode === "prod" && this.sources.length < 3) {
32
+ throw new Error(`Production mode requires at least 3 price providers for consensus. ` +
33
+ `Currently configured: ${this.sources.length} provider(s). ` +
34
+ `Supported providers: CoinGecko, Binance, Coinbase, CryptoCompare (with API key)`);
35
+ }
36
+ if (this.sources.length === 0) {
37
+ throw new Error("No price providers configured. At least one provider is required.");
38
+ }
39
+ }
40
+ /**
41
+ * Build price sources from config
42
+ * All providers are treated equally - no special priority for any provider
23
43
  */
24
44
  buildSources(priceProviders) {
25
- const defaultSources = this.getDefaultSources();
26
- // If no custom providers configured, return defaults
45
+ const sources = [];
27
46
  if (!priceProviders || priceProviders.length === 0) {
28
- return defaultSources;
47
+ // No config provided: Use all default free providers (no API keys)
48
+ return this.getDefaultSources();
29
49
  }
30
- const sources = [];
31
- // Check if CryptoCompare is configured
32
- const cryptoCompareConfig = priceProviders.find(p => p.name.toLowerCase() === 'cryptocompare');
33
- if (cryptoCompareConfig && cryptoCompareConfig.apiKey) {
34
- sources.push(this.createCryptoCompareSource(cryptoCompareConfig.apiKey));
50
+ // Build sources from config - all providers treated equally
51
+ let priority = 1;
52
+ for (const provider of priceProviders) {
53
+ const name = provider.name.toLowerCase();
54
+ switch (name) {
55
+ case "coingecko":
56
+ sources.push(this.createCoinGeckoSource(provider.apiKey, priority++));
57
+ break;
58
+ case "binance":
59
+ sources.push(this.createBinanceSource(provider.apiKey, provider.apiSecret, priority++));
60
+ break;
61
+ case "coinbase":
62
+ sources.push(this.createCoinbaseSource(provider.apiKey, priority++));
63
+ break;
64
+ case "cryptocompare":
65
+ if (!provider.apiKey) {
66
+ throw new Error("CryptoCompare requires an API key. Please provide apiKey in priceProviders config.");
67
+ }
68
+ sources.push(this.createCryptoCompareSource(provider.apiKey, priority++));
69
+ break;
70
+ default:
71
+ console.warn(`[Price Oracle] Unknown provider: ${provider.name} - skipping`);
72
+ }
35
73
  }
36
- // Add default sources (they will be sorted by priority)
37
- sources.push(...defaultSources);
38
74
  return sources;
39
75
  }
40
76
  /**
41
77
  * Create CryptoCompare price source
78
+ * Requires API key for access
42
79
  */
43
- createCryptoCompareSource(apiKey) {
80
+ createCryptoCompareSource(apiKey, priority) {
44
81
  const fetchJson = async (url) => {
45
82
  const controller = new AbortController();
46
83
  const timeoutMs = 5000;
@@ -71,144 +108,256 @@ class PriceOracleModule {
71
108
  name: "CryptoCompare",
72
109
  fetchPrice: async () => {
73
110
  // Each node fetches the price
74
- // Use template string instead of URL object to match working pattern
75
- const url = `https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=USDT&api_key=${apiKey}`;
76
- console.log(`[Price Oracle] CryptoCompare: Fetching from ${url.substring(0, 60)}...`);
77
- let data;
78
- try {
79
- data = await fetchJson(url);
80
- console.log(`[Price Oracle] CryptoCompare: Fetch successful, data:`, JSON.stringify(data));
81
- }
82
- catch (error) {
83
- console.error(`[Price Oracle] CryptoCompare: Fetch failed:`, error.message);
84
- throw error;
85
- }
111
+ const url = new URL("https://min-api.cryptocompare.com/data/price");
112
+ url.searchParams.set("fsym", "BTC");
113
+ url.searchParams.set("tsyms", "USDT");
114
+ url.searchParams.set("api_key", apiKey);
115
+ const data = await fetchJson(url.toString());
86
116
  // Response format: {"USDT":86800.42}
87
117
  // Treat USDT as USD (1:1 for price oracle purposes)
88
118
  const price = Number(data?.USDT);
89
119
  if (!Number.isFinite(price) || price <= 0) {
90
120
  throw new Error("Invalid CryptoCompare price payload");
91
121
  }
92
- console.log(`[Price Oracle] CryptoCompare: Using fetched price: ${price}`);
93
- return price;
122
+ // Master's wisdom: Use broadcastAndCollect to ensure consensus across all LIT nodes
123
+ // Each node broadcasts its fetched price, then all receive all prices
124
+ const allPrices = await Lit.Actions.broadcastAndCollect({
125
+ name: "cryptoComparePrice",
126
+ value: price.toString(),
127
+ });
128
+ const prices = allPrices.map((p) => parseFloat(p));
129
+ prices.sort((a, b) => a - b);
130
+ return prices[Math.floor(prices.length / 2)];
94
131
  },
95
- priority: 1,
132
+ priority,
96
133
  };
97
134
  }
98
- getDefaultSources() {
99
- const fetchJson = async (url) => {
135
+ /**
136
+ * Create shared fetch helper with timeout
137
+ * LIT runtime rejects custom User-Agent headers
138
+ */
139
+ createFetchJson() {
140
+ return async (url, headers) => {
100
141
  const controller = new AbortController();
101
- const timeoutMs = 8000;
102
- const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
142
+ const timeoutMs = 5000;
143
+ const id = setTimeout(() => controller.abort(), timeoutMs);
103
144
  try {
104
145
  const res = await fetch(url, {
146
+ headers: { Accept: "application/json", ...(headers || {}) },
105
147
  signal: controller.signal,
106
- headers: {
107
- "User-Agent": "Mozilla/5.0 (compatible; DiamondHandsValidator/1.0)",
108
- Accept: "application/json",
109
- },
110
148
  });
111
- clearTimeout(timeoutId);
112
149
  if (!res.ok) {
113
150
  throw new Error(`HTTP ${res.status} ${res.statusText}`);
114
151
  }
115
152
  return await res.json();
116
153
  }
117
- catch (error) {
118
- clearTimeout(timeoutId);
119
- if (error.name === "AbortError") {
120
- throw new Error(`Request timeout after ${timeoutMs}ms`);
121
- }
122
- throw error;
154
+ finally {
155
+ clearTimeout(id);
123
156
  }
124
157
  };
158
+ }
159
+ /**
160
+ * Get default free providers (no API keys required)
161
+ */
162
+ getDefaultSources() {
125
163
  return [
126
- {
127
- name: "CoinGecko",
128
- fetchPrice: async () => {
129
- // Each node fetches the price
130
- // Use template string instead of URL object to match working pattern
131
- const url = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd";
132
- const data = await fetchJson(url);
133
- const price = Number(data?.bitcoin?.usd);
134
- if (!Number.isFinite(price) || price <= 0) {
135
- throw new Error("Invalid CoinGecko price payload");
136
- }
137
- console.log(`[Price Oracle] CoinGecko: Using fetched price: ${price}`);
138
- return price;
139
- },
140
- priority: 1,
164
+ this.createCoinGeckoSource(undefined, 1),
165
+ this.createBinanceSource(undefined, undefined, 2),
166
+ this.createCoinbaseSource(undefined, 3),
167
+ ];
168
+ }
169
+ /**
170
+ * Create CoinGecko price source
171
+ */
172
+ createCoinGeckoSource(apiKey, priority = 1) {
173
+ const fetchJson = this.createFetchJson();
174
+ return {
175
+ name: "CoinGecko",
176
+ fetchPrice: async () => {
177
+ const url = new URL("https://api.coingecko.com/api/v3/simple/price");
178
+ url.searchParams.set("ids", "bitcoin");
179
+ url.searchParams.set("vs_currencies", "usd");
180
+ const data = await fetchJson(url.toString());
181
+ const price = Number(data?.bitcoin?.usd);
182
+ if (!Number.isFinite(price) || price <= 0) {
183
+ throw new Error("Invalid CoinGecko price payload");
184
+ }
185
+ const allPrices = await Lit.Actions.broadcastAndCollect({
186
+ name: "coinGeckoPrice",
187
+ value: price.toString(),
188
+ });
189
+ const prices = allPrices.map((p) => parseFloat(p));
190
+ prices.sort((a, b) => a - b);
191
+ return prices[Math.floor(prices.length / 2)];
141
192
  },
142
- {
143
- name: "Binance",
144
- fetchPrice: async () => {
145
- // Each node fetches the price
146
- // Use template string instead of URL object to match working pattern
147
- const url = "https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT";
148
- const data = await fetchJson(url);
149
- const price = Number(data?.price);
150
- if (!Number.isFinite(price) || price <= 0) {
151
- throw new Error("Invalid Binance price payload");
152
- }
153
- console.log(`[Price Oracle] Binance: Using fetched price: ${price}`);
154
- return price;
155
- },
156
- priority: 2,
193
+ priority,
194
+ };
195
+ }
196
+ /**
197
+ * Create Binance price source
198
+ */
199
+ createBinanceSource(apiKey, apiSecret, priority = 2) {
200
+ const fetchJson = this.createFetchJson();
201
+ return {
202
+ name: "Binance",
203
+ fetchPrice: async () => {
204
+ // Each node fetches the price
205
+ const url = new URL("https://api.binance.com/api/v3/ticker/price");
206
+ url.searchParams.set("symbol", "BTCUSDT");
207
+ // Add API key header if provided (increases rate limits)
208
+ const headers = apiKey ? { "X-MBX-APIKEY": apiKey } : undefined;
209
+ const data = await fetchJson(url.toString(), headers);
210
+ const price = Number(data?.price);
211
+ if (!Number.isFinite(price) || price <= 0) {
212
+ throw new Error("Invalid Binance price payload");
213
+ }
214
+ // Master's wisdom: Use broadcastAndCollect to ensure consensus across all LIT nodes
215
+ const allPrices = await Lit.Actions.broadcastAndCollect({
216
+ name: "binancePrice",
217
+ value: price.toString(),
218
+ });
219
+ const prices = allPrices.map((p) => parseFloat(p));
220
+ prices.sort((a, b) => a - b);
221
+ return prices[Math.floor(prices.length / 2)];
157
222
  },
158
- {
159
- name: "Coinbase",
160
- fetchPrice: async () => {
161
- // Each node fetches the price
162
- const data = await fetchJson("https://api.coinbase.com/v2/prices/BTC-USD/spot");
163
- const price = Number(data?.data?.amount);
164
- if (!Number.isFinite(price) || price <= 0) {
165
- throw new Error("Invalid Coinbase price payload");
166
- }
167
- console.log(`[Price Oracle] Coinbase: Using fetched price: ${price}`);
168
- return price;
169
- },
170
- priority: 3,
223
+ priority,
224
+ };
225
+ }
226
+ /**
227
+ * Create Coinbase price source
228
+ */
229
+ createCoinbaseSource(apiKey, priority = 3) {
230
+ const fetchJson = this.createFetchJson();
231
+ return {
232
+ name: "Coinbase",
233
+ fetchPrice: async () => {
234
+ // Add API key header if provided (increases rate limits)
235
+ const headers = apiKey ? { "CB-ACCESS-KEY": apiKey } : undefined;
236
+ const data = await fetchJson("https://api.coinbase.com/v2/prices/BTC-USD/spot", headers);
237
+ const price = Number(data?.data?.amount);
238
+ if (!Number.isFinite(price) || price <= 0) {
239
+ throw new Error("Invalid Coinbase price payload");
240
+ }
241
+ const allPrices = await Lit.Actions.broadcastAndCollect({
242
+ name: "coinbasePrice",
243
+ value: price.toString(),
244
+ });
245
+ const prices = allPrices.map((p) => parseFloat(p));
246
+ prices.sort((a, b) => a - b);
247
+ return prices[Math.floor(prices.length / 2)];
171
248
  },
172
- ];
249
+ priority,
250
+ };
173
251
  }
174
252
  /**
175
253
  * Get BTC price in USD with 8 decimals
176
- * Fetches from real price sources in priority order
254
+ *
255
+ * CRITICAL OPTIMIZATION: Queries all sources in parallel with Promise.race()
256
+ * This prevents timeout when multiple sources fail sequentially.
257
+ *
258
+ * Master's Wisdom: "The fastest path to truth is asking all at once"
259
+ * - All sources queried simultaneously
260
+ * - First successful response wins
261
+ * - No waiting for slow/failed providers
262
+ * - Total time = fastest provider, not sum of all attempts
177
263
  */
178
264
  async getBTCPrice() {
179
- const priceOracleStartTime = Date.now();
180
- console.log(`[Price Oracle] Fetching BTC price from external sources...`);
181
- // Try sources in priority order
182
- for (const source of this.sources) {
265
+ const startTime = Date.now();
266
+ console.log(`[Price Oracle] Fetching BTC price from external sources (parallel)...`);
267
+ console.log(`[Price Oracle] Start time: ${startTime}`);
268
+ // CRITICAL FIX: Global timeout wrapper (15s max for entire operation)
269
+ // Prevents hanging if individual source timeouts fail
270
+ const GLOBAL_TIMEOUT_MS = 15000;
271
+ const timeoutPromise = new Promise((_, reject) => {
272
+ setTimeout(() => {
273
+ const elapsed = Date.now() - startTime;
274
+ console.error(`[Price Oracle] ❌ GLOBAL TIMEOUT after ${elapsed}ms`);
275
+ reject(new Error(`Price oracle global timeout after ${GLOBAL_TIMEOUT_MS}ms`));
276
+ }, GLOBAL_TIMEOUT_MS);
277
+ });
278
+ // Query all sources in parallel - first success wins
279
+ const pricePromises = this.sources.map(async (source) => {
280
+ const sourceStartTime = Date.now();
183
281
  try {
184
- const sourceStartTime = Date.now();
185
- console.log(`[Price Oracle] Trying ${source.name}...`);
282
+ console.log(`[Price Oracle] [${sourceStartTime}] Querying ${source.name}...`);
186
283
  const priceUSD = await source.fetchPrice();
187
- const sourceDuration = Date.now() - sourceStartTime;
188
- console.log(`[Price Oracle] [Timing] ${source.name} fetch: ${sourceDuration}ms`);
189
- console.log(`[Price Oracle] ${source.name}: $${priceUSD.toLocaleString()}`);
284
+ const elapsed = Date.now() - sourceStartTime;
285
+ console.log(`[Price Oracle] [+${elapsed}ms] ${source.name}: $${priceUSD.toLocaleString()}`);
286
+ return { source: source.name, priceUSD };
287
+ }
288
+ catch (error) {
289
+ const elapsed = Date.now() - sourceStartTime;
290
+ console.warn(`[Price Oracle] ⚠️ [+${elapsed}ms] ${source.name} failed: ${error.message}`);
291
+ throw error; // Re-throw for Promise.race rejection
292
+ }
293
+ });
294
+ // Wait for first successful result OR global timeout
295
+ try {
296
+ console.log(`[Price Oracle] Waiting for first success (race pattern)...`);
297
+ const firstSuccess = await Promise.race([
298
+ Promise.race(pricePromises.map((p) => p.catch((err) => {
299
+ // Convert rejection to resolved value with error flag
300
+ // This prevents Promise.race from rejecting prematurely
301
+ return { error: err };
302
+ }))),
303
+ timeoutPromise,
304
+ ]);
305
+ // If first result is an error, wait for any success (with timeout)
306
+ if ("error" in firstSuccess) {
307
+ console.log(`[Price Oracle] First result was error, waiting for any success...`);
308
+ const fallbackStartTime = Date.now();
309
+ // CRITICAL FIX: Add timeout to allSettled fallback (10s max)
310
+ const fallbackTimeout = new Promise((_, reject) => {
311
+ setTimeout(() => {
312
+ const elapsed = Date.now() - fallbackStartTime;
313
+ console.error(`[Price Oracle] ❌ FALLBACK TIMEOUT after ${elapsed}ms`);
314
+ reject(new Error(`Price oracle fallback timeout after 10000ms`));
315
+ }, 10000);
316
+ });
317
+ const results = await Promise.race([
318
+ Promise.allSettled(pricePromises),
319
+ fallbackTimeout,
320
+ ]);
321
+ const fallbackElapsed = Date.now() - fallbackStartTime;
322
+ console.log(`[Price Oracle] Fallback completed in ${fallbackElapsed}ms`);
323
+ const success = results.find((r) => r.status === "fulfilled");
324
+ if (!success) {
325
+ const totalElapsed = Date.now() - startTime;
326
+ console.error(`[Price Oracle] All sources failed after ${totalElapsed}ms`);
327
+ throw new Error("All price sources failed");
328
+ }
329
+ const { source, priceUSD } = success.value;
330
+ const totalElapsed = Date.now() - startTime;
331
+ console.log(`[Price Oracle] Using ${source} (first successful after failures) - total time: ${totalElapsed}ms`);
190
332
  // Convert to 8 decimals as bigint - DETERMINISTIC METHOD
191
- // CRITICAL: Avoid floating-point multiplication which is non-deterministic
192
- // across different JavaScript engines/architectures
193
- //
194
- // Instead of: BigInt(Math.floor(priceUSD * 100_000_000))
195
- // Which could give different results on different nodes due to FP precision
196
- //
197
- // Solution: Convert to integer cents first, then scale using BigInt-only math
198
- // Example: $105,447.25 → 10544725 cents → 10544725000000n (8 decimals)
199
- const priceCents = Math.round(priceUSD * 100); // Convert to cents (integer)
200
- const priceWith8Decimals = BigInt(priceCents) * 1000000n; // Scale to 8 decimals using BigInt
333
+ const priceCents = Math.round(priceUSD * 100);
334
+ const priceWith8Decimals = BigInt(priceCents) * 1000000n;
201
335
  console.log(`[Price Oracle] Price with 8 decimals: ${priceWith8Decimals}`);
202
- const totalDuration = Date.now() - priceOracleStartTime;
203
- console.log(`[Price Oracle] [Timing] Total price oracle execution: ${totalDuration}ms`);
204
336
  return priceWith8Decimals;
205
337
  }
206
- catch (error) {
207
- console.warn(`[Price Oracle] ⚠️ ${source.name} failed: ${error.message}`);
208
- continue;
209
- }
338
+ // First result succeeded
339
+ const { source, priceUSD } = firstSuccess;
340
+ const totalElapsed = Date.now() - startTime;
341
+ console.log(`[Price Oracle] Using ${source} (fastest response) - total time: ${totalElapsed}ms`);
342
+ // Convert to 8 decimals as bigint - DETERMINISTIC METHOD
343
+ // CRITICAL: Avoid floating-point multiplication which is non-deterministic
344
+ // across different JavaScript engines/architectures
345
+ //
346
+ // Instead of: BigInt(Math.floor(priceUSD * 100_000_000))
347
+ // Which could give different results on different nodes due to FP precision
348
+ //
349
+ // Solution: Convert to integer cents first, then scale using BigInt-only math
350
+ // Example: $105,447.25 → 10544725 cents → 10544725000000n (8 decimals)
351
+ const priceCents = Math.round(priceUSD * 100); // Convert to cents (integer)
352
+ const priceWith8Decimals = BigInt(priceCents) * 1000000n; // Scale to 8 decimals using BigInt
353
+ console.log(`[Price Oracle] Price with 8 decimals: ${priceWith8Decimals}`);
354
+ return priceWith8Decimals;
355
+ }
356
+ catch (error) {
357
+ const totalElapsed = Date.now() - startTime;
358
+ console.error(`[Price Oracle] Failed after ${totalElapsed}ms: ${error.message}`);
359
+ throw new Error(`All price sources failed: ${error.message}`);
210
360
  }
211
- throw new Error("All price sources failed");
212
361
  }
213
362
  /**
214
363
  * Consensus across multiple sources with outlier detection
@@ -227,16 +376,12 @@ class PriceOracleModule {
227
376
  * 6. Return final median or throw appropriate error
228
377
  */
229
378
  async getBTCPriceConsensus() {
230
- const consensusStartTime = Date.now();
231
379
  console.log(`[Price Oracle] Fetching BTC price with consensus...`);
232
380
  // Use configured tolerances
233
381
  const OUTLIER_DEVIATION = constants_1.PRICE_ORACLE_OUTLIER_DEVIATION_THRESHOLD; // 2%
234
382
  const DISPERSION_THRESHOLD = constants_1.PRICE_ORACLE_DISPERSION_THRESHOLD; // 5%
235
383
  const results = await Promise.allSettled(this.sources.map(async (source) => {
236
- const sourceStartTime = Date.now();
237
384
  const price = await source.fetchPrice();
238
- const sourceDuration = Date.now() - sourceStartTime;
239
- console.log(`[Price Oracle] [Timing] ${source.name} fetch: ${sourceDuration}ms`);
240
385
  return { source: source.name, price };
241
386
  }));
242
387
  const successful = results
@@ -296,8 +441,6 @@ class PriceOracleModule {
296
441
  console.log(`[Price Oracle] ✅ Consensus price (median): $${initialMedian.toLocaleString()}`);
297
442
  // Convert to 8 decimals as bigint - DETERMINISTIC METHOD
298
443
  const priceCents = Math.round(initialMedian * 100);
299
- const totalDuration = Date.now() - consensusStartTime;
300
- console.log(`[Price Oracle] [Timing] Total consensus execution: ${totalDuration}ms`);
301
444
  return BigInt(priceCents) * 1000000n;
302
445
  }
303
446
  }
@@ -1 +1 @@
1
- {"version":3,"file":"price-oracle.module.js","sourceRoot":"","sources":["../../../src/modules/price-oracle.module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"price-oracle.module.js","sourceRoot":"","sources":["../../../src/modules/price-oracle.module.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,16 @@ export declare class ProtocolParametersModule {
50
50
  * @returns Term fees (origination and extension) in basis points
51
51
  */
52
52
  getTermFees(termMonths: number): Promise<TermFees>;
53
+ /**
54
+ * Get authorized spends hash from contract
55
+ *
56
+ * Fetches the cryptographic hash of authorized Bitcoin spends for a position.
57
+ * This hash is used in authorization messages to prevent race conditions.
58
+ *
59
+ * @param positionId - Position identifier (bytes32)
60
+ * @returns Authorized spends hash (bytes32)
61
+ */
62
+ getAuthorizedSpendsHash(positionId: string): Promise<string>;
53
63
  }
54
64
  /**
55
65
  * Factory function to create protocol parameters module
@@ -1 +1 @@
1
- {"version":3,"file":"protocol-parameters.module.d.ts","sourceRoot":"","sources":["../../../src/modules/protocol-parameters.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,wBAAwB;IAQ5C;;;;OAIG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IAyChD;;;;;OAKG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;CAsDzD;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,CAE1B"}
1
+ {"version":3,"file":"protocol-parameters.module.d.ts","sourceRoot":"","sources":["../../../src/modules/protocol-parameters.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,EAAE,wBAAwB;IAQ5C;;;;OAIG;IACG,uBAAuB,IAAI,OAAO,CAAC,MAAM,CAAC;IA4ChD;;;;;OAKG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA0DxD;;;;;;;;OAQG;IACG,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA6CnE;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,wBAAwB,GAC/B,wBAAwB,CAE1B"}
@@ -43,7 +43,10 @@ class ProtocolParametersModule {
43
43
  }
44
44
  // @ts-ignore - ethers available in LIT runtime
45
45
  // StaticJsonRpcProvider with explicit network bypasses auto-detection (required for ngrok URLs)
46
- const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, { name: 'any', chainId: 1337 });
46
+ const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, {
47
+ name: "any",
48
+ chainId: this.chainId,
49
+ });
47
50
  const abi = [
48
51
  {
49
52
  inputs: [],
@@ -82,7 +85,10 @@ class ProtocolParametersModule {
82
85
  }
83
86
  // @ts-ignore - ethers available in LIT runtime
84
87
  // StaticJsonRpcProvider with explicit network bypasses auto-detection (required for ngrok URLs)
85
- const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, { name: 'any', chainId: 1337 });
88
+ const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, {
89
+ name: "any",
90
+ chainId: this.chainId,
91
+ });
86
92
  const abi = [
87
93
  {
88
94
  inputs: [
@@ -114,6 +120,47 @@ class ProtocolParametersModule {
114
120
  throw new Error(`Failed to fetch term fees: ${error.message}`);
115
121
  }
116
122
  }
123
+ /**
124
+ * Get authorized spends hash from contract
125
+ *
126
+ * Fetches the cryptographic hash of authorized Bitcoin spends for a position.
127
+ * This hash is used in authorization messages to prevent race conditions.
128
+ *
129
+ * @param positionId - Position identifier (bytes32)
130
+ * @returns Authorized spends hash (bytes32)
131
+ */
132
+ async getAuthorizedSpendsHash(positionId) {
133
+ try {
134
+ // @ts-ignore - Lit.Actions available in LIT runtime
135
+ const rpcUrl = this.rpcUrl || (await Lit.Actions.getRpcUrl({ chain: this.chain }));
136
+ // @ts-ignore - ethers available in LIT runtime
137
+ const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, {
138
+ name: "any",
139
+ chainId: this.chainId,
140
+ });
141
+ // Convert positionId to bytes32
142
+ const positionIdBytes32 = positionId.startsWith("0x")
143
+ ? positionId
144
+ : `0x${positionId.padStart(64, "0")}`;
145
+ // Call getAuthorizedSpendsHash(bytes32 positionId) on LoanOperationsManager
146
+ // @ts-ignore - ethers available in LIT runtime
147
+ const contract = new ethers.Contract(this.loanOpsManagerAddress, [
148
+ {
149
+ inputs: [{ name: "positionId", type: "bytes32" }],
150
+ name: "getAuthorizedSpendsHash",
151
+ outputs: [{ name: "", type: "bytes32" }],
152
+ stateMutability: "view",
153
+ type: "function",
154
+ },
155
+ ], provider);
156
+ const hash = await contract.getAuthorizedSpendsHash(positionIdBytes32);
157
+ return hash;
158
+ }
159
+ catch (error) {
160
+ console.error("[ProtocolParameters] Error fetching authorized spends hash:", error.message);
161
+ throw new Error(`Failed to fetch authorized spends hash: ${error.message}`);
162
+ }
163
+ }
117
164
  }
118
165
  exports.ProtocolParametersModule = ProtocolParametersModule;
119
166
  /**