@sidhujag/sysweb3-keyring 1.0.627 → 2.0.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.
Files changed (140) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +66 -0
  3. package/cjs/hardware-wallet-manager.js +302 -128
  4. package/cjs/hardware-wallet-manager.js.map +1 -1
  5. package/cjs/keyring-core.js +2605 -0
  6. package/cjs/keyring-core.js.map +1 -0
  7. package/cjs/keyring-manager.js +31 -2439
  8. package/cjs/keyring-manager.js.map +1 -1
  9. package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
  10. package/cjs/ledger/host-types.js +10 -0
  11. package/cjs/ledger/host-types.js.map +1 -0
  12. package/cjs/ledger/index.js +243 -447
  13. package/cjs/ledger/index.js.map +1 -1
  14. package/cjs/ledger/prepare-psbt.js +177 -0
  15. package/cjs/ledger/prepare-psbt.js.map +1 -0
  16. package/cjs/software-hd-account.js +23 -0
  17. package/cjs/software-hd-account.js.map +1 -0
  18. package/cjs/software.js +74 -0
  19. package/cjs/software.js.map +1 -0
  20. package/cjs/storage-core.js +227 -0
  21. package/cjs/storage-core.js.map +1 -0
  22. package/cjs/storage.js +15 -210
  23. package/cjs/storage.js.map +1 -1
  24. package/cjs/transactions/ethereum.js +176 -39
  25. package/cjs/transactions/ethereum.js.map +1 -1
  26. package/cjs/transactions/evm-local-signer.js +11 -1
  27. package/cjs/transactions/evm-local-signer.js.map +1 -1
  28. package/cjs/transactions/hardware-psbt.js +159 -0
  29. package/cjs/transactions/hardware-psbt.js.map +1 -0
  30. package/cjs/transactions/prepared-evm.js +196 -0
  31. package/cjs/transactions/prepared-evm.js.map +1 -0
  32. package/cjs/transactions/syscoin-core.js +651 -0
  33. package/cjs/transactions/syscoin-core.js.map +1 -0
  34. package/cjs/transactions/syscoin.js +8 -768
  35. package/cjs/transactions/syscoin.js.map +1 -1
  36. package/cjs/trezor/connect.js +243 -0
  37. package/cjs/trezor/connect.js.map +1 -0
  38. package/cjs/trezor/index.js +96 -58
  39. package/cjs/trezor/index.js.map +1 -1
  40. package/cjs/trezor/witness.js +25 -0
  41. package/cjs/trezor/witness.js.map +1 -0
  42. package/cjs/types.js.map +1 -1
  43. package/cjs/utils/psbt-account-scope.js +5 -3
  44. package/cjs/utils/psbt-account-scope.js.map +1 -1
  45. package/esm/errorUtils.js +72 -0
  46. package/esm/errorUtils.js.map +1 -0
  47. package/esm/ethers-v6.js +207 -0
  48. package/esm/ethers-v6.js.map +1 -0
  49. package/esm/hardware-wallet-manager.js +643 -0
  50. package/esm/hardware-wallet-manager.js.map +1 -0
  51. package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
  52. package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
  53. package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
  54. package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
  55. package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
  56. package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
  57. package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
  58. package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
  59. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
  60. package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
  61. package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
  62. package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
  63. package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
  64. package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
  65. package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
  66. package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
  67. package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
  68. package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
  69. package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
  70. package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
  71. package/esm/ledger/consts.js +4 -0
  72. package/esm/ledger/consts.js.map +1 -0
  73. package/esm/ledger/dmk-evm.js +258 -0
  74. package/esm/ledger/dmk-evm.js.map +1 -0
  75. package/esm/ledger/dmk-session.js +264 -0
  76. package/esm/ledger/dmk-session.js.map +1 -0
  77. package/esm/ledger/dmk-utxo.js +279 -0
  78. package/esm/ledger/dmk-utxo.js.map +1 -0
  79. package/esm/ledger/host-types.js +5 -0
  80. package/esm/ledger/host-types.js.map +1 -0
  81. package/esm/ledger/index.js +268 -0
  82. package/esm/ledger/index.js.map +1 -0
  83. package/esm/ledger/prepare-psbt.js +141 -0
  84. package/esm/ledger/prepare-psbt.js.map +1 -0
  85. package/esm/ledger/types.js +2 -0
  86. package/esm/ledger/types.js.map +1 -0
  87. package/esm/ledger-host.js +36 -0
  88. package/esm/ledger-host.js.map +1 -0
  89. package/esm/private-records.js +153 -0
  90. package/esm/private-records.js.map +1 -0
  91. package/esm/providers.js +588 -0
  92. package/esm/providers.js.map +1 -0
  93. package/esm/signers.js +28 -0
  94. package/esm/signers.js.map +1 -0
  95. package/esm/trezor/connect.js +206 -0
  96. package/esm/trezor/connect.js.map +1 -0
  97. package/esm/trezor/index.js +876 -0
  98. package/esm/trezor/index.js.map +1 -0
  99. package/esm/trezor/witness.js +21 -0
  100. package/esm/trezor/witness.js.map +1 -0
  101. package/esm/types.js +17 -0
  102. package/esm/types.js.map +1 -0
  103. package/esm/utils/derivation-paths.js +109 -0
  104. package/esm/utils/derivation-paths.js.map +1 -0
  105. package/esm/utils/psbt-account-scope.js +310 -0
  106. package/esm/utils/psbt-account-scope.js.map +1 -0
  107. package/package.json +55 -8
  108. package/types/hardware-wallet-manager.d.ts +12 -19
  109. package/types/keyring-core.d.ts +263 -0
  110. package/types/keyring-manager.d.ts +7 -224
  111. package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
  112. package/types/ledger/dmk-evm.d.ts +8 -0
  113. package/types/ledger/dmk-session.d.ts +60 -0
  114. package/types/ledger/dmk-utxo.d.ts +26 -0
  115. package/types/ledger/host-types.d.ts +131 -0
  116. package/types/ledger/index.d.ts +21 -58
  117. package/types/ledger/prepare-psbt.d.ts +3 -0
  118. package/types/ledger/types.d.ts +3 -0
  119. package/types/ledger-host.d.ts +7 -0
  120. package/types/software-hd-account.d.ts +16 -0
  121. package/types/software.d.ts +39 -0
  122. package/types/storage-core.d.ts +22 -0
  123. package/types/storage.d.ts +1 -4
  124. package/types/transactions/ethereum.d.ts +17 -7
  125. package/types/transactions/evm-local-signer.d.ts +3 -1
  126. package/types/transactions/hardware-psbt.d.ts +7 -0
  127. package/types/transactions/prepared-evm.d.ts +53 -0
  128. package/types/transactions/syscoin-core.d.ts +92 -0
  129. package/types/transactions/syscoin.d.ts +8 -67
  130. package/types/trezor/connect.d.ts +42 -0
  131. package/types/trezor/index.d.ts +22 -4
  132. package/types/trezor/witness.d.ts +3 -0
  133. package/types/types.d.ts +10 -0
  134. package/types/utils/psbt-account-scope.d.ts +1 -0
  135. package/cjs/transactions/__tests__/integration.test.js +0 -237
  136. package/cjs/transactions/__tests__/integration.test.js.map +0 -1
  137. package/cjs/transactions/__tests__/syscoin.test.js +0 -361
  138. package/cjs/transactions/__tests__/syscoin.test.js.map +0 -1
  139. package/types/transactions/__tests__/integration.test.d.ts +0 -1
  140. package/types/transactions/__tests__/syscoin.test.d.ts +0 -1
