@btc-vision/transaction 1.6.13 → 1.6.15

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.13";
1
+ export declare const version = "1.6.15";
package/build/_version.js CHANGED
@@ -1 +1 @@
1
- export const version = '1.6.13';
1
+ export const version = '1.6.15';
@@ -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
+ return opWalletCancel;
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
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@btc-vision/transaction",
3
3
  "type": "module",
4
- "version": "1.6.13",
4
+ "version": "1.6.15",
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.13';
1
+ export const version = '1.6.15';
@@ -1,10 +1,7 @@
1
1
  import { Transaction, TxOutput } from '@btc-vision/bitcoin';
2
2
  import { currentConsensus } from '../consensus/ConsensusConfig.js';
3
3
  import { UTXO } from '../utxo/interfaces/IUTXO.js';
4
- import {
5
- CustomScriptTransaction,
6
- ICustomTransactionParameters,
7
- } from './builders/CustomScriptTransaction.js';
4
+ import { CustomScriptTransaction, ICustomTransactionParameters, } from './builders/CustomScriptTransaction.js';
8
5
  import { DeploymentTransaction } from './builders/DeploymentTransaction.js';
9
6
  import { FundingTransaction } from './builders/FundingTransaction.js';
10
7
  import { InteractionTransaction } from './builders/InteractionTransaction.js';
@@ -18,6 +15,8 @@ import {
18
15
  } from './interfaces/ITransactionParameters.js';
19
16
  import { PSBTTypes } from './psbt/PSBTTypes.js';
20
17
  import {
18
+ ICancelTransactionParametersWithoutSigner,
19
+ ICustomTransactionWithoutSigner,
21
20
  IDeploymentParametersWithoutSigner,
22
21
  InteractionParametersWithoutSigner,
23
22
  } from './browser/Web3Provider.js';
@@ -28,6 +27,7 @@ import { InteractionTransactionP2WDA } from './builders/InteractionTransactionP2
28
27
  import { ChallengeSolution } from '../epoch/ChallengeSolution.js';
29
28
  import { Address } from '../keypair/Address.js';
30
29
  import { BitcoinUtils } from '../utils/BitcoinUtils.js';
30
+ import { CancelTransaction, ICancelTransactionParameters } from './builders/CancelTransaction.js';
31
31
 
32
32
  export interface DeploymentResult {
33
33
  readonly transaction: [string, string];
@@ -67,6 +67,11 @@ export interface BitcoinTransferResponse extends BitcoinTransferBase {
67
67
  readonly original: FundingTransaction;
68
68
  }
69
69
 
70
+ export interface CancelledTransaction {
71
+ readonly transaction: string;
72
+ readonly nextUTXOs: UTXO[];
73
+ }
74
+
70
75
  export class TransactionFactory {
71
76
  public debug: boolean = false;
72
77
 
@@ -78,12 +83,44 @@ export class TransactionFactory {
78
83
  private readonly INITIAL_FUNDING_ESTIMATE = 2000n;
79
84
  private readonly MAX_ITERATIONS = 10;
80
85
 
86
+ public async createCancellableTransaction(
87
+ params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner,
88
+ ): Promise<CancelledTransaction> {
89
+ if (!params.to) {
90
+ throw new Error('Field "to" not provided.');
91
+ }
92
+ if (!params.from) {
93
+ throw new Error('Field "from" not provided.');
94
+ }
95
+ if (!params.utxos[0]) {
96
+ throw new Error('Missing at least one UTXO.');
97
+ }
98
+
99
+ const opWalletCancel = await this.detectCancelOPWallet(params);
100
+ if (opWalletCancel) {
101
+ return opWalletCancel;
102
+ }
103
+
104
+ if (!('signer' in params)) {
105
+ throw new Error('Field "signer" not provided, OP_WALLET not detected.');
106
+ }
107
+
108
+ const cancel = new CancelTransaction(params);
109
+ const signed = await cancel.signTransaction();
110
+ const rawTx = signed.toHex();
111
+
112
+ return {
113
+ transaction: rawTx,
114
+ nextUTXOs: this.getUTXOAsTransaction(signed, params.from, 0),
115
+ };
116
+ }
117
+
81
118
  /**
82
119
  * @description Generate a transaction with a custom script.
83
120
  * @returns {Promise<[string, string]>} - The signed transaction
84
121
  */
85
122
  public async createCustomScriptTransaction(
86
- interactionParameters: ICustomTransactionParameters,
123
+ interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner,
87
124
  ): Promise<[string, string, UTXO[]]> {
88
125
  if (!interactionParameters.to) {
89
126
  throw new Error('Field "to" not provided.');
@@ -452,6 +489,35 @@ export class TransactionFactory {
452
489
  });
453
490
  }
454
491
 
492
+ private async detectCancelOPWallet(
493
+ interactionParameters:
494
+ | ICancelTransactionParameters
495
+ | ICancelTransactionParametersWithoutSigner,
496
+ ): Promise<CancelledTransaction | null> {
497
+ if (typeof window === 'undefined') {
498
+ return null;
499
+ }
500
+
501
+ const _window = window as WindowWithWallets;
502
+ if (!_window || !_window.opnet || !_window.opnet.web3) {
503
+ return null;
504
+ }
505
+
506
+ const opnet = _window.opnet.web3;
507
+ const interaction = await opnet.cancelTransaction({
508
+ ...interactionParameters,
509
+
510
+ // @ts-expect-error no, this is ok
511
+ signer: undefined,
512
+ });
513
+
514
+ if (!interaction) {
515
+ throw new Error('Could not sign interaction transaction.');
516
+ }
517
+
518
+ return interaction;
519
+ }
520
+
455
521
  private async detectInteractionOPWallet(
456
522
  interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner,
457
523
  ): 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[]>;