@ledgerhq/coin-bitcoin 0.29.0-nightly.20260116024452 → 0.29.0-nightly.20260116124336
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/CHANGELOG.md +12 -10
- package/lib/bridge/js.d.ts +1 -1
- package/lib/bridge/js.d.ts.map +1 -1
- package/lib/bridge/js.js +2 -3
- package/lib/bridge/js.js.map +1 -1
- package/lib/buildOptimisticOperation.d.ts +13 -0
- package/lib/buildOptimisticOperation.d.ts.map +1 -0
- package/lib/buildOptimisticOperation.js +20 -0
- package/lib/buildOptimisticOperation.js.map +1 -0
- package/lib/observable.d.ts +4 -0
- package/lib/observable.d.ts.map +1 -0
- package/lib/observable.js +9 -0
- package/lib/observable.js.map +1 -0
- package/lib/psbtFees.d.ts +9 -0
- package/lib/psbtFees.d.ts.map +1 -0
- package/lib/psbtFees.js +73 -0
- package/lib/psbtFees.js.map +1 -0
- package/lib/signOperation.d.ts.map +1 -1
- package/lib/signOperation.js +94 -99
- package/lib/signOperation.js.map +1 -1
- package/lib/signRawOperation.d.ts +6 -0
- package/lib/signRawOperation.d.ts.map +1 -0
- package/lib/signRawOperation.js +70 -0
- package/lib/signRawOperation.js.map +1 -0
- package/lib/signer.d.ts +15 -0
- package/lib/signer.d.ts.map +1 -1
- package/lib/types.d.ts +2 -0
- package/lib/types.d.ts.map +1 -1
- package/lib-es/bridge/js.d.ts +1 -1
- package/lib-es/bridge/js.d.ts.map +1 -1
- package/lib-es/bridge/js.js +2 -3
- package/lib-es/bridge/js.js.map +1 -1
- package/lib-es/buildOptimisticOperation.d.ts +13 -0
- package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
- package/lib-es/buildOptimisticOperation.js +16 -0
- package/lib-es/buildOptimisticOperation.js.map +1 -0
- package/lib-es/observable.d.ts +4 -0
- package/lib-es/observable.d.ts.map +1 -0
- package/lib-es/observable.js +5 -0
- package/lib-es/observable.js.map +1 -0
- package/lib-es/psbtFees.d.ts +9 -0
- package/lib-es/psbtFees.d.ts.map +1 -0
- package/lib-es/psbtFees.js +69 -0
- package/lib-es/psbtFees.js.map +1 -0
- package/lib-es/signOperation.d.ts.map +1 -1
- package/lib-es/signOperation.js +94 -99
- package/lib-es/signOperation.js.map +1 -1
- package/lib-es/signRawOperation.d.ts +6 -0
- package/lib-es/signRawOperation.d.ts.map +1 -0
- package/lib-es/signRawOperation.js +66 -0
- package/lib-es/signRawOperation.js.map +1 -0
- package/lib-es/signer.d.ts +15 -0
- package/lib-es/signer.d.ts.map +1 -1
- package/lib-es/types.d.ts +2 -0
- package/lib-es/types.d.ts.map +1 -1
- package/package.json +13 -12
- package/src/__tests__/fixtures/common.fixtures.ts +6 -0
- package/src/__tests__/unit/psbtFees.fromFixture.unit.test.ts +31 -0
- package/src/__tests__/unit/signOperation.test.ts +226 -0
- package/src/__tests__/unit/signRawOperation.test.ts +188 -0
- package/src/bridge/js.test.ts +30 -0
- package/src/bridge/js.ts +2 -3
- package/src/buildOptimisticOperation.ts +34 -0
- package/src/hw-signMessage.test.ts +1 -0
- package/src/observable.ts +12 -0
- package/src/observable.unit.test.ts +27 -0
- package/src/psbtFees.ts +77 -0
- package/src/signOperation.ts +140 -126
- package/src/signRawOperation.ts +104 -0
- package/src/signer.ts +13 -0
- package/src/types.ts +2 -0
- package/src/wallet-btc/__tests__/fixtures/common.fixtures.ts +64 -1
- package/src/wallet-btc/__tests__/wallet.integration.test.ts +1 -1
- package/src/wallet-btc/__tests__/xpub.txs.dogecoin.integration.test.ts +1 -1
- package/src/wallet-btc/__tests__/xpub.txs.zcash.integration.test.ts +1 -1
- package/tsconfig.json +3 -12
- package/lib/mockBtcSigner.d.ts +0 -20
- package/lib/mockBtcSigner.d.ts.map +0 -1
- package/lib/mockBtcSigner.js +0 -50
- package/lib/mockBtcSigner.js.map +0 -1
- package/lib-es/mockBtcSigner.d.ts +0 -20
- package/lib-es/mockBtcSigner.d.ts.map +0 -1
- package/lib-es/mockBtcSigner.js +0 -45
- package/lib-es/mockBtcSigner.js.map +0 -1
- package/src/mockBtcSigner.ts +0 -65
package/lib/types.d.ts
CHANGED
|
@@ -113,6 +113,8 @@ export type Transaction = TransactionCommon & {
|
|
|
113
113
|
networkInfo: NetworkInfo | null | undefined;
|
|
114
114
|
opReturnData?: Buffer | undefined;
|
|
115
115
|
changeAddress?: string | undefined;
|
|
116
|
+
psbt?: string;
|
|
117
|
+
finalizePsbt?: boolean;
|
|
116
118
|
};
|
|
117
119
|
export type TransactionRaw = TransactionCommonRaw & {
|
|
118
120
|
family: "bitcoin";
|
package/lib/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/lib-es/bridge/js.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export declare function createBridges(signerContext: SignerContext, coinConfig:
|
|
|
27
27
|
}) => import("rxjs").Observable<import("@ledgerhq/coin-framework/lib-es/derivation").Result>;
|
|
28
28
|
sync: (initialAccount: BitcoinAccount, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: BitcoinAccount) => BitcoinAccount>;
|
|
29
29
|
signOperation: import("@ledgerhq/types-live").SignOperationFnSignature<Transaction, import("@ledgerhq/types-live").Account>;
|
|
30
|
-
signRawOperation: ()
|
|
30
|
+
signRawOperation: import("@ledgerhq/types-live").SignRawOperationFnSignature<import("@ledgerhq/types-live").Account>;
|
|
31
31
|
broadcast: import("@ledgerhq/types-live").BroadcastFnSignature<BitcoinAccount>;
|
|
32
32
|
assignFromAccountRaw: typeof assignFromAccountRaw;
|
|
33
33
|
assignToAccountRaw: typeof assignToAccountRaw;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAmErD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjF"}
|
package/lib-es/bridge/js.js
CHANGED
|
@@ -16,6 +16,7 @@ import { broadcast } from "../broadcast";
|
|
|
16
16
|
import { perCoinLogic } from "../logic";
|
|
17
17
|
import resolver from "../hw-getAddress";
|
|
18
18
|
import { validateAddress } from "../validateAddress";
|
|
19
|
+
import buildSignRawOperation from "../signRawOperation";
|
|
19
20
|
function buildCurrencyBridge(signerContext) {
|
|
20
21
|
const getAddress = resolver(signerContext);
|
|
21
22
|
const scanAccounts = makeScanAccounts({
|
|
@@ -61,9 +62,7 @@ function buildAccountBridge(signerContext) {
|
|
|
61
62
|
receive,
|
|
62
63
|
sync,
|
|
63
64
|
signOperation: buildSignOperation(signerContext),
|
|
64
|
-
signRawOperation: ()
|
|
65
|
-
throw new Error("signRawOperation is not supported");
|
|
66
|
-
},
|
|
65
|
+
signRawOperation: buildSignRawOperation(signerContext),
|
|
67
66
|
broadcast: wrappedBroadcast,
|
|
68
67
|
assignFromAccountRaw,
|
|
69
68
|
assignToAccountRaw,
|
package/lib-es/bridge/js.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,QAAQ,GACT,MAAM,2CAA2C,CAAC;AACnD,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAc,aAAa,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,QAAQ,GACT,MAAM,2CAA2C,CAAC;AACnD,OAAO,iBAAiB,MAAM,mDAAmD,CAAC;AAClF,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,UAAU,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAc,aAAa,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,QAAQ,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;AAExD,SAAS,mBAAmB,CAAC,aAA4B;IACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,gBAAgB,CAAiB;QACpD,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;QACnD,YAAY,EAAE,iBAAiB,CAAC,UAAU,CAAC;QAC3C,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO;QACL,YAAY;QACZ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;KAClB,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,aAA4B;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAiD;QACpE,eAAe,EAAE,mBAAmB,CAAC,aAAa,CAAC;QACnD,QAAQ;QACR,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;IAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC3C,MAAM,sBAAsB,GAAG,CAAC,OAAuB,EAAO,EAAE;QAC9D,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAElD,IAAI,OAAO,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;YAC9C,OAAO,OAAO,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,wBAAwB,CAAiB,iBAAiB,CAAC,UAAU,CAAC,EAAE;QACtF,sBAAsB;KACvB,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAA4D,KAAK,EAAE,EACvF,OAAO,EACP,eAAe,GAChB,EAAE,EAAE;QACH,aAAa,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;YACf,OAAO;YACP,eAAe;SAChB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACL,oBAAoB;QACpB,iBAAiB;QACjB,kBAAkB;QAClB,iBAAiB;QACjB,oBAAoB;QACpB,OAAO;QACP,IAAI;QACJ,aAAa,EAAE,kBAAkB,CAAC,aAAa,CAAC;QAChD,gBAAgB,EAAE,qBAAqB,CAAC,aAAa,CAAC;QACtD,SAAS,EAAE,gBAAgB;QAC3B,oBAAoB;QACpB,kBAAkB;QAClB,sBAAsB,EAAE,UAAU,CAAC,sBAAsB;QACzD,8BAA8B;QAC9B,eAAe;KAChB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,aAA4B,EAAE,UAAsB;IAChF,aAAa,CAAC,UAAU,CAAC,CAAC;IAE1B,OAAO;QACL,cAAc,EAAE,mBAAmB,CAAC,aAAa,CAAC;QAClD,aAAa,EAAE,kBAAkB,CAAC,aAAa,CAAC;KACjD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import type { Operation } from "@ledgerhq/types-live";
|
|
3
|
+
type BuildOptimisticOperationParams = {
|
|
4
|
+
accountId: string;
|
|
5
|
+
fee: BigNumber;
|
|
6
|
+
value?: BigNumber;
|
|
7
|
+
senders?: string[];
|
|
8
|
+
recipients?: string[];
|
|
9
|
+
extra?: Record<string, unknown>;
|
|
10
|
+
};
|
|
11
|
+
export declare const buildOptimisticOperation: ({ accountId, fee, value, senders, recipients, extra, }: BuildOptimisticOperationParams) => Operation;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=buildOptimisticOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildOptimisticOperation.d.ts","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,KAAK,8BAA8B,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2DAOlC,8BAA8B,KAAG,SAalC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
|
|
2
|
+
export const buildOptimisticOperation = ({ accountId, fee, value, senders = [], recipients = [], extra = {}, }) => ({
|
|
3
|
+
id: encodeOperationId(accountId, "", "OUT"),
|
|
4
|
+
hash: "",
|
|
5
|
+
type: "OUT",
|
|
6
|
+
value: value ?? fee,
|
|
7
|
+
fee,
|
|
8
|
+
blockHash: null,
|
|
9
|
+
blockHeight: null,
|
|
10
|
+
senders,
|
|
11
|
+
recipients,
|
|
12
|
+
accountId,
|
|
13
|
+
date: new Date(),
|
|
14
|
+
extra,
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=buildOptimisticOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildOptimisticOperation.js","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAWvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,SAAS,EACT,GAAG,EACH,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,EAAE,EACf,KAAK,GAAG,EAAE,GACqB,EAAa,EAAE,CAAC,CAAC;IAChD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK,IAAI,GAAG;IACnB,GAAG;IACH,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,OAAO;IACP,UAAU;IACV,SAAS;IACT,IAAI,EAAE,IAAI,IAAI,EAAE;IAChB,KAAK;CACN,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,eAAO,MAAM,kBAAkB,uBACZ,SAAS,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAC7C,WAAW,CAAC,CAMX,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observable.js","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAA8C,EAC/B,EAAE,CACjB,IAAI,UAAU,CAAI,QAAQ,CAAC,EAAE;IAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EACzB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/B,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
/**
|
|
3
|
+
* Compute fee from a PSBT (v2 preferred).
|
|
4
|
+
* Returns:
|
|
5
|
+
* - BigNumber(fee) on success
|
|
6
|
+
* - null if cannot parse (caller should fallback to calculateFees()).
|
|
7
|
+
*/
|
|
8
|
+
export declare function feeFromPsbt(buf: Buffer): BigNumber | null;
|
|
9
|
+
//# sourceMappingURL=psbtFees.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"psbtFees.d.ts","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmBzC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmDzD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import { Transaction } from "bitcoinjs-lib";
|
|
3
|
+
import { PsbtV2 } from "@ledgerhq/psbtv2";
|
|
4
|
+
/** read uint64 little-endian into JS number (safe for BTC amounts) */
|
|
5
|
+
function readUInt64LE(buf) {
|
|
6
|
+
const lo = buf.readUInt32LE(0);
|
|
7
|
+
const hi = buf.readUInt32LE(4);
|
|
8
|
+
const loBig = BigInt(lo);
|
|
9
|
+
const hiBig = BigInt(hi);
|
|
10
|
+
const value = loBig + (hiBig << 32n);
|
|
11
|
+
if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
|
|
12
|
+
throw new Error("readUInt64LE: value exceeds Number.MAX_SAFE_INTEGER");
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compute fee from a PSBT (v2 preferred).
|
|
18
|
+
* Returns:
|
|
19
|
+
* - BigNumber(fee) on success
|
|
20
|
+
* - null if cannot parse (caller should fallback to calculateFees()).
|
|
21
|
+
*/
|
|
22
|
+
export function feeFromPsbt(buf) {
|
|
23
|
+
if (!buf || buf.length < 5)
|
|
24
|
+
return null;
|
|
25
|
+
try {
|
|
26
|
+
// Check PSBT version and use appropriate deserialization method
|
|
27
|
+
const psbtVersion = PsbtV2.getPsbtVersionNumber(buf);
|
|
28
|
+
const psbt = psbtVersion === 2 ? new PsbtV2() : PsbtV2.fromV0(buf, true);
|
|
29
|
+
if (psbtVersion === 2) {
|
|
30
|
+
psbt.deserialize(buf);
|
|
31
|
+
}
|
|
32
|
+
// Sum inputs (prefer WITNESS_UTXO; fall back to NON_WITNESS_UTXO)
|
|
33
|
+
let inSum = 0n;
|
|
34
|
+
const nIn = psbt.getGlobalInputCount();
|
|
35
|
+
for (let i = 0; i < nIn; i++) {
|
|
36
|
+
const w = psbt.getInputWitnessUtxo(i);
|
|
37
|
+
if (w) {
|
|
38
|
+
inSum += readUInt64LE(w.amount);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const nonWitness = psbt.getInputNonWitnessUtxo(i);
|
|
42
|
+
if (!nonWitness) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
// NON_WITNESS_UTXO is the full previous transaction. Use the PSBT
|
|
46
|
+
// input's referenced output index to locate the amount.
|
|
47
|
+
const prevTx = Transaction.fromBuffer(nonWitness);
|
|
48
|
+
const prevOutIndex = psbt.getInputOutputIndex(i);
|
|
49
|
+
const prevOut = prevTx.outs[prevOutIndex];
|
|
50
|
+
if (!prevOut) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
inSum += BigInt(prevOut.value);
|
|
54
|
+
}
|
|
55
|
+
// Sum outputs
|
|
56
|
+
let outSum = 0n;
|
|
57
|
+
const nOut = psbt.getGlobalOutputCount();
|
|
58
|
+
for (let i = 0; i < nOut; i++) {
|
|
59
|
+
outSum += BigInt(psbt.getOutputAmount(i)); // number
|
|
60
|
+
}
|
|
61
|
+
if (inSum < outSum)
|
|
62
|
+
return null;
|
|
63
|
+
return new BigNumber((inSum - outSum).toString());
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=psbtFees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"psbtFees.js","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAO3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0IzC,eAAO,MAAM,kBAAkB,kBACb,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CAEuB,CAAC;AAEpG,eAAe,kBAAkB,CAAC"}
|
package/lib-es/signOperation.js
CHANGED
|
@@ -1,112 +1,107 @@
|
|
|
1
1
|
import { BigNumber } from "bignumber.js";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
2
|
import { log } from "@ledgerhq/logs";
|
|
4
3
|
import { isSegwitDerivationMode } from "@ledgerhq/coin-framework/derivation";
|
|
5
|
-
import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
|
|
6
4
|
import { getNetworkParameters } from "./networks";
|
|
5
|
+
import { buildOptimisticOperation } from "./buildOptimisticOperation";
|
|
7
6
|
import { buildTransaction } from "./buildTransaction";
|
|
8
7
|
import { calculateFees } from "./cache";
|
|
9
8
|
import wallet, { getWalletAccount } from "./wallet-btc";
|
|
10
9
|
import { perCoinLogic } from "./logic";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
account,
|
|
10
|
+
import { fromAsyncOperation } from "./observable";
|
|
11
|
+
function buildAdditionals(currencyId, derivationMode, transaction) {
|
|
12
|
+
const perCoin = perCoinLogic[currencyId];
|
|
13
|
+
let additionals = [currencyId];
|
|
14
|
+
if (derivationMode === "native_segwit") {
|
|
15
|
+
additionals.push("bech32");
|
|
16
|
+
}
|
|
17
|
+
if (derivationMode === "taproot") {
|
|
18
|
+
additionals.push("bech32m");
|
|
19
|
+
}
|
|
20
|
+
if (perCoin?.getAdditionals) {
|
|
21
|
+
additionals = additionals.concat(perCoin.getAdditionals({
|
|
24
22
|
transaction,
|
|
25
|
-
}).then(res => {
|
|
26
|
-
senders = new Set(res.txInputs.map(i => i.address).filter(Boolean));
|
|
27
|
-
recipients = res.txOutputs
|
|
28
|
-
.filter(o => o.address && !o.isChange)
|
|
29
|
-
.map(o => o.address);
|
|
30
|
-
fee = res.fees;
|
|
31
|
-
});
|
|
32
|
-
let lockTime;
|
|
33
|
-
// (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
|
|
34
|
-
// Ledger Live. We should only set this if the currency is Komodo and
|
|
35
|
-
// lockTime isn't already defined.
|
|
36
|
-
if (currency.id === "komodo" && lockTime === undefined) {
|
|
37
|
-
const unixtime = Math.floor(Date.now() / 1000);
|
|
38
|
-
lockTime = unixtime - 777;
|
|
39
|
-
}
|
|
40
|
-
const networkParams = getNetworkParameters(currency.id);
|
|
41
|
-
const sigHashType = networkParams.sigHash;
|
|
42
|
-
if (isNaN(sigHashType)) {
|
|
43
|
-
throw new Error("sigHashType should not be NaN");
|
|
44
|
-
}
|
|
45
|
-
const segwit = isSegwitDerivationMode(account.derivationMode);
|
|
46
|
-
const perCoin = perCoinLogic[currency.id];
|
|
47
|
-
let additionals = [currency.id];
|
|
48
|
-
if (account.derivationMode === "native_segwit") {
|
|
49
|
-
additionals.push("bech32");
|
|
50
|
-
}
|
|
51
|
-
if (account.derivationMode === "taproot") {
|
|
52
|
-
additionals.push("bech32m");
|
|
53
|
-
}
|
|
54
|
-
if (perCoin?.getAdditionals) {
|
|
55
|
-
additionals = additionals.concat(perCoin.getAdditionals({
|
|
56
|
-
transaction,
|
|
57
|
-
}));
|
|
58
|
-
}
|
|
59
|
-
const expiryHeight = perCoin?.hasExpiryHeight
|
|
60
|
-
? Buffer.from([0x00, 0x00, 0x00, 0x00])
|
|
61
|
-
: undefined;
|
|
62
|
-
const hasExtraData = perCoin?.hasExtraData || false;
|
|
63
|
-
const signature = await signerContext(deviceId, currency, signer => wallet.signAccountTx({
|
|
64
|
-
btc: signer,
|
|
65
|
-
fromAccount: walletAccount,
|
|
66
|
-
txInfo,
|
|
67
|
-
lockTime,
|
|
68
|
-
sigHashType,
|
|
69
|
-
segwit,
|
|
70
|
-
additionals,
|
|
71
|
-
expiryHeight,
|
|
72
|
-
hasExtraData,
|
|
73
|
-
onDeviceSignatureGranted: () => o.next({
|
|
74
|
-
type: "device-signature-granted",
|
|
75
|
-
}),
|
|
76
|
-
onDeviceSignatureRequested: () => o.next({
|
|
77
|
-
type: "device-signature-requested",
|
|
78
|
-
}),
|
|
79
|
-
onDeviceStreaming: ({ progress, index, total }) => o.next({
|
|
80
|
-
type: "device-streaming",
|
|
81
|
-
progress,
|
|
82
|
-
index,
|
|
83
|
-
total,
|
|
84
|
-
}),
|
|
85
23
|
}));
|
|
86
|
-
// Build the optimistic operation
|
|
87
|
-
const operation = {
|
|
88
|
-
id: encodeOperationId(account.id, "", "OUT"),
|
|
89
|
-
hash: "", // Will be resolved in broadcast()
|
|
90
|
-
type: "OUT",
|
|
91
|
-
value: new BigNumber(transaction.amount).plus(fee),
|
|
92
|
-
fee,
|
|
93
|
-
blockHash: null,
|
|
94
|
-
blockHeight: null,
|
|
95
|
-
senders: Array.from(senders),
|
|
96
|
-
recipients,
|
|
97
|
-
accountId: account.id,
|
|
98
|
-
date: new Date(),
|
|
99
|
-
extra: {},
|
|
100
|
-
};
|
|
101
|
-
o.next({
|
|
102
|
-
type: "signed",
|
|
103
|
-
signedOperation: {
|
|
104
|
-
operation,
|
|
105
|
-
signature,
|
|
106
|
-
},
|
|
107
|
-
});
|
|
108
24
|
}
|
|
109
|
-
|
|
110
|
-
}
|
|
25
|
+
return additionals;
|
|
26
|
+
}
|
|
27
|
+
async function executeSignOperation(o, account, deviceId, transaction, signerContext) {
|
|
28
|
+
const { currency } = account;
|
|
29
|
+
const walletAccount = getWalletAccount(account);
|
|
30
|
+
log("hw", `signTransaction ${currency.id} for account ${account.id}`);
|
|
31
|
+
const txInfo = await buildTransaction(account, transaction);
|
|
32
|
+
// Maybe better not re-calculate these fields here, instead include them
|
|
33
|
+
// in Transaction type and set them in prepareTransaction?
|
|
34
|
+
const res = await calculateFees({
|
|
35
|
+
account,
|
|
36
|
+
transaction,
|
|
37
|
+
});
|
|
38
|
+
const senders = res.txInputs.reduce((acc, i) => {
|
|
39
|
+
if (i.address)
|
|
40
|
+
acc.add(i.address);
|
|
41
|
+
return acc;
|
|
42
|
+
}, new Set());
|
|
43
|
+
const recipients = res.txOutputs.reduce((acc, o) => {
|
|
44
|
+
if (!o.isChange && o.address)
|
|
45
|
+
acc.push(o.address);
|
|
46
|
+
return acc;
|
|
47
|
+
}, []);
|
|
48
|
+
const fee = res.fees;
|
|
49
|
+
let lockTime;
|
|
50
|
+
// (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
|
|
51
|
+
// Ledger Live. We should only set this if the currency is Komodo and
|
|
52
|
+
// lockTime isn't already defined.
|
|
53
|
+
if (currency.id === "komodo" && lockTime === undefined) {
|
|
54
|
+
const unixtime = Math.floor(Date.now() / 1000);
|
|
55
|
+
lockTime = unixtime - 777;
|
|
56
|
+
}
|
|
57
|
+
const networkParams = getNetworkParameters(currency.id);
|
|
58
|
+
const sigHashType = networkParams.sigHash;
|
|
59
|
+
if (isNaN(sigHashType)) {
|
|
60
|
+
throw new Error("sigHashType should not be NaN");
|
|
61
|
+
}
|
|
62
|
+
const segwit = isSegwitDerivationMode(account.derivationMode);
|
|
63
|
+
const additionals = buildAdditionals(currency.id, account.derivationMode, transaction);
|
|
64
|
+
const perCoin = perCoinLogic[currency.id];
|
|
65
|
+
const expiryHeight = perCoin?.hasExpiryHeight ? Buffer.from([0x00, 0x00, 0x00, 0x00]) : undefined;
|
|
66
|
+
const hasExtraData = perCoin?.hasExtraData || false;
|
|
67
|
+
const signature = await signerContext(deviceId, currency, signer => wallet.signAccountTx({
|
|
68
|
+
btc: signer,
|
|
69
|
+
fromAccount: walletAccount,
|
|
70
|
+
txInfo,
|
|
71
|
+
lockTime,
|
|
72
|
+
sigHashType,
|
|
73
|
+
segwit,
|
|
74
|
+
additionals,
|
|
75
|
+
expiryHeight,
|
|
76
|
+
hasExtraData,
|
|
77
|
+
onDeviceSignatureGranted: () => o.next({
|
|
78
|
+
type: "device-signature-granted",
|
|
79
|
+
}),
|
|
80
|
+
onDeviceSignatureRequested: () => o.next({
|
|
81
|
+
type: "device-signature-requested",
|
|
82
|
+
}),
|
|
83
|
+
onDeviceStreaming: ({ progress, index, total }) => o.next({
|
|
84
|
+
type: "device-streaming",
|
|
85
|
+
progress,
|
|
86
|
+
index,
|
|
87
|
+
total,
|
|
88
|
+
}),
|
|
89
|
+
}));
|
|
90
|
+
const operation = buildOptimisticOperation({
|
|
91
|
+
accountId: account.id,
|
|
92
|
+
fee,
|
|
93
|
+
value: new BigNumber(transaction.amount).plus(fee),
|
|
94
|
+
senders: Array.from(senders),
|
|
95
|
+
recipients,
|
|
96
|
+
});
|
|
97
|
+
o.next({
|
|
98
|
+
type: "signed",
|
|
99
|
+
signedOperation: {
|
|
100
|
+
operation,
|
|
101
|
+
signature,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
export const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => fromAsyncOperation(o => executeSignOperation(o, account, deviceId, transaction, signerContext));
|
|
111
106
|
export default buildSignOperation;
|
|
112
107
|
//# sourceMappingURL=signOperation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { AccountBridge } from "@ledgerhq/types-live";
|
|
2
|
+
import type { Transaction } from "./types";
|
|
3
|
+
import { SignerContext } from "./signer";
|
|
4
|
+
export declare const buildSignRawOperation: (signerContext: SignerContext) => AccountBridge<Transaction>["signRawOperation"];
|
|
5
|
+
export default buildSignRawOperation;
|
|
6
|
+
//# sourceMappingURL=signRawOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signRawOperation.d.ts","sourceRoot":"","sources":["../src/signRawOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAC;AAmCxD,eAAO,MAAM,qBAAqB,kBAChB,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,kBAAkB,CAuDzE,CAAC;AAEP,eAAe,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BigNumber } from "bignumber.js";
|
|
2
|
+
import { log } from "@ledgerhq/logs";
|
|
3
|
+
import { getAddressFormatDerivationMode } from "@ledgerhq/coin-framework/derivation";
|
|
4
|
+
import { parsePsbt } from "@ledgerhq/psbtv2";
|
|
5
|
+
import { getNetworkParameters } from "./networks";
|
|
6
|
+
import { buildOptimisticOperation } from "./buildOptimisticOperation";
|
|
7
|
+
import { getWalletAccount } from "./wallet-btc";
|
|
8
|
+
import { feeFromPsbt } from "./psbtFees";
|
|
9
|
+
import { fromAsyncOperation } from "./observable";
|
|
10
|
+
const signPsbtWithDevice = async (signerContext, deviceId, currency, psbtBuffer, options) => signerContext(deviceId, currency, signer => {
|
|
11
|
+
if (!signer.signPsbtBuffer) {
|
|
12
|
+
throw new Error("signPsbtBuffer not available");
|
|
13
|
+
}
|
|
14
|
+
return signer.signPsbtBuffer(psbtBuffer, {
|
|
15
|
+
accountPath: options.accountPath,
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
17
|
+
addressFormat: options.addressFormat,
|
|
18
|
+
finalizePsbt: true,
|
|
19
|
+
onDeviceSignatureRequested: options.onDeviceSignatureRequested,
|
|
20
|
+
onDeviceSignatureGranted: options.onDeviceSignatureGranted,
|
|
21
|
+
onDeviceStreaming: options.onDeviceStreaming,
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
export const buildSignRawOperation = (signerContext) => ({ account, deviceId, transaction: psbt }) => fromAsyncOperation(async (o) => {
|
|
25
|
+
const { currency } = account;
|
|
26
|
+
const walletAccount = getWalletAccount(account);
|
|
27
|
+
log("hw", `signRawTransaction ${currency.id} for account ${account.id}`);
|
|
28
|
+
const networkParams = getNetworkParameters(currency.id);
|
|
29
|
+
const sigHashType = networkParams.sigHash;
|
|
30
|
+
if (Number.isNaN(sigHashType)) {
|
|
31
|
+
throw new TypeError("sigHashType should not be NaN");
|
|
32
|
+
}
|
|
33
|
+
const psbtBuffer = parsePsbt(psbt);
|
|
34
|
+
const psbtResult = await signPsbtWithDevice(signerContext, deviceId, currency, psbtBuffer, {
|
|
35
|
+
accountPath: `${walletAccount.params.path}/${walletAccount.params.index}'`,
|
|
36
|
+
addressFormat: getAddressFormatDerivationMode(account.derivationMode),
|
|
37
|
+
onDeviceSignatureRequested: () => o.next({ type: "device-signature-requested" }),
|
|
38
|
+
onDeviceSignatureGranted: () => o.next({ type: "device-signature-granted" }),
|
|
39
|
+
onDeviceStreaming: arg => o.next({ type: "device-streaming", ...arg }),
|
|
40
|
+
});
|
|
41
|
+
if (!psbtResult) {
|
|
42
|
+
throw new Error(`PSBT signing failed: no result from device for account ${account.id} (${currency.id})`);
|
|
43
|
+
}
|
|
44
|
+
const parsedPsbtFee = feeFromPsbt(psbtBuffer);
|
|
45
|
+
if (!parsedPsbtFee) {
|
|
46
|
+
log("hw", `Failed to extract fee from PSBT for account ${account.id} (${currency.id}); falling back to fee=0`);
|
|
47
|
+
}
|
|
48
|
+
const psbtFee = parsedPsbtFee || BigNumber(0);
|
|
49
|
+
// Optimistic operation for PSBT (we don't know recipients/amount here)
|
|
50
|
+
const operation = buildOptimisticOperation({
|
|
51
|
+
accountId: account.id,
|
|
52
|
+
fee: psbtFee,
|
|
53
|
+
extra: { psbt: true },
|
|
54
|
+
});
|
|
55
|
+
o.next({
|
|
56
|
+
type: "signed",
|
|
57
|
+
signedOperation: {
|
|
58
|
+
operation,
|
|
59
|
+
// Ensure non-empty signature: if not finalized, fall back to the PSBT (base64)
|
|
60
|
+
signature: psbtResult.tx || psbtResult.psbt.toString("base64"),
|
|
61
|
+
rawData: { psbtSigned: psbtResult.psbt.toString("base64") },
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
export default buildSignRawOperation;
|
|
66
|
+
//# sourceMappingURL=signRawOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signRawOperation.js","sourceRoot":"","sources":["../src/signRawOperation.ts"],"names":[],"mappings":"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"}
|
package/lib-es/signer.d.ts
CHANGED
|
@@ -23,6 +23,21 @@ export interface BitcoinSigner {
|
|
|
23
23
|
signMessage(path: string, messageHex: string): Promise<BitcoinSignature>;
|
|
24
24
|
splitTransaction(transactionHex: string, isSegwitSupported: boolean | null | undefined, hasExtraData: boolean | null | undefined, additionals: Array<string> | null | undefined): SignerTransaction;
|
|
25
25
|
createPaymentTransaction(arg: CreateTransaction): Promise<string>;
|
|
26
|
+
signPsbtBuffer?(psbtBuffer: Buffer, options?: {
|
|
27
|
+
finalizePsbt?: boolean;
|
|
28
|
+
accountPath?: string;
|
|
29
|
+
addressFormat?: AddressFormat;
|
|
30
|
+
onDeviceSignatureRequested: (() => void) | undefined;
|
|
31
|
+
onDeviceSignatureGranted: (() => void) | undefined;
|
|
32
|
+
onDeviceStreaming: ((arg: {
|
|
33
|
+
progress: number;
|
|
34
|
+
total: number;
|
|
35
|
+
index: number;
|
|
36
|
+
}) => void) | undefined;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
psbt: Buffer;
|
|
39
|
+
tx: string;
|
|
40
|
+
}>;
|
|
26
41
|
}
|
|
27
42
|
export type SignerResult = BitcoinXPub | BitcoinAddress | BitcoinSignature;
|
|
28
43
|
export type SignerContext = <T>(deviceId: string, crypto: CryptoCurrency, fn: (signer: BitcoinSigner) => Promise<T>) => Promise<T>;
|
package/lib-es/signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEzE,gBAAgB,CACd,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAC7C,YAAY,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACxC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5C,iBAAiB,CAAC;IACrB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
|
package/lib-es/types.d.ts
CHANGED
|
@@ -113,6 +113,8 @@ export type Transaction = TransactionCommon & {
|
|
|
113
113
|
networkInfo: NetworkInfo | null | undefined;
|
|
114
114
|
opReturnData?: Buffer | undefined;
|
|
115
115
|
changeAddress?: string | undefined;
|
|
116
|
+
psbt?: string;
|
|
117
|
+
finalizePsbt?: boolean;
|
|
116
118
|
};
|
|
117
119
|
export type TransactionRaw = TransactionCommonRaw & {
|
|
118
120
|
family: "bitcoin";
|