@btc-vision/transaction 1.6.12 → 1.6.14

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.
@@ -5,8 +5,9 @@ import { FundingTransaction } from './builders/FundingTransaction.js';
5
5
  import { TransactionBuilder } from './builders/TransactionBuilder.js';
6
6
  import { TransactionType } from './enums/TransactionType.js';
7
7
  import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters } from './interfaces/ITransactionParameters.js';
8
- import { InteractionParametersWithoutSigner } from './browser/Web3Provider.js';
8
+ import { ICancelTransactionParametersWithoutSigner, ICustomTransactionWithoutSigner, InteractionParametersWithoutSigner } from './browser/Web3Provider.js';
9
9
  import { RawChallenge } from '../epoch/interfaces/IChallengeSolution.js';
10
+ import { ICancelTransactionParameters } from './builders/CancelTransaction.js';
10
11
  export interface DeploymentResult {
11
12
  readonly transaction: [string, string];
12
13
  readonly contractAddress: string;
@@ -38,18 +39,24 @@ export interface InteractionResponse {
38
39
  export interface BitcoinTransferResponse extends BitcoinTransferBase {
39
40
  readonly original: FundingTransaction;
40
41
  }
42
+ export interface CancelledTransaction {
43
+ readonly transaction: string;
44
+ readonly nextUTXOs: UTXO[];
45
+ }
41
46
  export declare class TransactionFactory {
42
47
  debug: boolean;
43
48
  private readonly DUMMY_PUBKEY;
44
49
  private readonly P2TR_SCRIPT;
45
50
  private readonly INITIAL_FUNDING_ESTIMATE;
46
51
  private readonly MAX_ITERATIONS;
47
- createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters): Promise<[string, string, UTXO[]]>;
52
+ createCancellableTransaction(params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
53
+ createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner): Promise<[string, string, UTXO[]]>;
48
54
  signInteraction(interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner): Promise<InteractionResponse>;
49
55
  signDeployment(deploymentParameters: IDeploymentParameters): Promise<DeploymentResult>;
50
56
  createBTCTransfer(parameters: IFundingTransactionParameters): Promise<BitcoinTransferResponse>;
51
57
  getAllNewUTXOs(original: TransactionBuilder<TransactionType>, tx: Transaction, to: string): UTXO[];
52
58
  private parseOptionalInputs;
59
+ private detectCancelOPWallet;
53
60
  private detectInteractionOPWallet;
54
61
  private detectDeploymentOPWallet;
55
62
  private createFundTransaction;
@@ -1,10 +1,12 @@
1
1
  import { IDeploymentParameters, IInteractionParameters } from '../interfaces/ITransactionParameters.js';
2
2
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
3
- import { DeploymentResult, InteractionResponse } from '../TransactionFactory';
3
+ import { CancelledTransaction, DeploymentResult, InteractionResponse } from '../TransactionFactory';
4
4
  import { ICustomTransactionParameters } from '../builders/CustomScriptTransaction.js';
5
+ import { ICancelTransactionParameters } from '../builders/CancelTransaction.js';
5
6
  export type InteractionParametersWithoutSigner = Omit<IInteractionParameters, 'signer' | 'challenge'>;
6
7
  export type IDeploymentParametersWithoutSigner = Omit<IDeploymentParameters, 'signer' | 'network' | 'challenge'>;
7
- export type CustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge'>;
8
+ export type ICustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge'>;
9
+ export type ICancelTransactionParametersWithoutSigner = Omit<ICancelTransactionParameters, 'signer' | 'challenge' | 'network'>;
8
10
  export interface BroadcastTransactionOptions {
9
11
  raw: string;
10
12
  psbt: boolean;
@@ -18,6 +20,8 @@ export interface BroadcastedTransaction {
18
20
  export interface Web3Provider {
19
21
  signInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<InteractionResponse>;
20
22
  signAndBroadcastInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<[BroadcastedTransaction, BroadcastedTransaction, UTXO[], string]>;
23
+ cancelTransaction(params: ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
24
+ customTransaction(params: ICustomTransactionWithoutSigner): Promise<BroadcastedTransaction>;
21
25
  deployContract(params: IDeploymentParametersWithoutSigner): Promise<DeploymentResult>;
22
26
  broadcast(transactions: BroadcastTransactionOptions[]): Promise<BroadcastedTransaction[]>;
23
27
  }
@@ -1 +1 @@
1
- export declare const version = "1.6.12";
1
+ export declare const version = "1.6.14";
package/build/_version.js CHANGED
@@ -1 +1 @@
1
- export const version = '1.6.12';
1
+ export const version = '1.6.14';
@@ -5,8 +5,9 @@ import { FundingTransaction } from './builders/FundingTransaction.js';
5
5
  import { TransactionBuilder } from './builders/TransactionBuilder.js';
6
6
  import { TransactionType } from './enums/TransactionType.js';
7
7
  import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters } from './interfaces/ITransactionParameters.js';
8
- import { InteractionParametersWithoutSigner } from './browser/Web3Provider.js';
8
+ import { ICancelTransactionParametersWithoutSigner, ICustomTransactionWithoutSigner, InteractionParametersWithoutSigner } from './browser/Web3Provider.js';
9
9
  import { RawChallenge } from '../epoch/interfaces/IChallengeSolution.js';
10
+ import { ICancelTransactionParameters } from './builders/CancelTransaction.js';
10
11
  export interface DeploymentResult {
11
12
  readonly transaction: [string, string];
12
13
  readonly contractAddress: string;
@@ -38,18 +39,24 @@ export interface InteractionResponse {
38
39
  export interface BitcoinTransferResponse extends BitcoinTransferBase {
39
40
  readonly original: FundingTransaction;
40
41
  }
42
+ export interface CancelledTransaction {
43
+ readonly transaction: string;
44
+ readonly nextUTXOs: UTXO[];
45
+ }
41
46
  export declare class TransactionFactory {
42
47
  debug: boolean;
43
48
  private readonly DUMMY_PUBKEY;
44
49
  private readonly P2TR_SCRIPT;
45
50
  private readonly INITIAL_FUNDING_ESTIMATE;
46
51
  private readonly MAX_ITERATIONS;
47
- createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters): Promise<[string, string, UTXO[]]>;
52
+ createCancellableTransaction(params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
53
+ createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner): Promise<[string, string, UTXO[]]>;
48
54
  signInteraction(interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner): Promise<InteractionResponse>;
49
55
  signDeployment(deploymentParameters: IDeploymentParameters): Promise<DeploymentResult>;
50
56
  createBTCTransfer(parameters: IFundingTransactionParameters): Promise<BitcoinTransferResponse>;
51
57
  getAllNewUTXOs(original: TransactionBuilder<TransactionType>, tx: Transaction, to: string): UTXO[];
52
58
  private parseOptionalInputs;
59
+ private detectCancelOPWallet;
53
60
  private detectInteractionOPWallet;
54
61
  private detectDeploymentOPWallet;
55
62
  private createFundTransaction;
@@ -9,6 +9,7 @@ import { P2WDADetector } from '../p2wda/P2WDADetector.js';
9
9
  import { InteractionTransactionP2WDA } from './builders/InteractionTransactionP2WDA.js';
10
10
  import { Address } from '../keypair/Address.js';
11
11
  import { BitcoinUtils } from '../utils/BitcoinUtils.js';
12
+ import { CancelTransaction } from './builders/CancelTransaction.js';
12
13
  export class TransactionFactory {
13
14
  constructor() {
14
15
  this.debug = false;
@@ -20,6 +21,31 @@ export class TransactionFactory {
20
21
  this.INITIAL_FUNDING_ESTIMATE = 2000n;
21
22
  this.MAX_ITERATIONS = 10;
22
23
  }
24
+ async createCancellableTransaction(params) {
25
+ if (!params.to) {
26
+ throw new Error('Field "to" not provided.');
27
+ }
28
+ if (!params.from) {
29
+ throw new Error('Field "from" not provided.');
30
+ }
31
+ if (!params.utxos[0]) {
32
+ throw new Error('Missing at least one UTXO.');
33
+ }
34
+ const opWalletCancel = await this.detectCancelOPWallet(params);
35
+ if (opWalletCancel) {
36
+ throw new Error('Cancelling via OP_WALLET is not supported yet.');
37
+ }
38
+ if (!('signer' in params)) {
39
+ throw new Error('Field "signer" not provided, OP_WALLET not detected.');
40
+ }
41
+ const cancel = new CancelTransaction(params);
42
+ const signed = await cancel.signTransaction();
43
+ const rawTx = signed.toHex();
44
+ return {
45
+ transaction: rawTx,
46
+ nextUTXOs: this.getUTXOAsTransaction(signed, params.from, 0),
47
+ };
48
+ }
23
49
  async createCustomScriptTransaction(interactionParameters) {
24
50
  if (!interactionParameters.to) {
25
51
  throw new Error('Field "to" not provided.');
@@ -269,6 +295,24 @@ export class TransactionFactory {
269
295
  };
270
296
  });
271
297
  }
298
+ async detectCancelOPWallet(interactionParameters) {
299
+ if (typeof window === 'undefined') {
300
+ return null;
301
+ }
302
+ const _window = window;
303
+ if (!_window || !_window.opnet || !_window.opnet.web3) {
304
+ return null;
305
+ }
306
+ const opnet = _window.opnet.web3;
307
+ const interaction = await opnet.cancelTransaction({
308
+ ...interactionParameters,
309
+ signer: undefined,
310
+ });
311
+ if (!interaction) {
312
+ throw new Error('Could not sign interaction transaction.');
313
+ }
314
+ return interaction;
315
+ }
272
316
  async detectInteractionOPWallet(interactionParameters) {
273
317
  if (typeof window === 'undefined') {
274
318
  return null;
@@ -1,10 +1,12 @@
1
1
  import { IDeploymentParameters, IInteractionParameters } from '../interfaces/ITransactionParameters.js';
2
2
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
3
- import { DeploymentResult, InteractionResponse } from '../TransactionFactory';
3
+ import { CancelledTransaction, DeploymentResult, InteractionResponse } from '../TransactionFactory';
4
4
  import { ICustomTransactionParameters } from '../builders/CustomScriptTransaction.js';
5
+ import { ICancelTransactionParameters } from '../builders/CancelTransaction.js';
5
6
  export type InteractionParametersWithoutSigner = Omit<IInteractionParameters, 'signer' | 'challenge'>;
6
7
  export type IDeploymentParametersWithoutSigner = Omit<IDeploymentParameters, 'signer' | 'network' | 'challenge'>;
7
- export type CustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge'>;
8
+ export type ICustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge'>;
9
+ export type ICancelTransactionParametersWithoutSigner = Omit<ICancelTransactionParameters, 'signer' | 'challenge' | 'network'>;
8
10
  export interface BroadcastTransactionOptions {
9
11
  raw: string;
10
12
  psbt: boolean;
@@ -18,6 +20,8 @@ export interface BroadcastedTransaction {
18
20
  export interface Web3Provider {
19
21
  signInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<InteractionResponse>;
20
22
  signAndBroadcastInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<[BroadcastedTransaction, BroadcastedTransaction, UTXO[], string]>;
23
+ cancelTransaction(params: ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
24
+ customTransaction(params: ICustomTransactionWithoutSigner): Promise<BroadcastedTransaction>;
21
25
  deployContract(params: IDeploymentParametersWithoutSigner): Promise<DeploymentResult>;
22
26
  broadcast(transactions: BroadcastTransactionOptions[]): Promise<BroadcastedTransaction[]>;
23
27
  }
@@ -111,7 +111,6 @@ export class SharedInteractionTransaction extends TransactionBuilder {
111
111
  if (!this.scriptTree) {
112
112
  throw new Error('Script tree is required');
113
113
  }
114
- console.log('internalPubkey', this.internalPubKeyToXOnly().toString('hex'));
115
114
  return {
116
115
  internalPubkey: this.internalPubKeyToXOnly(),
117
116
  network: this.network,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@btc-vision/transaction",
3
3
  "type": "module",
4
- "version": "1.6.12",
4
+ "version": "1.6.14",
5
5
  "author": "BlobMaster41",
6
6
  "description": "OPNet transaction library allows you to create and sign transactions for the OPNet network.",
7
7
  "engines": {
package/src/_version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '1.6.12';
1
+ export const version = '1.6.14';
@@ -18,6 +18,8 @@ import {
18
18
  } from './interfaces/ITransactionParameters.js';
19
19
  import { PSBTTypes } from './psbt/PSBTTypes.js';
20
20
  import {
21
+ ICancelTransactionParametersWithoutSigner,
22
+ ICustomTransactionWithoutSigner,
21
23
  IDeploymentParametersWithoutSigner,
22
24
  InteractionParametersWithoutSigner,
23
25
  } from './browser/Web3Provider.js';
@@ -28,6 +30,7 @@ import { InteractionTransactionP2WDA } from './builders/InteractionTransactionP2
28
30
  import { ChallengeSolution } from '../epoch/ChallengeSolution.js';
29
31
  import { Address } from '../keypair/Address.js';
30
32
  import { BitcoinUtils } from '../utils/BitcoinUtils.js';
33
+ import { CancelTransaction, ICancelTransactionParameters } from './builders/CancelTransaction.js';
31
34
 
32
35
  export interface DeploymentResult {
33
36
  readonly transaction: [string, string];
@@ -67,6 +70,11 @@ export interface BitcoinTransferResponse extends BitcoinTransferBase {
67
70
  readonly original: FundingTransaction;
68
71
  }
69
72
 
73
+ export interface CancelledTransaction {
74
+ readonly transaction: string;
75
+ readonly nextUTXOs: UTXO[];
76
+ }
77
+
70
78
  export class TransactionFactory {
71
79
  public debug: boolean = false;
72
80
 
@@ -78,12 +86,44 @@ export class TransactionFactory {
78
86
  private readonly INITIAL_FUNDING_ESTIMATE = 2000n;
79
87
  private readonly MAX_ITERATIONS = 10;
80
88
 
89
+ public async createCancellableTransaction(
90
+ params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner,
91
+ ): Promise<CancelledTransaction> {
92
+ if (!params.to) {
93
+ throw new Error('Field "to" not provided.');
94
+ }
95
+ if (!params.from) {
96
+ throw new Error('Field "from" not provided.');
97
+ }
98
+ if (!params.utxos[0]) {
99
+ throw new Error('Missing at least one UTXO.');
100
+ }
101
+
102
+ const opWalletCancel = await this.detectCancelOPWallet(params);
103
+ if (opWalletCancel) {
104
+ throw new Error('Cancelling via OP_WALLET is not supported yet.');
105
+ }
106
+
107
+ if (!('signer' in params)) {
108
+ throw new Error('Field "signer" not provided, OP_WALLET not detected.');
109
+ }
110
+
111
+ const cancel = new CancelTransaction(params);
112
+ const signed = await cancel.signTransaction();
113
+ const rawTx = signed.toHex();
114
+
115
+ return {
116
+ transaction: rawTx,
117
+ nextUTXOs: this.getUTXOAsTransaction(signed, params.from, 0),
118
+ };
119
+ }
120
+
81
121
  /**
82
122
  * @description Generate a transaction with a custom script.
83
123
  * @returns {Promise<[string, string]>} - The signed transaction
84
124
  */
85
125
  public async createCustomScriptTransaction(
86
- interactionParameters: ICustomTransactionParameters,
126
+ interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner,
87
127
  ): Promise<[string, string, UTXO[]]> {
88
128
  if (!interactionParameters.to) {
89
129
  throw new Error('Field "to" not provided.');
@@ -452,6 +492,35 @@ export class TransactionFactory {
452
492
  });
453
493
  }
454
494
 
495
+ private async detectCancelOPWallet(
496
+ interactionParameters:
497
+ | ICancelTransactionParameters
498
+ | ICancelTransactionParametersWithoutSigner,
499
+ ): Promise<CancelledTransaction | null> {
500
+ if (typeof window === 'undefined') {
501
+ return null;
502
+ }
503
+
504
+ const _window = window as WindowWithWallets;
505
+ if (!_window || !_window.opnet || !_window.opnet.web3) {
506
+ return null;
507
+ }
508
+
509
+ const opnet = _window.opnet.web3;
510
+ const interaction = await opnet.cancelTransaction({
511
+ ...interactionParameters,
512
+
513
+ // @ts-expect-error no, this is ok
514
+ signer: undefined,
515
+ });
516
+
517
+ if (!interaction) {
518
+ throw new Error('Could not sign interaction transaction.');
519
+ }
520
+
521
+ return interaction;
522
+ }
523
+
455
524
  private async detectInteractionOPWallet(
456
525
  interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner,
457
526
  ): Promise<InteractionResponse | null> {
@@ -3,8 +3,9 @@ import {
3
3
  IInteractionParameters,
4
4
  } from '../interfaces/ITransactionParameters.js';
5
5
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
6
- import { DeploymentResult, InteractionResponse } from '../TransactionFactory';
6
+ import { CancelledTransaction, DeploymentResult, InteractionResponse } from '../TransactionFactory';
7
7
  import { ICustomTransactionParameters } from '../builders/CustomScriptTransaction.js';
8
+ import { ICancelTransactionParameters } from '../builders/CancelTransaction.js';
8
9
 
9
10
  export type InteractionParametersWithoutSigner = Omit<
10
11
  IInteractionParameters,
@@ -16,11 +17,16 @@ export type IDeploymentParametersWithoutSigner = Omit<
16
17
  'signer' | 'network' | 'challenge'
17
18
  >;
18
19
 
19
- export type CustomTransactionWithoutSigner = Omit<
20
+ export type ICustomTransactionWithoutSigner = Omit<
20
21
  ICustomTransactionParameters,
21
22
  'signer' | 'challenge'
22
23
  >;
23
24
 
25
+ export type ICancelTransactionParametersWithoutSigner = Omit<
26
+ ICancelTransactionParameters,
27
+ 'signer' | 'challenge' | 'network'
28
+ >;
29
+
24
30
  export interface BroadcastTransactionOptions {
25
31
  raw: string;
26
32
  psbt: boolean;
@@ -55,6 +61,12 @@ export interface Web3Provider {
55
61
  interactionParameters: InteractionParametersWithoutSigner,
56
62
  ): Promise<[BroadcastedTransaction, BroadcastedTransaction, UTXO[], string]>;
57
63
 
64
+ cancelTransaction(
65
+ params: ICancelTransactionParametersWithoutSigner,
66
+ ): Promise<CancelledTransaction>;
67
+
68
+ customTransaction(params: ICustomTransactionWithoutSigner): Promise<BroadcastedTransaction>;
69
+
58
70
  deployContract(params: IDeploymentParametersWithoutSigner): Promise<DeploymentResult>;
59
71
 
60
72
  broadcast(transactions: BroadcastTransactionOptions[]): Promise<BroadcastedTransaction[]>;
@@ -2,7 +2,10 @@ import { TransactionType } from '../enums/TransactionType.js';
2
2
  import { P2TRPayment, PaymentType, Psbt, PsbtInput, Taptree } from '@btc-vision/bitcoin';
3
3
  import { TransactionBuilder } from './TransactionBuilder.js';
4
4
  import { TapLeafScript } from '../interfaces/Tap.js';
5
- import { ITransactionParameters, SharedInteractionParameters, } from '../interfaces/ITransactionParameters.js';
5
+ import {
6
+ ITransactionParameters,
7
+ SharedInteractionParameters,
8
+ } from '../interfaces/ITransactionParameters.js';
6
9
  import { UnisatSigner } from '../browser/extensions/UnisatSigner.js';
7
10
 
8
11
  export interface ICancelTransactionParameters
@@ -221,8 +221,6 @@ export abstract class SharedInteractionTransaction<
221
221
  throw new Error('Script tree is required');
222
222
  }
223
223
 
224
- console.log('internalPubkey', this.internalPubKeyToXOnly().toString('hex'));
225
-
226
224
  return {
227
225
  internalPubkey: this.internalPubKeyToXOnly(),
228
226
  network: this.network,