@babylonlabs-io/ts-sdk 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/challengeAssert-DW0sEUgn.cjs +2 -0
- package/dist/challengeAssert-DW0sEUgn.cjs.map +1 -0
- package/dist/{challengeAssert-D50t_Qyo.js → challengeAssert-DnnliaRt.js} +66 -60
- package/dist/challengeAssert-DnnliaRt.js.map +1 -0
- package/dist/{errors-D_DWT0CT.js → errors-DOJdtNTD.js} +465 -391
- package/dist/errors-DOJdtNTD.js.map +1 -0
- package/dist/errors-DbATYfYA.cjs +2 -0
- package/dist/errors-DbATYfYA.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +71 -72
- package/dist/index.js.map +1 -1
- package/dist/shared/index.cjs +1 -1
- package/dist/shared/index.cjs.map +1 -1
- package/dist/shared/index.d.ts +2 -4
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +6 -5
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/wallets/index.d.ts +2 -4
- package/dist/shared/wallets/index.d.ts.map +1 -1
- package/dist/shared/wallets/interfaces/index.d.ts +1 -1
- package/dist/shared/wallets/interfaces/index.d.ts.map +1 -1
- package/dist/tbv/core/index.cjs +1 -1
- package/dist/tbv/core/index.js +64 -62
- package/dist/tbv/core/managers/PeginManager.d.ts +41 -75
- package/dist/tbv/core/managers/PeginManager.d.ts.map +1 -1
- package/dist/tbv/core/primitives/index.cjs +1 -1
- package/dist/tbv/core/primitives/index.d.ts +1 -1
- package/dist/tbv/core/primitives/index.d.ts.map +1 -1
- package/dist/tbv/core/primitives/index.js +9 -10
- package/dist/tbv/core/primitives/psbt/pegin.d.ts +10 -11
- package/dist/tbv/core/primitives/psbt/pegin.d.ts.map +1 -1
- package/dist/tbv/core/utils/__tests__/signing.test.d.ts +2 -0
- package/dist/tbv/core/utils/__tests__/signing.test.d.ts.map +1 -0
- package/dist/tbv/core/utils/fee/constants.d.ts +16 -0
- package/dist/tbv/core/utils/fee/constants.d.ts.map +1 -1
- package/dist/tbv/core/utils/index.d.ts +1 -0
- package/dist/tbv/core/utils/index.d.ts.map +1 -1
- package/dist/{shared/wallets/signOptions.d.ts → tbv/core/utils/signing.d.ts} +2 -2
- package/dist/tbv/core/utils/signing.d.ts.map +1 -0
- package/dist/tbv/core/utils/utxo/selectUtxos.d.ts +2 -1
- package/dist/tbv/core/utils/utxo/selectUtxos.d.ts.map +1 -1
- package/dist/tbv/index.cjs +1 -1
- package/dist/tbv/index.js +64 -62
- package/dist/{shared/wallets/mocks → testing}/MockBitcoinWallet.d.ts +2 -2
- package/dist/testing/MockBitcoinWallet.d.ts.map +1 -0
- package/dist/testing/MockEthereumWallet.d.ts.map +1 -0
- package/dist/testing/__tests__/MockEthereumWallet.test.d.ts +2 -0
- package/dist/testing/__tests__/MockEthereumWallet.test.d.ts.map +1 -0
- package/dist/testing/index.cjs +2 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/{MockEthereumWallet-ibdry7pZ.js → testing/index.js} +6 -8
- package/dist/testing/index.js.map +1 -0
- package/package.json +8 -3
- package/dist/MockEthereumWallet-CKQlH2AM.cjs +0 -2
- package/dist/MockEthereumWallet-CKQlH2AM.cjs.map +0 -1
- package/dist/MockEthereumWallet-ibdry7pZ.js.map +0 -1
- package/dist/challengeAssert-D50t_Qyo.js.map +0 -1
- package/dist/challengeAssert-DDceAi0r.cjs +0 -2
- package/dist/challengeAssert-DDceAi0r.cjs.map +0 -1
- package/dist/errors-D_DWT0CT.js.map +0 -1
- package/dist/errors-tDgLyp-N.cjs +0 -2
- package/dist/errors-tDgLyp-N.cjs.map +0 -1
- package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts +0 -2
- package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts.map +0 -1
- package/dist/shared/wallets/__tests__/signOptions.test.d.ts +0 -2
- package/dist/shared/wallets/__tests__/signOptions.test.d.ts.map +0 -1
- package/dist/shared/wallets/mocks/MockBitcoinWallet.d.ts.map +0 -1
- package/dist/shared/wallets/mocks/MockEthereumWallet.d.ts.map +0 -1
- package/dist/shared/wallets/mocks/index.d.ts.map +0 -1
- package/dist/shared/wallets/signOptions.d.ts.map +0 -1
- package/dist/signOptions-Deg5lCoC.cjs +0 -2
- package/dist/signOptions-Deg5lCoC.cjs.map +0 -1
- package/dist/signOptions-Drwr3bXB.js +0 -16
- package/dist/signOptions-Drwr3bXB.js.map +0 -1
- /package/dist/{shared/wallets/mocks → testing}/MockEthereumWallet.d.ts +0 -0
- /package/dist/{shared/wallets/mocks → testing}/index.d.ts +0 -0
|
@@ -75,7 +75,7 @@ export { computeNumLocalChallengers } from './challengers';
|
|
|
75
75
|
export type { Network } from '@babylonlabs-io/babylon-tbv-rust-wasm';
|
|
76
76
|
export { computeMinClaimValue } from '@babylonlabs-io/babylon-tbv-rust-wasm';
|
|
77
77
|
export type { AssertPayoutNoPayoutConnectorParams, ChallengeAssertConnectorParams, PayoutConnectorParams, } from '@babylonlabs-io/babylon-tbv-rust-wasm';
|
|
78
|
-
export { buildPrePeginPsbt, buildPeginTxFromFundedPrePegin
|
|
78
|
+
export { buildPrePeginPsbt, buildPeginTxFromFundedPrePegin } from './psbt/pegin';
|
|
79
79
|
export type { PrePeginParams, PrePeginPsbtResult, BuildPeginTxParams, PeginTxResult, } from './psbt/pegin';
|
|
80
80
|
export { buildPeginInputPsbt, extractPeginInputSignature, finalizePeginInputPsbt } from './psbt/peginInput';
|
|
81
81
|
export type { BuildPeginInputPsbtParams, BuildPeginInputPsbtResult, } from './psbt/peginInput';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tbv/core/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAG3D,YAAY,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,YAAY,EACV,mCAAmC,EACnC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tbv/core/primitives/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwEG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAG3D,YAAY,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,YAAY,EACV,mCAAmC,EACnC,8BAA8B,EAC9B,qBAAqB,GACtB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,iBAAiB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AACjF,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC5G,YAAY,EACV,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAGpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,cAAc,EACd,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,KAAK,4BAA4B,GAClC,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { k as s, i as t, j as i, g as r, d as u, a as
|
|
2
|
-
import {
|
|
1
|
+
import { k as s, i as t, j as i, g as r, d as u, a as o, b as P, c as l, l as n, m as d, n as b, r as p, h as g, e as x, f as y, o as c, p as m, q as f, s as A, t as v, u as T, v as h, w as H } from "../../../challengeAssert-DnnliaRt.js";
|
|
2
|
+
import { computeMinClaimValue as C } from "@babylonlabs-io/babylon-tbv-rust-wasm";
|
|
3
3
|
export {
|
|
4
|
-
h as SINGLE_DEPOSIT_HTLC_VOUT,
|
|
5
4
|
s as buildChallengeAssertPsbt,
|
|
6
5
|
t as buildDepositorPayoutPsbt,
|
|
7
6
|
i as buildNoPayoutPsbt,
|
|
8
7
|
r as buildPayoutPsbt,
|
|
9
8
|
u as buildPeginInputPsbt,
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
o as buildPeginTxFromFundedPrePegin,
|
|
10
|
+
P as buildPrePeginPsbt,
|
|
12
11
|
C as computeMinClaimValue,
|
|
13
12
|
l as computeNumLocalChallengers,
|
|
14
13
|
n as createPayoutScript,
|
|
@@ -20,11 +19,11 @@ export {
|
|
|
20
19
|
y as finalizePeginInputPsbt,
|
|
21
20
|
c as hexToUint8Array,
|
|
22
21
|
m as isAddressFromPublicKey,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
22
|
+
f as isValidHex,
|
|
23
|
+
A as processPublicKeyToXOnly,
|
|
24
|
+
v as stripHexPrefix,
|
|
25
|
+
T as toXOnly,
|
|
26
|
+
h as uint8ArrayToHex,
|
|
28
27
|
H as validateWalletPubkey
|
|
29
28
|
};
|
|
30
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Network } from '@babylonlabs-io/babylon-tbv-rust-wasm';
|
|
2
|
-
export { SINGLE_DEPOSIT_HTLC_VOUT } from '@babylonlabs-io/babylon-tbv-rust-wasm';
|
|
3
2
|
/**
|
|
4
3
|
* Parameters for building an unfunded Pre-PegIn PSBT
|
|
5
4
|
*/
|
|
@@ -16,8 +15,8 @@ export interface PrePeginParams {
|
|
|
16
15
|
hashlocks: readonly string[];
|
|
17
16
|
/** CSV timelock in blocks for the HTLC refund path */
|
|
18
17
|
timelockRefund: number;
|
|
19
|
-
/**
|
|
20
|
-
|
|
18
|
+
/** Amounts to peg in (satoshis), one per deposit */
|
|
19
|
+
pegInAmounts: readonly bigint[];
|
|
21
20
|
/** Fee rate in sat/vB from contract offchain params */
|
|
22
21
|
feeRate: bigint;
|
|
23
22
|
/** Number of local challengers (from contract params) */
|
|
@@ -45,14 +44,14 @@ export interface PrePeginPsbtResult {
|
|
|
45
44
|
psbtHex: string;
|
|
46
45
|
/** Sum of all unfunded outputs (HTLC + CPFP anchor) — use this for UTXO selection */
|
|
47
46
|
totalOutputValue: bigint;
|
|
48
|
-
/** HTLC output
|
|
49
|
-
|
|
50
|
-
/** HTLC output
|
|
51
|
-
|
|
52
|
-
/** HTLC Taproot
|
|
53
|
-
|
|
54
|
-
/** Pegin
|
|
55
|
-
|
|
47
|
+
/** HTLC output values in satoshis, one per deposit (each includes peginAmount + depositorClaimValue + minPeginFee) */
|
|
48
|
+
htlcValues: readonly bigint[];
|
|
49
|
+
/** HTLC output scriptPubKeys (hex encoded), one per deposit */
|
|
50
|
+
htlcScriptPubKeys: readonly string[];
|
|
51
|
+
/** HTLC Taproot addresses, one per deposit */
|
|
52
|
+
htlcAddresses: readonly string[];
|
|
53
|
+
/** Pegin amounts in satoshis, one per deposit */
|
|
54
|
+
peginAmounts: readonly bigint[];
|
|
56
55
|
/** Depositor claim value computed by WASM from contract parameters */
|
|
57
56
|
depositorClaimValue: bigint;
|
|
58
57
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pegin.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/primitives/psbt/pegin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAGL,KAAK,OAAO,EACb,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"pegin.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/primitives/psbt/pegin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAGL,KAAK,OAAO,EACb,MAAM,uCAAuC,CAAC;AAI/C;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,mBAAmB,EAAE,MAAM,CAAC;IAC5B,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,0BAA0B,EAAE,MAAM,EAAE,CAAC;IACrC,+DAA+D;IAC/D,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;IACvB,oDAAoD;IACpD,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;;;;;OAQG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,gBAAgB,EAAE,MAAM,CAAC;IACzB,sHAAsH;IACtH,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,+DAA+D;IAC/D,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8CAA8C;IAC9C,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,iDAAiD;IACjD,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,sEAAsE;IACtE,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,cAAc,EAAE,cAAc,CAAC;IAC/B,wDAAwD;IACxD,aAAa,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,mBAAmB,EAAE,MAAM,CAAC;IAC5B,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,kBAAkB,CAAC,CAiC7B;AAED;;;;;;;;;GASG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,aAAa,CAAC,CA2BxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.test.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/utils/__tests__/signing.test.ts"],"names":[],"mappings":""}
|
|
@@ -22,6 +22,22 @@ export declare const FEE_SAFETY_MARGIN = 1.1;
|
|
|
22
22
|
* @returns Buffer amount in satoshis to add to the transaction fee
|
|
23
23
|
*/
|
|
24
24
|
export declare function rateBasedTxBufferFee(feeRate: number): number;
|
|
25
|
+
/**
|
|
26
|
+
* Number of fixed (non-HTLC) outputs in a Pre-PegIn transaction.
|
|
27
|
+
* Currently this is 1 CPFP anchor output.
|
|
28
|
+
*/
|
|
29
|
+
export declare const PEGIN_FIXED_OUTPUTS = 1;
|
|
30
|
+
/**
|
|
31
|
+
* Compute the total number of outputs (before change) in a Pre-PegIn transaction.
|
|
32
|
+
*
|
|
33
|
+
* A Pre-PegIn tx has: N HTLC outputs (one per vault) + fixed outputs (CPFP anchor).
|
|
34
|
+
* This count is used for fee estimation — the change output is handled separately
|
|
35
|
+
* by selectUtxosForPegin when the change amount exceeds the dust threshold.
|
|
36
|
+
*
|
|
37
|
+
* @param vaultCount - Number of vaults in the batch (1 for single-vault)
|
|
38
|
+
* @returns Total output count before change
|
|
39
|
+
*/
|
|
40
|
+
export declare function peginOutputCount(vaultCount: number): number;
|
|
25
41
|
/**
|
|
26
42
|
* Safety multiplier for split transaction fee validation.
|
|
27
43
|
* The signed PSBT's fee rate and absolute fee must not exceed this multiple
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/utils/fee/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAG7C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAG1C,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,oFAAoF;AACpF,eAAO,MAAM,cAAc,QAAuB,CAAC;AAGnD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AAGtD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAGjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/utils/fee/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAG7C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAG1C,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,oFAAoF;AACpF,eAAO,MAAM,cAAc,QAAuB,CAAC;AAGnD,eAAO,MAAM,mCAAmC,KAAK,CAAC;AAGtD,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAGjD,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,IAAI,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tbv/core/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tbv/core/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,cAAc,OAAO,CAAC;AACtB,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SignPsbtOptions } from '
|
|
1
|
+
import { SignPsbtOptions } from '../../../shared/wallets/interfaces';
|
|
2
2
|
/**
|
|
3
3
|
* Create SignPsbtOptions for Taproot script-path PSBT signing.
|
|
4
4
|
*
|
|
@@ -12,4 +12,4 @@ import { SignPsbtOptions } from './interfaces';
|
|
|
12
12
|
* for indices 0 through inputCount-1.
|
|
13
13
|
*/
|
|
14
14
|
export declare function createTaprootScriptPathSignOptions(publicKey: string, inputCount: number): SignPsbtOptions;
|
|
15
|
-
//# sourceMappingURL=
|
|
15
|
+
//# sourceMappingURL=signing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../../src/tbv/core/utils/signing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAE1E;;;;;;;;;;;GAWG;AACH,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,eAAe,CAajB"}
|
|
@@ -45,10 +45,11 @@ export interface UTXOSelectionResult {
|
|
|
45
45
|
* @param availableUTXOs - All available UTXOs from wallet
|
|
46
46
|
* @param peginAmount - Amount to peg in (satoshis)
|
|
47
47
|
* @param feeRate - Fee rate (sat/vbyte)
|
|
48
|
+
* @param numOutputs - Number of outputs in the unfunded transaction (HTLC + CPFP anchor, before change)
|
|
48
49
|
* @returns Selected UTXOs, total value, calculated fee, and change amount
|
|
49
50
|
* @throws Error if insufficient funds or no valid UTXOs
|
|
50
51
|
*/
|
|
51
|
-
export declare function selectUtxosForPegin(availableUTXOs: UTXO[], peginAmount: bigint, feeRate: number): UTXOSelectionResult;
|
|
52
|
+
export declare function selectUtxosForPegin(availableUTXOs: UTXO[], peginAmount: bigint, feeRate: number, numOutputs: number): UTXOSelectionResult;
|
|
52
53
|
/**
|
|
53
54
|
* Checks if change amount is above dust threshold.
|
|
54
55
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectUtxos.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/utils/utxo/selectUtxos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED
|
|
1
|
+
{"version":3,"file":"selectUtxos.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/core/utils/utxo/selectUtxos.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,mBAAmB,CACjC,cAAc,EAAE,IAAI,EAAE,EACtB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACjB,mBAAmB,CA6ErB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
package/dist/tbv/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../challengeAssert-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../challengeAssert-DW0sEUgn.cjs"),r=require("@babylonlabs-io/babylon-tbv-rust-wasm"),t=require("../errors-DbATYfYA.cjs");exports.BTC_DUST_SAT=e.BTC_DUST_SAT;exports.DUST_THRESHOLD=e.DUST_THRESHOLD;exports.FEE_SAFETY_MARGIN=e.FEE_SAFETY_MARGIN;exports.LOW_RATE_ESTIMATION_ACCURACY_BUFFER=e.LOW_RATE_ESTIMATION_ACCURACY_BUFFER;exports.MAX_NON_LEGACY_OUTPUT_SIZE=e.MAX_NON_LEGACY_OUTPUT_SIZE;exports.P2TR_INPUT_SIZE=e.P2TR_INPUT_SIZE;exports.PEGIN_FIXED_OUTPUTS=e.PEGIN_FIXED_OUTPUTS;exports.SPLIT_TX_FEE_SAFETY_MULTIPLIER=e.SPLIT_TX_FEE_SAFETY_MULTIPLIER;exports.TX_BUFFER_SIZE_OVERHEAD=e.TX_BUFFER_SIZE_OVERHEAD;exports.WALLET_RELAY_FEE_RATE_THRESHOLD=e.WALLET_RELAY_FEE_RATE_THRESHOLD;exports.buildChallengeAssertPsbt=e.buildChallengeAssertPsbt;exports.buildDepositorPayoutPsbt=e.buildDepositorPayoutPsbt;exports.buildNoPayoutPsbt=e.buildNoPayoutPsbt;exports.buildPayoutPsbt=e.buildPayoutPsbt;exports.buildPeginInputPsbt=e.buildPeginInputPsbt;exports.buildPeginTxFromFundedPrePegin=e.buildPeginTxFromFundedPrePegin;exports.buildPrePeginPsbt=e.buildPrePeginPsbt;exports.computeNumLocalChallengers=e.computeNumLocalChallengers;exports.createPayoutScript=e.createPayoutScript;exports.deriveNativeSegwitAddress=e.deriveNativeSegwitAddress;exports.deriveTaprootAddress=e.deriveTaprootAddress;exports.ensureHexPrefix=e.ensureHexPrefix;exports.extractPayoutSignature=e.extractPayoutSignature;exports.extractPeginInputSignature=e.extractPeginInputSignature;exports.finalizePeginInputPsbt=e.finalizePeginInputPsbt;exports.fundPeginTransaction=e.fundPeginTransaction;exports.getNetwork=e.getNetwork;exports.hexToUint8Array=e.hexToUint8Array;exports.isAddressFromPublicKey=e.isAddressFromPublicKey;exports.isValidHex=e.isValidHex;exports.parseUnfundedWasmTransaction=e.parseUnfundedWasmTransaction;exports.peginOutputCount=e.peginOutputCount;exports.processPublicKeyToXOnly=e.processPublicKeyToXOnly;exports.rateBasedTxBufferFee=e.rateBasedTxBufferFee;exports.stripHexPrefix=e.stripHexPrefix;exports.toXOnly=e.toXOnly;exports.uint8ArrayToHex=e.uint8ArrayToHex;exports.validateWalletPubkey=e.validateWalletPubkey;Object.defineProperty(exports,"computeMinClaimValue",{enumerable:!0,get:()=>r.computeMinClaimValue});exports.BTCVaultRegistryABI=t.BTCVaultRegistryABI;exports.BitcoinScriptType=t.BitcoinScriptType;exports.CONTRACT_ERRORS=t.CONTRACT_ERRORS;exports.MEMPOOL_API_URLS=t.MEMPOOL_API_URLS;exports.PayoutManager=t.PayoutManager;exports.PeginManager=t.PeginManager;exports.calculateBtcTxHash=t.calculateBtcTxHash;exports.computeLamportPkHash=t.computeLamportPkHash;exports.createSplitTransaction=t.createSplitTransaction;exports.createSplitTransactionPsbt=t.createSplitTransactionPsbt;exports.createTaprootScriptPathSignOptions=t.createTaprootScriptPathSignOptions;exports.deriveLamportKeypair=t.deriveLamportKeypair;exports.deriveLamportPkHash=t.deriveLamportPkHash;exports.extractErrorData=t.extractErrorData;exports.getAddressTxs=t.getAddressTxs;exports.getAddressUtxos=t.getAddressUtxos;exports.getContractErrorMessage=t.getContractErrorMessage;exports.getDustThreshold=t.getDustThreshold;exports.getMempoolApiUrl=t.getMempoolApiUrl;exports.getNetworkFees=t.getNetworkFees;exports.getPsbtInputFields=t.getPsbtInputFields;exports.getScriptType=t.getScriptType;exports.getTxHex=t.getTxHex;exports.getTxInfo=t.getTxInfo;exports.getUtxoInfo=t.getUtxoInfo;exports.handleContractError=t.handleContractError;exports.isKnownContractError=t.isKnownContractError;exports.isLamportMismatchError=t.isLamportMismatchError;exports.keypairToPublicKey=t.keypairToPublicKey;exports.mnemonicToLamportSeed=t.mnemonicToLamportSeed;exports.pushTx=t.pushTx;exports.selectUtxosForPegin=t.selectUtxosForPegin;exports.shouldAddChangeOutput=t.shouldAddChangeOutput;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/tbv/index.js
CHANGED
|
@@ -1,76 +1,78 @@
|
|
|
1
|
-
import { B as e, D as t, F as r, L as o, M as i, P as n,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { B as e, D as t, F as r, L as o, M as i, P as n, y as T, S as u, T as P, W as p, k as d, i as l, j as c, g, d as E, a as _, b as A, c as S, l as x, m as b, n as m, r as y, h as I, e as L, f as C, C as F, E as R, o as U, p as O, q as h, A as f, z as M, s as H, x as N, t as B, u as D, v as k, w as v } from "../challengeAssert-DnnliaRt.js";
|
|
2
|
+
import { computeMinClaimValue as X } from "@babylonlabs-io/babylon-tbv-rust-wasm";
|
|
3
|
+
import { r as W, B as Y, C as V, M as z, i as G, P as Z, c as j, A as q, b as J, d as Q, h as $, y as aa, D as sa, t as ea, j as ta, k as ra, u as oa, g as ia, l as na, m as Ta, f as ua, e as Pa, n as pa, o as da, p as la, w as ca, v as ga, E as Ea, z as _a, x as Aa, q as Sa, s as xa, a as ba } from "../errors-DOJdtNTD.js";
|
|
4
4
|
export {
|
|
5
|
-
|
|
5
|
+
W as BTCVaultRegistryABI,
|
|
6
6
|
e as BTC_DUST_SAT,
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Y as BitcoinScriptType,
|
|
8
|
+
V as CONTRACT_ERRORS,
|
|
9
9
|
t as DUST_THRESHOLD,
|
|
10
10
|
r as FEE_SAFETY_MARGIN,
|
|
11
11
|
o as LOW_RATE_ESTIMATION_ACCURACY_BUFFER,
|
|
12
12
|
i as MAX_NON_LEGACY_OUTPUT_SIZE,
|
|
13
|
-
|
|
13
|
+
z as MEMPOOL_API_URLS,
|
|
14
14
|
n as P2TR_INPUT_SIZE,
|
|
15
|
-
|
|
16
|
-
G as
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
T as PEGIN_FIXED_OUTPUTS,
|
|
16
|
+
G as PayoutManager,
|
|
17
|
+
Z as PeginManager,
|
|
18
|
+
u as SPLIT_TX_FEE_SAFETY_MULTIPLIER,
|
|
19
19
|
P as TX_BUFFER_SIZE_OVERHEAD,
|
|
20
|
-
|
|
20
|
+
p as WALLET_RELAY_FEE_RATE_THRESHOLD,
|
|
21
21
|
d as buildChallengeAssertPsbt,
|
|
22
22
|
l as buildDepositorPayoutPsbt,
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
c as buildNoPayoutPsbt,
|
|
24
|
+
g as buildPayoutPsbt,
|
|
25
|
+
E as buildPeginInputPsbt,
|
|
26
|
+
_ as buildPeginTxFromFundedPrePegin,
|
|
27
|
+
A as buildPrePeginPsbt,
|
|
28
|
+
j as calculateBtcTxHash,
|
|
29
|
+
q as computeLamportPkHash,
|
|
30
|
+
X as computeMinClaimValue,
|
|
31
|
+
S as computeNumLocalChallengers,
|
|
32
32
|
x as createPayoutScript,
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
b as
|
|
39
|
-
m as
|
|
40
|
-
|
|
41
|
-
|
|
33
|
+
J as createSplitTransaction,
|
|
34
|
+
Q as createSplitTransactionPsbt,
|
|
35
|
+
$ as createTaprootScriptPathSignOptions,
|
|
36
|
+
aa as deriveLamportKeypair,
|
|
37
|
+
sa as deriveLamportPkHash,
|
|
38
|
+
b as deriveNativeSegwitAddress,
|
|
39
|
+
m as deriveTaprootAddress,
|
|
40
|
+
y as ensureHexPrefix,
|
|
41
|
+
ea as extractErrorData,
|
|
42
|
+
I as extractPayoutSignature,
|
|
42
43
|
L as extractPeginInputSignature,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
xa as
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
44
|
+
C as finalizePeginInputPsbt,
|
|
45
|
+
F as fundPeginTransaction,
|
|
46
|
+
ta as getAddressTxs,
|
|
47
|
+
ra as getAddressUtxos,
|
|
48
|
+
oa as getContractErrorMessage,
|
|
49
|
+
ia as getDustThreshold,
|
|
50
|
+
na as getMempoolApiUrl,
|
|
51
|
+
R as getNetwork,
|
|
52
|
+
Ta as getNetworkFees,
|
|
53
|
+
ua as getPsbtInputFields,
|
|
54
|
+
Pa as getScriptType,
|
|
55
|
+
pa as getTxHex,
|
|
56
|
+
da as getTxInfo,
|
|
57
|
+
la as getUtxoInfo,
|
|
58
|
+
ca as handleContractError,
|
|
59
|
+
U as hexToUint8Array,
|
|
60
|
+
O as isAddressFromPublicKey,
|
|
61
|
+
ga as isKnownContractError,
|
|
62
|
+
Ea as isLamportMismatchError,
|
|
63
|
+
h as isValidHex,
|
|
64
|
+
_a as keypairToPublicKey,
|
|
65
|
+
Aa as mnemonicToLamportSeed,
|
|
66
|
+
f as parseUnfundedWasmTransaction,
|
|
67
|
+
M as peginOutputCount,
|
|
68
|
+
H as processPublicKeyToXOnly,
|
|
69
|
+
Sa as pushTx,
|
|
70
|
+
N as rateBasedTxBufferFee,
|
|
71
|
+
xa as selectUtxosForPegin,
|
|
72
|
+
ba as shouldAddChangeOutput,
|
|
73
|
+
B as stripHexPrefix,
|
|
74
|
+
D as toXOnly,
|
|
75
|
+
k as uint8ArrayToHex,
|
|
76
|
+
v as validateWalletPubkey
|
|
75
77
|
};
|
|
76
78
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { BitcoinNetwork } from '../interfaces';
|
|
2
|
-
import { BitcoinWallet } from '../interfaces/BitcoinWallet';
|
|
1
|
+
import { BitcoinNetwork } from '../shared/wallets/interfaces';
|
|
2
|
+
import { BitcoinWallet } from '../shared/wallets/interfaces/BitcoinWallet';
|
|
3
3
|
/**
|
|
4
4
|
* Configuration for MockBitcoinWallet.
|
|
5
5
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockBitcoinWallet.d.ts","sourceRoot":"","sources":["../../src/testing/MockBitcoinWallet.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,iBAAkB,YAAW,aAAa;IACrD,OAAO,CAAC,MAAM,CAAoC;gBAEtC,MAAM,GAAE,uBAA4B;IAa1C,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc1C,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IASlD,WAAW,CACf,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,eAAe,GAAG,OAAO,GAC9B,OAAO,CAAC,MAAM,CAAC;IAiBZ,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAI3C,6DAA6D;IAC7D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI;IAO7D,uCAAuC;IACvC,KAAK,IAAI,IAAI;CASd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockEthereumWallet.d.ts","sourceRoot":"","sources":["../../src/testing/MockEthereumWallet.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;GAKG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAEtB,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,KAAK,CAAa;gBAEd,MAAM,GAAE,wBAA6B;IAoB3C,WAAW,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBvE,eAAe,CAAC,EAAE,EAAE;QACxB,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC;QAC/B,KAAK,CAAC,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;KACxB,GAAG,OAAO,CAAC,GAAG,CAAC;IAiChB,6DAA6D;IAC7D,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI;IAe9D,iDAAiD;IACjD,KAAK,IAAI,IAAI;IASb,yCAAyC;IACzC,eAAe,IAAI,MAAM;CAG1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MockEthereumWallet.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/MockEthereumWallet.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var q=Object.defineProperty;var d=(n,i,s)=>i in n?q(n,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[i]=s;var t=(n,i,s)=>d(n,typeof i!="symbol"?i+"":i,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("buffer"),c=require("../shared/index.cjs");class h{constructor(i={}){t(this,"config");this.config={publicKeyHex:i.publicKeyHex||"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",address:i.address||"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks",network:i.network??c.BitcoinNetworks.SIGNET,shouldFailSigning:i.shouldFailSigning??!1}}async getPublicKeyHex(){return this.config.publicKeyHex}async getAddress(){return this.config.address}async signPsbt(i){if(this.config.shouldFailSigning)throw new Error("Mock signing failed");if(!i||i.length===0)throw new Error("Invalid PSBT: empty hex string");return i+"deadbeef"}async signPsbts(i){const s=[];for(const a of i){const e=await this.signPsbt(a);s.push(e)}return s}async signMessage(i,s){if(this.config.shouldFailSigning)throw new Error("Mock signing failed");if(!i||i.length===0)throw new Error("Invalid message: empty string");return o.Buffer.from(`mock-signature-${s}-${i}-${this.config.publicKeyHex}`).toString("base64")}async getNetwork(){return this.config.network}updateConfig(i){this.config={...this.config,...i}}reset(){this.config={publicKeyHex:"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",address:"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks",network:c.BitcoinNetworks.SIGNET,shouldFailSigning:!1}}}class l{constructor(i={}){t(this,"account");t(this,"chain");t(this,"shouldFailOperations");t(this,"transactionDelay");t(this,"nonce",0);this.account={address:i.address||"0x742d35cc6634c0532925a3b844bc9e7595f0beb0"},this.chain={id:i.chainId??11155111},this.shouldFailOperations=i.shouldFailOperations??!1,this.transactionDelay=i.transactionDelay??0,this.signMessage=this.signMessage.bind(this),this.sendTransaction=this.sendTransaction.bind(this)}async signMessage(i){const s=i.message,a=i.account||this.account.address;if(this.shouldFailOperations)throw new Error("Mock signing failed");if(!s||s.length===0)throw new Error("Invalid message: empty string");const e=`personal_sign:${s}-${a}-${this.chain.id}`;return`0x${o.Buffer.from(e).toString("hex").slice(0,130).padEnd(130,"0")}`}async sendTransaction(i){var e;if(this.shouldFailOperations)throw new Error("Mock transaction failed");if(!i.to)throw new Error("Invalid transaction: missing 'to' address");this.transactionDelay>0&&await new Promise(r=>setTimeout(r,this.transactionDelay)),this.nonce++;const s=JSON.stringify({from:this.account.address,to:i.to,value:((e=i.value)==null?void 0:e.toString())||"0",nonce:this.nonce,chainId:this.chain.id});return`0x${o.Buffer.from(s).toString("hex").slice(0,64).padEnd(64,"0")}`}updateConfig(i){i.address!==void 0&&(this.account.address=i.address),i.chainId!==void 0&&(this.chain.id=i.chainId),i.shouldFailOperations!==void 0&&(this.shouldFailOperations=i.shouldFailOperations),i.transactionDelay!==void 0&&(this.transactionDelay=i.transactionDelay)}reset(){this.account.address="0x742d35cc6634c0532925a3b844bc9e7595f0beb0",this.chain.id=11155111,this.shouldFailOperations=!1,this.transactionDelay=0,this.nonce=0}getCurrentNonce(){return this.nonce}}exports.MockBitcoinWallet=h;exports.MockEthereumWallet=l;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/testing/MockBitcoinWallet.ts","../../src/testing/MockEthereumWallet.ts"],"sourcesContent":["import { Buffer } from \"buffer\";\n\nimport { BitcoinNetworks, type BitcoinNetwork } from \"../shared/wallets/interfaces\";\nimport type { BitcoinWallet } from \"../shared/wallets/interfaces/BitcoinWallet\";\n\n/**\n * Configuration for MockBitcoinWallet.\n */\nexport interface MockBitcoinWalletConfig {\n publicKeyHex?: string;\n address?: string;\n network?: BitcoinNetwork;\n shouldFailSigning?: boolean;\n}\n\n/**\n * Mock Bitcoin wallet for testing.\n */\nexport class MockBitcoinWallet implements BitcoinWallet {\n private config: Required<MockBitcoinWalletConfig>;\n\n constructor(config: MockBitcoinWalletConfig = {}) {\n this.config = {\n publicKeyHex:\n config.publicKeyHex ||\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address:\n config.address ||\n \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: config.network ?? BitcoinNetworks.SIGNET,\n shouldFailSigning: config.shouldFailSigning ?? false,\n };\n }\n\n async getPublicKeyHex(): Promise<string> {\n return this.config.publicKeyHex;\n }\n\n async getAddress(): Promise<string> {\n return this.config.address;\n }\n\n async signPsbt(psbtHex: string): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!psbtHex || psbtHex.length === 0) {\n throw new Error(\"Invalid PSBT: empty hex string\");\n }\n\n // In a real implementation, this would actually sign the PSBT\n // For the mock, we just return the input with a mock signature appended\n return psbtHex + \"deadbeef\";\n }\n\n async signPsbts(psbtsHexes: string[]): Promise<string[]> {\n const signedPsbts: string[] = [];\n for (const psbtHex of psbtsHexes) {\n const signedPsbt = await this.signPsbt(psbtHex);\n signedPsbts.push(signedPsbt);\n }\n return signedPsbts;\n }\n\n async signMessage(\n message: string,\n type: \"bip322-simple\" | \"ecdsa\",\n ): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // In a real implementation, this would create a proper signature\n // For the mock, we return a base64-like mock signature\n const mockSignature = Buffer.from(\n `mock-signature-${type}-${message}-${this.config.publicKeyHex}`,\n ).toString(\"base64\");\n return mockSignature;\n }\n\n async getNetwork(): Promise<BitcoinNetwork> {\n return this.config.network;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockBitcoinWalletConfig>): void {\n this.config = {\n ...this.config,\n ...updates,\n };\n }\n\n /** Resets to default configuration. */\n reset(): void {\n this.config = {\n publicKeyHex:\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address: \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: BitcoinNetworks.SIGNET,\n shouldFailSigning: false,\n };\n }\n}\n","import { Buffer } from \"buffer\";\nimport type { Address, Hex } from \"viem\";\n\n/**\n * Configuration for MockEthereumWallet.\n */\nexport interface MockEthereumWalletConfig {\n address?: Address;\n chainId?: number;\n shouldFailOperations?: boolean;\n transactionDelay?: number;\n}\n\n/**\n * Mock Ethereum wallet for testing.\n *\n * Provides the subset of viem's WalletClient methods used by the SDK.\n * Can be passed to functions expecting a WalletClient for testing purposes.\n */\nexport class MockEthereumWallet {\n // Public properties matching viem's WalletClient structure\n account: { address: Address };\n chain: { id: number };\n\n private shouldFailOperations: boolean;\n private transactionDelay: number;\n private nonce: number = 0;\n\n constructor(config: MockEthereumWalletConfig = {}) {\n // Use lowercase addresses to avoid EIP-55 checksum validation issues\n this.account = {\n address:\n config.address ||\n (\"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address),\n };\n\n this.chain = {\n id: config.chainId ?? 11155111, // Sepolia by default\n };\n\n this.shouldFailOperations = config.shouldFailOperations ?? false;\n this.transactionDelay = config.transactionDelay ?? 0;\n\n // Bind methods to preserve 'this' context when called\n this.signMessage = this.signMessage.bind(this);\n this.sendTransaction = this.sendTransaction.bind(this);\n }\n\n async signMessage(args: { message: string; account?: Address }): Promise<Hex> {\n const message = args.message;\n const account = args.account || this.account.address;\n\n if (this.shouldFailOperations) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // Generate a deterministic mock signature\n const signatureData = `personal_sign:${message}-${account}-${this.chain.id}`;\n const signature = `0x${Buffer.from(signatureData)\n .toString(\"hex\")\n .slice(0, 130)\n .padEnd(130, \"0\")}` as Hex;\n return signature;\n }\n\n async sendTransaction(tx: {\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n account?: { address: Address };\n chain?: { id: number };\n }): Promise<Hex> {\n if (this.shouldFailOperations) {\n throw new Error(\"Mock transaction failed\");\n }\n\n if (!tx.to) {\n throw new Error(\"Invalid transaction: missing 'to' address\");\n }\n\n // Simulate network delay if configured\n if (this.transactionDelay > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.transactionDelay),\n );\n }\n\n // Generate a deterministic mock transaction hash\n this.nonce++;\n const txData = JSON.stringify({\n from: this.account.address,\n to: tx.to,\n value: tx.value?.toString() || \"0\",\n nonce: this.nonce,\n chainId: this.chain.id,\n });\n\n const hash = `0x${Buffer.from(txData)\n .toString(\"hex\")\n .slice(0, 64)\n .padEnd(64, \"0\")}` as Hex;\n return hash;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockEthereumWalletConfig>): void {\n if (updates.address !== undefined) {\n this.account.address = updates.address;\n }\n if (updates.chainId !== undefined) {\n this.chain.id = updates.chainId;\n }\n if (updates.shouldFailOperations !== undefined) {\n this.shouldFailOperations = updates.shouldFailOperations;\n }\n if (updates.transactionDelay !== undefined) {\n this.transactionDelay = updates.transactionDelay;\n }\n }\n\n /** Resets to default configuration and nonce. */\n reset(): void {\n this.account.address =\n \"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address;\n this.chain.id = 11155111;\n this.shouldFailOperations = false;\n this.transactionDelay = 0;\n this.nonce = 0;\n }\n\n /** Returns current nonce for testing. */\n getCurrentNonce(): number {\n return this.nonce;\n }\n}\n"],"names":["MockBitcoinWallet","config","__publicField","BitcoinNetworks","psbtHex","psbtsHexes","signedPsbts","signedPsbt","message","type","Buffer","updates","MockEthereumWallet","args","account","signatureData","tx","resolve","txData","_a"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -2,10 +2,8 @@ var q = Object.defineProperty;
|
|
|
2
2
|
var h = (n, i, s) => i in n ? q(n, i, { enumerable: !0, configurable: !0, writable: !0, value: s }) : n[i] = s;
|
|
3
3
|
var t = (n, i, s) => h(n, typeof i != "symbol" ? i + "" : i, s);
|
|
4
4
|
import { Buffer as o } from "buffer";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
};
|
|
8
|
-
class g {
|
|
5
|
+
import { BitcoinNetworks as c } from "../shared/index.js";
|
|
6
|
+
class f {
|
|
9
7
|
constructor(i = {}) {
|
|
10
8
|
t(this, "config");
|
|
11
9
|
this.config = {
|
|
@@ -65,7 +63,7 @@ class g {
|
|
|
65
63
|
};
|
|
66
64
|
}
|
|
67
65
|
}
|
|
68
|
-
class
|
|
66
|
+
class u {
|
|
69
67
|
constructor(i = {}) {
|
|
70
68
|
// Public properties matching viem's WalletClient structure
|
|
71
69
|
t(this, "account");
|
|
@@ -121,7 +119,7 @@ class f {
|
|
|
121
119
|
}
|
|
122
120
|
}
|
|
123
121
|
export {
|
|
124
|
-
|
|
125
|
-
|
|
122
|
+
f as MockBitcoinWallet,
|
|
123
|
+
u as MockEthereumWallet
|
|
126
124
|
};
|
|
127
|
-
//# sourceMappingURL=
|
|
125
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/testing/MockBitcoinWallet.ts","../../src/testing/MockEthereumWallet.ts"],"sourcesContent":["import { Buffer } from \"buffer\";\n\nimport { BitcoinNetworks, type BitcoinNetwork } from \"../shared/wallets/interfaces\";\nimport type { BitcoinWallet } from \"../shared/wallets/interfaces/BitcoinWallet\";\n\n/**\n * Configuration for MockBitcoinWallet.\n */\nexport interface MockBitcoinWalletConfig {\n publicKeyHex?: string;\n address?: string;\n network?: BitcoinNetwork;\n shouldFailSigning?: boolean;\n}\n\n/**\n * Mock Bitcoin wallet for testing.\n */\nexport class MockBitcoinWallet implements BitcoinWallet {\n private config: Required<MockBitcoinWalletConfig>;\n\n constructor(config: MockBitcoinWalletConfig = {}) {\n this.config = {\n publicKeyHex:\n config.publicKeyHex ||\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address:\n config.address ||\n \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: config.network ?? BitcoinNetworks.SIGNET,\n shouldFailSigning: config.shouldFailSigning ?? false,\n };\n }\n\n async getPublicKeyHex(): Promise<string> {\n return this.config.publicKeyHex;\n }\n\n async getAddress(): Promise<string> {\n return this.config.address;\n }\n\n async signPsbt(psbtHex: string): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!psbtHex || psbtHex.length === 0) {\n throw new Error(\"Invalid PSBT: empty hex string\");\n }\n\n // In a real implementation, this would actually sign the PSBT\n // For the mock, we just return the input with a mock signature appended\n return psbtHex + \"deadbeef\";\n }\n\n async signPsbts(psbtsHexes: string[]): Promise<string[]> {\n const signedPsbts: string[] = [];\n for (const psbtHex of psbtsHexes) {\n const signedPsbt = await this.signPsbt(psbtHex);\n signedPsbts.push(signedPsbt);\n }\n return signedPsbts;\n }\n\n async signMessage(\n message: string,\n type: \"bip322-simple\" | \"ecdsa\",\n ): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // In a real implementation, this would create a proper signature\n // For the mock, we return a base64-like mock signature\n const mockSignature = Buffer.from(\n `mock-signature-${type}-${message}-${this.config.publicKeyHex}`,\n ).toString(\"base64\");\n return mockSignature;\n }\n\n async getNetwork(): Promise<BitcoinNetwork> {\n return this.config.network;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockBitcoinWalletConfig>): void {\n this.config = {\n ...this.config,\n ...updates,\n };\n }\n\n /** Resets to default configuration. */\n reset(): void {\n this.config = {\n publicKeyHex:\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address: \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: BitcoinNetworks.SIGNET,\n shouldFailSigning: false,\n };\n }\n}\n","import { Buffer } from \"buffer\";\nimport type { Address, Hex } from \"viem\";\n\n/**\n * Configuration for MockEthereumWallet.\n */\nexport interface MockEthereumWalletConfig {\n address?: Address;\n chainId?: number;\n shouldFailOperations?: boolean;\n transactionDelay?: number;\n}\n\n/**\n * Mock Ethereum wallet for testing.\n *\n * Provides the subset of viem's WalletClient methods used by the SDK.\n * Can be passed to functions expecting a WalletClient for testing purposes.\n */\nexport class MockEthereumWallet {\n // Public properties matching viem's WalletClient structure\n account: { address: Address };\n chain: { id: number };\n\n private shouldFailOperations: boolean;\n private transactionDelay: number;\n private nonce: number = 0;\n\n constructor(config: MockEthereumWalletConfig = {}) {\n // Use lowercase addresses to avoid EIP-55 checksum validation issues\n this.account = {\n address:\n config.address ||\n (\"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address),\n };\n\n this.chain = {\n id: config.chainId ?? 11155111, // Sepolia by default\n };\n\n this.shouldFailOperations = config.shouldFailOperations ?? false;\n this.transactionDelay = config.transactionDelay ?? 0;\n\n // Bind methods to preserve 'this' context when called\n this.signMessage = this.signMessage.bind(this);\n this.sendTransaction = this.sendTransaction.bind(this);\n }\n\n async signMessage(args: { message: string; account?: Address }): Promise<Hex> {\n const message = args.message;\n const account = args.account || this.account.address;\n\n if (this.shouldFailOperations) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // Generate a deterministic mock signature\n const signatureData = `personal_sign:${message}-${account}-${this.chain.id}`;\n const signature = `0x${Buffer.from(signatureData)\n .toString(\"hex\")\n .slice(0, 130)\n .padEnd(130, \"0\")}` as Hex;\n return signature;\n }\n\n async sendTransaction(tx: {\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n account?: { address: Address };\n chain?: { id: number };\n }): Promise<Hex> {\n if (this.shouldFailOperations) {\n throw new Error(\"Mock transaction failed\");\n }\n\n if (!tx.to) {\n throw new Error(\"Invalid transaction: missing 'to' address\");\n }\n\n // Simulate network delay if configured\n if (this.transactionDelay > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.transactionDelay),\n );\n }\n\n // Generate a deterministic mock transaction hash\n this.nonce++;\n const txData = JSON.stringify({\n from: this.account.address,\n to: tx.to,\n value: tx.value?.toString() || \"0\",\n nonce: this.nonce,\n chainId: this.chain.id,\n });\n\n const hash = `0x${Buffer.from(txData)\n .toString(\"hex\")\n .slice(0, 64)\n .padEnd(64, \"0\")}` as Hex;\n return hash;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockEthereumWalletConfig>): void {\n if (updates.address !== undefined) {\n this.account.address = updates.address;\n }\n if (updates.chainId !== undefined) {\n this.chain.id = updates.chainId;\n }\n if (updates.shouldFailOperations !== undefined) {\n this.shouldFailOperations = updates.shouldFailOperations;\n }\n if (updates.transactionDelay !== undefined) {\n this.transactionDelay = updates.transactionDelay;\n }\n }\n\n /** Resets to default configuration and nonce. */\n reset(): void {\n this.account.address =\n \"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address;\n this.chain.id = 11155111;\n this.shouldFailOperations = false;\n this.transactionDelay = 0;\n this.nonce = 0;\n }\n\n /** Returns current nonce for testing. */\n getCurrentNonce(): number {\n return this.nonce;\n }\n}\n"],"names":["MockBitcoinWallet","config","__publicField","BitcoinNetworks","psbtHex","psbtsHexes","signedPsbts","signedPsbt","message","type","Buffer","updates","MockEthereumWallet","args","account","signatureData","tx","resolve","txData","_a"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonlabs-io/ts-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
"types": "./dist/shared/index.d.ts",
|
|
40
40
|
"require": "./dist/shared/index.cjs",
|
|
41
41
|
"import": "./dist/shared/index.js"
|
|
42
|
+
},
|
|
43
|
+
"./testing": {
|
|
44
|
+
"types": "./dist/testing/index.d.ts",
|
|
45
|
+
"require": "./dist/testing/index.cjs",
|
|
46
|
+
"import": "./dist/testing/index.js"
|
|
42
47
|
}
|
|
43
48
|
},
|
|
44
49
|
"files": [
|
|
@@ -62,12 +67,12 @@
|
|
|
62
67
|
"license": "ISC",
|
|
63
68
|
"description": "TypeScript SDK for Babylon protocol integrations",
|
|
64
69
|
"dependencies": {
|
|
70
|
+
"@babylonlabs-io/babylon-tbv-rust-wasm": "0.5.0",
|
|
65
71
|
"@bitcoin-js/tiny-secp256k1-asmjs": "2.2.3",
|
|
66
72
|
"@noble/hashes": "2.0.1",
|
|
67
73
|
"@scure/bip39": "2.0.1",
|
|
68
74
|
"bitcoinjs-lib": "6.1.7",
|
|
69
|
-
"buffer": "6.0.3"
|
|
70
|
-
"@babylonlabs-io/babylon-tbv-rust-wasm": "0.1.0"
|
|
75
|
+
"buffer": "6.0.3"
|
|
71
76
|
},
|
|
72
77
|
"peerDependencies": {
|
|
73
78
|
"viem": "^2.38.2"
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";var q=Object.defineProperty;var h=(n,i,s)=>i in n?q(n,i,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[i]=s;var t=(n,i,s)=>h(n,typeof i!="symbol"?i+"":i,s);const o=require("buffer"),c={SIGNET:"signet"};class d{constructor(i={}){t(this,"config");this.config={publicKeyHex:i.publicKeyHex||"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",address:i.address||"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks",network:i.network??c.SIGNET,shouldFailSigning:i.shouldFailSigning??!1}}async getPublicKeyHex(){return this.config.publicKeyHex}async getAddress(){return this.config.address}async signPsbt(i){if(this.config.shouldFailSigning)throw new Error("Mock signing failed");if(!i||i.length===0)throw new Error("Invalid PSBT: empty hex string");return i+"deadbeef"}async signPsbts(i){const s=[];for(const a of i){const e=await this.signPsbt(a);s.push(e)}return s}async signMessage(i,s){if(this.config.shouldFailSigning)throw new Error("Mock signing failed");if(!i||i.length===0)throw new Error("Invalid message: empty string");return o.Buffer.from(`mock-signature-${s}-${i}-${this.config.publicKeyHex}`).toString("base64")}async getNetwork(){return this.config.network}updateConfig(i){this.config={...this.config,...i}}reset(){this.config={publicKeyHex:"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",address:"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks",network:c.SIGNET,shouldFailSigning:!1}}}class l{constructor(i={}){t(this,"account");t(this,"chain");t(this,"shouldFailOperations");t(this,"transactionDelay");t(this,"nonce",0);this.account={address:i.address||"0x742d35cc6634c0532925a3b844bc9e7595f0beb0"},this.chain={id:i.chainId??11155111},this.shouldFailOperations=i.shouldFailOperations??!1,this.transactionDelay=i.transactionDelay??0,this.signMessage=this.signMessage.bind(this),this.sendTransaction=this.sendTransaction.bind(this)}async signMessage(i){const s=i.message,a=i.account||this.account.address;if(this.shouldFailOperations)throw new Error("Mock signing failed");if(!s||s.length===0)throw new Error("Invalid message: empty string");const e=`personal_sign:${s}-${a}-${this.chain.id}`;return`0x${o.Buffer.from(e).toString("hex").slice(0,130).padEnd(130,"0")}`}async sendTransaction(i){var e;if(this.shouldFailOperations)throw new Error("Mock transaction failed");if(!i.to)throw new Error("Invalid transaction: missing 'to' address");this.transactionDelay>0&&await new Promise(r=>setTimeout(r,this.transactionDelay)),this.nonce++;const s=JSON.stringify({from:this.account.address,to:i.to,value:((e=i.value)==null?void 0:e.toString())||"0",nonce:this.nonce,chainId:this.chain.id});return`0x${o.Buffer.from(s).toString("hex").slice(0,64).padEnd(64,"0")}`}updateConfig(i){i.address!==void 0&&(this.account.address=i.address),i.chainId!==void 0&&(this.chain.id=i.chainId),i.shouldFailOperations!==void 0&&(this.shouldFailOperations=i.shouldFailOperations),i.transactionDelay!==void 0&&(this.transactionDelay=i.transactionDelay)}reset(){this.account.address="0x742d35cc6634c0532925a3b844bc9e7595f0beb0",this.chain.id=11155111,this.shouldFailOperations=!1,this.transactionDelay=0,this.nonce=0}getCurrentNonce(){return this.nonce}}exports.MockBitcoinWallet=d;exports.MockEthereumWallet=l;
|
|
2
|
-
//# sourceMappingURL=MockEthereumWallet-CKQlH2AM.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MockEthereumWallet-CKQlH2AM.cjs","sources":["../src/shared/wallets/interfaces/BitcoinWallet.ts","../src/shared/wallets/mocks/MockBitcoinWallet.ts","../src/shared/wallets/mocks/MockEthereumWallet.ts"],"sourcesContent":["/**\n * Bitcoin network types.\n * Using string literal union for maximum compatibility with wallet providers.\n */\nexport type BitcoinNetwork = \"mainnet\" | \"testnet\" | \"signet\";\n\n/**\n * Bitcoin network constants\n */\nexport const BitcoinNetworks = {\n MAINNET: \"mainnet\",\n TESTNET: \"testnet\",\n SIGNET: \"signet\",\n} as const;\n\n/**\n * Options for signing a specific input in a PSBT.\n */\nexport interface SignInputOptions {\n /** Input index to sign */\n index: number;\n /** Address for signing (optional) */\n address?: string;\n /** Public key for signing (optional, hex string) */\n publicKey?: string;\n /** Sighash types (optional) */\n sighashTypes?: number[];\n /** Disable tweak signer for Taproot script path spend (optional) */\n disableTweakSigner?: boolean;\n}\n\n/**\n * SignPsbt options for advanced signing scenarios.\n */\nexport interface SignPsbtOptions {\n /** Whether to automatically finalize the PSBT after signing */\n autoFinalized?: boolean;\n /**\n * Specific inputs to sign.\n * If not provided, wallet will attempt to sign all inputs it can.\n * Use this to restrict signing to specific inputs (e.g., only depositor's input).\n */\n signInputs?: SignInputOptions[];\n /** Contract information for the signing operation. */\n contracts?: Array<{\n /** Contract identifier. */\n id: string;\n /** Contract parameters. */\n params: Record<string, string | number | string[] | number[]>;\n }>;\n /** Action metadata. */\n action?: {\n /** Action name for tracking. */\n name: string;\n };\n}\n\n/**\n * This interface is designed to be compatible with @babylonlabs-io/wallet-connector's IBTCProvider\n *\n * Supports Unisat, Ledger, OKX, OneKey, Keystone, and other Bitcoin wallets.\n */\nexport interface BitcoinWallet {\n /**\n * Returns the wallet's public key as a hex string.\n *\n * For Taproot addresses, this should return the x-only public key\n * (32 bytes = 64 hex characters without 0x prefix).\n *\n * For compressed public keys (33 bytes = 66 hex characters),\n * consumers should strip the first byte to get x-only format.\n */\n getPublicKeyHex(): Promise<string>;\n\n /**\n * Returns the wallet's Bitcoin address.\n */\n getAddress(): Promise<string>;\n\n /**\n * Signs a PSBT and returns the signed PSBT as hex.\n *\n * @param psbtHex - The PSBT to sign in hex format\n * @param options - Optional signing parameters (e.g., autoFinalized, contracts)\n * @throws {Error} If the PSBT is invalid or signing fails\n */\n signPsbt(psbtHex: string, options?: SignPsbtOptions): Promise<string>;\n\n /**\n * Signs multiple PSBTs and returns the signed PSBTs as hex.\n * This allows batch signing with a single wallet interaction.\n *\n * @param psbtsHexes - Array of PSBTs to sign in hex format\n * @param options - Optional array of signing parameters for each PSBT\n * @throws {Error} If any PSBT is invalid or signing fails\n */\n signPsbts(\n psbtsHexes: string[],\n options?: SignPsbtOptions[],\n ): Promise<string[]>;\n\n /**\n * Signs a message for authentication or proof of ownership.\n *\n * @param message - The message to sign\n * @param type - The signing method: \"ecdsa\" for standard signatures, \"bip322-simple\" for BIP-322\n * @returns Base64-encoded signature\n */\n signMessage(\n message: string,\n type: \"bip322-simple\" | \"ecdsa\",\n ): Promise<string>;\n\n /**\n * Returns the Bitcoin network the wallet is connected to.\n *\n * @returns BitcoinNetwork enum value (MAINNET, TESTNET, SIGNET)\n */\n getNetwork(): Promise<BitcoinNetwork>;\n}\n","import { Buffer } from \"buffer\";\n\nimport { BitcoinNetworks, type BitcoinNetwork } from \"../interfaces\";\nimport type { BitcoinWallet } from \"../interfaces/BitcoinWallet\";\n\n/**\n * Configuration for MockBitcoinWallet.\n */\nexport interface MockBitcoinWalletConfig {\n publicKeyHex?: string;\n address?: string;\n network?: BitcoinNetwork;\n shouldFailSigning?: boolean;\n}\n\n/**\n * Mock Bitcoin wallet for testing.\n */\nexport class MockBitcoinWallet implements BitcoinWallet {\n private config: Required<MockBitcoinWalletConfig>;\n\n constructor(config: MockBitcoinWalletConfig = {}) {\n this.config = {\n publicKeyHex:\n config.publicKeyHex ||\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address:\n config.address ||\n \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: config.network ?? BitcoinNetworks.SIGNET,\n shouldFailSigning: config.shouldFailSigning ?? false,\n };\n }\n\n async getPublicKeyHex(): Promise<string> {\n return this.config.publicKeyHex;\n }\n\n async getAddress(): Promise<string> {\n return this.config.address;\n }\n\n async signPsbt(psbtHex: string): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!psbtHex || psbtHex.length === 0) {\n throw new Error(\"Invalid PSBT: empty hex string\");\n }\n\n // In a real implementation, this would actually sign the PSBT\n // For the mock, we just return the input with a mock signature appended\n return psbtHex + \"deadbeef\";\n }\n\n async signPsbts(psbtsHexes: string[]): Promise<string[]> {\n const signedPsbts: string[] = [];\n for (const psbtHex of psbtsHexes) {\n const signedPsbt = await this.signPsbt(psbtHex);\n signedPsbts.push(signedPsbt);\n }\n return signedPsbts;\n }\n\n async signMessage(\n message: string,\n type: \"bip322-simple\" | \"ecdsa\",\n ): Promise<string> {\n if (this.config.shouldFailSigning) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // In a real implementation, this would create a proper signature\n // For the mock, we return a base64-like mock signature\n const mockSignature = Buffer.from(\n `mock-signature-${type}-${message}-${this.config.publicKeyHex}`,\n ).toString(\"base64\");\n return mockSignature;\n }\n\n async getNetwork(): Promise<BitcoinNetwork> {\n return this.config.network;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockBitcoinWalletConfig>): void {\n this.config = {\n ...this.config,\n ...updates,\n };\n }\n\n /** Resets to default configuration. */\n reset(): void {\n this.config = {\n publicKeyHex:\n \"a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2\",\n address: \"tb1pqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqkx6jks\",\n network: BitcoinNetworks.SIGNET,\n shouldFailSigning: false,\n };\n }\n}\n","import { Buffer } from \"buffer\";\nimport type { Address, Hex } from \"viem\";\n\n/**\n * Configuration for MockEthereumWallet.\n */\nexport interface MockEthereumWalletConfig {\n address?: Address;\n chainId?: number;\n shouldFailOperations?: boolean;\n transactionDelay?: number;\n}\n\n/**\n * Mock Ethereum wallet for testing.\n *\n * Provides the subset of viem's WalletClient methods used by the SDK.\n * Can be passed to functions expecting a WalletClient for testing purposes.\n */\nexport class MockEthereumWallet {\n // Public properties matching viem's WalletClient structure\n account: { address: Address };\n chain: { id: number };\n\n private shouldFailOperations: boolean;\n private transactionDelay: number;\n private nonce: number = 0;\n\n constructor(config: MockEthereumWalletConfig = {}) {\n // Use lowercase addresses to avoid EIP-55 checksum validation issues\n this.account = {\n address:\n config.address ||\n (\"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address),\n };\n\n this.chain = {\n id: config.chainId ?? 11155111, // Sepolia by default\n };\n\n this.shouldFailOperations = config.shouldFailOperations ?? false;\n this.transactionDelay = config.transactionDelay ?? 0;\n\n // Bind methods to preserve 'this' context when called\n this.signMessage = this.signMessage.bind(this);\n this.sendTransaction = this.sendTransaction.bind(this);\n }\n\n async signMessage(args: { message: string; account?: Address }): Promise<Hex> {\n const message = args.message;\n const account = args.account || this.account.address;\n\n if (this.shouldFailOperations) {\n throw new Error(\"Mock signing failed\");\n }\n\n if (!message || message.length === 0) {\n throw new Error(\"Invalid message: empty string\");\n }\n\n // Generate a deterministic mock signature\n const signatureData = `personal_sign:${message}-${account}-${this.chain.id}`;\n const signature = `0x${Buffer.from(signatureData)\n .toString(\"hex\")\n .slice(0, 130)\n .padEnd(130, \"0\")}` as Hex;\n return signature;\n }\n\n async sendTransaction(tx: {\n to: Address;\n data?: Hex;\n value?: bigint;\n gas?: bigint;\n account?: { address: Address };\n chain?: { id: number };\n }): Promise<Hex> {\n if (this.shouldFailOperations) {\n throw new Error(\"Mock transaction failed\");\n }\n\n if (!tx.to) {\n throw new Error(\"Invalid transaction: missing 'to' address\");\n }\n\n // Simulate network delay if configured\n if (this.transactionDelay > 0) {\n await new Promise((resolve) =>\n setTimeout(resolve, this.transactionDelay),\n );\n }\n\n // Generate a deterministic mock transaction hash\n this.nonce++;\n const txData = JSON.stringify({\n from: this.account.address,\n to: tx.to,\n value: tx.value?.toString() || \"0\",\n nonce: this.nonce,\n chainId: this.chain.id,\n });\n\n const hash = `0x${Buffer.from(txData)\n .toString(\"hex\")\n .slice(0, 64)\n .padEnd(64, \"0\")}` as Hex;\n return hash;\n }\n\n /** Updates configuration for testing different scenarios. */\n updateConfig(updates: Partial<MockEthereumWalletConfig>): void {\n if (updates.address !== undefined) {\n this.account.address = updates.address;\n }\n if (updates.chainId !== undefined) {\n this.chain.id = updates.chainId;\n }\n if (updates.shouldFailOperations !== undefined) {\n this.shouldFailOperations = updates.shouldFailOperations;\n }\n if (updates.transactionDelay !== undefined) {\n this.transactionDelay = updates.transactionDelay;\n }\n }\n\n /** Resets to default configuration and nonce. */\n reset(): void {\n this.account.address =\n \"0x742d35cc6634c0532925a3b844bc9e7595f0beb0\" as Address;\n this.chain.id = 11155111;\n this.shouldFailOperations = false;\n this.transactionDelay = 0;\n this.nonce = 0;\n }\n\n /** Returns current nonce for testing. */\n getCurrentNonce(): number {\n return this.nonce;\n }\n}\n"],"names":["BitcoinNetworks","MockBitcoinWallet","config","__publicField","psbtHex","psbtsHexes","signedPsbts","signedPsbt","message","type","Buffer","updates","MockEthereumWallet","args","account","signatureData","tx","resolve","txData","_a"],"mappings":"2MASaA,EAAkB,CAG7B,OAAQ,QACV,ECKO,MAAMC,CAA2C,CAGtD,YAAYC,EAAkC,GAAI,CAF1CC,EAAA,eAGN,KAAK,OAAS,CACZ,aACED,EAAO,cACP,mEACF,QACEA,EAAO,SACP,iEACF,QAASA,EAAO,SAAWF,EAAgB,OAC3C,kBAAmBE,EAAO,mBAAqB,EAAA,CAEnD,CAEA,MAAM,iBAAmC,CACvC,OAAO,KAAK,OAAO,YACrB,CAEA,MAAM,YAA8B,CAClC,OAAO,KAAK,OAAO,OACrB,CAEA,MAAM,SAASE,EAAkC,CAC/C,GAAI,KAAK,OAAO,kBACd,MAAM,IAAI,MAAM,qBAAqB,EAGvC,GAAI,CAACA,GAAWA,EAAQ,SAAW,EACjC,MAAM,IAAI,MAAM,gCAAgC,EAKlD,OAAOA,EAAU,UACnB,CAEA,MAAM,UAAUC,EAAyC,CACvD,MAAMC,EAAwB,CAAA,EAC9B,UAAWF,KAAWC,EAAY,CAChC,MAAME,EAAa,MAAM,KAAK,SAASH,CAAO,EAC9CE,EAAY,KAAKC,CAAU,CAC7B,CACA,OAAOD,CACT,CAEA,MAAM,YACJE,EACAC,EACiB,CACjB,GAAI,KAAK,OAAO,kBACd,MAAM,IAAI,MAAM,qBAAqB,EAGvC,GAAI,CAACD,GAAWA,EAAQ,SAAW,EACjC,MAAM,IAAI,MAAM,+BAA+B,EAQjD,OAHsBE,EAAAA,OAAO,KAC3B,kBAAkBD,CAAI,IAAID,CAAO,IAAI,KAAK,OAAO,YAAY,EAAA,EAC7D,SAAS,QAAQ,CAErB,CAEA,MAAM,YAAsC,CAC1C,OAAO,KAAK,OAAO,OACrB,CAGA,aAAaG,EAAiD,CAC5D,KAAK,OAAS,CACZ,GAAG,KAAK,OACR,GAAGA,CAAA,CAEP,CAGA,OAAc,CACZ,KAAK,OAAS,CACZ,aACE,mEACF,QAAS,iEACT,QAASX,EAAgB,OACzB,kBAAmB,EAAA,CAEvB,CACF,CCxFO,MAAMY,CAAmB,CAS9B,YAAYV,EAAmC,GAAI,CAPnDC,EAAA,gBACAA,EAAA,cAEQA,EAAA,6BACAA,EAAA,yBACAA,EAAA,aAAgB,GAItB,KAAK,QAAU,CACb,QACED,EAAO,SACN,4CAAA,EAGL,KAAK,MAAQ,CACX,GAAIA,EAAO,SAAW,QAAA,EAGxB,KAAK,qBAAuBA,EAAO,sBAAwB,GAC3D,KAAK,iBAAmBA,EAAO,kBAAoB,EAGnD,KAAK,YAAc,KAAK,YAAY,KAAK,IAAI,EAC7C,KAAK,gBAAkB,KAAK,gBAAgB,KAAK,IAAI,CACvD,CAEA,MAAM,YAAYW,EAA4D,CAC5E,MAAML,EAAUK,EAAK,QACfC,EAAUD,EAAK,SAAW,KAAK,QAAQ,QAE7C,GAAI,KAAK,qBACP,MAAM,IAAI,MAAM,qBAAqB,EAGvC,GAAI,CAACL,GAAWA,EAAQ,SAAW,EACjC,MAAM,IAAI,MAAM,+BAA+B,EAIjD,MAAMO,EAAgB,iBAAiBP,CAAO,IAAIM,CAAO,IAAI,KAAK,MAAM,EAAE,GAK1E,MAJkB,KAAKJ,EAAAA,OAAO,KAAKK,CAAa,EAC7C,SAAS,KAAK,EACd,MAAM,EAAG,GAAG,EACZ,OAAO,IAAK,GAAG,CAAC,EAErB,CAEA,MAAM,gBAAgBC,EAOL,OACf,GAAI,KAAK,qBACP,MAAM,IAAI,MAAM,yBAAyB,EAG3C,GAAI,CAACA,EAAG,GACN,MAAM,IAAI,MAAM,2CAA2C,EAIzD,KAAK,iBAAmB,GAC1B,MAAM,IAAI,QAASC,GACjB,WAAWA,EAAS,KAAK,gBAAgB,CAAA,EAK7C,KAAK,QACL,MAAMC,EAAS,KAAK,UAAU,CAC5B,KAAM,KAAK,QAAQ,QACnB,GAAIF,EAAG,GACP,QAAOG,EAAAH,EAAG,QAAH,YAAAG,EAAU,aAAc,IAC/B,MAAO,KAAK,MACZ,QAAS,KAAK,MAAM,EAAA,CACrB,EAMD,MAJa,KAAKT,EAAAA,OAAO,KAAKQ,CAAM,EACjC,SAAS,KAAK,EACd,MAAM,EAAG,EAAE,EACX,OAAO,GAAI,GAAG,CAAC,EAEpB,CAGA,aAAaP,EAAkD,CACzDA,EAAQ,UAAY,SACtB,KAAK,QAAQ,QAAUA,EAAQ,SAE7BA,EAAQ,UAAY,SACtB,KAAK,MAAM,GAAKA,EAAQ,SAEtBA,EAAQ,uBAAyB,SACnC,KAAK,qBAAuBA,EAAQ,sBAElCA,EAAQ,mBAAqB,SAC/B,KAAK,iBAAmBA,EAAQ,iBAEpC,CAGA,OAAc,CACZ,KAAK,QAAQ,QACX,6CACF,KAAK,MAAM,GAAK,SAChB,KAAK,qBAAuB,GAC5B,KAAK,iBAAmB,EACxB,KAAK,MAAQ,CACf,CAGA,iBAA0B,CACxB,OAAO,KAAK,KACd,CACF"}
|