@btc-vision/transaction 1.7.18 → 1.7.22

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 (92) hide show
  1. package/LICENSE +190 -21
  2. package/README.md +1 -1
  3. package/browser/_version.d.ts +1 -1
  4. package/browser/generators/builders/HashCommitmentGenerator.d.ts +49 -0
  5. package/browser/index.js +1 -1
  6. package/browser/keypair/Address.d.ts +3 -1
  7. package/browser/opnet.d.ts +6 -1
  8. package/browser/signer/AddressRotation.d.ts +12 -0
  9. package/browser/transaction/TransactionFactory.d.ts +14 -0
  10. package/browser/transaction/builders/ConsolidatedInteractionTransaction.d.ts +44 -0
  11. package/browser/transaction/enums/TransactionType.d.ts +3 -1
  12. package/browser/transaction/interfaces/IConsolidatedTransactionParameters.d.ts +31 -0
  13. package/browser/transaction/interfaces/ITransactionParameters.d.ts +2 -0
  14. package/browser/transaction/offline/OfflineTransactionManager.d.ts +69 -0
  15. package/browser/transaction/offline/TransactionReconstructor.d.ts +28 -0
  16. package/browser/transaction/offline/TransactionSerializer.d.ts +50 -0
  17. package/browser/transaction/offline/TransactionStateCapture.d.ts +52 -0
  18. package/browser/transaction/offline/index.d.ts +5 -0
  19. package/browser/transaction/offline/interfaces/ISerializableState.d.ts +62 -0
  20. package/browser/transaction/offline/interfaces/ITypeSpecificData.d.ts +62 -0
  21. package/browser/transaction/offline/interfaces/index.d.ts +2 -0
  22. package/browser/transaction/shared/TweakedTransaction.d.ts +12 -1
  23. package/browser/utxo/interfaces/IUTXO.d.ts +2 -0
  24. package/build/_version.d.ts +1 -1
  25. package/build/_version.js +1 -1
  26. package/build/generators/builders/HashCommitmentGenerator.d.ts +49 -0
  27. package/build/generators/builders/HashCommitmentGenerator.js +229 -0
  28. package/build/keypair/Address.d.ts +3 -1
  29. package/build/keypair/Address.js +87 -54
  30. package/build/opnet.d.ts +6 -1
  31. package/build/opnet.js +6 -1
  32. package/build/signer/AddressRotation.d.ts +12 -0
  33. package/build/signer/AddressRotation.js +16 -0
  34. package/build/transaction/TransactionFactory.d.ts +14 -0
  35. package/build/transaction/TransactionFactory.js +36 -0
  36. package/build/transaction/builders/ConsolidatedInteractionTransaction.d.ts +44 -0
  37. package/build/transaction/builders/ConsolidatedInteractionTransaction.js +259 -0
  38. package/build/transaction/builders/TransactionBuilder.js +2 -0
  39. package/build/transaction/enums/TransactionType.d.ts +3 -1
  40. package/build/transaction/enums/TransactionType.js +2 -0
  41. package/build/transaction/interfaces/IConsolidatedTransactionParameters.d.ts +31 -0
  42. package/build/transaction/interfaces/IConsolidatedTransactionParameters.js +1 -0
  43. package/build/transaction/interfaces/ITransactionParameters.d.ts +2 -0
  44. package/build/transaction/offline/OfflineTransactionManager.d.ts +69 -0
  45. package/build/transaction/offline/OfflineTransactionManager.js +255 -0
  46. package/build/transaction/offline/TransactionReconstructor.d.ts +28 -0
  47. package/build/transaction/offline/TransactionReconstructor.js +243 -0
  48. package/build/transaction/offline/TransactionSerializer.d.ts +50 -0
  49. package/build/transaction/offline/TransactionSerializer.js +700 -0
  50. package/build/transaction/offline/TransactionStateCapture.d.ts +52 -0
  51. package/build/transaction/offline/TransactionStateCapture.js +275 -0
  52. package/build/transaction/offline/index.d.ts +5 -0
  53. package/build/transaction/offline/index.js +5 -0
  54. package/build/transaction/offline/interfaces/ISerializableState.d.ts +62 -0
  55. package/build/transaction/offline/interfaces/ISerializableState.js +2 -0
  56. package/build/transaction/offline/interfaces/ITypeSpecificData.d.ts +62 -0
  57. package/build/transaction/offline/interfaces/ITypeSpecificData.js +19 -0
  58. package/build/transaction/offline/interfaces/index.d.ts +2 -0
  59. package/build/transaction/offline/interfaces/index.js +2 -0
  60. package/build/transaction/shared/TweakedTransaction.d.ts +12 -1
  61. package/build/transaction/shared/TweakedTransaction.js +75 -8
  62. package/build/utxo/interfaces/IUTXO.d.ts +2 -0
  63. package/documentation/README.md +5 -0
  64. package/documentation/offline-transaction-signing.md +650 -0
  65. package/documentation/transaction-building.md +603 -0
  66. package/package.json +2 -2
  67. package/src/_version.ts +1 -1
  68. package/src/generators/builders/HashCommitmentGenerator.ts +495 -0
  69. package/src/keypair/Address.ts +123 -70
  70. package/src/opnet.ts +8 -1
  71. package/src/signer/AddressRotation.ts +72 -0
  72. package/src/transaction/TransactionFactory.ts +94 -1
  73. package/src/transaction/builders/CancelTransaction.ts +4 -2
  74. package/src/transaction/builders/ConsolidatedInteractionTransaction.ts +568 -0
  75. package/src/transaction/builders/CustomScriptTransaction.ts +4 -2
  76. package/src/transaction/builders/MultiSignTransaction.ts +4 -2
  77. package/src/transaction/builders/TransactionBuilder.ts +8 -2
  78. package/src/transaction/enums/TransactionType.ts +2 -0
  79. package/src/transaction/interfaces/IConsolidatedTransactionParameters.ts +78 -0
  80. package/src/transaction/interfaces/ITransactionParameters.ts +8 -0
  81. package/src/transaction/offline/OfflineTransactionManager.ts +630 -0
  82. package/src/transaction/offline/TransactionReconstructor.ts +402 -0
  83. package/src/transaction/offline/TransactionSerializer.ts +920 -0
  84. package/src/transaction/offline/TransactionStateCapture.ts +469 -0
  85. package/src/transaction/offline/index.ts +8 -0
  86. package/src/transaction/offline/interfaces/ISerializableState.ts +141 -0
  87. package/src/transaction/offline/interfaces/ITypeSpecificData.ts +172 -0
  88. package/src/transaction/offline/interfaces/index.ts +2 -0
  89. package/src/transaction/shared/TweakedTransaction.ts +156 -9
  90. package/src/utxo/interfaces/IUTXO.ts +8 -0
  91. package/test/address-rotation.test.ts +553 -0
  92. package/test/offline-transaction.test.ts +2065 -0
