@gvnrdao/dh-lit-actions 0.0.26 → 0.0.27
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.
- package/out/ucd-mint-validator.hash +1 -1
- package/out/ucd-mint-validator.js +83 -28
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
873cdfb66ff07727655c6066bbea5b8b20a9c336f6d28901caa9dfc9fd14baa2
|
|
@@ -135,22 +135,42 @@ var _LIT_ACTION_ = (() => {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
// src/constants/chunks/bitcoin-network-config.ts
|
|
138
|
-
var EVMChain = /* @__PURE__ */ ((
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
return
|
|
138
|
+
var EVMChain = /* @__PURE__ */ ((EVMChain3) => {
|
|
139
|
+
EVMChain3["SEPOLIA"] = "sepolia";
|
|
140
|
+
EVMChain3["ETHEREUM"] = "ethereum";
|
|
141
|
+
return EVMChain3;
|
|
142
142
|
})(EVMChain || {});
|
|
143
143
|
var CHAIN_TO_BITCOIN_NETWORK = {
|
|
144
|
-
["sepolia" /* SEPOLIA */]: "
|
|
144
|
+
["sepolia" /* SEPOLIA */]: "regtest" /* REGTEST */,
|
|
145
145
|
["ethereum" /* ETHEREUM */]: "mainnet" /* MAINNET */
|
|
146
146
|
};
|
|
147
147
|
var APPROVED_BITCOIN_PROVIDERS = {
|
|
148
|
+
["regtest" /* REGTEST */]: [
|
|
149
|
+
{
|
|
150
|
+
url: "https://diamond-hands-btc-faucet-6b39a1072059.herokuapp.com/api",
|
|
151
|
+
network: "regtest" /* REGTEST */,
|
|
152
|
+
minConfirmations: 1,
|
|
153
|
+
name: "Diamond Hands"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
url: "http://diamond-hands-btc-faucet-6b39a1072059.herokuapp.com/api",
|
|
157
|
+
network: "regtest" /* REGTEST */,
|
|
158
|
+
minConfirmations: 1,
|
|
159
|
+
name: "Diamond Hands"
|
|
160
|
+
}
|
|
161
|
+
],
|
|
148
162
|
["testnet" /* TESTNET */]: [
|
|
149
163
|
{
|
|
150
164
|
url: "https://diamond-hands-btc-faucet-6b39a1072059.herokuapp.com/api",
|
|
151
165
|
network: "testnet" /* TESTNET */,
|
|
152
166
|
minConfirmations: 1,
|
|
153
|
-
name: "Diamond Hands
|
|
167
|
+
name: "Diamond Hands"
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
url: "http://diamond-hands-btc-faucet-6b39a1072059.herokuapp.com/api",
|
|
171
|
+
network: "testnet" /* TESTNET */,
|
|
172
|
+
minConfirmations: 1,
|
|
173
|
+
name: "Diamond Hands"
|
|
154
174
|
}
|
|
155
175
|
],
|
|
156
176
|
["mainnet" /* MAINNET */]: [
|
|
@@ -455,13 +475,14 @@ var _LIT_ACTION_ = (() => {
|
|
|
455
475
|
* @returns Array of UTXOs
|
|
456
476
|
*/
|
|
457
477
|
async getUTXOs(address) {
|
|
478
|
+
const cleanAddress = this.stripNetworkPrefix(address);
|
|
458
479
|
if (this.config.rpcHelper) {
|
|
459
|
-
return await this.fetchUTXOsFromRPC(
|
|
480
|
+
return await this.fetchUTXOsFromRPC(cleanAddress);
|
|
460
481
|
}
|
|
461
482
|
try {
|
|
462
483
|
return await this.fetchUTXOsFromProvider(
|
|
463
484
|
this.config.providerUrl,
|
|
464
|
-
|
|
485
|
+
cleanAddress
|
|
465
486
|
);
|
|
466
487
|
} catch (error) {
|
|
467
488
|
console.warn(`[Bitcoin Data] Primary provider failed: ${error.message}`);
|
|
@@ -474,7 +495,7 @@ var _LIT_ACTION_ = (() => {
|
|
|
474
495
|
console.log(
|
|
475
496
|
`[Bitcoin Data] Trying fallback: ${fallback.name} (${fallback.url})`
|
|
476
497
|
);
|
|
477
|
-
return await this.fetchUTXOsFromProvider(fallback.url,
|
|
498
|
+
return await this.fetchUTXOsFromProvider(fallback.url, cleanAddress);
|
|
478
499
|
} catch (fallbackError) {
|
|
479
500
|
console.warn(
|
|
480
501
|
`[Bitcoin Data] Fallback ${fallback.name} failed: ${fallbackError.message}`
|
|
@@ -486,6 +507,19 @@ var _LIT_ACTION_ = (() => {
|
|
|
486
507
|
throw new Error(`Failed to fetch UTXOs: ${error.message}`);
|
|
487
508
|
}
|
|
488
509
|
}
|
|
510
|
+
/**
|
|
511
|
+
* Strip network prefix from Bitcoin address
|
|
512
|
+
*
|
|
513
|
+
* Addresses may be stored with network prefix (e.g., "REGTEST_address")
|
|
514
|
+
* but APIs expect clean addresses without prefix.
|
|
515
|
+
*
|
|
516
|
+
* @param address - Address with optional prefix
|
|
517
|
+
* @returns Clean address without prefix
|
|
518
|
+
*/
|
|
519
|
+
stripNetworkPrefix(address) {
|
|
520
|
+
const prefixPattern = /^(REGTEST_|TESTNET_|MAINNET_)/;
|
|
521
|
+
return address.replace(prefixPattern, "");
|
|
522
|
+
}
|
|
489
523
|
/**
|
|
490
524
|
* Fetch UTXOs using Bitcoin RPC (for regtest/testing)
|
|
491
525
|
*/
|
|
@@ -507,20 +541,6 @@ var _LIT_ACTION_ = (() => {
|
|
|
507
541
|
}));
|
|
508
542
|
return utxos;
|
|
509
543
|
}
|
|
510
|
-
/**
|
|
511
|
-
* Detect provider format from URL
|
|
512
|
-
*
|
|
513
|
-
* Determines which API format a provider uses based on its URL.
|
|
514
|
-
*
|
|
515
|
-
* @param providerUrl Provider base URL
|
|
516
|
-
* @returns Provider format type
|
|
517
|
-
*/
|
|
518
|
-
detectProviderFormat(providerUrl) {
|
|
519
|
-
if (providerUrl.includes("diamond-hands-btc-faucet")) {
|
|
520
|
-
return "diamond-hands-faucet" /* DIAMOND_HANDS_FAUCET */;
|
|
521
|
-
}
|
|
522
|
-
return "blockstream" /* BLOCKSTREAM */;
|
|
523
|
-
}
|
|
524
544
|
/**
|
|
525
545
|
* Parse Diamond Hands Faucet UTXO response
|
|
526
546
|
*
|
|
@@ -586,10 +606,12 @@ var _LIT_ACTION_ = (() => {
|
|
|
586
606
|
* - Diamond Hands Faucet: /api/faucet/utxos/{address}
|
|
587
607
|
*/
|
|
588
608
|
async fetchUTXOsFromProvider(providerUrl, address) {
|
|
589
|
-
const
|
|
609
|
+
const allProviders = Object.values(APPROVED_BITCOIN_PROVIDERS).flat();
|
|
610
|
+
const matched = allProviders.find((p) => p.url === providerUrl);
|
|
611
|
+
const providerName = matched?.name || providerUrl;
|
|
590
612
|
let endpoint;
|
|
591
|
-
if (
|
|
592
|
-
endpoint = `${providerUrl}/faucet/
|
|
613
|
+
if (providerName === "Diamond Hands") {
|
|
614
|
+
endpoint = `${providerUrl}/faucet/balance/${address}/utxos`;
|
|
593
615
|
} else {
|
|
594
616
|
endpoint = `${providerUrl}/address/${address}/utxos`;
|
|
595
617
|
}
|
|
@@ -604,7 +626,7 @@ var _LIT_ACTION_ = (() => {
|
|
|
604
626
|
);
|
|
605
627
|
}
|
|
606
628
|
const data = await response.json();
|
|
607
|
-
if (
|
|
629
|
+
if (providerName === "Diamond Hands") {
|
|
608
630
|
return this.parseDiamondHandsFaucetUTXOs(data);
|
|
609
631
|
} else {
|
|
610
632
|
return this.parseBlockstreamUTXOs(data);
|
|
@@ -1477,7 +1499,10 @@ var _LIT_ACTION_ = (() => {
|
|
|
1477
1499
|
positionId: position.positionId,
|
|
1478
1500
|
pkpId: position.pkpId,
|
|
1479
1501
|
borrower: position.borrower,
|
|
1480
|
-
vaultAddress:
|
|
1502
|
+
vaultAddress: this.parseVaultAddress(
|
|
1503
|
+
position.vaultAddress,
|
|
1504
|
+
validateChain(this.config.chain)
|
|
1505
|
+
),
|
|
1481
1506
|
ucdDebt: BigInt(position.ucdDebt.toString()),
|
|
1482
1507
|
termStartTimestamp,
|
|
1483
1508
|
selectedTerm: selectedTermMonths,
|
|
@@ -1486,6 +1511,36 @@ var _LIT_ACTION_ = (() => {
|
|
|
1486
1511
|
// Extract loan status enum value (0-7)
|
|
1487
1512
|
};
|
|
1488
1513
|
}
|
|
1514
|
+
/**
|
|
1515
|
+
* Parse vault address based on format and network
|
|
1516
|
+
*
|
|
1517
|
+
* Supports two formats:
|
|
1518
|
+
* 1. Single string: "mqM3ZR2N6DzZkafSdFqxEAkWovAU3uYTAN"
|
|
1519
|
+
* 2. JSON object: {"mainnet":"bc1q...","testnet":"mqM3ZR2N6DzZkafSdFqxEAkWovAU3uYTAN"}
|
|
1520
|
+
*
|
|
1521
|
+
* @param rawVaultAddress Raw vault address from contract
|
|
1522
|
+
* @param chain EVM chain (sepolia, ethereum)
|
|
1523
|
+
* @returns Parsed Bitcoin address for the appropriate network
|
|
1524
|
+
*/
|
|
1525
|
+
parseVaultAddress(rawVaultAddress, chain) {
|
|
1526
|
+
try {
|
|
1527
|
+
const parsed = JSON.parse(rawVaultAddress);
|
|
1528
|
+
if (typeof parsed === "object" && parsed !== null) {
|
|
1529
|
+
const chainLower = chain.toLowerCase();
|
|
1530
|
+
if (chainLower === "sepolia") {
|
|
1531
|
+
return parsed.regtest || parsed.testnet || parsed.mainnet;
|
|
1532
|
+
}
|
|
1533
|
+
const bitcoinNetwork = getBitcoinNetworkForChain(chain);
|
|
1534
|
+
if (bitcoinNetwork === "testnet" /* TESTNET */) {
|
|
1535
|
+
return parsed.testnet || parsed.regtest || parsed.mainnet;
|
|
1536
|
+
} else {
|
|
1537
|
+
return parsed.mainnet;
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
} catch (e) {
|
|
1541
|
+
}
|
|
1542
|
+
return rawVaultAddress;
|
|
1543
|
+
}
|
|
1489
1544
|
/**
|
|
1490
1545
|
* Quick check if position is liquidatable
|
|
1491
1546
|
*
|