@omnisat/lasereyes 0.0.7 → 0.0.9
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/README.md +7 -8
- package/dist/index.js +242 -26
- package/dist/index.mjs +245 -26
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,14 +7,13 @@
|
|
|
7
7
|
</a>
|
|
8
8
|
</p>
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
</p>
|
|
10
|
+
# lasereyes
|
|
11
|
+
|
|
12
|
+
A common wallet interface for building React applications on Bitcoin.
|
|
13
|
+
|
|
14
|
+

|
|
15
|
+

|
|
16
|
+
|
|
18
17
|
|
|
19
18
|
---
|
|
20
19
|
|
package/dist/index.js
CHANGED
|
@@ -60,6 +60,15 @@ var __async = (__this, __arguments, generator) => {
|
|
|
60
60
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
61
61
|
});
|
|
62
62
|
};
|
|
63
|
+
var __forAwait = (obj, it, method) => {
|
|
64
|
+
it = obj[Symbol.asyncIterator];
|
|
65
|
+
method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((resolve, reject, done) => {
|
|
66
|
+
arg = fn.call(obj, arg);
|
|
67
|
+
done = arg.done;
|
|
68
|
+
return Promise.resolve(arg.value).then((value) => resolve({ value, done }), reject);
|
|
69
|
+
}));
|
|
70
|
+
return it ? it.call(obj) : (obj = obj[Symbol.iterator](), it = {}, method("next"), method("return"), it);
|
|
71
|
+
};
|
|
63
72
|
|
|
64
73
|
// src/index.tsx
|
|
65
74
|
var src_exports = {};
|
|
@@ -73,6 +82,7 @@ __export(src_exports, {
|
|
|
73
82
|
MEMPOOL_SPACE_URL: () => MEMPOOL_SPACE_URL,
|
|
74
83
|
OYL: () => OYL,
|
|
75
84
|
P2PKH: () => P2PKH,
|
|
85
|
+
P2PSH: () => P2PSH,
|
|
76
86
|
P2SH: () => P2SH,
|
|
77
87
|
P2TR: () => P2TR,
|
|
78
88
|
P2WPKH: () => P2WPKH,
|
|
@@ -91,6 +101,7 @@ __export(src_exports, {
|
|
|
91
101
|
createConfig: () => createConfig,
|
|
92
102
|
findOrdinalsAddress: () => findOrdinalsAddress,
|
|
93
103
|
findPaymentAddress: () => findPaymentAddress,
|
|
104
|
+
getAddressType: () => getAddressType,
|
|
94
105
|
getBTCBalance: () => getBTCBalance,
|
|
95
106
|
getBitcoinNetwork: () => getBitcoinNetwork,
|
|
96
107
|
getLeatherNetwork: () => getLeatherNetwork,
|
|
@@ -173,6 +184,7 @@ var LEATHER = "leather";
|
|
|
173
184
|
var P2TR = "p2tr";
|
|
174
185
|
var P2PKH = "p2pkh";
|
|
175
186
|
var P2WPKH = "p2wpkh";
|
|
187
|
+
var P2PSH = "p2psh";
|
|
176
188
|
var P2WSH = "p2wsh";
|
|
177
189
|
var P2SH = "p2sh";
|
|
178
190
|
var WALLETS = {
|
|
@@ -218,10 +230,8 @@ var bitcoin2 = __toESM(require("bitcoinjs-lib"));
|
|
|
218
230
|
// src/consts/settings.ts
|
|
219
231
|
var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
|
|
220
232
|
var initialWalletContext = {
|
|
221
|
-
hasOyl: false,
|
|
222
233
|
hasUnisat: false,
|
|
223
234
|
hasXverse: false,
|
|
224
|
-
hasLeather: false,
|
|
225
235
|
connected: false,
|
|
226
236
|
isConnecting: false,
|
|
227
237
|
publicKey: "",
|
|
@@ -297,9 +307,9 @@ var findPaymentAddress = (addresses) => {
|
|
|
297
307
|
({ purpose }) => purpose === "payment"
|
|
298
308
|
);
|
|
299
309
|
};
|
|
300
|
-
var getBTCBalance = (
|
|
310
|
+
var getBTCBalance = (address2) => __async(void 0, null, function* () {
|
|
301
311
|
try {
|
|
302
|
-
return yield import_axios.default.get(`https://blockchain.info/q/addressbalance/${
|
|
312
|
+
return yield import_axios.default.get(`https://blockchain.info/q/addressbalance/${address2}`).then((response) => response.data);
|
|
303
313
|
} catch (error) {
|
|
304
314
|
console.error("Error fetching BTC balance:", error);
|
|
305
315
|
throw new Error("Failed to fetch BTC balance");
|
|
@@ -319,8 +329,36 @@ var isHex = (str) => {
|
|
|
319
329
|
const hexRegex = /^[a-fA-F0-9]+$/;
|
|
320
330
|
return hexRegex.test(str);
|
|
321
331
|
};
|
|
332
|
+
function getAddressType(address2) {
|
|
333
|
+
try {
|
|
334
|
+
bitcoin.address.fromBase58Check(address2);
|
|
335
|
+
return P2PKH;
|
|
336
|
+
} catch (e) {
|
|
337
|
+
}
|
|
338
|
+
try {
|
|
339
|
+
bitcoin.address.fromBase58Check(address2);
|
|
340
|
+
return P2PSH;
|
|
341
|
+
} catch (e) {
|
|
342
|
+
}
|
|
343
|
+
try {
|
|
344
|
+
const { version, data } = bitcoin.address.fromBech32(address2);
|
|
345
|
+
if (version === 0) {
|
|
346
|
+
if (data.length === 20) {
|
|
347
|
+
return P2WPKH;
|
|
348
|
+
} else if (data.length === 32) {
|
|
349
|
+
return P2WSH;
|
|
350
|
+
}
|
|
351
|
+
} else if (version === 1 && data.length === 32) {
|
|
352
|
+
return P2TR;
|
|
353
|
+
}
|
|
354
|
+
} catch (e) {
|
|
355
|
+
}
|
|
356
|
+
throw new Error("Invalid address");
|
|
357
|
+
}
|
|
322
358
|
|
|
323
359
|
// src/providers/LaserEyesProvider.tsx
|
|
360
|
+
var import_sats_connect = require("sats-connect");
|
|
361
|
+
var import_address = require("bitcoinjs-lib/src/address");
|
|
324
362
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
325
363
|
var LaserEyesContext = (0, import_react.createContext)(initialWalletContext);
|
|
326
364
|
var useLaserEyes = () => {
|
|
@@ -341,14 +379,14 @@ var LaserEyesProvider = ({
|
|
|
341
379
|
const [accounts, setAccounts] = (0, import_react.useState)([]);
|
|
342
380
|
const [publicKey, setPublicKey] = (0, import_react.useState)("");
|
|
343
381
|
const [paymentPublicKey, setPaymentPublicKey] = (0, import_react.useState)("");
|
|
344
|
-
const [
|
|
382
|
+
const [address2, setAddress] = (0, import_react.useState)("");
|
|
345
383
|
const [paymentAddress, setPaymentAddress] = (0, import_react.useState)("");
|
|
346
384
|
const [balance, setBalance] = (0, import_react.useState)();
|
|
347
385
|
const [hasUnisat, setHasUnisat] = (0, import_react.useState)(false);
|
|
386
|
+
const [hasXverse, setHasXverse] = (0, import_react.useState)(false);
|
|
348
387
|
const [network, setNetwork] = (0, import_usehooks_ts.useLocalStorage)("network", MAINNET, {
|
|
349
388
|
initializeWithValue: false
|
|
350
389
|
});
|
|
351
|
-
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(LOCAL_STORAGE_DEFAULT_WALLET);
|
|
352
390
|
(0, import_react.useEffect)(() => {
|
|
353
391
|
if (config) {
|
|
354
392
|
setNetwork(config.network);
|
|
@@ -365,6 +403,11 @@ var LaserEyesProvider = ({
|
|
|
365
403
|
const unisatLib = window == null ? void 0 : window.unisat;
|
|
366
404
|
setHasUnisat(!!unisatLib);
|
|
367
405
|
}, []);
|
|
406
|
+
(0, import_react.useEffect)(() => {
|
|
407
|
+
var _a;
|
|
408
|
+
const xverseLib = (_a = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a.BitcoinProvider;
|
|
409
|
+
setHasXverse(!!xverseLib);
|
|
410
|
+
}, []);
|
|
368
411
|
(0, import_react.useEffect)(() => {
|
|
369
412
|
setBalance(void 0);
|
|
370
413
|
}, [network]);
|
|
@@ -383,7 +426,10 @@ var LaserEyesProvider = ({
|
|
|
383
426
|
};
|
|
384
427
|
}, [library]);
|
|
385
428
|
(0, import_react.useEffect)(() => {
|
|
386
|
-
|
|
429
|
+
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
|
|
430
|
+
LOCAL_STORAGE_DEFAULT_WALLET
|
|
431
|
+
);
|
|
432
|
+
if (defaultWallet) {
|
|
387
433
|
setProvider(defaultWallet);
|
|
388
434
|
connect(defaultWallet);
|
|
389
435
|
}
|
|
@@ -412,6 +458,48 @@ var LaserEyesProvider = ({
|
|
|
412
458
|
throw error;
|
|
413
459
|
}
|
|
414
460
|
});
|
|
461
|
+
const connectXverse = () => __async(void 0, null, function* () {
|
|
462
|
+
try {
|
|
463
|
+
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
|
|
464
|
+
let xverseNetwork = getXverseNetwork((config == null ? void 0 : config.network) || MAINNET);
|
|
465
|
+
console.log({ xverseNetwork });
|
|
466
|
+
const getAddressOptions = {
|
|
467
|
+
payload: {
|
|
468
|
+
purposes: ["ordinals", "payment"],
|
|
469
|
+
message: "Address for receiving Ordinals and payments",
|
|
470
|
+
network: {
|
|
471
|
+
type: xverseNetwork
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
onFinish: (response) => {
|
|
475
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
476
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
477
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
478
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
479
|
+
if (foundAddress && foundPaymentAddress) {
|
|
480
|
+
setAddress(foundAddress.address);
|
|
481
|
+
setPaymentAddress(foundPaymentAddress.address);
|
|
482
|
+
setProvider(XVERSE);
|
|
483
|
+
setLibrary(window.BitcoinProvider);
|
|
484
|
+
}
|
|
485
|
+
getBTCBalance(foundPaymentAddress.address).then((totalBalance) => {
|
|
486
|
+
console.log({ totalBalance });
|
|
487
|
+
setBalance(totalBalance);
|
|
488
|
+
});
|
|
489
|
+
},
|
|
490
|
+
onCancel: () => {
|
|
491
|
+
throw new Error(`User canceled lasereyes to ${XVERSE} wallet`);
|
|
492
|
+
},
|
|
493
|
+
onError: (error) => {
|
|
494
|
+
throw new Error(`Can't lasereyes to ${XVERSE} wallet`);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
yield (0, import_sats_connect.getAddress)(getAddressOptions);
|
|
498
|
+
setConnected(true);
|
|
499
|
+
} catch (error) {
|
|
500
|
+
throw error;
|
|
501
|
+
}
|
|
502
|
+
});
|
|
415
503
|
const handleAccountsChanged = (_accounts) => {
|
|
416
504
|
if (!_accounts.length) {
|
|
417
505
|
disconnect();
|
|
@@ -420,6 +508,7 @@ var LaserEyesProvider = ({
|
|
|
420
508
|
if (self.accounts[0] === _accounts[0]) {
|
|
421
509
|
return;
|
|
422
510
|
}
|
|
511
|
+
console.log("acct changed", _accounts[0]);
|
|
423
512
|
self.accounts = _accounts;
|
|
424
513
|
if (_accounts.length > 0) {
|
|
425
514
|
connect(UNISAT);
|
|
@@ -434,8 +523,10 @@ var LaserEyesProvider = ({
|
|
|
434
523
|
foundNetwork = getNetworkForUnisat(network2);
|
|
435
524
|
setNetwork(foundNetwork);
|
|
436
525
|
connect(provider);
|
|
526
|
+
} else if (provider === XVERSE) {
|
|
527
|
+
throw new Error("Not implemented");
|
|
437
528
|
} else {
|
|
438
|
-
throw new Error("
|
|
529
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
439
530
|
}
|
|
440
531
|
} catch (error) {
|
|
441
532
|
throw error;
|
|
@@ -448,14 +539,16 @@ var LaserEyesProvider = ({
|
|
|
448
539
|
throw new Error("No wallet provided");
|
|
449
540
|
if (walletName === UNISAT) {
|
|
450
541
|
yield connectUnisat();
|
|
542
|
+
} else if (walletName === XVERSE) {
|
|
543
|
+
yield connectXverse();
|
|
451
544
|
} else {
|
|
452
|
-
throw new Error("
|
|
545
|
+
throw new Error("The connected wallet doesn't support this method..!");
|
|
453
546
|
}
|
|
454
547
|
setConnected(true);
|
|
455
548
|
} catch (error) {
|
|
456
549
|
setIsConnecting(false);
|
|
457
550
|
disconnect();
|
|
458
|
-
throw
|
|
551
|
+
throw error;
|
|
459
552
|
} finally {
|
|
460
553
|
setIsConnecting(false);
|
|
461
554
|
}
|
|
@@ -478,14 +571,38 @@ var LaserEyesProvider = ({
|
|
|
478
571
|
return;
|
|
479
572
|
if (provider === UNISAT) {
|
|
480
573
|
return yield library.requestAccounts();
|
|
574
|
+
} else if (provider === XVERSE) {
|
|
575
|
+
const getAddressOptions = {
|
|
576
|
+
payload: {
|
|
577
|
+
// @ts-ignore
|
|
578
|
+
purposes: ["ordinals", "payment"],
|
|
579
|
+
message: "Address for receiving Ordinals and payments",
|
|
580
|
+
network: {
|
|
581
|
+
type: XVERSE_NETWORK
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
onFinish: (response) => __async(void 0, null, function* () {
|
|
585
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
586
|
+
setAddress(foundAddress.address);
|
|
587
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
588
|
+
setPaymentAddress(foundPaymentAddress);
|
|
589
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
590
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
591
|
+
}),
|
|
592
|
+
onCancel: () => {
|
|
593
|
+
console.log("CANCELLED");
|
|
594
|
+
}
|
|
595
|
+
};
|
|
596
|
+
return [address2];
|
|
481
597
|
} else {
|
|
482
|
-
throw new Error("
|
|
598
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
483
599
|
}
|
|
484
600
|
} catch (error) {
|
|
485
601
|
throw error;
|
|
486
602
|
}
|
|
487
603
|
});
|
|
488
604
|
const getNetwork = () => __async(void 0, null, function* () {
|
|
605
|
+
var _a;
|
|
489
606
|
try {
|
|
490
607
|
if (!library)
|
|
491
608
|
return;
|
|
@@ -494,9 +611,13 @@ var LaserEyesProvider = ({
|
|
|
494
611
|
const foundNetwork = getNetworkForUnisat(unisatNetwork);
|
|
495
612
|
setNetwork(foundNetwork);
|
|
496
613
|
return foundNetwork;
|
|
497
|
-
} else {
|
|
498
|
-
|
|
614
|
+
} else if (provider === XVERSE) {
|
|
615
|
+
if (address2.slice(0, 1) === "t") {
|
|
616
|
+
return TESTNET;
|
|
617
|
+
}
|
|
618
|
+
return MAINNET;
|
|
499
619
|
}
|
|
620
|
+
return (_a = config == null ? void 0 : config.network) != null ? _a : MAINNET;
|
|
500
621
|
} catch (error) {
|
|
501
622
|
throw error;
|
|
502
623
|
}
|
|
@@ -510,7 +631,7 @@ var LaserEyesProvider = ({
|
|
|
510
631
|
yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
|
|
511
632
|
setNetwork(network2);
|
|
512
633
|
} else {
|
|
513
|
-
throw new Error("
|
|
634
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
514
635
|
}
|
|
515
636
|
} catch (error) {
|
|
516
637
|
throw error;
|
|
@@ -524,7 +645,7 @@ var LaserEyesProvider = ({
|
|
|
524
645
|
const pub = yield library == null ? void 0 : library.getPublicKey();
|
|
525
646
|
return yield library == null ? void 0 : library.getPublicKey();
|
|
526
647
|
} else {
|
|
527
|
-
throw new Error("
|
|
648
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
528
649
|
}
|
|
529
650
|
} catch (error) {
|
|
530
651
|
throw error;
|
|
@@ -536,8 +657,8 @@ var LaserEyesProvider = ({
|
|
|
536
657
|
return;
|
|
537
658
|
if (provider === UNISAT) {
|
|
538
659
|
return yield library.getBalance();
|
|
539
|
-
} else {
|
|
540
|
-
|
|
660
|
+
} else if (provider === XVERSE) {
|
|
661
|
+
return yield getBTCBalance(paymentAddress);
|
|
541
662
|
}
|
|
542
663
|
} catch (error) {
|
|
543
664
|
throw error;
|
|
@@ -550,7 +671,7 @@ var LaserEyesProvider = ({
|
|
|
550
671
|
if (provider === UNISAT) {
|
|
551
672
|
return yield library.getInscriptions(0, 10);
|
|
552
673
|
} else {
|
|
553
|
-
throw new Error("
|
|
674
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
554
675
|
}
|
|
555
676
|
} catch (error) {
|
|
556
677
|
throw error;
|
|
@@ -570,7 +691,7 @@ var LaserEyesProvider = ({
|
|
|
570
691
|
throw new Error("Transaction failed");
|
|
571
692
|
return txId;
|
|
572
693
|
} else {
|
|
573
|
-
throw new Error("
|
|
694
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
574
695
|
}
|
|
575
696
|
} catch (error) {
|
|
576
697
|
throw error;
|
|
@@ -582,8 +703,20 @@ var LaserEyesProvider = ({
|
|
|
582
703
|
return;
|
|
583
704
|
if (provider === UNISAT) {
|
|
584
705
|
return yield library == null ? void 0 : library.signMessage(message);
|
|
585
|
-
} else {
|
|
586
|
-
|
|
706
|
+
} else if (provider === XVERSE) {
|
|
707
|
+
const response = yield (0, import_sats_connect.request)("signMessage", {
|
|
708
|
+
address: address2,
|
|
709
|
+
message
|
|
710
|
+
});
|
|
711
|
+
if (response.status === "success") {
|
|
712
|
+
return response.result.signature;
|
|
713
|
+
} else {
|
|
714
|
+
if (response.error.code === import_sats_connect.RpcErrorCode.USER_REJECTION) {
|
|
715
|
+
throw new Error("User rejected the request");
|
|
716
|
+
} else {
|
|
717
|
+
throw new Error("Error signing message: " + response.error.message);
|
|
718
|
+
}
|
|
719
|
+
}
|
|
587
720
|
}
|
|
588
721
|
} catch (error) {
|
|
589
722
|
throw error;
|
|
@@ -621,11 +754,91 @@ var LaserEyesProvider = ({
|
|
|
621
754
|
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
622
755
|
txId: void 0
|
|
623
756
|
};
|
|
757
|
+
} else if (provider === XVERSE) {
|
|
758
|
+
const toSignPsbt = bitcoin2.Psbt.fromBase64(String(psbtBase64), {
|
|
759
|
+
network: getBitcoinNetwork(network)
|
|
760
|
+
});
|
|
761
|
+
const inputs = toSignPsbt.data.inputs;
|
|
762
|
+
const inputsToSign = [];
|
|
763
|
+
const ordinalAddressData = {
|
|
764
|
+
address: address2,
|
|
765
|
+
signingIndexes: []
|
|
766
|
+
};
|
|
767
|
+
const paymentsAddressData = {
|
|
768
|
+
address: paymentAddress,
|
|
769
|
+
signingIndexes: []
|
|
770
|
+
};
|
|
771
|
+
let counter = 0;
|
|
772
|
+
try {
|
|
773
|
+
for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
774
|
+
let input = temp.value;
|
|
775
|
+
const { script } = input.witnessUtxo;
|
|
776
|
+
const addressFromScript = (0, import_address.fromOutputScript)(
|
|
777
|
+
script,
|
|
778
|
+
getBitcoinNetwork(network)
|
|
779
|
+
);
|
|
780
|
+
if (addressFromScript === paymentAddress) {
|
|
781
|
+
paymentsAddressData.signingIndexes.push(Number(counter));
|
|
782
|
+
} else if (addressFromScript === address2) {
|
|
783
|
+
ordinalAddressData.signingIndexes.push(Number(counter));
|
|
784
|
+
}
|
|
785
|
+
counter++;
|
|
786
|
+
}
|
|
787
|
+
} catch (temp) {
|
|
788
|
+
error = [temp];
|
|
789
|
+
} finally {
|
|
790
|
+
try {
|
|
791
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
792
|
+
} finally {
|
|
793
|
+
if (error)
|
|
794
|
+
throw error[0];
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
if (ordinalAddressData.signingIndexes.length > 0) {
|
|
798
|
+
inputsToSign.push(ordinalAddressData);
|
|
799
|
+
}
|
|
800
|
+
if (paymentsAddressData.signingIndexes.length > 0) {
|
|
801
|
+
inputsToSign.push(paymentsAddressData);
|
|
802
|
+
}
|
|
803
|
+
let txId, signedPsbtHex, signedPsbtBase64;
|
|
804
|
+
const xverseNetwork = getXverseNetwork(network);
|
|
805
|
+
const signPsbtOptions = {
|
|
806
|
+
payload: {
|
|
807
|
+
network: {
|
|
808
|
+
type: xverseNetwork
|
|
809
|
+
},
|
|
810
|
+
message: "Sign Transaction",
|
|
811
|
+
psbtBase64: toSignPsbt.toBase64(),
|
|
812
|
+
broadcast,
|
|
813
|
+
inputsToSign
|
|
814
|
+
},
|
|
815
|
+
onFinish: (response) => {
|
|
816
|
+
if (response.txId) {
|
|
817
|
+
txId = response.txId;
|
|
818
|
+
} else if (response.psbtBase64) {
|
|
819
|
+
const signedPsbt = bitcoin2.Psbt.fromBase64(
|
|
820
|
+
String(response.psbtBase64),
|
|
821
|
+
{
|
|
822
|
+
network: getBitcoinNetwork(network)
|
|
823
|
+
}
|
|
824
|
+
);
|
|
825
|
+
signedPsbtHex = signedPsbt.toHex();
|
|
826
|
+
signedPsbtBase64 = signedPsbt.toBase64();
|
|
827
|
+
}
|
|
828
|
+
},
|
|
829
|
+
onCancel: () => console.log("Canceled")
|
|
830
|
+
};
|
|
831
|
+
yield (0, import_sats_connect.signTransaction)(signPsbtOptions);
|
|
832
|
+
return {
|
|
833
|
+
signedPsbtHex,
|
|
834
|
+
signedPsbtBase64,
|
|
835
|
+
txId
|
|
836
|
+
};
|
|
624
837
|
} else {
|
|
625
|
-
throw new Error("
|
|
838
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
626
839
|
}
|
|
627
|
-
} catch (
|
|
628
|
-
throw
|
|
840
|
+
} catch (error2) {
|
|
841
|
+
throw error2;
|
|
629
842
|
}
|
|
630
843
|
});
|
|
631
844
|
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
@@ -635,7 +848,7 @@ var LaserEyesProvider = ({
|
|
|
635
848
|
if (provider === UNISAT) {
|
|
636
849
|
return yield library == null ? void 0 : library.pushPsbt(psbt);
|
|
637
850
|
} else {
|
|
638
|
-
throw new Error("
|
|
851
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
639
852
|
}
|
|
640
853
|
} catch (error) {
|
|
641
854
|
throw error;
|
|
@@ -648,7 +861,7 @@ var LaserEyesProvider = ({
|
|
|
648
861
|
library,
|
|
649
862
|
accounts,
|
|
650
863
|
publicKey,
|
|
651
|
-
address,
|
|
864
|
+
address: address2,
|
|
652
865
|
paymentAddress,
|
|
653
866
|
paymentPublicKey,
|
|
654
867
|
provider,
|
|
@@ -657,6 +870,7 @@ var LaserEyesProvider = ({
|
|
|
657
870
|
connected,
|
|
658
871
|
isConnecting,
|
|
659
872
|
hasUnisat,
|
|
873
|
+
hasXverse,
|
|
660
874
|
// functions
|
|
661
875
|
connect,
|
|
662
876
|
disconnect,
|
|
@@ -686,6 +900,7 @@ var LaserEyesProvider = ({
|
|
|
686
900
|
MEMPOOL_SPACE_URL,
|
|
687
901
|
OYL,
|
|
688
902
|
P2PKH,
|
|
903
|
+
P2PSH,
|
|
689
904
|
P2SH,
|
|
690
905
|
P2TR,
|
|
691
906
|
P2WPKH,
|
|
@@ -704,6 +919,7 @@ var LaserEyesProvider = ({
|
|
|
704
919
|
createConfig,
|
|
705
920
|
findOrdinalsAddress,
|
|
706
921
|
findPaymentAddress,
|
|
922
|
+
getAddressType,
|
|
707
923
|
getBTCBalance,
|
|
708
924
|
getBitcoinNetwork,
|
|
709
925
|
getLeatherNetwork,
|
package/dist/index.mjs
CHANGED
|
@@ -34,6 +34,15 @@ var __async = (__this, __arguments, generator) => {
|
|
|
34
34
|
step((generator = generator.apply(__this, __arguments)).next());
|
|
35
35
|
});
|
|
36
36
|
};
|
|
37
|
+
var __forAwait = (obj, it, method) => {
|
|
38
|
+
it = obj[Symbol.asyncIterator];
|
|
39
|
+
method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((resolve, reject, done) => {
|
|
40
|
+
arg = fn.call(obj, arg);
|
|
41
|
+
done = arg.done;
|
|
42
|
+
return Promise.resolve(arg.value).then((value) => resolve({ value, done }), reject);
|
|
43
|
+
}));
|
|
44
|
+
return it ? it.call(obj) : (obj = obj[Symbol.iterator](), it = {}, method("next"), method("return"), it);
|
|
45
|
+
};
|
|
37
46
|
|
|
38
47
|
// src/consts/networks.ts
|
|
39
48
|
var XVERSE_NETWORK = "Mainnet";
|
|
@@ -101,6 +110,7 @@ var LEATHER = "leather";
|
|
|
101
110
|
var P2TR = "p2tr";
|
|
102
111
|
var P2PKH = "p2pkh";
|
|
103
112
|
var P2WPKH = "p2wpkh";
|
|
113
|
+
var P2PSH = "p2psh";
|
|
104
114
|
var P2WSH = "p2wsh";
|
|
105
115
|
var P2SH = "p2sh";
|
|
106
116
|
var WALLETS = {
|
|
@@ -152,10 +162,8 @@ import * as bitcoin2 from "bitcoinjs-lib";
|
|
|
152
162
|
// src/consts/settings.ts
|
|
153
163
|
var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
|
|
154
164
|
var initialWalletContext = {
|
|
155
|
-
hasOyl: false,
|
|
156
165
|
hasUnisat: false,
|
|
157
166
|
hasXverse: false,
|
|
158
|
-
hasLeather: false,
|
|
159
167
|
connected: false,
|
|
160
168
|
isConnecting: false,
|
|
161
169
|
publicKey: "",
|
|
@@ -231,9 +239,9 @@ var findPaymentAddress = (addresses) => {
|
|
|
231
239
|
({ purpose }) => purpose === "payment"
|
|
232
240
|
);
|
|
233
241
|
};
|
|
234
|
-
var getBTCBalance = (
|
|
242
|
+
var getBTCBalance = (address2) => __async(void 0, null, function* () {
|
|
235
243
|
try {
|
|
236
|
-
return yield axios.get(`https://blockchain.info/q/addressbalance/${
|
|
244
|
+
return yield axios.get(`https://blockchain.info/q/addressbalance/${address2}`).then((response) => response.data);
|
|
237
245
|
} catch (error) {
|
|
238
246
|
console.error("Error fetching BTC balance:", error);
|
|
239
247
|
throw new Error("Failed to fetch BTC balance");
|
|
@@ -253,8 +261,41 @@ var isHex = (str) => {
|
|
|
253
261
|
const hexRegex = /^[a-fA-F0-9]+$/;
|
|
254
262
|
return hexRegex.test(str);
|
|
255
263
|
};
|
|
264
|
+
function getAddressType(address2) {
|
|
265
|
+
try {
|
|
266
|
+
bitcoin.address.fromBase58Check(address2);
|
|
267
|
+
return P2PKH;
|
|
268
|
+
} catch (e) {
|
|
269
|
+
}
|
|
270
|
+
try {
|
|
271
|
+
bitcoin.address.fromBase58Check(address2);
|
|
272
|
+
return P2PSH;
|
|
273
|
+
} catch (e) {
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
const { version, data } = bitcoin.address.fromBech32(address2);
|
|
277
|
+
if (version === 0) {
|
|
278
|
+
if (data.length === 20) {
|
|
279
|
+
return P2WPKH;
|
|
280
|
+
} else if (data.length === 32) {
|
|
281
|
+
return P2WSH;
|
|
282
|
+
}
|
|
283
|
+
} else if (version === 1 && data.length === 32) {
|
|
284
|
+
return P2TR;
|
|
285
|
+
}
|
|
286
|
+
} catch (e) {
|
|
287
|
+
}
|
|
288
|
+
throw new Error("Invalid address");
|
|
289
|
+
}
|
|
256
290
|
|
|
257
291
|
// src/providers/LaserEyesProvider.tsx
|
|
292
|
+
import {
|
|
293
|
+
getAddress,
|
|
294
|
+
request,
|
|
295
|
+
RpcErrorCode,
|
|
296
|
+
signTransaction
|
|
297
|
+
} from "sats-connect";
|
|
298
|
+
import { fromOutputScript } from "bitcoinjs-lib/src/address";
|
|
258
299
|
import { jsx } from "react/jsx-runtime";
|
|
259
300
|
var LaserEyesContext = createContext(initialWalletContext);
|
|
260
301
|
var useLaserEyes = () => {
|
|
@@ -275,14 +316,14 @@ var LaserEyesProvider = ({
|
|
|
275
316
|
const [accounts, setAccounts] = useState([]);
|
|
276
317
|
const [publicKey, setPublicKey] = useState("");
|
|
277
318
|
const [paymentPublicKey, setPaymentPublicKey] = useState("");
|
|
278
|
-
const [
|
|
319
|
+
const [address2, setAddress] = useState("");
|
|
279
320
|
const [paymentAddress, setPaymentAddress] = useState("");
|
|
280
321
|
const [balance, setBalance] = useState();
|
|
281
322
|
const [hasUnisat, setHasUnisat] = useState(false);
|
|
323
|
+
const [hasXverse, setHasXverse] = useState(false);
|
|
282
324
|
const [network, setNetwork] = useLocalStorage("network", MAINNET, {
|
|
283
325
|
initializeWithValue: false
|
|
284
326
|
});
|
|
285
|
-
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(LOCAL_STORAGE_DEFAULT_WALLET);
|
|
286
327
|
useEffect(() => {
|
|
287
328
|
if (config) {
|
|
288
329
|
setNetwork(config.network);
|
|
@@ -299,6 +340,11 @@ var LaserEyesProvider = ({
|
|
|
299
340
|
const unisatLib = window == null ? void 0 : window.unisat;
|
|
300
341
|
setHasUnisat(!!unisatLib);
|
|
301
342
|
}, []);
|
|
343
|
+
useEffect(() => {
|
|
344
|
+
var _a;
|
|
345
|
+
const xverseLib = (_a = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a.BitcoinProvider;
|
|
346
|
+
setHasXverse(!!xverseLib);
|
|
347
|
+
}, []);
|
|
302
348
|
useEffect(() => {
|
|
303
349
|
setBalance(void 0);
|
|
304
350
|
}, [network]);
|
|
@@ -317,7 +363,10 @@ var LaserEyesProvider = ({
|
|
|
317
363
|
};
|
|
318
364
|
}, [library]);
|
|
319
365
|
useEffect(() => {
|
|
320
|
-
|
|
366
|
+
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
|
|
367
|
+
LOCAL_STORAGE_DEFAULT_WALLET
|
|
368
|
+
);
|
|
369
|
+
if (defaultWallet) {
|
|
321
370
|
setProvider(defaultWallet);
|
|
322
371
|
connect(defaultWallet);
|
|
323
372
|
}
|
|
@@ -346,6 +395,48 @@ var LaserEyesProvider = ({
|
|
|
346
395
|
throw error;
|
|
347
396
|
}
|
|
348
397
|
});
|
|
398
|
+
const connectXverse = () => __async(void 0, null, function* () {
|
|
399
|
+
try {
|
|
400
|
+
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
|
|
401
|
+
let xverseNetwork = getXverseNetwork((config == null ? void 0 : config.network) || MAINNET);
|
|
402
|
+
console.log({ xverseNetwork });
|
|
403
|
+
const getAddressOptions = {
|
|
404
|
+
payload: {
|
|
405
|
+
purposes: ["ordinals", "payment"],
|
|
406
|
+
message: "Address for receiving Ordinals and payments",
|
|
407
|
+
network: {
|
|
408
|
+
type: xverseNetwork
|
|
409
|
+
}
|
|
410
|
+
},
|
|
411
|
+
onFinish: (response) => {
|
|
412
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
413
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
414
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
415
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
416
|
+
if (foundAddress && foundPaymentAddress) {
|
|
417
|
+
setAddress(foundAddress.address);
|
|
418
|
+
setPaymentAddress(foundPaymentAddress.address);
|
|
419
|
+
setProvider(XVERSE);
|
|
420
|
+
setLibrary(window.BitcoinProvider);
|
|
421
|
+
}
|
|
422
|
+
getBTCBalance(foundPaymentAddress.address).then((totalBalance) => {
|
|
423
|
+
console.log({ totalBalance });
|
|
424
|
+
setBalance(totalBalance);
|
|
425
|
+
});
|
|
426
|
+
},
|
|
427
|
+
onCancel: () => {
|
|
428
|
+
throw new Error(`User canceled lasereyes to ${XVERSE} wallet`);
|
|
429
|
+
},
|
|
430
|
+
onError: (error) => {
|
|
431
|
+
throw new Error(`Can't lasereyes to ${XVERSE} wallet`);
|
|
432
|
+
}
|
|
433
|
+
};
|
|
434
|
+
yield getAddress(getAddressOptions);
|
|
435
|
+
setConnected(true);
|
|
436
|
+
} catch (error) {
|
|
437
|
+
throw error;
|
|
438
|
+
}
|
|
439
|
+
});
|
|
349
440
|
const handleAccountsChanged = (_accounts) => {
|
|
350
441
|
if (!_accounts.length) {
|
|
351
442
|
disconnect();
|
|
@@ -354,6 +445,7 @@ var LaserEyesProvider = ({
|
|
|
354
445
|
if (self.accounts[0] === _accounts[0]) {
|
|
355
446
|
return;
|
|
356
447
|
}
|
|
448
|
+
console.log("acct changed", _accounts[0]);
|
|
357
449
|
self.accounts = _accounts;
|
|
358
450
|
if (_accounts.length > 0) {
|
|
359
451
|
connect(UNISAT);
|
|
@@ -368,8 +460,10 @@ var LaserEyesProvider = ({
|
|
|
368
460
|
foundNetwork = getNetworkForUnisat(network2);
|
|
369
461
|
setNetwork(foundNetwork);
|
|
370
462
|
connect(provider);
|
|
463
|
+
} else if (provider === XVERSE) {
|
|
464
|
+
throw new Error("Not implemented");
|
|
371
465
|
} else {
|
|
372
|
-
throw new Error("
|
|
466
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
373
467
|
}
|
|
374
468
|
} catch (error) {
|
|
375
469
|
throw error;
|
|
@@ -382,14 +476,16 @@ var LaserEyesProvider = ({
|
|
|
382
476
|
throw new Error("No wallet provided");
|
|
383
477
|
if (walletName === UNISAT) {
|
|
384
478
|
yield connectUnisat();
|
|
479
|
+
} else if (walletName === XVERSE) {
|
|
480
|
+
yield connectXverse();
|
|
385
481
|
} else {
|
|
386
|
-
throw new Error("
|
|
482
|
+
throw new Error("The connected wallet doesn't support this method..!");
|
|
387
483
|
}
|
|
388
484
|
setConnected(true);
|
|
389
485
|
} catch (error) {
|
|
390
486
|
setIsConnecting(false);
|
|
391
487
|
disconnect();
|
|
392
|
-
throw
|
|
488
|
+
throw error;
|
|
393
489
|
} finally {
|
|
394
490
|
setIsConnecting(false);
|
|
395
491
|
}
|
|
@@ -412,14 +508,38 @@ var LaserEyesProvider = ({
|
|
|
412
508
|
return;
|
|
413
509
|
if (provider === UNISAT) {
|
|
414
510
|
return yield library.requestAccounts();
|
|
511
|
+
} else if (provider === XVERSE) {
|
|
512
|
+
const getAddressOptions = {
|
|
513
|
+
payload: {
|
|
514
|
+
// @ts-ignore
|
|
515
|
+
purposes: ["ordinals", "payment"],
|
|
516
|
+
message: "Address for receiving Ordinals and payments",
|
|
517
|
+
network: {
|
|
518
|
+
type: XVERSE_NETWORK
|
|
519
|
+
}
|
|
520
|
+
},
|
|
521
|
+
onFinish: (response) => __async(void 0, null, function* () {
|
|
522
|
+
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
523
|
+
setAddress(foundAddress.address);
|
|
524
|
+
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
525
|
+
setPaymentAddress(foundPaymentAddress);
|
|
526
|
+
setPublicKey(String(response.addresses[0].publicKey));
|
|
527
|
+
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
528
|
+
}),
|
|
529
|
+
onCancel: () => {
|
|
530
|
+
console.log("CANCELLED");
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
return [address2];
|
|
415
534
|
} else {
|
|
416
|
-
throw new Error("
|
|
535
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
417
536
|
}
|
|
418
537
|
} catch (error) {
|
|
419
538
|
throw error;
|
|
420
539
|
}
|
|
421
540
|
});
|
|
422
541
|
const getNetwork = () => __async(void 0, null, function* () {
|
|
542
|
+
var _a;
|
|
423
543
|
try {
|
|
424
544
|
if (!library)
|
|
425
545
|
return;
|
|
@@ -428,9 +548,13 @@ var LaserEyesProvider = ({
|
|
|
428
548
|
const foundNetwork = getNetworkForUnisat(unisatNetwork);
|
|
429
549
|
setNetwork(foundNetwork);
|
|
430
550
|
return foundNetwork;
|
|
431
|
-
} else {
|
|
432
|
-
|
|
551
|
+
} else if (provider === XVERSE) {
|
|
552
|
+
if (address2.slice(0, 1) === "t") {
|
|
553
|
+
return TESTNET;
|
|
554
|
+
}
|
|
555
|
+
return MAINNET;
|
|
433
556
|
}
|
|
557
|
+
return (_a = config == null ? void 0 : config.network) != null ? _a : MAINNET;
|
|
434
558
|
} catch (error) {
|
|
435
559
|
throw error;
|
|
436
560
|
}
|
|
@@ -444,7 +568,7 @@ var LaserEyesProvider = ({
|
|
|
444
568
|
yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
|
|
445
569
|
setNetwork(network2);
|
|
446
570
|
} else {
|
|
447
|
-
throw new Error("
|
|
571
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
448
572
|
}
|
|
449
573
|
} catch (error) {
|
|
450
574
|
throw error;
|
|
@@ -458,7 +582,7 @@ var LaserEyesProvider = ({
|
|
|
458
582
|
const pub = yield library == null ? void 0 : library.getPublicKey();
|
|
459
583
|
return yield library == null ? void 0 : library.getPublicKey();
|
|
460
584
|
} else {
|
|
461
|
-
throw new Error("
|
|
585
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
462
586
|
}
|
|
463
587
|
} catch (error) {
|
|
464
588
|
throw error;
|
|
@@ -470,8 +594,8 @@ var LaserEyesProvider = ({
|
|
|
470
594
|
return;
|
|
471
595
|
if (provider === UNISAT) {
|
|
472
596
|
return yield library.getBalance();
|
|
473
|
-
} else {
|
|
474
|
-
|
|
597
|
+
} else if (provider === XVERSE) {
|
|
598
|
+
return yield getBTCBalance(paymentAddress);
|
|
475
599
|
}
|
|
476
600
|
} catch (error) {
|
|
477
601
|
throw error;
|
|
@@ -484,7 +608,7 @@ var LaserEyesProvider = ({
|
|
|
484
608
|
if (provider === UNISAT) {
|
|
485
609
|
return yield library.getInscriptions(0, 10);
|
|
486
610
|
} else {
|
|
487
|
-
throw new Error("
|
|
611
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
488
612
|
}
|
|
489
613
|
} catch (error) {
|
|
490
614
|
throw error;
|
|
@@ -504,7 +628,7 @@ var LaserEyesProvider = ({
|
|
|
504
628
|
throw new Error("Transaction failed");
|
|
505
629
|
return txId;
|
|
506
630
|
} else {
|
|
507
|
-
throw new Error("
|
|
631
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
508
632
|
}
|
|
509
633
|
} catch (error) {
|
|
510
634
|
throw error;
|
|
@@ -516,8 +640,20 @@ var LaserEyesProvider = ({
|
|
|
516
640
|
return;
|
|
517
641
|
if (provider === UNISAT) {
|
|
518
642
|
return yield library == null ? void 0 : library.signMessage(message);
|
|
519
|
-
} else {
|
|
520
|
-
|
|
643
|
+
} else if (provider === XVERSE) {
|
|
644
|
+
const response = yield request("signMessage", {
|
|
645
|
+
address: address2,
|
|
646
|
+
message
|
|
647
|
+
});
|
|
648
|
+
if (response.status === "success") {
|
|
649
|
+
return response.result.signature;
|
|
650
|
+
} else {
|
|
651
|
+
if (response.error.code === RpcErrorCode.USER_REJECTION) {
|
|
652
|
+
throw new Error("User rejected the request");
|
|
653
|
+
} else {
|
|
654
|
+
throw new Error("Error signing message: " + response.error.message);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
521
657
|
}
|
|
522
658
|
} catch (error) {
|
|
523
659
|
throw error;
|
|
@@ -555,11 +691,91 @@ var LaserEyesProvider = ({
|
|
|
555
691
|
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
556
692
|
txId: void 0
|
|
557
693
|
};
|
|
694
|
+
} else if (provider === XVERSE) {
|
|
695
|
+
const toSignPsbt = bitcoin2.Psbt.fromBase64(String(psbtBase64), {
|
|
696
|
+
network: getBitcoinNetwork(network)
|
|
697
|
+
});
|
|
698
|
+
const inputs = toSignPsbt.data.inputs;
|
|
699
|
+
const inputsToSign = [];
|
|
700
|
+
const ordinalAddressData = {
|
|
701
|
+
address: address2,
|
|
702
|
+
signingIndexes: []
|
|
703
|
+
};
|
|
704
|
+
const paymentsAddressData = {
|
|
705
|
+
address: paymentAddress,
|
|
706
|
+
signingIndexes: []
|
|
707
|
+
};
|
|
708
|
+
let counter = 0;
|
|
709
|
+
try {
|
|
710
|
+
for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
|
|
711
|
+
let input = temp.value;
|
|
712
|
+
const { script } = input.witnessUtxo;
|
|
713
|
+
const addressFromScript = fromOutputScript(
|
|
714
|
+
script,
|
|
715
|
+
getBitcoinNetwork(network)
|
|
716
|
+
);
|
|
717
|
+
if (addressFromScript === paymentAddress) {
|
|
718
|
+
paymentsAddressData.signingIndexes.push(Number(counter));
|
|
719
|
+
} else if (addressFromScript === address2) {
|
|
720
|
+
ordinalAddressData.signingIndexes.push(Number(counter));
|
|
721
|
+
}
|
|
722
|
+
counter++;
|
|
723
|
+
}
|
|
724
|
+
} catch (temp) {
|
|
725
|
+
error = [temp];
|
|
726
|
+
} finally {
|
|
727
|
+
try {
|
|
728
|
+
more && (temp = iter.return) && (yield temp.call(iter));
|
|
729
|
+
} finally {
|
|
730
|
+
if (error)
|
|
731
|
+
throw error[0];
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
if (ordinalAddressData.signingIndexes.length > 0) {
|
|
735
|
+
inputsToSign.push(ordinalAddressData);
|
|
736
|
+
}
|
|
737
|
+
if (paymentsAddressData.signingIndexes.length > 0) {
|
|
738
|
+
inputsToSign.push(paymentsAddressData);
|
|
739
|
+
}
|
|
740
|
+
let txId, signedPsbtHex, signedPsbtBase64;
|
|
741
|
+
const xverseNetwork = getXverseNetwork(network);
|
|
742
|
+
const signPsbtOptions = {
|
|
743
|
+
payload: {
|
|
744
|
+
network: {
|
|
745
|
+
type: xverseNetwork
|
|
746
|
+
},
|
|
747
|
+
message: "Sign Transaction",
|
|
748
|
+
psbtBase64: toSignPsbt.toBase64(),
|
|
749
|
+
broadcast,
|
|
750
|
+
inputsToSign
|
|
751
|
+
},
|
|
752
|
+
onFinish: (response) => {
|
|
753
|
+
if (response.txId) {
|
|
754
|
+
txId = response.txId;
|
|
755
|
+
} else if (response.psbtBase64) {
|
|
756
|
+
const signedPsbt = bitcoin2.Psbt.fromBase64(
|
|
757
|
+
String(response.psbtBase64),
|
|
758
|
+
{
|
|
759
|
+
network: getBitcoinNetwork(network)
|
|
760
|
+
}
|
|
761
|
+
);
|
|
762
|
+
signedPsbtHex = signedPsbt.toHex();
|
|
763
|
+
signedPsbtBase64 = signedPsbt.toBase64();
|
|
764
|
+
}
|
|
765
|
+
},
|
|
766
|
+
onCancel: () => console.log("Canceled")
|
|
767
|
+
};
|
|
768
|
+
yield signTransaction(signPsbtOptions);
|
|
769
|
+
return {
|
|
770
|
+
signedPsbtHex,
|
|
771
|
+
signedPsbtBase64,
|
|
772
|
+
txId
|
|
773
|
+
};
|
|
558
774
|
} else {
|
|
559
|
-
throw new Error("
|
|
775
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
560
776
|
}
|
|
561
|
-
} catch (
|
|
562
|
-
throw
|
|
777
|
+
} catch (error2) {
|
|
778
|
+
throw error2;
|
|
563
779
|
}
|
|
564
780
|
});
|
|
565
781
|
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
@@ -569,7 +785,7 @@ var LaserEyesProvider = ({
|
|
|
569
785
|
if (provider === UNISAT) {
|
|
570
786
|
return yield library == null ? void 0 : library.pushPsbt(psbt);
|
|
571
787
|
} else {
|
|
572
|
-
throw new Error("
|
|
788
|
+
throw new Error("The connected wallet doesn't support this method..");
|
|
573
789
|
}
|
|
574
790
|
} catch (error) {
|
|
575
791
|
throw error;
|
|
@@ -582,7 +798,7 @@ var LaserEyesProvider = ({
|
|
|
582
798
|
library,
|
|
583
799
|
accounts,
|
|
584
800
|
publicKey,
|
|
585
|
-
address,
|
|
801
|
+
address: address2,
|
|
586
802
|
paymentAddress,
|
|
587
803
|
paymentPublicKey,
|
|
588
804
|
provider,
|
|
@@ -591,6 +807,7 @@ var LaserEyesProvider = ({
|
|
|
591
807
|
connected,
|
|
592
808
|
isConnecting,
|
|
593
809
|
hasUnisat,
|
|
810
|
+
hasXverse,
|
|
594
811
|
// functions
|
|
595
812
|
connect,
|
|
596
813
|
disconnect,
|
|
@@ -619,6 +836,7 @@ export {
|
|
|
619
836
|
MEMPOOL_SPACE_URL,
|
|
620
837
|
OYL,
|
|
621
838
|
P2PKH,
|
|
839
|
+
P2PSH,
|
|
622
840
|
P2SH,
|
|
623
841
|
P2TR,
|
|
624
842
|
P2WPKH,
|
|
@@ -637,6 +855,7 @@ export {
|
|
|
637
855
|
createConfig,
|
|
638
856
|
findOrdinalsAddress,
|
|
639
857
|
findPaymentAddress,
|
|
858
|
+
getAddressType,
|
|
640
859
|
getBTCBalance,
|
|
641
860
|
getBitcoinNetwork,
|
|
642
861
|
getLeatherNetwork,
|