@@ -3,7 +3,6 @@ import { IP2WSHAddress } from '../transaction/mineable/IP2WSHAddress.js';
3
3
  import { MLDSASecurityLevel } from '@btc-vision/bip32';
4
4
  export declare class Address extends Uint8Array {
5
5
  #private;
6
- private legacyPublicKey;
7
6
  constructor(mldsaPublicKey?: ArrayLike<number>, publicKeyOrTweak?: ArrayLike<number>);
8
7
  get mldsaLevel(): MLDSASecurityLevel | undefined;
9
8
  set mldsaLevel(level: MLDSASecurityLevel);
@@ -11,6 +10,7 @@ export declare class Address extends Uint8Array {
11
10
  set originalMDLSAPublicKey(key: Buffer | Uint8Array);
12
11
  get originalPublicKey(): Uint8Array | undefined;
13
12
  get mldsaPublicKey(): Uint8Array | undefined;
13
+ private get legacyPublicKey();
14
14
  private get keyPair();
15
15
  static dead(): Address;
16
16
  static fromString(mldsaPublicKey: string, legacyPublicKey?: string): Address;
@@ -48,5 +48,7 @@ export declare class Address extends Uint8Array {
48
48
  p2op(network: Network): string;
49
49
  toTweakedHybridPublicKeyHex(): string;
50
50
  toTweakedHybridPublicKeyBuffer(): Buffer;
51
+ private setMldsaKey;
52
+ private ensureLegacyProcessed;
51
53
  private autoFormat;
52
54
  }
@@ -4,6 +4,7 @@ export * from './bytecode/Compressor.js';
4
4
  export * from './generators/builders/CalldataGenerator.js';
5
5
  export * from './generators/builders/CustomGenerator.js';
6
6
  export * from './generators/builders/DeploymentGenerator.js';
7
+ export * from './generators/builders/HashCommitmentGenerator.js';
7
8
  export * from './generators/builders/LegacyCalldataGenerator.js';
8
9
  export * from './generators/builders/MultiSignGenerator.js';
9
10
  export * from './generators/builders/P2WDAGenerator.js';
@@ -27,10 +28,14 @@ export * from './generators/MLDSAData.js';
27
28
  export * from './metadata/ContractBaseMetadata.js';
28
29
  export * from './network/ChainId.js';
29
30
  export * from './signer/TweakedSigner.js';
31
+ export * from './signer/AddressRotation.js';
30
32
  export * from './transaction/enums/TransactionType.js';
31
33
  export * from './transaction/interfaces/ITransactionParameters.js';
34
+ export * from './transaction/interfaces/IConsolidatedTransactionParameters.js';
32
35
  export * from './transaction/interfaces/Tap.js';
33
36
  export * from './transaction/TransactionFactory.js';
37
+ export * from './transaction/builders/CancelTransaction.js';
38
+ export * from './transaction/builders/ConsolidatedInteractionTransaction.js';
34
39
  export * from './transaction/builders/CustomScriptTransaction.js';
35
40
  export * from './transaction/builders/DeploymentTransaction.js';
36
41
  export * from './transaction/builders/FundingTransaction.js';
@@ -39,7 +44,7 @@ export * from './transaction/builders/InteractionTransactionP2WDA.js';
39
44
  export * from './transaction/builders/MultiSignTransaction.js';
40
45
  export * from './transaction/builders/SharedInteractionTransaction.js';
41
46
  export * from './transaction/builders/TransactionBuilder.js';
42
- export * from './transaction/builders/CancelTransaction.js';
47
+ export * from './transaction/offline/index.js';
43
48
  export * from './epoch/interfaces/IChallengeSolution.js';
44
49
  export * from './epoch/validator/EpochValidator.js';
45
50
  export * from './epoch/ChallengeSolution.js';
@@ -0,0 +1,12 @@
1
+ import { Signer } from '@btc-vision/bitcoin';
2
+ import { ECPairInterface } from 'ecpair';
3
+ import { UnisatSigner } from '../transaction/browser/extensions/UnisatSigner.js';
4
+ export type RotationSigner = Signer | ECPairInterface | UnisatSigner;
5
+ export type SignerMap = Map<string, RotationSigner>;
6
+ export interface AddressRotationConfig {
7
+ readonly enabled: boolean;
8
+ readonly signerMap: SignerMap;
9
+ }
10
+ export declare function createSignerMap(pairs: ReadonlyArray<readonly [string, RotationSigner]>): SignerMap;
11
+ export declare function createAddressRotation(signers: SignerMap | ReadonlyArray<readonly [string, RotationSigner]>): AddressRotationConfig;
12
+ export declare function disabledAddressRotation(): AddressRotationConfig;
@@ -8,6 +8,7 @@ import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParam
8
8
  import { ICancelTransactionParametersWithoutSigner, ICustomTransactionWithoutSigner, InteractionParametersWithoutSigner } from './browser/Web3Provider.js';
9
9
  import { RawChallenge } from '../epoch/interfaces/IChallengeSolution.js';
10
10
  import { ICancelTransactionParameters } from './builders/CancelTransaction.js';
11
+ import { IConsolidatedInteractionParameters } from './interfaces/IConsolidatedTransactionParameters.js';
11
12
  export interface DeploymentResult {
12
13
  readonly transaction: [string, string];
13
14
  readonly contractAddress: string;
@@ -48,6 +49,18 @@ export interface CancelledTransaction {
48
49
  readonly nextUTXOs: UTXO[];
49
50
  readonly inputUtxos: UTXO[];
50
51
  }
52
+ export interface ConsolidatedInteractionResponse {
53
+ readonly setupTransaction: string;
54
+ readonly revealTransaction: string;
55
+ readonly setupTxId: string;
56
+ readonly revealTxId: string;
57
+ readonly totalFees: bigint;
58
+ readonly chunkCount: number;
59
+ readonly dataSize: number;
60
+ readonly challenge: RawChallenge;
61
+ readonly inputUtxos: UTXO[];
62
+ readonly compiledTargetScript: string;
63
+ }
51
64
  export declare class TransactionFactory {
52
65
  debug: boolean;
53
66
  private readonly DUMMY_PUBKEY;
@@ -57,6 +70,7 @@ export declare class TransactionFactory {
57
70
  createCancellableTransaction(params: ICancelTransactionParameters | ICancelTransactionParametersWithoutSigner): Promise<CancelledTransaction>;
58
71
  createCustomScriptTransaction(interactionParameters: ICustomTransactionParameters | ICustomTransactionWithoutSigner): Promise<[string, string, UTXO[], UTXO[]]>;
59
72
  signInteraction(interactionParameters: IInteractionParameters | InteractionParametersWithoutSigner): Promise<InteractionResponse>;
73
+ signConsolidatedInteraction(interactionParameters: IConsolidatedInteractionParameters): Promise<ConsolidatedInteractionResponse>;
60
74
  signDeployment(deploymentParameters: IDeploymentParameters): Promise<DeploymentResult>;
61
75
  createBTCTransfer(parameters: IFundingTransactionParameters): Promise<BitcoinTransferResponse>;
62
76
  getAllNewUTXOs(original: TransactionBuilder<TransactionType>, tx: Transaction, to: string): UTXO[];
@@ -0,0 +1,44 @@
1
+ import { Buffer } from 'buffer';
2
+ import { ECPairInterface } from 'ecpair';
3
+ import { TransactionType } from '../enums/TransactionType.js';
4
+ import { TransactionBuilder } from './TransactionBuilder.js';
5
+ import { HashCommitmentGenerator } from '../../generators/builders/HashCommitmentGenerator.js';
6
+ import { CalldataGenerator } from '../../generators/builders/CalldataGenerator.js';
7
+ import { IConsolidatedInteractionParameters, IConsolidatedInteractionResult, IHashCommittedP2WSH, IRevealTransactionResult } from '../interfaces/IConsolidatedTransactionParameters.js';
8
+ import { IP2WSHAddress } from '../mineable/IP2WSHAddress.js';
9
+ import { ChallengeSolution } from '../../epoch/ChallengeSolution.js';
10
+ export declare class ConsolidatedInteractionTransaction extends TransactionBuilder<TransactionType.INTERACTION> {
11
+ readonly type: TransactionType.INTERACTION;
12
+ protected readonly contractAddress: string;
13
+ protected readonly contractSecret: Buffer;
14
+ protected readonly calldata: Buffer;
15
+ protected readonly challenge: ChallengeSolution;
16
+ protected readonly epochChallenge: IP2WSHAddress;
17
+ readonly randomBytes: Buffer;
18
+ protected readonly scriptSigner: ECPairInterface;
19
+ protected readonly calldataGenerator: CalldataGenerator;
20
+ protected readonly hashCommitmentGenerator: HashCommitmentGenerator;
21
+ protected readonly compiledTargetScript: Buffer;
22
+ protected readonly commitmentOutputs: IHashCommittedP2WSH[];
23
+ protected readonly disableAutoRefund: boolean;
24
+ protected readonly maxChunkSize: number;
25
+ private cachedValuePerOutput;
26
+ constructor(parameters: IConsolidatedInteractionParameters);
27
+ exportCompiledTargetScript(): Buffer;
28
+ getContractSecret(): Buffer;
29
+ getRndBytes(): Buffer;
30
+ getChallenge(): ChallengeSolution;
31
+ getCommitmentOutputs(): IHashCommittedP2WSH[];
32
+ getOutputCount(): number;
33
+ getTotalChunkCount(): number;
34
+ build(): Promise<IConsolidatedInteractionResult>;
35
+ protected buildTransaction(): Promise<void>;
36
+ buildRevealTransaction(setupTxId: string): IRevealTransactionResult;
37
+ private finalizeCommitmentInput;
38
+ private estimateRevealVBytes;
39
+ private calculateValuePerOutput;
40
+ getValuePerOutput(): bigint;
41
+ private getRefundAddress;
42
+ private generateFeatures;
43
+ private validateOutputCount;
44
+ }
@@ -5,5 +5,7 @@ export declare enum TransactionType {
5
5
  INTERACTION = 3,
6
6
  MULTI_SIG = 4,
7
7
  CUSTOM_CODE = 5,
8
- CANCEL = 6
8
+ CANCEL = 6,
9
+ CONSOLIDATED_SETUP = 7,
10
+ CONSOLIDATED_REVEAL = 8
9
11
  }
@@ -0,0 +1,31 @@
1
+ import { IInteractionParameters } from './ITransactionParameters.js';
2
+ import { IP2WSHAddress } from '../mineable/IP2WSHAddress.js';
3
+ export interface IHashCommittedP2WSH extends IP2WSHAddress {
4
+ readonly dataHashes: Buffer[];
5
+ readonly dataChunks: Buffer[];
6
+ readonly chunkStartIndex: number;
7
+ readonly scriptPubKey: Buffer;
8
+ }
9
+ export interface IConsolidatedInteractionParameters extends IInteractionParameters {
10
+ readonly maxChunkSize?: number;
11
+ }
12
+ export interface ISetupTransactionResult {
13
+ readonly txHex: string;
14
+ readonly txId: string;
15
+ readonly outputs: IHashCommittedP2WSH[];
16
+ readonly feesPaid: bigint;
17
+ readonly chunkCount: number;
18
+ readonly totalDataSize: number;
19
+ }
20
+ export interface IRevealTransactionResult {
21
+ readonly txHex: string;
22
+ readonly txId: string;
23
+ readonly dataSize: number;
24
+ readonly feesPaid: bigint;
25
+ readonly inputCount: number;
26
+ }
27
+ export interface IConsolidatedInteractionResult {
28
+ readonly setup: ISetupTransactionResult;
29
+ readonly reveal: IRevealTransactionResult;
30
+ readonly totalFees: bigint;
31
+ }
@@ -3,6 +3,7 @@ import { ITweakedTransactionData } from '../shared/TweakedTransaction.js';
3
3
  import { ChainId } from '../../network/ChainId.js';
4
4
  import { PsbtOutputExtended } from '@btc-vision/bitcoin';
5
5
  import { ChallengeSolution } from '../../epoch/ChallengeSolution.js';
6
+ import { AddressRotationConfig } from '../../signer/AddressRotation.js';
6
7
  export interface LoadedStorage {
7
8
  [key: string]: string[];
8
9
  }
@@ -25,6 +26,7 @@ export interface ITransactionParameters extends ITweakedTransactionData {
25
26
  readonly priorityFee: bigint;
26
27
  readonly gasSatFee: bigint;
27
28
  readonly compiledTargetScript?: Buffer | string;
29
+ readonly addressRotation?: AddressRotationConfig;
28
30
  }
29
31
  export interface IFundingTransactionParameters extends ITransactionParameters {
30
32
  amount: bigint;
@@ -0,0 +1,69 @@
1
+ import { Signer } from '@btc-vision/bitcoin';
2
+ import { ECPairInterface } from 'ecpair';
3
+ import { TransactionType } from '../enums/TransactionType.js';
4
+ import { TransactionBuilder } from '../builders/TransactionBuilder.js';
5
+ import { ISerializableTransactionState, PrecomputedData } from './interfaces/ISerializableState.js';
6
+ import { ReconstructionOptions } from './TransactionReconstructor.js';
7
+ import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters, ITransactionParameters } from '../interfaces/ITransactionParameters.js';
8
+ export interface ExportOptions {
9
+ params: ITransactionParameters;
10
+ type: TransactionType;
11
+ precomputed?: Partial<PrecomputedData>;
12
+ }
13
+ export declare class OfflineTransactionManager {
14
+ static exportFunding(params: IFundingTransactionParameters, precomputed?: Partial<PrecomputedData>): string;
15
+ static exportDeployment(params: IDeploymentParameters, precomputed: Partial<PrecomputedData> & {
16
+ compiledTargetScript: string;
17
+ randomBytes: string;
18
+ }): string;
19
+ static exportInteraction(params: IInteractionParameters, precomputed: Partial<PrecomputedData> & {
20
+ compiledTargetScript: string;
21
+ randomBytes: string;
22
+ }): string;
23
+ static exportMultiSig(params: ITransactionParameters & {
24
+ pubkeys: Buffer[];
25
+ minimumSignatures: number;
26
+ receiver: string;
27
+ requestedAmount: bigint;
28
+ refundVault: string;
29
+ originalInputCount?: number;
30
+ existingPsbtBase64?: string;
31
+ }, precomputed?: Partial<PrecomputedData>): string;
32
+ static exportCustomScript(params: ITransactionParameters & {
33
+ scriptElements: (Buffer | number)[];
34
+ witnesses: Buffer[];
35
+ annex?: Buffer;
36
+ }, precomputed?: Partial<PrecomputedData>): string;
37
+ static exportCancel(params: ITransactionParameters & {
38
+ compiledTargetScript: Buffer | string;
39
+ }, precomputed?: Partial<PrecomputedData>): string;
40
+ static exportFromBuilder<T extends TransactionType>(builder: TransactionBuilder<T>, params: ITransactionParameters, precomputed?: Partial<PrecomputedData>): string;
41
+ static importForSigning(serializedState: string, options: ReconstructionOptions): TransactionBuilder<TransactionType>;
42
+ static signAndExport(builder: TransactionBuilder<TransactionType>): Promise<string>;
43
+ static importSignAndExport(serializedState: string, options: ReconstructionOptions): Promise<string>;
44
+ static rebuildWithNewFees(serializedState: string, newFeeRate: number): string;
45
+ static rebuildSignAndExport(serializedState: string, newFeeRate: number, options: ReconstructionOptions): Promise<string>;
46
+ static inspect(serializedState: string): ISerializableTransactionState;
47
+ static validate(serializedState: string): boolean;
48
+ static getType(serializedState: string): TransactionType;
49
+ static fromBase64(base64State: string): ISerializableTransactionState;
50
+ static toBase64(state: ISerializableTransactionState): string;
51
+ static toHex(serializedState: string): string;
52
+ static fromHex(hexState: string): string;
53
+ static multiSigAddSignature(serializedState: string, signer: Signer | ECPairInterface): Promise<{
54
+ state: string;
55
+ signed: boolean;
56
+ final: boolean;
57
+ psbtBase64: string;
58
+ }>;
59
+ static multiSigHasSigned(serializedState: string, signerPubKey: Buffer | string): boolean;
60
+ static multiSigGetSignatureStatus(serializedState: string): {
61
+ required: number;
62
+ collected: number;
63
+ isComplete: boolean;
64
+ signers: string[];
65
+ };
66
+ static multiSigFinalize(serializedState: string): string;
67
+ static multiSigGetPsbt(serializedState: string): string | null;
68
+ static multiSigUpdatePsbt(serializedState: string, psbtBase64: string): string;
69
+ }
@@ -0,0 +1,28 @@
1
+ import { Signer } from '@btc-vision/bitcoin';
2
+ import { ECPairInterface } from 'ecpair';
3
+ import { QuantumBIP32Interface } from '@btc-vision/bip32';
4
+ import { SignerMap } from '../../signer/AddressRotation.js';
5
+ import { TransactionType } from '../enums/TransactionType.js';
6
+ import { TransactionBuilder } from '../builders/TransactionBuilder.js';
7
+ import { ISerializableTransactionState } from './interfaces/ISerializableState.js';
8
+ export interface ReconstructionOptions {
9
+ signer: Signer | ECPairInterface;
10
+ newFeeRate?: number;
11
+ newPriorityFee?: bigint;
12
+ newGasSatFee?: bigint;
13
+ signerMap?: SignerMap;
14
+ mldsaSigner?: QuantumBIP32Interface | null;
15
+ }
16
+ export declare class TransactionReconstructor {
17
+ static reconstruct(state: ISerializableTransactionState, options: ReconstructionOptions): TransactionBuilder<TransactionType>;
18
+ private static reconstructFunding;
19
+ private static reconstructDeployment;
20
+ private static reconstructInteraction;
21
+ private static reconstructMultiSig;
22
+ private static reconstructCustomScript;
23
+ private static reconstructCancel;
24
+ private static buildAddressRotationConfig;
25
+ private static deserializeUTXOs;
26
+ private static deserializeOutputs;
27
+ private static nameToNetwork;
28
+ }
@@ -0,0 +1,50 @@
1
+ import { ISerializableTransactionState } from './interfaces/ISerializableState.js';
2
+ export declare class TransactionSerializer {
3
+ static serialize(state: ISerializableTransactionState): Buffer;
4
+ static deserialize(data: Buffer): ISerializableTransactionState;
5
+ static toBase64(state: ISerializableTransactionState): string;
6
+ static fromBase64(base64: string): ISerializableTransactionState;
7
+ static toHex(state: ISerializableTransactionState): string;
8
+ static fromHex(hex: string): ISerializableTransactionState;
9
+ private static writeHeader;
10
+ private static readHeader;
11
+ private static writeBaseParams;
12
+ private static readBaseParams;
13
+ private static writeUTXOArray;
14
+ private static writeUTXO;
15
+ private static readUTXOArray;
16
+ private static readUTXO;
17
+ private static writeOutputArray;
18
+ private static writeOutput;
19
+ private static readOutputArray;
20
+ private static readOutput;
21
+ private static writeSignerMappings;
22
+ private static readSignerMappings;
23
+ private static writeTypeSpecificData;
24
+ private static readTypeSpecificData;
25
+ private static writeFundingData;
26
+ private static readFundingData;
27
+ private static writeDeploymentData;
28
+ private static readDeploymentData;
29
+ private static writeInteractionData;
30
+ private static readInteractionData;
31
+ private static writeMultiSigData;
32
+ private static readMultiSigData;
33
+ private static writeCustomScriptData;
34
+ private static writeScriptElement;
35
+ private static readCustomScriptData;
36
+ private static readScriptElement;
37
+ private static writeCancelData;
38
+ private static readCancelData;
39
+ private static writeChallenge;
40
+ private static writeChallengeVerification;
41
+ private static readChallenge;
42
+ private static readChallengeVerification;
43
+ private static writeLoadedStorage;
44
+ private static readLoadedStorage;
45
+ private static writePrecomputedData;
46
+ private static readPrecomputedData;
47
+ private static calculateChecksum;
48
+ private static networkNameToU8;
49
+ private static u8ToNetworkName;
50
+ }
@@ -0,0 +1,52 @@
1
+ import { TransactionType } from '../enums/TransactionType.js';
2
+ import { ISerializableTransactionState, PrecomputedData } from './interfaces/ISerializableState.js';
3
+ import { IDeploymentParameters, IFundingTransactionParameters, IInteractionParameters, ITransactionParameters } from '../interfaces/ITransactionParameters.js';
4
+ export interface CaptureParams {
5
+ params: ITransactionParameters;
6
+ type: TransactionType;
7
+ precomputed?: Partial<PrecomputedData>;
8
+ }
9
+ export declare class TransactionStateCapture {
10
+ static fromFunding(params: IFundingTransactionParameters, precomputed?: Partial<PrecomputedData>): ISerializableTransactionState;
11
+ static fromDeployment(params: IDeploymentParameters, precomputed: Partial<PrecomputedData> & {
12
+ compiledTargetScript: string;
13
+ randomBytes: string;
14
+ }): ISerializableTransactionState;
15
+ static fromInteraction(params: IInteractionParameters, precomputed: Partial<PrecomputedData> & {
16
+ compiledTargetScript: string;
17
+ randomBytes: string;
18
+ }): ISerializableTransactionState;
19
+ static fromMultiSig(params: ITransactionParameters & {
20
+ pubkeys: Buffer[];
21
+ minimumSignatures: number;
22
+ receiver: string;
23
+ requestedAmount: bigint;
24
+ refundVault: string;
25
+ originalInputCount?: number;
26
+ existingPsbtBase64?: string;
27
+ }, precomputed?: Partial<PrecomputedData>): ISerializableTransactionState;
28
+ static fromCustomScript(params: ITransactionParameters & {
29
+ scriptElements: (Buffer | number)[];
30
+ witnesses: Buffer[];
31
+ annex?: Buffer;
32
+ }, precomputed?: Partial<PrecomputedData>): ISerializableTransactionState;
33
+ static fromCancel(params: ITransactionParameters & {
34
+ compiledTargetScript: Buffer | string;
35
+ }, precomputed?: Partial<PrecomputedData>): ISerializableTransactionState;
36
+ private static captureState;
37
+ private static createHeader;
38
+ private static extractBaseParams;
39
+ private static extractSignerMappings;
40
+ private static extractTypeSpecificData;
41
+ private static extractFundingData;
42
+ private static extractDeploymentData;
43
+ private static extractInteractionData;
44
+ private static extractMultiSigData;
45
+ private static extractCustomScriptData;
46
+ private static extractCancelData;
47
+ private static buildPrecomputedData;
48
+ private static serializeUTXOs;
49
+ private static serializeOutputs;
50
+ private static networkToName;
51
+ private static networkToChainId;
52
+ }
@@ -0,0 +1,5 @@
1
+ export * from './interfaces/index.js';
2
+ export { TransactionSerializer } from './TransactionSerializer.js';
3
+ export { TransactionStateCapture, CaptureParams } from './TransactionStateCapture.js';
4
+ export { TransactionReconstructor, ReconstructionOptions } from './TransactionReconstructor.js';
5
+ export { OfflineTransactionManager, ExportOptions } from './OfflineTransactionManager.js';
@@ -0,0 +1,62 @@
1
+ import { TransactionType } from '../../enums/TransactionType.js';
2
+ import { ChainId } from '../../../network/ChainId.js';
3
+ import { TypeSpecificData } from './ITypeSpecificData.js';
4
+ export declare const SERIALIZATION_FORMAT_VERSION = 1;
5
+ export declare const SERIALIZATION_MAGIC_BYTE = 66;
6
+ export interface SerializationHeader {
7
+ readonly formatVersion: number;
8
+ readonly consensusVersion: number;
9
+ readonly transactionType: TransactionType;
10
+ readonly chainId: ChainId;
11
+ readonly timestamp: number;
12
+ }
13
+ export interface SerializedUTXO {
14
+ readonly transactionId: string;
15
+ readonly outputIndex: number;
16
+ readonly value: string;
17
+ readonly scriptPubKeyHex: string;
18
+ readonly scriptPubKeyAddress?: string;
19
+ readonly redeemScript?: string;
20
+ readonly witnessScript?: string;
21
+ readonly nonWitnessUtxo?: string;
22
+ }
23
+ export interface SerializedOutput {
24
+ readonly value: number;
25
+ readonly address?: string;
26
+ readonly script?: string;
27
+ readonly tapInternalKey?: string;
28
+ }
29
+ export interface SerializedSignerMapping {
30
+ readonly address: string;
31
+ readonly inputIndices: number[];
32
+ }
33
+ export interface SerializedBaseParams {
34
+ readonly from: string;
35
+ readonly to?: string;
36
+ readonly feeRate: number;
37
+ readonly priorityFee: string;
38
+ readonly gasSatFee: string;
39
+ readonly networkName: 'mainnet' | 'testnet' | 'regtest';
40
+ readonly txVersion: number;
41
+ readonly note?: string;
42
+ readonly anchor: boolean;
43
+ readonly debugFees?: boolean;
44
+ }
45
+ export interface PrecomputedData {
46
+ readonly compiledTargetScript?: string;
47
+ readonly randomBytes?: string;
48
+ readonly estimatedFees?: string;
49
+ readonly contractSeed?: string;
50
+ readonly contractAddress?: string;
51
+ }
52
+ export interface ISerializableTransactionState {
53
+ readonly header: SerializationHeader;
54
+ readonly baseParams: SerializedBaseParams;
55
+ readonly utxos: SerializedUTXO[];
56
+ readonly optionalInputs: SerializedUTXO[];
57
+ readonly optionalOutputs: SerializedOutput[];
58
+ readonly addressRotationEnabled: boolean;
59
+ readonly signerMappings: SerializedSignerMapping[];
60
+ readonly typeSpecificData: TypeSpecificData;
61
+ readonly precomputedData: PrecomputedData;
62
+ }
@@ -0,0 +1,62 @@
1
+ import { TransactionType } from '../../enums/TransactionType.js';
2
+ import { RawChallenge } from '../../../epoch/interfaces/IChallengeSolution.js';
3
+ export type TypeSpecificData = FundingSpecificData | DeploymentSpecificData | InteractionSpecificData | MultiSigSpecificData | CustomScriptSpecificData | CancelSpecificData;
4
+ export interface FundingSpecificData {
5
+ readonly type: TransactionType.FUNDING;
6
+ readonly amount: string;
7
+ readonly splitInputsInto: number;
8
+ }
9
+ export interface DeploymentSpecificData {
10
+ readonly type: TransactionType.DEPLOYMENT;
11
+ readonly bytecode: string;
12
+ readonly calldata?: string;
13
+ readonly challenge: RawChallenge;
14
+ readonly revealMLDSAPublicKey?: boolean;
15
+ readonly linkMLDSAPublicKeyToAddress?: boolean;
16
+ readonly hashedPublicKey?: string;
17
+ }
18
+ export interface InteractionSpecificData {
19
+ readonly type: TransactionType.INTERACTION;
20
+ readonly calldata: string;
21
+ readonly contract?: string;
22
+ readonly challenge: RawChallenge;
23
+ readonly loadedStorage?: SerializedLoadedStorage;
24
+ readonly isCancellation?: boolean;
25
+ readonly disableAutoRefund?: boolean;
26
+ readonly revealMLDSAPublicKey?: boolean;
27
+ readonly linkMLDSAPublicKeyToAddress?: boolean;
28
+ readonly hashedPublicKey?: string;
29
+ }
30
+ export interface SerializedLoadedStorage {
31
+ [key: string]: string[];
32
+ }
33
+ export interface MultiSigSpecificData {
34
+ readonly type: TransactionType.MULTI_SIG;
35
+ readonly pubkeys: string[];
36
+ readonly minimumSignatures: number;
37
+ readonly receiver: string;
38
+ readonly requestedAmount: string;
39
+ readonly refundVault: string;
40
+ readonly originalInputCount: number;
41
+ readonly existingPsbtBase64?: string;
42
+ }
43
+ export interface SerializedScriptElement {
44
+ readonly elementType: 'buffer' | 'opcode';
45
+ readonly value: string | number;
46
+ }
47
+ export interface CustomScriptSpecificData {
48
+ readonly type: TransactionType.CUSTOM_CODE;
49
+ readonly scriptElements: SerializedScriptElement[];
50
+ readonly witnesses: string[];
51
+ readonly annex?: string;
52
+ }
53
+ export interface CancelSpecificData {
54
+ readonly type: TransactionType.CANCEL;
55
+ readonly compiledTargetScript: string;
56
+ }
57
+ export declare function isFundingSpecificData(data: TypeSpecificData): data is FundingSpecificData;
58
+ export declare function isDeploymentSpecificData(data: TypeSpecificData): data is DeploymentSpecificData;
59
+ export declare function isInteractionSpecificData(data: TypeSpecificData): data is InteractionSpecificData;
60
+ export declare function isMultiSigSpecificData(data: TypeSpecificData): data is MultiSigSpecificData;
61
+ export declare function isCustomScriptSpecificData(data: TypeSpecificData): data is CustomScriptSpecificData;
62
+ export declare function isCancelSpecificData(data: TypeSpecificData): data is CancelSpecificData;
@@ -0,0 +1,2 @@
1
+ export * from './ISerializableState.js';
2
+ export * from './ITypeSpecificData.js';
@@ -7,6 +7,7 @@ import { ChainId } from '../../network/ChainId.js';
7
7
  import { UnisatSigner } from '../browser/extensions/UnisatSigner.js';
8
8
  import { Buffer } from 'buffer';
9
9
  import { QuantumBIP32Interface } from '@btc-vision/bip32';
10
+ import { AddressRotationConfig, RotationSigner, SignerMap } from '../../signer/AddressRotation.js';
10
11
  export type SupportedTransactionVersion = 1 | 2 | 3;
11
12
  export interface ITweakedTransactionData {
12
13
  readonly mldsaSigner: QuantumBIP32Interface | null;
@@ -17,6 +18,7 @@ export interface ITweakedTransactionData {
17
18
  readonly noSignatures?: boolean;
18
19
  readonly unlockScript?: Buffer[];
19
20
  readonly txVersion?: SupportedTransactionVersion;
21
+ readonly addressRotation?: AddressRotationConfig;
20
22
  }
21
23
  export declare enum TransactionSequence {
22
24
  REPLACE_BY_FEE = 4294967293,
@@ -51,6 +53,10 @@ export declare abstract class TweakedTransaction extends Logger {
51
53
  protected txVersion: SupportedTransactionVersion;
52
54
  protected readonly _mldsaSigner: QuantumBIP32Interface | null;
53
55
  protected readonly _hashedPublicKey: Buffer | null;
56
+ protected readonly addressRotationEnabled: boolean;
57
+ protected readonly signerMap: SignerMap;
58
+ protected readonly inputSignerMap: Map<number, RotationSigner>;
59
+ protected readonly tweakedSignerCache: Map<number, ECPairInterface | undefined>;
54
60
  protected constructor(data: ITweakedTransactionData);
55
61
  protected get mldsaSigner(): QuantumBIP32Interface;
56
62
  protected get hashedPublicKey(): Buffer;
@@ -58,6 +64,7 @@ export declare abstract class TweakedTransaction extends Logger {
58
64
  static preEstimateTaprootTransactionFees(feeRate: bigint, numInputs: bigint, numOutputs: bigint, numWitnessElements: bigint, witnessElementSize: bigint, emptyWitness: bigint, taprootControlWitnessSize?: bigint, taprootScriptSize?: bigint): bigint;
59
65
  protected static signInput(transaction: Psbt, input: PsbtInput, i: number, signer: Signer | ECPairInterface, sighashTypes: number[]): void;
60
66
  protected static calculateSignHash(sighashTypes: number[]): number;
67
+ isAddressRotationEnabled(): boolean;
61
68
  ignoreSignatureError(): void;
62
69
  getScriptAddress(): string;
63
70
  getTransaction(): Transaction;
@@ -65,6 +72,10 @@ export declare abstract class TweakedTransaction extends Logger {
65
72
  disableRBF(): void;
66
73
  getTweakerHash(): Buffer | undefined;
67
74
  preEstimateTransactionFees(feeRate: bigint, numInputs: bigint, numOutputs: bigint, numSignatures: bigint, numPubkeys: bigint): bigint;
75
+ protected getSignerForInput(inputIndex: number): RotationSigner;
76
+ protected registerInputSigner(inputIndex: number, utxo: UTXO): void;
77
+ protected internalPubKeyToXOnlyForInput(inputIndex: number): Buffer;
78
+ protected getTweakedSignerForInput(inputIndex: number, useTweakedHash?: boolean): ECPairInterface | undefined;
68
79
  protected generateTapData(): P2TRPayment;
69
80
  protected generateScriptAddress(): P2TRPayment;
70
81
  protected getSignerKey(): Signer | ECPairInterface;
@@ -81,7 +92,7 @@ export declare abstract class TweakedTransaction extends Logger {
81
92
  redeemScript: Buffer;
82
93
  outputScript: Buffer;
83
94
  } | undefined;
84
- protected generateP2SHP2PKHRedeemScript(inputAddr: string): {
95
+ protected generateP2SHP2PKHRedeemScript(inputAddr: string, inputIndex?: number): {
85
96
  redeemScript: Buffer;
86
97
  outputScript: Buffer;
87
98
  } | undefined;
@@ -1,4 +1,5 @@
1
1
  import { ScriptPubKey } from '@btc-vision/bitcoin-rpc';
2
+ import { RotationSigner } from '../../signer/AddressRotation.js';
2
3
  export interface UTXO {
3
4
  readonly transactionId: string;
4
5
  readonly outputIndex: number;
@@ -7,6 +8,7 @@ export interface UTXO {
7
8
  redeemScript?: string | Buffer;
8
9
  witnessScript?: string | Buffer;
9
10
  nonWitnessUtxo?: string | Buffer;
11
+ signer?: RotationSigner;
10
12
  }
11
13
  export interface FetchUTXOParams {
12
14
  readonly address: string;
@@ -1 +1 @@
1
- export declare const version = "1.7.18";
1
+ export declare const version = "1.7.22";
package/build/_version.js CHANGED
@@ -1 +1 @@
1
- export const version = '1.7.18';
1
+ export const version = '1.7.22';