@btc-vision/transaction 1.0.112 → 1.0.114

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 (150) hide show
  1. package/browser/_version.d.ts +1 -1
  2. package/browser/abi/ABICoder.d.ts +31 -0
  3. package/browser/buffer/BinaryReader.d.ts +37 -0
  4. package/browser/buffer/BinaryWriter.d.ts +46 -0
  5. package/browser/deterministic/AddressMap.d.ts +10 -0
  6. package/browser/deterministic/AddressSet.d.ts +13 -0
  7. package/browser/deterministic/DeterministicMap.d.ts +17 -0
  8. package/browser/deterministic/DeterministicSet.d.ts +13 -0
  9. package/browser/deterministic/Map.d.ts +14 -0
  10. package/browser/event/NetEvent.d.ts +5 -0
  11. package/browser/generators/AddressGenerator.d.ts +3 -0
  12. package/browser/index.js +1 -1
  13. package/browser/keypair/Address.d.ts +23 -0
  14. package/browser/keypair/AddressVerificator.d.ts +15 -4
  15. package/browser/keypair/EcKeyPair.d.ts +15 -12
  16. package/browser/keypair/Wallet.d.ts +12 -5
  17. package/browser/metadata/ContractBaseMetadata.d.ts +3 -4
  18. package/browser/metadata/contracts/wBTC.d.ts +2 -3
  19. package/browser/metadata/tokens.d.ts +1 -1
  20. package/browser/opnet.d.ts +11 -0
  21. package/browser/signer/TweakedSigner.d.ts +2 -2
  22. package/browser/transaction/TransactionFactory.d.ts +6 -6
  23. package/browser/transaction/browser/BrowserSignerBase.d.ts +3 -4
  24. package/browser/transaction/browser/extensions/UnisatSigner.d.ts +3 -4
  25. package/browser/transaction/browser/types/Unisat.d.ts +2 -3
  26. package/browser/transaction/builders/CustomScriptTransaction.d.ts +4 -5
  27. package/browser/transaction/builders/DeploymentTransaction.d.ts +4 -2
  28. package/browser/transaction/builders/FundingTransaction.d.ts +2 -1
  29. package/browser/transaction/builders/MultiSignTransaction.d.ts +6 -6
  30. package/browser/transaction/builders/SharedInteractionTransaction.d.ts +1 -1
  31. package/browser/transaction/builders/TransactionBuilder.d.ts +6 -7
  32. package/browser/transaction/builders/WrapTransaction.d.ts +2 -2
  33. package/browser/transaction/interfaces/ITransactionParameters.d.ts +6 -6
  34. package/browser/transaction/processor/PsbtTransaction.d.ts +3 -4
  35. package/browser/transaction/shared/P2TR_MS.d.ts +1 -2
  36. package/browser/transaction/shared/TweakedTransaction.d.ts +8 -7
  37. package/browser/utils/BufferHelper.d.ts +11 -0
  38. package/browser/utils/types.d.ts +12 -0
  39. package/browser/utxo/OPNetLimitedProvider.d.ts +1 -2
  40. package/build/_version.d.ts +1 -1
  41. package/build/_version.js +1 -1
  42. package/build/abi/ABICoder.d.ts +31 -0
  43. package/build/abi/ABICoder.js +137 -0
  44. package/build/buffer/BinaryReader.d.ts +37 -0
  45. package/build/buffer/BinaryReader.js +192 -0
  46. package/build/buffer/BinaryWriter.d.ts +46 -0
  47. package/build/buffer/BinaryWriter.js +258 -0
  48. package/build/deterministic/AddressMap.d.ts +10 -0
  49. package/build/deterministic/AddressMap.js +46 -0
  50. package/build/deterministic/AddressSet.d.ts +13 -0
  51. package/build/deterministic/AddressSet.js +44 -0
  52. package/build/deterministic/DeterministicMap.d.ts +17 -0
  53. package/build/deterministic/DeterministicMap.js +83 -0
  54. package/build/deterministic/DeterministicSet.d.ts +13 -0
  55. package/build/deterministic/DeterministicSet.js +46 -0
  56. package/build/deterministic/Map.d.ts +14 -0
  57. package/build/deterministic/Map.js +56 -0
  58. package/build/event/NetEvent.d.ts +5 -0
  59. package/build/event/NetEvent.js +6 -0
  60. package/build/generators/AddressGenerator.d.ts +3 -0
  61. package/build/generators/AddressGenerator.js +8 -1
  62. package/build/keypair/Address.d.ts +23 -0
  63. package/build/keypair/Address.js +129 -0
  64. package/build/keypair/AddressVerificator.d.ts +15 -4
  65. package/build/keypair/AddressVerificator.js +79 -3
  66. package/build/keypair/EcKeyPair.d.ts +15 -12
  67. package/build/keypair/EcKeyPair.js +61 -9
  68. package/build/keypair/Wallet.d.ts +12 -5
  69. package/build/keypair/Wallet.js +19 -5
  70. package/build/metadata/ContractBaseMetadata.d.ts +3 -4
  71. package/build/metadata/contracts/wBTC.d.ts +2 -3
  72. package/build/metadata/contracts/wBTC.js +4 -6
  73. package/build/metadata/tokens.d.ts +1 -1
  74. package/build/metadata/tokens.js +19 -15
  75. package/build/opnet.d.ts +11 -0
  76. package/build/opnet.js +11 -0
  77. package/build/signer/TweakedSigner.d.ts +2 -2
  78. package/build/signer/TweakedSigner.js +1 -1
  79. package/build/transaction/TransactionFactory.d.ts +6 -6
  80. package/build/transaction/TransactionFactory.js +3 -2
  81. package/build/transaction/browser/BrowserSignerBase.d.ts +3 -4
  82. package/build/transaction/browser/extensions/UnisatSigner.d.ts +3 -4
  83. package/build/transaction/browser/types/Unisat.d.ts +2 -3
  84. package/build/transaction/builders/CustomScriptTransaction.d.ts +4 -5
  85. package/build/transaction/builders/CustomScriptTransaction.js +3 -3
  86. package/build/transaction/builders/DeploymentTransaction.d.ts +4 -2
  87. package/build/transaction/builders/DeploymentTransaction.js +10 -6
  88. package/build/transaction/builders/FundingTransaction.d.ts +2 -1
  89. package/build/transaction/builders/MultiSignTransaction.d.ts +6 -6
  90. package/build/transaction/builders/SharedInteractionTransaction.d.ts +1 -1
  91. package/build/transaction/builders/SharedInteractionTransaction.js +4 -4
  92. package/build/transaction/builders/TransactionBuilder.d.ts +6 -7
  93. package/build/transaction/builders/UnwrapSegwitTransaction.js +2 -1
  94. package/build/transaction/builders/UnwrapTransaction.js +4 -3
  95. package/build/transaction/builders/WrapTransaction.d.ts +2 -2
  96. package/build/transaction/builders/WrapTransaction.js +5 -6
  97. package/build/transaction/interfaces/ITransactionParameters.d.ts +6 -6
  98. package/build/transaction/processor/PsbtTransaction.d.ts +3 -4
  99. package/build/transaction/shared/P2TR_MS.d.ts +1 -2
  100. package/build/transaction/shared/TweakedTransaction.d.ts +8 -7
  101. package/build/transaction/shared/TweakedTransaction.js +1 -1
  102. package/build/utils/BufferHelper.d.ts +11 -0
  103. package/build/utils/BufferHelper.js +50 -0
  104. package/build/utils/types.d.ts +12 -0
  105. package/build/utils/types.js +1 -0
  106. package/build/utxo/OPNetLimitedProvider.d.ts +1 -2
  107. package/build/utxo/OPNetLimitedProvider.js +1 -1
  108. package/build/verification/TapscriptVerificator.js +3 -2
  109. package/package.json +4 -2
  110. package/src/_version.ts +1 -1
  111. package/src/abi/ABICoder.ts +158 -0
  112. package/src/buffer/BinaryReader.ts +260 -0
  113. package/src/buffer/BinaryWriter.ts +331 -0
  114. package/src/deterministic/AddressMap.ts +57 -0
  115. package/src/deterministic/AddressSet.ts +62 -0
  116. package/src/deterministic/DeterministicMap.ts +88 -0
  117. package/src/deterministic/DeterministicSet.ts +56 -0
  118. package/src/deterministic/Map.ts +66 -0
  119. package/src/event/NetEvent.ts +6 -0
  120. package/src/generators/AddressGenerator.ts +15 -1
  121. package/src/keypair/Address.ts +235 -0
  122. package/src/keypair/AddressVerificator.ts +149 -6
  123. package/src/keypair/EcKeyPair.ts +146 -47
  124. package/src/keypair/Wallet.ts +72 -15
  125. package/src/metadata/ContractBaseMetadata.ts +3 -4
  126. package/src/metadata/contracts/wBTC.ts +8 -9
  127. package/src/metadata/tokens.ts +21 -16
  128. package/src/opnet.ts +13 -0
  129. package/src/signer/TweakedSigner.ts +3 -2
  130. package/src/transaction/TransactionFactory.ts +11 -10
  131. package/src/transaction/browser/BrowserSignerBase.ts +3 -4
  132. package/src/transaction/browser/extensions/UnisatSigner.ts +6 -7
  133. package/src/transaction/browser/types/Unisat.ts +2 -3
  134. package/src/transaction/builders/CustomScriptTransaction.ts +10 -10
  135. package/src/transaction/builders/DeploymentTransaction.ts +23 -9
  136. package/src/transaction/builders/FundingTransaction.ts +2 -1
  137. package/src/transaction/builders/MultiSignTransaction.ts +10 -7
  138. package/src/transaction/builders/SharedInteractionTransaction.ts +5 -5
  139. package/src/transaction/builders/TransactionBuilder.ts +26 -17
  140. package/src/transaction/builders/UnwrapSegwitTransaction.ts +10 -4
  141. package/src/transaction/builders/UnwrapTransaction.ts +5 -19
  142. package/src/transaction/builders/WrapTransaction.ts +7 -13
  143. package/src/transaction/interfaces/ITransactionParameters.ts +7 -6
  144. package/src/transaction/processor/PsbtTransaction.ts +3 -4
  145. package/src/transaction/shared/P2TR_MS.ts +2 -3
  146. package/src/transaction/shared/TweakedTransaction.ts +12 -12
  147. package/src/utils/BufferHelper.ts +71 -0
  148. package/src/utils/types.ts +19 -0
  149. package/src/utxo/OPNetLimitedProvider.ts +3 -8
  150. package/src/verification/TapscriptVerificator.ts +4 -2