@@ -0,0 +1,42 @@
1
+ import type { ConnectDynamicSettings, TrezorConnectPublicAPI } from '@trezor/connect-webextension';
2
+ type Client = TrezorConnectPublicAPI<ConnectDynamicSettings>;
3
+ declare const methods: readonly ["getFeatures", "getAccountInfo", "ethereumGetAddress", "ethereumGetPublicKey", "getPublicKey", "getAddress", "signTransaction", "ethereumSignTransaction", "signMessage", "ethereumSignMessage", "ethereumSignTypedData", "verifyMessage", "ethereumVerifyMessage"];
4
+ type Method = (typeof methods)[number];
5
+ type Compatible<T> = T extends {
6
+ success: false;
7
+ } ? T & {
8
+ payload: {
9
+ error: string;
10
+ code?: string;
11
+ };
12
+ } : T;
13
+ type CompatibleCall<FunctionType> = FunctionType extends {
14
+ (...args: infer A): infer R;
15
+ (...args: infer B): infer S;
16
+ (...args: infer C): infer T;
17
+ } ? {
18
+ (...args: A): Promise<Compatible<Awaited<R>>>;
19
+ (...args: B): Promise<Compatible<Awaited<S>>>;
20
+ (...args: C): Promise<Compatible<Awaited<T>>>;
21
+ } : never;
22
+ type Calls = {
23
+ [Name in Method]: CompatibleCall<Client[Name]>;
24
+ };
25
+ type ConnectionEvent = {
26
+ type: 'disconnected';
27
+ } | {
28
+ type: 'model';
29
+ model: string;
30
+ };
31
+ export declare const subscribeTrezorEvents: (listener: (event: ConnectionEvent) => void) => (() => void);
32
+ declare const TrezorConnect: Calls & {
33
+ init: Client['init'];
34
+ dispose: () => Promise<void>;
35
+ };
36
+ export declare const trezorResponseError: (response: {
37
+ payload?: {
38
+ error?: string;
39
+ code?: string;
40
+ };
41
+ }, prefix?: string) => Error;
42
+ export default TrezorConnect;
@@ -1,7 +1,7 @@
1
1
  import { TypedMessage, SignTypedDataVersion, TypedDataV1 } from '@metamask/eth-sig-util';
2
- import { AccountInfo, EthereumTransaction, EthereumTransactionEIP1559 } from '@trezor/connect-webextension';
3
2
  import { Psbt } from 'bitcoinjs-lib';
4
3
  import { Buffer } from 'buffer';
4
+ import type { AccountInfo, EthereumTransaction, EthereumTransactionEIP1559 } from '@trezor/connect-webextension';
5
5
  export interface TrezorControllerState {
6
6
  hdPath: string;
7
7
  paths: Record<string, number>;
@@ -19,7 +19,12 @@ export declare class TrezorKeyring {
19
19
  model?: string;
20
20
  private hardwareWalletManager;
21
21
  private initialized;
22
+ private lifecycleGeneration;
23
+ private unsubscribeTrezor?;
24
+ private readonly onTrezorConnected;
25
+ private readonly onTrezorDisconnected;
22
26
  constructor();
27
+ private observeTrezor;
23
28
  /**
24
29
  * Initialize Trezor script.
25
30
  */
@@ -51,7 +56,7 @@ export declare class TrezorKeyring {
51
56
  */
52
57
  getModel(): string | undefined;
53
58
  /**
54
- * This removes the Trezor Connect iframe from the DOM
59
+ * This disposes the active Trezor Suite connection
55
60
  *
56
61
  * @returns void
57
62
  */
@@ -117,7 +122,20 @@ export declare class TrezorKeyring {
117
122
  tx: EthereumTransaction | EthereumTransactionEIP1559;
118
123
  coin: string;
119
124
  slip44: number;
120
- }): Promise<any>;
125
+ }): Promise<import("@trezor/connect-webextension").OkWithDevice<{
126
+ authorizationList?: {
127
+ address: string;
128
+ chainId: number;
129
+ r: string;
130
+ s: string;
131
+ nonce: number;
132
+ yParity: number;
133
+ }[] | undefined;
134
+ r: string;
135
+ s: string;
136
+ v: string;
137
+ serializedTx: string;
138
+ }>>;
121
139
  /**
122
140
  * This sign message.
123
141
  *
@@ -146,7 +164,7 @@ export declare class TrezorKeyring {
146
164
  data: TypedMessage<any> | TypedDataV1;
147
165
  index: number;
148
166
  version: SignTypedDataVersion;
149
- }): Promise<any>;
167
+ }): Promise<string>;
150
168
  /**
151
169
  * Verify UTXO address by displaying it on the Trezor device
152
170
  * @param accountIndex - The account index
@@ -0,0 +1,3 @@
1
+ import { Buffer } from 'buffer';
2
+ /** Canonical Bitcoin witness-vector encoding (CompactSize count and lengths). */
3
+ export declare const serializeWitness: (witness: readonly Uint8Array[]) => Buffer;
package/types/types.d.ts CHANGED
@@ -56,6 +56,15 @@ export interface IEvmReplacementOptions {
56
56
  beforeBroadcast?: () => void;
57
57
  }