@@ -6,8 +6,8 @@ import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
6
6
  import { EcKeyPair } from '../../keypair/EcKeyPair.js';
7
7
  import { BitcoinUtils } from '../../utils/BitcoinUtils.js';
8
8
  import { Compressor } from '../../bytecode/Compressor.js';
9
- import { AddressGenerator } from '../../generators/AddressGenerator.js';
10
9
  import { SharedInteractionTransaction } from './SharedInteractionTransaction.js';
10
+ import { Address } from '../../keypair/Address.js';
11
11
  export class DeploymentTransaction extends TransactionBuilder {
12
12
  constructor(parameters) {
13
13
  super(parameters);
@@ -44,11 +44,15 @@ export class DeploymentTransaction extends TransactionBuilder {
44
44
  this.randomBytes = parameters.randomBytes || BitcoinUtils.rndBytes();
45
45
  this.contractSeed = this.getContractSeed();
46
46
  this.contractSigner = EcKeyPair.fromSeedKeyPair(this.contractSeed, this.network);
47
- this.deploymentGenerator = new DeploymentGenerator(this.signer.publicKey, this.contractSignerXOnlyPubKey(), this.network);
47
+ this.deploymentGenerator = new DeploymentGenerator(Buffer.from(this.signer.publicKey), this.contractSignerXOnlyPubKey(), this.network);
48
48
  this.compiledTargetScript = this.deploymentGenerator.compile(this.bytecode, this.randomBytes, this.calldata);
49
49
  this.scriptTree = this.getScriptTree();
50
50
  this.internalInit();
51
- this._contractAddress = AddressGenerator.generatePKSH(this.contractSeed, this.network);
51
+ this._contractPubKey = '0x' + this.contractSigner.publicKey.toString('hex');
52
+ this._contractAddress = new Address(this.contractSigner.publicKey);
53
+ }
54
+ get contractPubKey() {
55
+ return this._contractPubKey;
52
56
  }
53
57
  get contractAddress() {
54
58
  return this._contractAddress;
@@ -60,7 +64,7 @@ export class DeploymentTransaction extends TransactionBuilder {
60
64
  return this.randomBytes;
61
65
  }
62
66
  contractSignerXOnlyPubKey() {
63
- return toXOnly(this.contractSigner.publicKey);
67
+ return toXOnly(Buffer.from(this.contractSigner.publicKey));
64
68
  }
65
69
  async buildTransaction() {
66
70
  if (!this.to) {
@@ -156,9 +160,9 @@ export class DeploymentTransaction extends TransactionBuilder {
156
160
  return bitCrypto.hash256(buf);
157
161
  }
158
162
  getPubKeys() {
159
- const pubkeys = [this.signer.publicKey];
163
+ const pubkeys = [Buffer.from(this.signer.publicKey)];
160
164
  if (this.contractSigner) {
161
- pubkeys.push(this.contractSigner.publicKey);
165
+ pubkeys.push(Buffer.from(this.contractSigner.publicKey));
162
166
  }
163
167
  return pubkeys;
164
168
  }
@@ -2,6 +2,7 @@ import { TransactionType } from '../enums/TransactionType.js';
2
2
  import { IFundingTransactionParameters } from '../interfaces/ITransactionParameters.js';
3
3
  import { Signer } from 'bitcoinjs-lib';
4
4
  import { TransactionBuilder } from './TransactionBuilder.js';
5
+ import { ECPairInterface } from 'ecpair';
5
6
  export declare class FundingTransaction extends TransactionBuilder<TransactionType.FUNDING> {
6
7
  readonly type: TransactionType.FUNDING;
7
8
  protected amount: bigint;
@@ -9,5 +10,5 @@ export declare class FundingTransaction extends TransactionBuilder<TransactionTy
9
10
  constructor(parameters: IFundingTransactionParameters);
10
11
  protected buildTransaction(): Promise<void>;
11
12
  protected splitInputs(amountSpent: bigint): void;
12
- protected getSignerKey(): Signer;
13
+ protected getSignerKey(): Signer | ECPairInterface;
13
14
  }
@@ -4,16 +4,16 @@ import { Taptree } from 'bitcoinjs-lib/src/types.js';
4
4
  import { TransactionBuilder } from './TransactionBuilder.js';
5
5
  import { TransactionType } from '../enums/TransactionType.js';
6
6
  import { ITransactionParameters } from '../interfaces/ITransactionParameters.js';
7
- import { Address } from '@btc-vision/bsi-binary';
7
+ import { ECPairInterface } from 'ecpair';
8
8
  export interface MultiSignParameters extends Omit<ITransactionParameters, 'priorityFee' | 'signer'> {
9
9
  readonly pubkeys: Buffer[];
10
10
  readonly minimumSignatures: number;
11
11
  readonly from?: undefined;
12
12
  readonly to?: undefined;
13
13
  readonly psbt?: Psbt;
14
- readonly receiver: Address;
14
+ readonly receiver: string;
15
15
  readonly requestedAmount: bigint;
16
- readonly refundVault: Address;
16
+ readonly refundVault: string;
17
17
  }
18
18
  export interface MultiSignFromBase64Params extends Omit<MultiSignParameters, 'psbt'> {
19
19
  readonly psbt: string;
@@ -31,13 +31,13 @@ export declare class MultiSignTransaction extends TransactionBuilder<Transaction
31
31
  protected readonly minimumSignatures: number;
32
32
  protected readonly originalInputCount: number;
33
33
  protected readonly requestedAmount: bigint;
34
- protected readonly receiver: Address;
35
- protected readonly refundVault: Address;
34
+ protected readonly receiver: string;
35
+ protected readonly refundVault: string;
36
36
  protected readonly sighashTypes: number[];
37
37
  constructor(parameters: MultiSignParameters);
38
38
  static fromBase64(params: MultiSignFromBase64Params): MultiSignTransaction;
39
39
  static verifyIfSigned(psbt: Psbt, signerPubKey: Buffer): boolean;
40
- static signPartial(psbt: Psbt, signer: Signer, originalInputCount: number, minimums: number[]): {
40
+ static signPartial(psbt: Psbt, signer: Signer | ECPairInterface, originalInputCount: number, minimums: number[]): {
41
41
  final: boolean;
42
42
  signed: boolean;
43
43
  };
@@ -16,7 +16,7 @@ export declare abstract class SharedInteractionTransaction<T extends Transaction
16
16
  protected calldataGenerator: CalldataGenerator;
17
17
  protected readonly calldata: Buffer;
18
18
  protected abstract readonly contractSecret: Buffer;
19
- protected readonly scriptSigner: Signer;
19
+ protected readonly scriptSigner: Signer | ECPairInterface;
20
20
  protected readonly disableAutoRefund: boolean;
21
21
  protected constructor(parameters: SharedInteractionParameters);
22
22
  getContractSecret(): Buffer;
@@ -32,7 +32,7 @@ export class SharedInteractionTransaction extends TransactionBuilder {
32
32
  this.calldata = Compressor.compress(parameters.calldata);
33
33
  this.randomBytes = parameters.randomBytes || BitcoinUtils.rndBytes();
34
34
  this.scriptSigner = this.generateKeyPairFromSeed();
35
- this.calldataGenerator = new CalldataGenerator(this.signer.publicKey, this.scriptSignerXOnlyPubKey(), this.network);
35
+ this.calldataGenerator = new CalldataGenerator(Buffer.from(this.signer.publicKey), this.scriptSignerXOnlyPubKey(), this.network);
36
36
  }
37
37
  getContractSecret() {
38
38
  return this.contractSecret;
@@ -46,7 +46,7 @@ export class SharedInteractionTransaction extends TransactionBuilder {
46
46
  return address.fromBech32(this.to).data;
47
47
  }
48
48
  scriptSignerXOnlyPubKey() {
49
- return toXOnly(this.scriptSigner.publicKey);
49
+ return toXOnly(Buffer.from(this.scriptSigner.publicKey));
50
50
  }
51
51
  generateKeyPairFromSeed() {
52
52
  return EcKeyPair.fromSeedKeyPair(this.randomBytes, this.network);
@@ -188,9 +188,9 @@ export class SharedInteractionTransaction extends TransactionBuilder {
188
188
  throw new Error('Failed to sign input');
189
189
  }
190
190
  getPubKeys() {
191
- const pubkeys = [this.signer.publicKey];
191
+ const pubkeys = [Buffer.from(this.signer.publicKey)];
192
192
  if (this.scriptSigner) {
193
- pubkeys.push(this.scriptSigner.publicKey);
193
+ pubkeys.push(Buffer.from(this.scriptSigner.publicKey));
194
194
  }
195
195
  return pubkeys;
196
196
  }
@@ -2,7 +2,6 @@ import { Network, Psbt, Signer, Transaction } from 'bitcoinjs-lib';
2
2
  import { PsbtInputExtended, PsbtOutputExtended, UpdateInput } from '../interfaces/Tap.js';
3
3
  import { TransactionType } from '../enums/TransactionType.js';
4
4
  import { IFundingTransactionParameters, ITransactionParameters } from '../interfaces/ITransactionParameters.js';
5
- import { Address } from '@btc-vision/bsi-binary';
6
5
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
7
6
  import { ECPairInterface } from 'ecpair';
8
7
  import { TweakedTransaction } from '../shared/TweakedTransaction.js';
@@ -20,20 +19,20 @@ export declare abstract class TransactionBuilder<T extends TransactionType> exte
20
19
  protected readonly outputs: PsbtOutputExtended[];
21
20
  protected feeOutput: PsbtOutputExtended | null;
22
21
  protected totalInputAmount: bigint;
23
- protected readonly signer: Signer;
22
+ protected readonly signer: Signer | ECPairInterface;
24
23
  protected readonly network: Network;
25
24
  protected readonly feeRate: number;
26
25
  protected priorityFee: bigint;
27
26
  protected utxos: UTXO[];
28
- protected to: Address | undefined;
29
- protected from: Address;
27
+ protected to: string | undefined;
28
+ protected from: string;
30
29
  protected _maximumFeeRate: number;
31
30
  protected isPubKeyDestination: boolean;
32
31
  protected constructor(parameters: ITransactionParameters);
33
- static getFrom(from: string | undefined, keypair: ECPairInterface, network: Network): Address;
32
+ static getFrom(from: string | undefined, keypair: ECPairInterface | Signer, network: Network): string;
34
33
  static witnessStackToScriptWitness(witness: Buffer[]): Buffer;
35
34
  getFundingTransactionParameters(): Promise<IFundingTransactionParameters>;
36
- setDestinationAddress(address: Address): void;
35
+ setDestinationAddress(address: string): void;
37
36
  setMaximumFeeRate(feeRate: number): void;
38
37
  signTransaction(): Promise<Transaction>;
39
38
  generateTransactionMinimalSignatures(checkPartialSigs?: boolean): Promise<void>;
@@ -41,7 +40,7 @@ export declare abstract class TransactionBuilder<T extends TransactionType> exte
41
40
  addInput(input: PsbtInputExtended): void;
42
41
  addOutput(output: PsbtOutputExtended): void;
43
42
  toAddress(): string | undefined;
44
- address(): Address | undefined;
43
+ address(): string | undefined;
45
44
  estimateTransactionFees(): Promise<bigint>;
46
45
  rebuildFromBase64(base64: string): Promise<Psbt>;
47
46
  setPSBT(psbt: Psbt): void;
@@ -1,12 +1,13 @@
1
1
  import { TransactionType } from '../enums/TransactionType.js';
2
2
  import { SharedInteractionTransaction } from './SharedInteractionTransaction.js';
3
3
  import { TransactionBuilder } from './TransactionBuilder.js';
4
- import { ABICoder, BinaryWriter } from '@btc-vision/bsi-binary';
5
4
  import { wBTC } from '../../metadata/contracts/wBTC.js';
6
5
  import { payments } from 'bitcoinjs-lib';
7
6
  import { EcKeyPair } from '../../keypair/EcKeyPair.js';
8
7
  import { PsbtTransaction } from '../processor/PsbtTransaction.js';
9
8
  import { currentConsensusConfig } from '../../consensus/ConsensusConfig.js';
9
+ import { ABICoder } from '../../abi/ABICoder.js';
10
+ import { BinaryWriter } from '../../buffer/BinaryWriter.js';
10
11
  const abiCoder = new ABICoder();
11
12
  export class UnwrapSegwitTransaction extends SharedInteractionTransaction {
12
13
  constructor(parameters) {
@@ -1,7 +1,6 @@
1
1
  import { TransactionType } from '../enums/TransactionType.js';
2
2
  import { SharedInteractionTransaction } from './SharedInteractionTransaction.js';
3
3
  import { TransactionBuilder } from './TransactionBuilder.js';
4
- import { ABICoder, BinaryWriter } from '@btc-vision/bsi-binary';
5
4
  import { wBTC } from '../../metadata/contracts/wBTC.js';
6
5
  import { payments } from 'bitcoinjs-lib';
7
6
  import { EcKeyPair } from '../../keypair/EcKeyPair.js';
@@ -13,6 +12,8 @@ import { CalldataGenerator } from '../../generators/builders/CalldataGenerator.j
13
12
  import { currentConsensusConfig } from '../../consensus/ConsensusConfig.js';
14
13
  import { BitcoinUtils } from '../../utils/BitcoinUtils.js';
15
14
  import { Features } from '../../generators/Features.js';
15
+ import { ABICoder } from '../../abi/ABICoder.js';
16
+ import { BinaryWriter } from '../../buffer/BinaryWriter.js';
16
17
  const abiCoder = new ABICoder();
17
18
  const numsPoint = Buffer.from('50929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', 'hex');
18
19
  export class UnwrapTransaction extends SharedInteractionTransaction {
@@ -33,7 +34,7 @@ export class UnwrapTransaction extends SharedInteractionTransaction {
33
34
  this.estimatedFeeLoss = UnwrapTransaction.preEstimateTaprootTransactionFees(BigInt(this.feeRate), this.calculateNumInputs(this.vaultUTXOs), 2n, this.calculateNumSignatures(this.vaultUTXOs), 65n, this.calculateNumEmptyWitnesses(this.vaultUTXOs));
34
35
  this.amount = parameters.amount;
35
36
  this.contractSecret = this.generateSecret();
36
- this.calldataGenerator = new CalldataGenerator(this.signer.publicKey, this.scriptSignerXOnlyPubKey(), this.network);
37
+ this.calldataGenerator = new CalldataGenerator(Buffer.from(this.signer.publicKey), this.scriptSignerXOnlyPubKey(), this.network);
37
38
  this.compiledTargetScript = this.calldataGenerator.compile(this.calldata, this.contractSecret, [Features.UNWRAP]);
38
39
  this.scriptTree = this.getScriptTree();
39
40
  this.internalInit();
@@ -173,7 +174,7 @@ export class UnwrapTransaction extends SharedInteractionTransaction {
173
174
  }
174
175
  return [
175
176
  this.contractSecret,
176
- toXOnly(this.signer.publicKey),
177
+ toXOnly(Buffer.from(this.signer.publicKey)),
177
178
  input.tapScriptSig[0].signature,
178
179
  input.tapScriptSig[1].signature,
179
180
  ];
@@ -3,12 +3,12 @@ import { TransactionType } from '../enums/TransactionType.js';
3
3
  import { TapLeafScript } from '../interfaces/Tap.js';
4
4
  import { IWrapParameters } from '../interfaces/ITransactionParameters.js';
5
5
  import { SharedInteractionTransaction } from './SharedInteractionTransaction.js';
6
- import { Address } from '@btc-vision/bsi-binary';
7
6
  import { WrappedGeneration } from '../../wbtc/WrappedGenerationParameters.js';
7
+ import { Address } from '../../keypair/Address.js';
8
8
  export declare class WrapTransaction extends SharedInteractionTransaction<TransactionType.WBTC_WRAP> {
9
9
  private static readonly WRAP_SELECTOR;
10
10
  type: TransactionType.WBTC_WRAP;
11
- readonly vault: Address;
11
+ readonly vault: string;
12
12
  readonly amount: bigint;
13
13
  readonly receiver: Address;
14
14
  protected readonly compiledTargetScript: Buffer;
@@ -1,20 +1,19 @@
1
1
  import { TransactionType } from '../enums/TransactionType.js';
2
2
  import { SharedInteractionTransaction } from './SharedInteractionTransaction.js';
3
3
  import { wBTC } from '../../metadata/contracts/wBTC.js';
4
- import { ABICoder, BinaryWriter } from '@btc-vision/bsi-binary';
5
- import { TransactionBuilder } from './TransactionBuilder.js';
6
4
  import { BitcoinUtils } from '../../utils/BitcoinUtils.js';
7
- import { AddressVerificator } from '../../keypair/AddressVerificator.js';
8
5
  import { P2TR_MS } from '../shared/P2TR_MS.js';
9
6
  import { currentConsensusConfig } from '../../consensus/ConsensusConfig.js';
7
+ import { ABICoder } from '../../abi/ABICoder.js';
8
+ import { BinaryWriter } from '../../buffer/BinaryWriter.js';
9
+ import { Address } from '../../keypair/Address.js';
10
10
  const abiCoder = new ABICoder();
11
11
  export class WrapTransaction extends SharedInteractionTransaction {
12
12
  constructor(parameters) {
13
13
  if (parameters.amount < currentConsensusConfig.VAULT_MINIMUM_AMOUNT) {
14
14
  throw new Error(`Amount is below the minimum required of ${currentConsensusConfig.VAULT_MINIMUM_AMOUNT} sat.`);
15
15
  }
16
- const receiver = parameters.receiver ||
17
- TransactionBuilder.getFrom(parameters.from, parameters.signer, parameters.network);
16
+ const receiver = parameters.receiver || new Address(parameters.signer.publicKey);
18
17
  parameters.calldata = WrapTransaction.generateMintCalldata(parameters.amount, receiver, parameters.network);
19
18
  super(parameters);
20
19
  this.type = TransactionType.WBTC_WRAP;
@@ -42,7 +41,7 @@ export class WrapTransaction extends SharedInteractionTransaction {
42
41
  throw new Error('Amount is required');
43
42
  if (!to)
44
43
  throw new Error('To address is required');
45
- if (!AddressVerificator.isValidP2TRAddress(to, network)) {
44
+ if (!to.isValid(network)) {
46
45
  throw new Error(`Oops! The address ${to} is not a valid P2TR address! If you wrap at this address, your funds will be lost!`);
47
46
  }
48
47
  const bufWriter = new BinaryWriter();
@@ -1,13 +1,13 @@
1
1
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
2
- import { Address } from '@btc-vision/bsi-binary';
3
2
  import { WrappedGeneration } from '../../wbtc/WrappedGenerationParameters.js';
4
3
  import { ITweakedTransactionData } from '../shared/TweakedTransaction.js';
5
4
  import { VaultUTXOs } from '../processor/PsbtTransaction.js';
6
5
  import { ChainId } from '../../network/ChainId.js';
7
6
  import { PsbtOutputExtended } from './Tap.js';
7
+ import { Address } from '../../keypair/Address.js';
8
8
  export interface ITransactionParameters extends ITweakedTransactionData {
9
- readonly from?: Address;
10
- readonly to?: Address;
9
+ readonly from?: string;
10
+ readonly to?: string;
11
11
  utxos: UTXO[];
12
12
  nonWitnessUtxo?: Buffer;
13
13
  estimatedFees?: bigint;
@@ -27,11 +27,11 @@ export interface SharedInteractionParameters extends ITransactionParameters {
27
27
  }
28
28
  export interface IInteractionParameters extends Omit<SharedInteractionParameters, 'optionalOutputs'> {
29
29
  readonly calldata: Buffer;
30
- readonly to: Address;
30
+ readonly to: string;
31
31
  }
32
32
  export interface IWrapParameters extends Omit<SharedInteractionParameters, 'optionalOutputs'> {
33
- readonly to?: Address;
34
- readonly from: Address;
33
+ readonly to?: string;
34
+ readonly from: string;
35
35
  readonly amount: bigint;
36
36
  readonly receiver?: Address;
37
37
  readonly generationParameters: WrappedGeneration;
@@ -1,4 +1,3 @@
1
- import { Address } from '@btc-vision/bsi-binary';
2
1
  import { Network, Psbt, Signer, Transaction } from 'bitcoinjs-lib';
3
2
  import { PsbtInputExtended, PsbtOutputExtended } from '../interfaces/Tap.js';
4
3
  import { ITweakedTransactionData, TweakedTransaction } from '../shared/TweakedTransaction.js';
@@ -8,7 +7,7 @@ export interface PsbtTransactionData extends ITweakedTransactionData {
8
7
  readonly network: Network;
9
8
  }
10
9
  export interface IWBTCUTXODocument {
11
- readonly vault: Address;
10
+ readonly vault: string;
12
11
  readonly blockId: bigint;
13
12
  readonly hash: string;
14
13
  readonly value: bigint;
@@ -16,8 +15,8 @@ export interface IWBTCUTXODocument {
16
15
  readonly output: string;
17
16
  }
18
17
  export interface VaultUTXOs {
19
- readonly vault: Address;
20
- readonly publicKeys: Address[];
18
+ readonly vault: string;
19
+ readonly publicKeys: string[];
21
20
  readonly minimum: number;
22
21
  readonly utxos: IWBTCUTXODocument[];
23
22
  }
@@ -1,5 +1,4 @@
1
1
  import { Network } from 'bitcoinjs-lib';
2
- import { Address } from '@btc-vision/bsi-binary';
3
2
  export declare class P2TR_MS {
4
- static generateMultiSigAddress(pubKeys: Buffer[], minimumSignatureRequired: number, network?: Network): Address;
3
+ static generateMultiSigAddress(pubKeys: Buffer[], minimumSignatureRequired: number, network?: Network): string;
5
4
  }
@@ -1,11 +1,12 @@
1
1
  import { Logger } from '@btc-vision/logger';
2
2
  import { Network, Payment, Psbt, Signer, Transaction } from 'bitcoinjs-lib';
3
+ import { ECPairInterface } from 'ecpair';
3
4
  import { PsbtInput } from 'bip174/src/lib/interfaces.js';
4
5
  import { UTXO } from '../../utxo/interfaces/IUTXO.js';
5
6
  import { PsbtInputExtended, TapLeafScript } from '../interfaces/Tap.js';
6
7
  import { ChainId } from '../../network/ChainId.js';
7
8
  export interface ITweakedTransactionData {
8
- readonly signer: Signer;
9
+ readonly signer: Signer | ECPairInterface;
9
10
  readonly network: Network;
10
11
  readonly chainId?: ChainId;
11
12
  readonly nonWitnessUtxo?: Buffer;
@@ -17,8 +18,8 @@ export declare enum TransactionSequence {
17
18
  export declare abstract class TweakedTransaction extends Logger {
18
19
  readonly logColor: string;
19
20
  finalized: boolean;
20
- protected signer: Signer;
21
- protected tweakedSigner?: Signer;
21
+ protected signer: Signer | ECPairInterface;
22
+ protected tweakedSigner?: ECPairInterface;
22
23
  protected network: Network;
23
24
  protected signed: boolean;
24
25
  protected abstract readonly transaction: Psbt;
@@ -35,7 +36,7 @@ export declare abstract class TweakedTransaction extends Logger {
35
36
  protected constructor(data: ITweakedTransactionData);
36
37
  static readScriptWitnessToWitnessStack(Buffer: Buffer): Buffer[];
37
38
  static preEstimateTaprootTransactionFees(feeRate: bigint, numInputs: bigint, numOutputs: bigint, numWitnessElements: bigint, witnessElementSize: bigint, emptyWitness: bigint, taprootControlWitnessSize?: bigint, taprootScriptSize?: bigint): bigint;
38
- protected static signInput(transaction: Psbt, input: PsbtInput, i: number, signer: Signer, sighashTypes: number[]): void;
39
+ protected static signInput(transaction: Psbt, input: PsbtInput, i: number, signer: Signer | ECPairInterface, sighashTypes: number[]): void;
39
40
  protected static calculateSignHash(sighashTypes: number[]): number;
40
41
  ignoreSignatureError(): void;
41
42
  getScriptAddress(): string;
@@ -46,13 +47,13 @@ export declare abstract class TweakedTransaction extends Logger {
46
47
  preEstimateTransactionFees(feeRate: bigint, numInputs: bigint, numOutputs: bigint, numSignatures: bigint, numPubkeys: bigint): bigint;
47
48
  protected generateTapData(): Payment;
48
49
  protected generateScriptAddress(): Payment;
49
- protected getSignerKey(): Signer;
50
- protected signInput(transaction: Psbt, input: PsbtInput, i: number, signer?: Signer): Promise<void>;
50
+ protected getSignerKey(): Signer | ECPairInterface;
51
+ protected signInput(transaction: Psbt, input: PsbtInput, i: number, signer?: Signer | ECPairInterface): Promise<void>;
51
52
  protected splitArray<T>(arr: T[], chunkSize: number): T[][];
52
53
  protected signInputs(transaction: Psbt): Promise<void>;
53
54
  protected internalPubKeyToXOnly(): Buffer;
54
55
  protected internalInit(): void;
55
56
  protected tweakSigner(): void;
56
- protected getTweakedSigner(useTweakedHash?: boolean, signer?: Signer): Signer | undefined;
57
+ protected getTweakedSigner(useTweakedHash?: boolean, signer?: Signer | ECPairInterface): ECPairInterface | undefined;
57
58
  protected generatePsbtInputExtended(utxo: UTXO, i: number): PsbtInputExtended;
58
59
  }
@@ -232,7 +232,7 @@ export class TweakedTransaction extends Logger {
232
232
  }
233
233
  }
234
234
  internalPubKeyToXOnly() {
235
- return toXOnly(this.signer.publicKey);
235
+ return toXOnly(Buffer.from(this.signer.publicKey));
236
236
  }
237
237
  internalInit() {
238
238
  this.scriptData = payments.p2tr(this.generateScriptAddress());
@@ -0,0 +1,11 @@
1
+ import { MemorySlotPointer } from './types.js';
2
+ export declare class BufferHelper {
3
+ static readonly EXPECTED_BUFFER_LENGTH: number;
4
+ static bufferToUint8Array(buffer: Buffer | Uint8Array): Uint8Array;
5
+ static uint8ArrayToHex(input: Uint8Array): string;
6
+ static hexToUint8Array(input: string): Uint8Array;
7
+ static pointerToUint8Array(pointer: MemorySlotPointer): Uint8Array;
8
+ static uint8ArrayToPointer(input: Uint8Array): MemorySlotPointer;
9
+ static valueToUint8Array(value: bigint): Uint8Array;
10
+ static uint8ArrayToValue(input: Uint8Array): bigint;
11
+ }
@@ -0,0 +1,50 @@
1
+ export class BufferHelper {
2
+ static bufferToUint8Array(buffer) {
3
+ if (Buffer.isBuffer(buffer)) {
4
+ const length = buffer.byteLength;
5
+ const arrayBuffer = new ArrayBuffer(length);
6
+ const view = new Uint8Array(arrayBuffer);
7
+ for (let i = 0; i < length; ++i) {
8
+ view[i] = buffer[i];
9
+ }
10
+ return view;
11
+ }
12
+ return buffer;
13
+ }
14
+ static uint8ArrayToHex(input) {
15
+ return Buffer.from(input, 0, input.byteLength).toString('hex');
16
+ }
17
+ static hexToUint8Array(input) {
18
+ if (input.startsWith('0x')) {
19
+ input = input.substring(2);
20
+ }
21
+ if (input.length % 2 !== 0) {
22
+ input = '0' + input;
23
+ }
24
+ const length = input.length / 2;
25
+ const buffer = new Uint8Array(length);
26
+ for (let i = 0; i < length; i++) {
27
+ buffer[i] = parseInt(input.substring(i * 2, i * 2 + 2), 16);
28
+ }
29
+ return buffer;
30
+ }
31
+ static pointerToUint8Array(pointer) {
32
+ const pointerHex = pointer.toString(16).padStart(64, '0');
33
+ return BufferHelper.hexToUint8Array(pointerHex);
34
+ }
35
+ static uint8ArrayToPointer(input) {
36
+ const hex = BufferHelper.uint8ArrayToHex(input);
37
+ return BigInt('0x' + hex);
38
+ }
39
+ static valueToUint8Array(value) {
40
+ const valueHex = value.toString(16).padStart(64, '0');
41
+ return BufferHelper.hexToUint8Array(valueHex);
42
+ }
43
+ static uint8ArrayToValue(input) {
44
+ const hex = BufferHelper.uint8ArrayToHex(input);
45
+ if (!hex)
46
+ return BigInt(0);
47
+ return BigInt('0x' + hex);
48
+ }
49
+ }
50
+ BufferHelper.EXPECTED_BUFFER_LENGTH = 32;
@@ -0,0 +1,12 @@
1
+ import { DeterministicMap } from '../deterministic/DeterministicMap.js';
2
+ export declare const ADDRESS_BYTE_LENGTH: number;
3
+ export type MemorySlotPointer = bigint;
4
+ export type BufferLike = Uint8Array | Buffer;
5
+ export type MemorySlotData<T> = T;
6
+ export type PointerStorage = DeterministicMap<MemorySlotPointer, MemorySlotData<bigint>>;
7
+ export type i32 = number;
8
+ export type u8 = number;
9
+ export type u16 = number;
10
+ export type u32 = number;
11
+ export type u64 = bigint;
12
+ export type Selector = number;
@@ -0,0 +1 @@
1
+ export const ADDRESS_BYTE_LENGTH = 32;
@@ -1,6 +1,5 @@
1
- import { Address } from '@btc-vision/bsi-binary';
2
1
  import { Network } from 'bitcoinjs-lib';
3
- import { Wallet } from '../opnet.js';
2
+ import { Address, Wallet } from '../opnet.js';
4
3
  import { UnwrapGeneration } from '../wbtc/UnwrapGeneration.js';
5
4
  import { WrappedGeneration } from '../wbtc/WrappedGenerationParameters.js';
6
5
  import { BroadcastResponse } from './interfaces/BroadcastResponse.js';
@@ -182,7 +182,7 @@ export class OPNetLimitedProvider {
182
182
  if (receiver.length < 50) {
183
183
  throw new Error('Invalid receiver address');
184
184
  }
185
- const params = [1, amount.toString(), receiver];
185
+ const params = [1, amount.toString(), receiver.toHex()];
186
186
  const result = await this.rpcMethod('btc_generate', params);
187
187
  if (!result) {
188
188
  return;
@@ -2,7 +2,7 @@ import { crypto as bitCrypto, networks, payments } from 'bitcoinjs-lib';
2
2
  import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
3
3
  import { DeploymentGenerator } from '../generators/builders/DeploymentGenerator.js';
4
4
  import { TransactionBuilder } from '../transaction/builders/TransactionBuilder.js';
5
- import { AddressGenerator } from '../generators/AddressGenerator.js';
5
+ import { Address } from '../keypair/Address.js';
6
6
  export class TapscriptVerificator {
7
7
  static getContractAddress(params) {
8
8
  const network = params.network || networks.bitcoin;
@@ -27,7 +27,8 @@ export class TapscriptVerificator {
27
27
  }
28
28
  static generateContractVirtualAddress(deployerPubKey, bytecode, saltHash, network = networks.bitcoin) {
29
29
  const virtualAddress = TapscriptVerificator.getContractSeed(deployerPubKey, bytecode, saltHash);
30
- return AddressGenerator.generatePKSH(virtualAddress, network);
30
+ const address = new Address(virtualAddress);
31
+ return address.p2tr(network);
31
32
  }
32
33
  static generateAddressFromScript(params, scriptTree) {
33
34
  const network = params.network || networks.bitcoin;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@btc-vision/transaction",
3
3
  "type": "module",
4
- "version": "1.0.112",
4
+ "version": "1.0.114",
5
5
  "author": "BlobMaster41",
6
6
  "description": "OPNet transaction library allows you to create and sign transactions for the OPNet network.",
7
7
  "engines": {
@@ -72,6 +72,7 @@
72
72
  "@babel/preset-react": "^7.24.1",
73
73
  "@babel/preset-typescript": "^7.24.1",
74
74
  "@types/node": "^22.5.5",
75
+ "@types/sha.js": "^2.4.4",
75
76
  "eslint": "^9.10.0",
76
77
  "gulp": "^5.0.0",
77
78
  "gulp-cached": "^1.1.1",
@@ -91,10 +92,10 @@
91
92
  "dependencies": {
92
93
  "@babel/plugin-proposal-object-rest-spread": "^7.20.7",
93
94
  "@bitcoinerlab/secp256k1": "^1.1.1",
94
- "@btc-vision/bsi-binary": "^1.0.42",
95
95
  "@btc-vision/bsi-bitcoin-rpc": "^1.0.29",
96
96
  "@btc-vision/logger": "^1.0.6",
97
97
  "@eslint/js": "^9.10.0",
98
+ "@noble/secp256k1": "^1.7.1",
98
99
  "assert": "^2.1.0",
99
100
  "babel-loader": "^9.1.3",
100
101
  "babel-plugin-transform-import-meta": "^2.2.1",
@@ -110,6 +111,7 @@
110
111
  "gulp-clean": "^0.4.0",
111
112
  "gulp-eslint-new": "^2.3.0",
112
113
  "process": "^0.11.10",
114
+ "sha.js": "^2.4.11",
113
115
  "ts-loader": "^9.5.1",
114
116
  "ts-node": "^10.9.2",
115
117
  "typescript": "^5.6.2"
package/src/_version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '1.0.111';
1
+ export const version = '1.0.114';