58
58
  export interface IEvmCancellationOptions {
59
+ /** Select the locally controlled outer gas payer for a smart-account transaction. */
60
+ targetAccount?: {
61
+ id: number;
62
+ type: KeyringAccountType;
63
+ };
64
+ /** Read-only preview; never requests credentials, a device signature or broadcast. */
65
+ previewOnly?: boolean;
66
+ /** Required for sending: maximum execution gas fee in decimal wei approved by the user. */
67
+ approvedMaximumFee?: string;
59
68
  /** Synchronous host guard for selection or session state outside the keyring. */
60
69
  assertCurrentContext: () => void;
61
70
  /**
@@ -72,6 +81,7 @@ export interface IEthereumTransactions {
72
81
  cancelSentTransaction: (txHash: string, isLegacy: boolean | undefined, fallbackNonce: number | undefined, options: IEvmCancellationOptions) => Promise<{
73
82
  error?: boolean;
74
83
  isCanceled: boolean;
84
+ maximumFee?: string;
75
85
  transaction?: TransactionResponse;
76
86
  }>;
77
87
  decryptMessage: (msgParams: string[]) => string;
@@ -1,6 +1,7 @@
1
1
  import { INetwork } from '@sidhujag/sysweb3-network';
2
2
  import { Psbt } from 'bitcoinjs-lib';
3
3
  import { KeyringAccountType } from '../types';
4
+ export declare const parsePsbtAccountXpub: (xpub: string) => import("bip32").BIP32Interface;
4
5
  export type PsbtAccountScope = {
5
6
  account: {
6
7
  address: string;
@@ -1,237 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const types_1 = require("../../types");
4
- const syscoin_1 = require("../syscoin");
5
- // Integration tests for the complete transaction flow
6
- describe('PSBT Transaction Flow Integration', () => {
7
- let syscoinTransactions;
8
- let mockSigner;
9
- let mockState;
10
- let mockLedger;
11
- beforeEach(() => {
12
- // Setup comprehensive mocks
13
- mockSigner = {
14
- hd: {
15
- Signer: { network: 'mainnet' },
16
- sign: jest.fn().mockResolvedValue('signed-psbt'),
17
- },
18
- main: {
19
- blockbookURL: 'https://blockbook.test',
20
- createPSBTFromRes: jest.fn().mockResolvedValue('unsigned-psbt'),
21
- assetAllocationSend: jest.fn().mockResolvedValue({
22
- psbt: 'unsigned-token-psbt',
23
- }),
24
- send: jest.fn().mockResolvedValue({
25
- extractTransaction: () => ({ getId: () => 'final-txid' }),
26
- }),
27
- },
28
- };
29
- mockState = {
30
- activeAccountId: 0,
31
- activeAccountType: types_1.KeyringAccountType.HDAccount,
32
- accounts: {
33
- [types_1.KeyringAccountType.HDAccount]: {
34
- 0: { xpub: 'xpub123', id: 0 },
35
- },
36
- },
37
- activeNetwork: { currency: 'sys', chainId: 57 },
38
- };
39
- mockLedger = {
40
- ledgerTransport: true,
41
- ledgerUtxoClient: {
42
- getMasterFingerprint: jest.fn().mockResolvedValue('fingerprint'),
43
- signPsbt: jest.fn().mockResolvedValue([[0, { signature: 'sig' }]]),
44
- },
45
- };
46
- const mockGetAddress = jest.fn().mockResolvedValue('change-address');
47
- const mockTrezor = {
48
- init: jest.fn(),
49
- convertToTrezorFormat: jest.fn(),
50
- signUtxoTransaction: jest.fn(),
51
- };
52
- syscoinTransactions = new syscoin_1.SyscoinTransactions(() => mockSigner, () => mockSigner, // getReadOnlySigner - same mock for testing
53
- () => mockState, mockGetAddress, mockLedger, mockTrezor);
54
- });
55
- describe('Complete Native Transaction Flow', () => {
56
- it('should handle native transaction from creation to broadcast', async () => {
57
- // Step 1: Create unsigned PSBT and get fee
58
- const { fee, psbt: unsignedPsbt } = await syscoinTransactions.getEstimateSysTransactionFee({
59
- amount: 1,
60
- receivingAddress: 'sys1qtest',
61
- feeRate: 0.00001,
62
- });
63
- expect(fee).toBeGreaterThan(0);
64
- expect(unsignedPsbt).toBeDefined();
65
- // Step 2: Sign the PSBT
66
- const signedPsbt = await syscoinTransactions.signPSBT({
67
- psbt: unsignedPsbt,
68
- isTrezor: false,
69
- isLedger: false,
70
- });
71
- // Step 3: Send the signed PSBT
72
- const result = await syscoinTransactions.sendTransaction(signedPsbt);
73
- expect(result.txid).toBe('final-txid');
74
- expect(mockSigner.main.send).toHaveBeenCalledWith(signedPsbt);
75
- });
76
- });
77
- describe('Complete Token Transaction Flow', () => {
78
- it('should handle token transaction from creation to broadcast', async () => {
79
- // Mock token lookup
80
- jest.doMock('@sidhujag/sysweb3-utils', () => ({
81
- getAsset: jest.fn().mockResolvedValue({
82
- assetGuid: 'token123',
83
- decimals: 8,
84
- }),
85
- }));
86
- // Step 1: Create unsigned token PSBT and get fee
87
- const { fee, psbt: unsignedPsbt } = await syscoinTransactions.getEstimateSysTransactionFee({
88
- amount: 100,
89
- receivingAddress: 'sys1qtest',
90
- token: { guid: 'token123', symbol: 'TEST' },
91
- });
92
- expect(fee).toBeGreaterThan(0);
93
- expect(unsignedPsbt).toBeDefined();
94
- expect(mockSigner.main.assetAllocationSend).toHaveBeenCalledWith(expect.any(Object), expect.any(Map), 'change-address', expect.any(Object), 'xpub123');
95
- // Step 2: Sign the token PSBT
96
- const signedPsbt = await syscoinTransactions.signPSBT({
97
- psbt: unsignedPsbt,
98
- isTrezor: false,
99
- isLedger: false,
100
- });
101
- // Step 3: Send the signed PSBT
102
- const result = await syscoinTransactions.sendTransaction(signedPsbt);
103
- expect(result.txid).toBe('final-txid');
104
- });
105
- });
106
- describe('Hardware Wallet Integration', () => {
107
- it('should handle Trezor transaction flow', async () => {
108
- const mockTrezor = {
109
- init: jest.fn(),
110
- convertToTrezorFormat: jest.fn().mockReturnValue('trezor-format'),
111
- signUtxoTransaction: jest.fn().mockResolvedValue('trezor-signed-psbt'),
112
- };
113
- syscoinTransactions.trezor = mockTrezor;
114
- // Create unsigned PSBT
115
- const { fee, psbt: unsignedPsbt } = await syscoinTransactions.getEstimateSysTransactionFee({
116
- amount: 1,
117
- receivingAddress: 'sys1qtest',
118
- });
119
- expect(fee).toBeGreaterThan(0);
120
- expect(unsignedPsbt).toBeDefined();
121
- // Sign with Trezor
122
- const signedPsbt = await syscoinTransactions.signPSBT({
123
- psbt: unsignedPsbt,
124
- isTrezor: true,
125
- });
126
- expect(mockTrezor.init).toHaveBeenCalled();
127
- expect(mockTrezor.signUtxoTransaction).toHaveBeenCalled();
128
- expect(signedPsbt).toBe('trezor-signed-psbt');
129
- // Send
130
- const result = await syscoinTransactions.sendTransaction(signedPsbt);
131
- expect(result.txid).toBe('final-txid');
132
- });
133
- it('should handle Ledger transaction flow', async () => {
134
- mockState.activeAccountType = types_1.KeyringAccountType.Ledger;
135
- mockState.accounts[types_1.KeyringAccountType.Ledger] = {
136
- 0: { xpub: 'ledger-xpub', id: 0, isLedgerWallet: true },
137
- };
138
- // Mock Psbt for Ledger
139
- jest.doMock('syscoinjs-lib', () => ({
140
- Psbt: {
141
- fromBase64: jest.fn().mockReturnValue({
142
- updateInput: jest.fn(),
143
- finalizeAllInputs: jest.fn(),
144
- toBase64: jest.fn().mockReturnValue('ledger-signed-psbt'),
145
- }),
146
- },
147
- }));
148
- // Create unsigned PSBT
149
- const { fee, psbt: unsignedPsbt } = await syscoinTransactions.getEstimateSysTransactionFee({
150
- amount: 1,
151
- receivingAddress: 'sys1qtest',
152
- });
153
- expect(fee).toBeGreaterThan(0);
154
- expect(unsignedPsbt).toBeDefined();
155
- // Sign with Ledger
156
- const signedPsbt = await syscoinTransactions.signPSBT({
157
- psbt: unsignedPsbt,
158
- isLedger: true,
159
- });
160
- expect(mockLedger.ledgerUtxoClient.signPsbt).toHaveBeenCalled();
161
- expect(signedPsbt).toBeDefined();
162
- // Send
163
- const result = await syscoinTransactions.sendTransaction(signedPsbt);
164
- expect(result.txid).toBe('final-txid');
165
- });
166
- });
167
- describe('Error Scenarios', () => {
168
- it('should handle signing errors separately from sending errors', async () => {
169
- // Test signing error
170
- mockSigner.hd.sign = jest
171
- .fn()
172
- .mockRejectedValue(new Error('Device disconnected'));
173
- await expect(syscoinTransactions.getEstimateSysTransactionFee({
174
- amount: 1,
175
- receivingAddress: 'sys1qtest',
176
- })).rejects.toThrow('Failed to sign transaction: Device disconnected');
177
- // Test sending error
178
- mockSigner.main.send = jest
179
- .fn()
180
- .mockRejectedValue(new Error('Network error'));
181
- await expect(syscoinTransactions.sendTransaction('valid-psbt')).rejects.toThrow('Failed to send transaction');
182
- });
183
- it('should require PSBT for sendTransaction', async () => {
184
- await expect(syscoinTransactions.sendTransaction('')).rejects.toThrow('Pre-signed PSBT is required');
185
- });
186
- });
187
- describe('Fee Calculation', () => {
188
- it('should calculate correct fees for multi-input transactions', async () => {
189
- // Mock multiple UTXOs
190
- const mockUtxos = [
191
- { txid: 'tx1', vout: 0, value: '50000000' },
192
- { txid: 'tx2', vout: 1, value: '30000000' },
193
- { txid: 'tx3', vout: 0, value: '20000000' },
194
- ];
195
- jest.doMock('syscoinjs-lib', () => ({
196
- utils: {
197
- fetchBackendUTXOS: jest.fn().mockResolvedValue(mockUtxos),
198
- sanitizeBlockbookUTXOs: jest.fn().mockReturnValue(mockUtxos),
199
- },
200
- }));
201
- jest.doMock('coinselectsyscoin', () => ({
202
- utils: {
203
- transactionBytes: jest.fn().mockReturnValue(500), // Larger tx with multiple inputs
204
- },
205
- }));
206
- const { fee } = await syscoinTransactions.getEstimateSysTransactionFee({
207
- amount: 0.8, // Amount that requires multiple UTXOs
208
- receivingAddress: 'sys1qtest',
209
- feeRate: 0.00001,
210
- });
211
- // Fee should be proportional to transaction size
212
- expect(fee).toBeGreaterThan(0.00001); // More than minimum
213
- });
214
- });
215
- describe('RBF Support', () => {
216
- it('should create RBF-enabled transactions by default', async () => {
217
- await syscoinTransactions.getEstimateSysTransactionFee({
218
- amount: 1,
219
- receivingAddress: 'sys1qtest',
220
- });
221
- // Check that RBF was enabled in the transaction options
222
- expect(mockSigner.main.createPSBTFromRes).toHaveBeenCalled();
223
- const callArgs = mockSigner.main.createPSBTFromRes.mock.calls[0];
224
- expect(callArgs[0]).toMatchObject({ rbf: true });
225
- });
226
- it('should disable RBF when requested', async () => {
227
- await syscoinTransactions.getEstimateSysTransactionFee({
228
- amount: 1,
229
- receivingAddress: 'sys1qtest',
230
- txOptions: { rbf: false },
231
- });
232
- const callArgs = mockSigner.main.createPSBTFromRes.mock.calls[0];
233
- expect(callArgs[0]).toMatchObject({ rbf: false });
234
- });
235
- });
236
- });
237
- //# sourceMappingURL=integration.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../../src/transactions/__tests__/integration.test.ts"],"names":[],"mappings":"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"}