@btc-vision/transaction 1.7.7 → 1.7.11

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 (174) hide show
  1. package/browser/_version.d.ts +1 -0
  2. package/browser/chain/ChainData.d.ts +4 -0
  3. package/browser/{src/epoch → epoch}/interfaces/IChallengeSolution.d.ts +4 -4
  4. package/browser/{src/generators → generators}/Features.d.ts +6 -1
  5. package/browser/{src/generators → generators}/Generator.d.ts +1 -0
  6. package/browser/generators/MLDSAData.d.ts +15 -0
  7. package/browser/index.js +1 -1
  8. package/browser/{src/keypair → keypair}/Address.d.ts +9 -3
  9. package/browser/{src/keypair → keypair}/MessageSigner.d.ts +9 -0
  10. package/browser/{src/opnet.d.ts → opnet.d.ts} +1 -0
  11. package/browser/{src/transaction → transaction}/browser/Web3Provider.d.ts +15 -4
  12. package/browser/transaction/browser/types/OPWallet.d.ts +6 -0
  13. package/browser/{src/transaction → transaction}/builders/CustomScriptTransaction.d.ts +1 -0
  14. package/browser/{src/transaction → transaction}/builders/DeploymentTransaction.d.ts +1 -0
  15. package/browser/{src/transaction → transaction}/builders/TransactionBuilder.d.ts +4 -0
  16. package/browser/{src/transaction → transaction}/interfaces/ITransactionParameters.d.ts +3 -0
  17. package/browser/{src/transaction → transaction}/shared/TweakedTransaction.d.ts +6 -0
  18. package/browser/{src/utxo → utxo}/OPNetLimitedProvider.d.ts +1 -0
  19. package/build/_version.d.ts +1 -1
  20. package/build/_version.js +1 -1
  21. package/build/chain/ChainData.d.ts +4 -0
  22. package/build/chain/ChainData.js +20 -0
  23. package/build/epoch/ChallengeSolution.js +4 -4
  24. package/build/epoch/interfaces/IChallengeSolution.d.ts +4 -4
  25. package/build/generators/Features.d.ts +6 -1
  26. package/build/generators/Features.js +1 -0
  27. package/build/generators/Generator.d.ts +1 -0
  28. package/build/generators/Generator.js +24 -2
  29. package/build/generators/MLDSAData.d.ts +15 -0
  30. package/build/generators/MLDSAData.js +19 -0
  31. package/build/generators/builders/CalldataGenerator.js +1 -1
  32. package/build/generators/builders/DeploymentGenerator.js +1 -1
  33. package/build/generators/builders/P2WDAGenerator.js +1 -1
  34. package/build/keypair/Address.d.ts +9 -3
  35. package/build/keypair/Address.js +63 -38
  36. package/build/keypair/MessageSigner.d.ts +9 -0
  37. package/build/keypair/MessageSigner.js +101 -3
  38. package/build/opnet.d.ts +1 -0
  39. package/build/opnet.js +1 -0
  40. package/build/transaction/TransactionFactory.js +3 -0
  41. package/build/transaction/browser/Web3Provider.d.ts +15 -4
  42. package/build/transaction/browser/types/OPWallet.d.ts +2 -10
  43. package/build/transaction/browser/types/OPWallet.js +4 -2
  44. package/build/transaction/builders/CustomScriptTransaction.d.ts +1 -0
  45. package/build/transaction/builders/CustomScriptTransaction.js +3 -0
  46. package/build/transaction/builders/DeploymentTransaction.d.ts +1 -0
  47. package/build/transaction/builders/DeploymentTransaction.js +26 -1
  48. package/build/transaction/builders/InteractionTransaction.js +14 -1
  49. package/build/transaction/builders/InteractionTransactionP2WDA.js +14 -1
  50. package/build/transaction/builders/TransactionBuilder.d.ts +4 -0
  51. package/build/transaction/builders/TransactionBuilder.js +77 -0
  52. package/build/transaction/interfaces/ITransactionParameters.d.ts +3 -0
  53. package/build/transaction/shared/P2TR_MS.js +1 -0
  54. package/build/transaction/shared/TweakedTransaction.d.ts +6 -0
  55. package/build/transaction/shared/TweakedTransaction.js +19 -1
  56. package/build/utxo/OPNetLimitedProvider.d.ts +1 -0
  57. package/build/utxo/OPNetLimitedProvider.js +11 -1
  58. package/eslint.config.js +2 -1
  59. package/package.json +2 -1
  60. package/src/_version.ts +1 -1
  61. package/src/chain/ChainData.ts +32 -0
  62. package/src/deterministic/DeterministicSet.ts +2 -1
  63. package/src/epoch/ChallengeSolution.ts +4 -4
  64. package/src/epoch/interfaces/IChallengeSolution.ts +4 -4
  65. package/src/generators/Features.ts +8 -2
  66. package/src/generators/Generator.ts +35 -2
  67. package/src/generators/MLDSAData.ts +30 -0
  68. package/src/generators/builders/CalldataGenerator.ts +1 -1
  69. package/src/generators/builders/DeploymentGenerator.ts +2 -1
  70. package/src/generators/builders/LegacyCalldataGenerator.ts +1 -0
  71. package/src/generators/builders/P2WDAGenerator.ts +5 -1
  72. package/src/keypair/Address.ts +78 -38
  73. package/src/keypair/MessageSigner.ts +214 -15
  74. package/src/opnet.ts +2 -0
  75. package/src/transaction/TransactionFactory.ts +3 -0
  76. package/src/transaction/browser/Web3Provider.ts +64 -4
  77. package/src/transaction/browser/types/OPWallet.ts +6 -53
  78. package/src/transaction/builders/CustomScriptTransaction.ts +4 -0
  79. package/src/transaction/builders/DeploymentTransaction.ts +36 -8
  80. package/src/transaction/builders/InteractionTransaction.ts +17 -7
  81. package/src/transaction/builders/InteractionTransactionP2WDA.ts +17 -7
  82. package/src/transaction/builders/TransactionBuilder.ts +107 -0
  83. package/src/transaction/interfaces/ITransactionParameters.ts +12 -0
  84. package/src/transaction/shared/P2TR_MS.ts +1 -0
  85. package/src/transaction/shared/TweakedTransaction.ts +35 -2
  86. package/src/utxo/OPNetLimitedProvider.ts +19 -2
  87. package/test/address.test.ts +18 -20
  88. package/test/addressmap.test.ts +783 -0
  89. package/test/addressverificator-mldsa.test.ts +40 -16
  90. package/test/messagesigner-mldsa.test.ts +50 -50
  91. package/test/messagesigner-schnorr.test.ts +40 -40
  92. package/tsconfig.webpack.json +2 -6
  93. package/webpack.config.js +1 -1
  94. package/browser/src/_version.d.ts +0 -1
  95. package/browser/src/transaction/browser/types/OPWallet.d.ts +0 -14
  96. package/browser/test/address.test.d.ts +0 -1
  97. package/browser/test/addressverificator-mldsa.test.d.ts +0 -1
  98. package/browser/test/derivePath.test.d.ts +0 -1
  99. package/browser/test/fastmap-setall.test.d.ts +0 -1
  100. package/browser/test/fastmap.test.d.ts +0 -1
  101. package/browser/test/messagesigner-mldsa.test.d.ts +0 -1
  102. package/browser/test/messagesigner-schnorr.test.d.ts +0 -1
  103. package/browser/test/network-awareness.test.d.ts +0 -1
  104. package/browser/test/old/FastBigIntMap.d.ts +0 -18
  105. package/browser/test/oldfastmap.test.d.ts +0 -1
  106. /package/browser/{src/abi → abi}/ABICoder.d.ts +0 -0
  107. /package/browser/{src/buffer → buffer}/BinaryReader.d.ts +0 -0
  108. /package/browser/{src/buffer → buffer}/BinaryWriter.d.ts +0 -0
  109. /package/browser/{src/bytecode → bytecode}/Compressor.d.ts +0 -0
  110. /package/browser/{src/consensus → consensus}/Consensus.d.ts +0 -0
  111. /package/browser/{src/consensus → consensus}/ConsensusConfig.d.ts +0 -0
  112. /package/browser/{src/consensus → consensus}/metadata/RoswellConsensus.d.ts +0 -0
  113. /package/browser/{src/crypto → crypto}/crypto-browser.d.ts +0 -0
  114. /package/browser/{src/crypto → crypto}/crypto.d.ts +0 -0
  115. /package/browser/{src/deterministic → deterministic}/AddressMap.d.ts +0 -0
  116. /package/browser/{src/deterministic → deterministic}/AddressSet.d.ts +0 -0
  117. /package/browser/{src/deterministic → deterministic}/CustomMap.d.ts +0 -0
  118. /package/browser/{src/deterministic → deterministic}/DeterministicMap.d.ts +0 -0
  119. /package/browser/{src/deterministic → deterministic}/DeterministicSet.d.ts +0 -0
  120. /package/browser/{src/deterministic → deterministic}/FastMap.d.ts +0 -0
  121. /package/browser/{src/epoch → epoch}/ChallengeSolution.d.ts +0 -0
  122. /package/browser/{src/epoch → epoch}/validator/EpochValidator.d.ts +0 -0
  123. /package/browser/{src/event → event}/NetEvent.d.ts +0 -0
  124. /package/browser/{src/generators → generators}/AddressGenerator.d.ts +0 -0
  125. /package/browser/{src/generators → generators}/builders/CalldataGenerator.d.ts +0 -0
  126. /package/browser/{src/generators → generators}/builders/CustomGenerator.d.ts +0 -0
  127. /package/browser/{src/generators → generators}/builders/DeploymentGenerator.d.ts +0 -0
  128. /package/browser/{src/generators → generators}/builders/LegacyCalldataGenerator.d.ts +0 -0
  129. /package/browser/{src/generators → generators}/builders/MultiSignGenerator.d.ts +0 -0
  130. /package/browser/{src/generators → generators}/builders/P2WDAGenerator.d.ts +0 -0
  131. /package/browser/{src/index.d.ts → index.d.ts} +0 -0
  132. /package/browser/{src/keypair → keypair}/AddressVerificator.d.ts +0 -0
  133. /package/browser/{src/keypair → keypair}/EcKeyPair.d.ts +0 -0
  134. /package/browser/{src/keypair → keypair}/Secp256k1PointDeriver.d.ts +0 -0
  135. /package/browser/{src/keypair → keypair}/Wallet.d.ts +0 -0
  136. /package/browser/{src/keypair → keypair}/interfaces/IWallet.d.ts +0 -0
  137. /package/browser/{src/metadata → metadata}/ContractBaseMetadata.d.ts +0 -0
  138. /package/browser/{src/metadata → metadata}/tokens.d.ts +0 -0
  139. /package/browser/{src/mnemonic → mnemonic}/BIPStandard.d.ts +0 -0
  140. /package/browser/{src/mnemonic → mnemonic}/Mnemonic.d.ts +0 -0
  141. /package/browser/{src/mnemonic → mnemonic}/MnemonicStrength.d.ts +0 -0
  142. /package/browser/{src/network → network}/ChainId.d.ts +0 -0
  143. /package/browser/{src/p2wda → p2wda}/P2WDADetector.d.ts +0 -0
  144. /package/browser/{src/signer → signer}/SignerUtils.d.ts +0 -0
  145. /package/browser/{src/signer → signer}/TweakedSigner.d.ts +0 -0
  146. /package/browser/{src/transaction → transaction}/ContractAddress.d.ts +0 -0
  147. /package/browser/{src/transaction → transaction}/TransactionFactory.d.ts +0 -0
  148. /package/browser/{src/transaction → transaction}/browser/BrowserSignerBase.d.ts +0 -0
  149. /package/browser/{src/transaction → transaction}/browser/extensions/UnisatSigner.d.ts +0 -0
  150. /package/browser/{src/transaction → transaction}/browser/extensions/XverseSigner.d.ts +0 -0
  151. /package/browser/{src/transaction → transaction}/browser/types/Unisat.d.ts +0 -0
  152. /package/browser/{src/transaction → transaction}/browser/types/Xverse.d.ts +0 -0
  153. /package/browser/{src/transaction → transaction}/builders/CancelTransaction.d.ts +0 -0
  154. /package/browser/{src/transaction → transaction}/builders/ChallengeSolutionTransaction.d.ts +0 -0
  155. /package/browser/{src/transaction → transaction}/builders/FundingTransaction.d.ts +0 -0
  156. /package/browser/{src/transaction → transaction}/builders/InteractionTransaction.d.ts +0 -0
  157. /package/browser/{src/transaction → transaction}/builders/InteractionTransactionP2WDA.d.ts +0 -0
  158. /package/browser/{src/transaction → transaction}/builders/MultiSignTransaction.d.ts +0 -0
  159. /package/browser/{src/transaction → transaction}/builders/SharedInteractionTransaction.d.ts +0 -0
  160. /package/browser/{src/transaction → transaction}/enums/TransactionType.d.ts +0 -0
  161. /package/browser/{src/transaction → transaction}/interfaces/Tap.d.ts +0 -0
  162. /package/browser/{src/transaction → transaction}/mineable/IP2WSHAddress.d.ts +0 -0
  163. /package/browser/{src/transaction → transaction}/mineable/TimelockGenerator.d.ts +0 -0
  164. /package/browser/{src/transaction → transaction}/processor/PsbtTransaction.d.ts +0 -0
  165. /package/browser/{src/transaction → transaction}/psbt/PSBTTypes.d.ts +0 -0
  166. /package/browser/{src/transaction → transaction}/shared/P2TR_MS.d.ts +0 -0
  167. /package/browser/{src/utils → utils}/BitcoinUtils.d.ts +0 -0
  168. /package/browser/{src/utils → utils}/BufferHelper.d.ts +0 -0
  169. /package/browser/{src/utils → utils}/StringToBuffer.d.ts +0 -0
  170. /package/browser/{src/utils → utils}/lengths.d.ts +0 -0
  171. /package/browser/{src/utils → utils}/types.d.ts +0 -0
  172. /package/browser/{src/utxo → utxo}/interfaces/BroadcastResponse.d.ts +0 -0
  173. /package/browser/{src/utxo → utxo}/interfaces/IUTXO.d.ts +0 -0
  174. /package/browser/{src/verification → verification}/TapscriptVerificator.d.ts +0 -0
@@ -1,19 +1,25 @@
1
1
  import { Network } from '@btc-vision/bitcoin';
2
2
  import { IP2WSHAddress } from '../transaction/mineable/IP2WSHAddress.js';
3
+ import { MLDSASecurityLevel } from '@btc-vision/bip32';
3
4
  export declare class Address extends Uint8Array {
4
5
  #private;
5
- private classicPublicKey;
6
+ private legacyPublicKey;
6
7
  constructor(mldsaPublicKey?: ArrayLike<number>, publicKeyOrTweak?: ArrayLike<number>);
8
+ get mldsaLevel(): MLDSASecurityLevel | undefined;
9
+ set mldsaLevel(level: MLDSASecurityLevel);
10
+ get originalMDLSAPublicKey(): Uint8Array | undefined;
11
+ set originalMDLSAPublicKey(key: Buffer | Uint8Array);
7
12
  get originalPublicKey(): Uint8Array | undefined;
8
13
  get mldsaPublicKey(): Uint8Array | undefined;
9
14
  private get keyPair();
10
15
  static dead(): Address;
11
- static fromString(mldsaPublicKey: string, classicPublicKey?: string): Address;
16
+ static fromString(mldsaPublicKey: string, legacyPublicKey?: string): Address;
12
17
  static wrap(bytes: ArrayLike<number>): Address;
13
18
  static uncompressedToCompressed(publicKey: ArrayLike<number>): Buffer;
14
19
  static fromBigInt(value: bigint): Address;
15
20
  static fromUint64Array(w0: bigint, w1: bigint, w2: bigint, w3: bigint): Address;
16
21
  toUint64Array(): [bigint, bigint, bigint, bigint];
22
+ isDead(): boolean;
17
23
  toHex(): string;
18
24
  tweakedToHex(): string;
19
25
  toBuffer(): Buffer;
@@ -28,7 +34,7 @@ export declare class Address extends Uint8Array {
28
34
  lessThan(a: Address): boolean;
29
35
  greaterThan(a: Address): boolean;
30
36
  set(mldsaPublicKey: ArrayLike<number>): void;
31
- isValid(network: Network): boolean;
37
+ isValidLegacyPublicKey(network: Network): boolean;
32
38
  p2pk(): string;
33
39
  p2wpkh(network: Network): string;
34
40
  p2pkh(network: Network): string;
@@ -13,12 +13,21 @@ export interface MLDSASignedMessage {
13
13
  }
14
14
  declare class MessageSignerBase {
15
15
  sha256(message: Buffer | Uint8Array): Buffer;
16
+ trySignSchnorrWithOPWallet(message: Uint8Array | Buffer | string): Promise<SignedMessage | null>;
17
+ trySignMLDSAWithOPWallet(message: Uint8Array | Buffer | string): Promise<MLDSASignedMessage | null>;
18
+ signMessageAuto(message: Uint8Array | Buffer | string, keypair?: ECPairInterface): Promise<SignedMessage>;
19
+ tweakAndSignMessageAuto(message: Uint8Array | Buffer | string, keypair?: ECPairInterface, network?: Network): Promise<SignedMessage>;
20
+ signMLDSAMessageAuto(message: Uint8Array | Buffer | string, mldsaKeypair?: QuantumBIP32Interface): Promise<MLDSASignedMessage>;
21
+ verifyMLDSAWithOPWallet(message: Uint8Array | Buffer | string, signature: MLDSASignedMessage): Promise<boolean | null>;
22
+ getMLDSAPublicKeyFromOPWallet(): Promise<Buffer | null>;
16
23
  tweakAndSignMessage(keypair: ECPairInterface, message: Uint8Array | Buffer | string, network: Network): SignedMessage;
17
24
  signMessage(keypair: ECPairInterface, message: Uint8Array | Buffer | string): SignedMessage;
18
25
  verifySignature(publicKey: Uint8Array | Buffer, message: Uint8Array | Buffer | string, signature: Uint8Array | Buffer): boolean;
19
26
  tweakAndVerifySignature(publicKey: Uint8Array | Buffer, message: Uint8Array | Buffer | string, signature: Uint8Array | Buffer): boolean;
20
27
  signMLDSAMessage(mldsaKeypair: QuantumBIP32Interface, message: Uint8Array | Buffer | string): MLDSASignedMessage;
21
28
  verifyMLDSASignature(mldsaKeypair: QuantumBIP32Interface, message: Uint8Array | Buffer | string, signature: Uint8Array | Buffer): boolean;
29
+ isOPWalletAvailable(): boolean;
30
+ private getOPWallet;
22
31
  }
23
32
  export declare const MessageSigner: MessageSignerBase;
24
33
  export {};
@@ -23,6 +23,7 @@ export * from './mnemonic/Mnemonic.js';
23
23
  export * from './mnemonic/MnemonicStrength.js';
24
24
  export * from './mnemonic/BIPStandard.js';
25
25
  export { MLDSASecurityLevel, MLDSAKeyPair, QuantumBIP32Interface, QuantumBIP32API, QuantumSigner, QuantumBIP32Factory, QuantumDerivationPath, } from '@btc-vision/bip32';
26
+ export * from './generators/MLDSAData.js';
26
27
  export * from './metadata/ContractBaseMetadata.js';
27
28
  export * from './network/ChainId.js';
28
29
  export * from './signer/TweakedSigner.js';
@@ -3,10 +3,11 @@ import { UTXO } from '../../utxo/interfaces/IUTXO.js';
3
3
  import { CancelledTransaction, DeploymentResult, InteractionResponse } from '../TransactionFactory';
4
4
  import { ICustomTransactionParameters } from '../builders/CustomScriptTransaction.js';
5
5
  import { ICancelTransactionParameters } from '../builders/CancelTransaction.js';
6
- export type InteractionParametersWithoutSigner = Omit<IInteractionParameters, 'signer' | 'challenge'>;
7
- export type IDeploymentParametersWithoutSigner = Omit<IDeploymentParameters, 'signer' | 'network' | 'challenge'>;
8
- export type ICustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge'>;
9
- export type ICancelTransactionParametersWithoutSigner = Omit<ICancelTransactionParameters, 'signer' | 'challenge' | 'network'>;
6
+ import { MLDSASecurityLevel } from '@btc-vision/bip32';
7
+ export type InteractionParametersWithoutSigner = Omit<IInteractionParameters, 'signer' | 'challenge' | 'mldsaSigner'>;
8
+ export type IDeploymentParametersWithoutSigner = Omit<IDeploymentParameters, 'signer' | 'network' | 'challenge' | 'mldsaSigner'>;
9
+ export type ICustomTransactionWithoutSigner = Omit<ICustomTransactionParameters, 'signer' | 'challenge' | 'mldsaSigner'>;
10
+ export type ICancelTransactionParametersWithoutSigner = Omit<ICancelTransactionParameters, 'signer' | 'challenge' | 'network' | 'mldsaSigner'>;
10
11
  export interface BroadcastTransactionOptions {
11
12
  raw: string;
12
13
  psbt: boolean;
@@ -17,6 +18,12 @@ export interface BroadcastedTransaction {
17
18
  readonly error?: string;
18
19
  readonly peers?: number;
19
20
  }
21
+ export interface MLDSASignature {
22
+ readonly signature: string;
23
+ readonly publicKey: string;
24
+ readonly securityLevel: MLDSASecurityLevel;
25
+ readonly messageHash: string;
26
+ }
20
27
  export interface Web3Provider {
21
28
  signInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<InteractionResponse>;
22
29
  signAndBroadcastInteraction(interactionParameters: InteractionParametersWithoutSigner): Promise<[BroadcastedTransaction, BroadcastedTransaction, UTXO[], string]>;
@@ -24,4 +31,8 @@ export interface Web3Provider {
24
31
  customTransaction(params: ICustomTransactionWithoutSigner): Promise<BroadcastedTransaction>;
25
32
  deployContract(params: IDeploymentParametersWithoutSigner): Promise<DeploymentResult>;
26
33
  broadcast(transactions: BroadcastTransactionOptions[]): Promise<BroadcastedTransaction[]>;
34
+ signSchnorr(message: string): Promise<string>;
35
+ getMLDSAPublicKey(): Promise<string>;
36
+ signMLDSAMessage(message: string): Promise<MLDSASignature>;
37
+ verifyMLDSASignature(message: string, signature: MLDSASignature): Promise<boolean>;
27
38
  }
@@ -0,0 +1,6 @@
1
+ import { Unisat } from './Unisat.js';
2
+ import { Web3Provider } from '../Web3Provider.js';
3
+ export interface OPWallet extends Unisat {
4
+ web3: Web3Provider;
5
+ }
6
+ export declare function isOPWallet(wallet: unknown): wallet is OPWallet;
@@ -26,6 +26,7 @@ export declare class CustomScriptTransaction extends TransactionBuilder<Transact
26
26
  constructor(parameters: ICustomTransactionParameters);
27
27
  get scriptAddress(): string;
28
28
  get p2trAddress(): string;
29
+ exportCompiledTargetScript(): Buffer;
29
30
  getRndBytes(): Buffer;
30
31
  protected contractSignerXOnlyPubKey(): Buffer;
31
32
  protected buildTransaction(): Promise<void>;
@@ -30,6 +30,7 @@ export declare class DeploymentTransaction extends TransactionBuilder<Transactio
30
30
  get contractPubKey(): string;
31
31
  get contractAddress(): Address;
32
32
  get p2trAddress(): string;
33
+ exportCompiledTargetScript(): Buffer;
33
34
  getRndBytes(): Buffer;
34
35
  getChallenge(): ChallengeSolution;
35
36
  getContractAddress(): string;
@@ -7,6 +7,7 @@ import { ECPairInterface } from 'ecpair';
7
7
  import { TweakedTransaction } from '../shared/TweakedTransaction.js';
8
8
  import { UnisatSigner } from '../browser/extensions/UnisatSigner.js';
9
9
  import { IP2WSHAddress } from '../mineable/IP2WSHAddress.js';
10
+ import { Feature, Features } from '../../generators/Features.js';
10
11
  export declare const MINIMUM_AMOUNT_REWARD: bigint;
11
12
  export declare const MINIMUM_AMOUNT_CA: bigint;
12
13
  export declare const ANCHOR_SCRIPT: Buffer<ArrayBuffer>;
@@ -64,6 +65,9 @@ export declare abstract class TransactionBuilder<T extends TransactionType> exte
64
65
  protected addRefundOutput(amountSpent: bigint, expectRefund?: boolean): Promise<void>;
65
66
  protected defineLockScript(): Buffer;
66
67
  protected addValueToToOutput(value: number | bigint): void;
68
+ protected generateLegacySignature(): Buffer;
69
+ protected generateMLDSASignature(): Buffer;
70
+ protected generateMLDSALinkRequest(parameters: ITransactionParameters, features: Feature<Features>[]): void;
67
71
  protected getTransactionOPNetFee(): bigint;
68
72
  protected calculateTotalUTXOAmount(): bigint;
69
73
  protected calculateTotalVOutAmount(): bigint;
@@ -10,6 +10,8 @@ export interface ITransactionParameters extends ITweakedTransactionData {
10
10
  readonly from?: string;
11
11
  readonly to?: string;
12
12
  readonly debugFees?: boolean;
13
+ readonly revealMLDSAPublicKey?: boolean;
14
+ readonly linkMLDSAPublicKeyToAddress?: boolean;
13
15
  utxos: UTXO[];
14
16
  nonWitnessUtxo?: Buffer;
15
17
  estimatedFees?: bigint;
@@ -22,6 +24,7 @@ export interface ITransactionParameters extends ITweakedTransactionData {
22
24
  readonly feeRate: number;
23
25
  readonly priorityFee: bigint;
24
26
  readonly gasSatFee: bigint;
27
+ readonly compiledTargetScript?: Buffer | string;
25
28
  }
26
29
  export interface IFundingTransactionParameters extends ITransactionParameters {
27
30
  amount: bigint;
@@ -6,8 +6,10 @@ import { TapLeafScript } from '../interfaces/Tap.js';
6
6
  import { ChainId } from '../../network/ChainId.js';
7
7
  import { UnisatSigner } from '../browser/extensions/UnisatSigner.js';
8
8
  import { Buffer } from 'buffer';
9
+ import { QuantumBIP32Interface } from '@btc-vision/bip32';
9
10
  export type SupportedTransactionVersion = 1 | 2 | 3;
10
11
  export interface ITweakedTransactionData {
12
+ readonly mldsaSigner: QuantumBIP32Interface | null;
11
13
  readonly signer: Signer | ECPairInterface | UnisatSigner;
12
14
  readonly network: Network;
13
15
  readonly chainId?: ChainId;
@@ -47,7 +49,11 @@ export declare abstract class TweakedTransaction extends Logger {
47
49
  protected noSignatures: boolean;
48
50
  protected unlockScript: Buffer[] | undefined;
49
51
  protected txVersion: SupportedTransactionVersion;
52
+ protected readonly _mldsaSigner: QuantumBIP32Interface | null;
53
+ protected readonly _hashedPublicKey: Buffer | null;
50
54
  protected constructor(data: ITweakedTransactionData);
55
+ protected get mldsaSigner(): QuantumBIP32Interface;
56
+ protected get hashedPublicKey(): Buffer;
51
57
  static readScriptWitnessToWitnessStack(buffer: Buffer): Buffer[];
52
58
  static preEstimateTaprootTransactionFees(feeRate: bigint, numInputs: bigint, numOutputs: bigint, numWitnessElements: bigint, witnessElementSize: bigint, emptyWitness: bigint, taprootControlWitnessSize?: bigint, taprootScriptSize?: bigint): bigint;
53
59
  protected static signInput(transaction: Psbt, input: PsbtInput, i: number, signer: Signer | ECPairInterface, sighashTypes: number[]): void;
@@ -6,6 +6,7 @@ export interface WalletUTXOs {
6
6
  readonly confirmed: RawUTXOResponse[];
7
7
  readonly pending: RawUTXOResponse[];
8
8
  readonly spentTransactions: RawUTXOResponse[];
9
+ readonly raw: string[];
9
10
  }
10
11
  export declare class OPNetLimitedProvider {
11
12
  private readonly opnetAPIUrl;
@@ -1 +1 @@
1
- export declare const version = "1.7.7";
1
+ export declare const version = "1.7.11";
package/build/_version.js CHANGED
@@ -1 +1 @@
1
- export const version = '1.7.7';
1
+ export const version = '1.7.11';
@@ -0,0 +1,4 @@
1
+ import { Network } from '@btc-vision/bitcoin';
2
+ export declare function getChainIdHex(network: Network): string;
3
+ export declare function getChainId(network: Network): Uint8Array;
4
+ export declare const BITCOIN_PROTOCOL_ID: Uint8Array<ArrayBuffer>;
@@ -0,0 +1,20 @@
1
+ import { networks } from '@btc-vision/bitcoin';
2
+ function objectEqual(obj1, obj2) {
3
+ return JSON.stringify(obj1) === JSON.stringify(obj2);
4
+ }
5
+ export function getChainIdHex(network) {
6
+ if (objectEqual(network, networks.bitcoin)) {
7
+ return '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f';
8
+ }
9
+ if (objectEqual(network, networks.testnet)) {
10
+ return '000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943';
11
+ }
12
+ if (objectEqual(network, networks.regtest)) {
13
+ return '0f9188f13cb7b2c71f2a335e3a4fc328bf5beb436012afca590b1a11466e2206';
14
+ }
15
+ throw new Error('Unsupported network for chain ID retrieval');
16
+ }
17
+ export function getChainId(network) {
18
+ return Uint8Array.from(Buffer.from(getChainIdHex(network), 'hex'));
19
+ }
20
+ export const BITCOIN_PROTOCOL_ID = Uint8Array.from(Buffer.from('e784995a412d773988c4b8e333d7b39dfb3cabf118d0d645411a916ca2407939', 'hex'));
@@ -17,7 +17,7 @@ export class ChallengeVerification {
17
17
  export class ChallengeSubmission {
18
18
  constructor(data, epochNumber) {
19
19
  this.epochNumber = epochNumber;
20
- this.publicKey = Address.fromString(data.publicKey, data.classicPublicKey);
20
+ this.publicKey = Address.fromString(data.mldsaPublicKey, data.legacyPublicKey);
21
21
  this.solution = stringToBuffer(data.solution);
22
22
  this.graffiti = data.graffiti ? stringToBuffer(data.graffiti) : undefined;
23
23
  this.signature = stringToBuffer(data.signature);
@@ -37,7 +37,7 @@ export class ChallengeSubmission {
37
37
  export class ChallengeSolution {
38
38
  constructor(data) {
39
39
  this.epochNumber = BigInt(data.epochNumber);
40
- this.publicKey = Address.fromString(data.publicKey, data.classicPublicKey);
40
+ this.publicKey = Address.fromString(data.mldsaPublicKey, data.legacyPublicKey);
41
41
  this.solution = stringToBuffer(data.solution);
42
42
  this.salt = stringToBuffer(data.salt);
43
43
  this.graffiti = stringToBuffer(data.graffiti);
@@ -77,8 +77,8 @@ export class ChallengeSolution {
77
77
  toRaw() {
78
78
  return {
79
79
  epochNumber: this.epochNumber.toString(),
80
- publicKey: this.publicKey.toHex(),
81
- classicPublicKey: this.publicKey.tweakedToHex(),
80
+ mldsaPublicKey: this.publicKey.toHex(),
81
+ legacyPublicKey: this.publicKey.tweakedToHex(),
82
82
  solution: this.toHex(),
83
83
  salt: '0x' + this.salt.toString('hex'),
84
84
  graffiti: '0x' + this.graffiti.toString('hex'),
@@ -27,8 +27,8 @@ export interface RawChallengeVerification {
27
27
  readonly proofs: readonly string[];
28
28
  }
29
29
  export interface RawChallengeSubmission {
30
- readonly classicPublicKey: string;
31
- readonly publicKey: string;
30
+ readonly mldsaPublicKey: string;
31
+ readonly legacyPublicKey: string;
32
32
  readonly solution: string;
33
33
  readonly graffiti?: string;
34
34
  readonly signature: string;
@@ -41,8 +41,8 @@ export interface IChallengeSubmission {
41
41
  }
42
42
  export interface RawChallenge {
43
43
  readonly epochNumber: string;
44
- readonly classicPublicKey: string;
45
- readonly publicKey: string;
44
+ readonly mldsaPublicKey: string;
45
+ readonly legacyPublicKey: string;
46
46
  readonly solution: string;
47
47
  readonly salt: string;
48
48
  readonly graffiti: string;
@@ -1,8 +1,10 @@
1
1
  import { LoadedStorage } from '../transaction/interfaces/ITransactionParameters.js';
2
2
  import { ChallengeSubmission } from '../epoch/ChallengeSolution.js';
3
+ import { MLDSARequestData } from './MLDSAData.js';
3
4
  export declare enum Features {
4
5
  ACCESS_LIST = 1,
5
- EPOCH_SUBMISSION = 2
6
+ EPOCH_SUBMISSION = 2,
7
+ MLDSA_LINK_PUBKEY = 4
6
8
  }
7
9
  export interface Feature<T extends Features> {
8
10
  opcode: T;
@@ -14,3 +16,6 @@ export interface AccessListFeature extends Feature<Features.ACCESS_LIST> {
14
16
  export interface EpochSubmissionFeature extends Feature<Features.EPOCH_SUBMISSION> {
15
17
  data: ChallengeSubmission;
16
18
  }
19
+ export interface MLDSALinkRequest extends Feature<Features.MLDSA_LINK_PUBKEY> {
20
+ data: MLDSARequestData;
21
+ }
@@ -2,4 +2,5 @@ export var Features;
2
2
  (function (Features) {
3
3
  Features[Features["ACCESS_LIST"] = 1] = "ACCESS_LIST";
4
4
  Features[Features["EPOCH_SUBMISSION"] = 2] = "EPOCH_SUBMISSION";
5
+ Features[Features["MLDSA_LINK_PUBKEY"] = 4] = "MLDSA_LINK_PUBKEY";
5
6
  })(Features || (Features = {}));
@@ -15,4 +15,5 @@ export declare abstract class Generator {
15
15
  protected encodeFeature(feature: Feature<Features>): Buffer[][];
16
16
  private encodeAccessListFeature;
17
17
  private encodeChallengeSubmission;
18
+ private encodeLinkRequest;
18
19
  }
@@ -1,6 +1,6 @@
1
1
  import { networks, toXOnly } from '@btc-vision/bitcoin';
2
2
  import { BinaryWriter } from '../buffer/BinaryWriter.js';
3
- import { Features } from './Features.js';
3
+ import { Features, } from './Features.js';
4
4
  import { Address } from '../keypair/Address.js';
5
5
  import { Compressor } from '../bytecode/Compressor.js';
6
6
  export class Generator {
@@ -46,6 +46,9 @@ export class Generator {
46
46
  case Features.EPOCH_SUBMISSION: {
47
47
  return this.splitBufferIntoChunks(this.encodeChallengeSubmission(feature));
48
48
  }
49
+ case Features.MLDSA_LINK_PUBKEY: {
50
+ return this.splitBufferIntoChunks(this.encodeLinkRequest(feature));
51
+ }
49
52
  default:
50
53
  throw new Error(`Unknown feature type: ${feature.opcode}`);
51
54
  }
@@ -73,13 +76,32 @@ export class Generator {
73
76
  throw new Error('Invalid signature in challenge submission feature');
74
77
  }
75
78
  const writer = new BinaryWriter();
76
- writer.writeBytes(feature.data.publicKey.originalPublicKeyBuffer());
79
+ writer.writeBytes(feature.data.publicKey.toBuffer());
77
80
  writer.writeBytes(feature.data.solution);
78
81
  if (feature.data.graffiti) {
79
82
  writer.writeBytesWithLength(feature.data.graffiti);
80
83
  }
81
84
  return Buffer.from(writer.getBuffer());
82
85
  }
86
+ encodeLinkRequest(feature) {
87
+ const data = feature.data;
88
+ const writer = new BinaryWriter();
89
+ writer.writeU8(data.level);
90
+ writer.writeBytes(data.hashedPublicKey);
91
+ writer.writeBoolean(data.verifyRequest);
92
+ if (data.verifyRequest) {
93
+ if (!data.publicKey || !data.mldsaSignature) {
94
+ throw new Error('MLDSA public key and signature required when verifyRequest is true');
95
+ }
96
+ writer.writeBytes(data.publicKey);
97
+ writer.writeBytes(data.mldsaSignature);
98
+ }
99
+ if (!data.legacySignature || data.legacySignature.length !== 64) {
100
+ throw new Error('Legacy signature must be exactly 64 bytes');
101
+ }
102
+ writer.writeBytes(data.legacySignature);
103
+ return Buffer.from(writer.getBuffer());
104
+ }
83
105
  }
84
106
  Generator.DATA_CHUNK_SIZE = 512;
85
107
  Generator.MAGIC = Buffer.from('op', 'utf-8');
@@ -0,0 +1,15 @@
1
+ import { MLDSASecurityLevel } from '@btc-vision/bip32';
2
+ export declare enum MLDSAPublicKeyMetadata {
3
+ MLDSA44 = 1312,
4
+ MLDSA65 = 1952,
5
+ MLDSA87 = 2592
6
+ }
7
+ export interface MLDSARequestData {
8
+ readonly verifyRequest: boolean;
9
+ readonly publicKey: Uint8Array | Buffer | null;
10
+ readonly hashedPublicKey: Uint8Array | Buffer;
11
+ readonly level: MLDSASecurityLevel;
12
+ readonly mldsaSignature: Uint8Array | Buffer | null;
13
+ readonly legacySignature: Uint8Array | Buffer;
14
+ }
15
+ export declare function getLevelFromPublicKeyLength(length: number): MLDSASecurityLevel;
@@ -0,0 +1,19 @@
1
+ import { MLDSASecurityLevel } from '@btc-vision/bip32';
2
+ export var MLDSAPublicKeyMetadata;
3
+ (function (MLDSAPublicKeyMetadata) {
4
+ MLDSAPublicKeyMetadata[MLDSAPublicKeyMetadata["MLDSA44"] = 1312] = "MLDSA44";
5
+ MLDSAPublicKeyMetadata[MLDSAPublicKeyMetadata["MLDSA65"] = 1952] = "MLDSA65";
6
+ MLDSAPublicKeyMetadata[MLDSAPublicKeyMetadata["MLDSA87"] = 2592] = "MLDSA87";
7
+ })(MLDSAPublicKeyMetadata || (MLDSAPublicKeyMetadata = {}));
8
+ export function getLevelFromPublicKeyLength(length) {
9
+ switch (length) {
10
+ case MLDSAPublicKeyMetadata.MLDSA44:
11
+ return MLDSASecurityLevel.LEVEL2;
12
+ case MLDSAPublicKeyMetadata.MLDSA65:
13
+ return MLDSASecurityLevel.LEVEL3;
14
+ case MLDSAPublicKeyMetadata.MLDSA87:
15
+ return MLDSASecurityLevel.LEVEL5;
16
+ default:
17
+ throw new Error(`Invalid MLDSA public key length: ${length}`);
18
+ }
19
+ }
@@ -41,7 +41,7 @@ export class CalldataGenerator extends Generator {
41
41
  let compiledData = [
42
42
  this.getHeader(maxPriority, featuresList),
43
43
  opcodes.OP_TOALTSTACK,
44
- challenge.publicKey.originalPublicKeyBuffer(),
44
+ challenge.publicKey.toBuffer(),
45
45
  opcodes.OP_TOALTSTACK,
46
46
  challenge.solution,
47
47
  opcodes.OP_TOALTSTACK,
@@ -33,7 +33,7 @@ export class DeploymentGenerator extends Generator {
33
33
  const compiledData = [
34
34
  this.getHeader(maxPriority, featuresList),
35
35
  opcodes.OP_TOALTSTACK,
36
- challenge.publicKey.originalPublicKeyBuffer(),
36
+ challenge.publicKey.toBuffer(),
37
37
  opcodes.OP_TOALTSTACK,
38
38
  challenge.solution,
39
39
  opcodes.OP_TOALTSTACK,
@@ -25,7 +25,7 @@ export class P2WDAGenerator extends Generator {
25
25
  writer.writeU8(P2WDAGenerator.P2WDA_VERSION);
26
26
  writer.writeBytes(this.getHeader(maxPriority, features.map((f) => f.opcode)));
27
27
  writer.writeBytes(contractSecret);
28
- writer.writeBytes(challenge.publicKey.originalPublicKeyBuffer());
28
+ writer.writeBytes(challenge.publicKey.toBuffer());
29
29
  writer.writeBytes(challenge.solution);
30
30
  writer.writeU32(calldata.length);
31
31
  writer.writeBytes(calldata);
@@ -1,19 +1,25 @@
1
1
  import { Network } from '@btc-vision/bitcoin';
2
2
  import { IP2WSHAddress } from '../transaction/mineable/IP2WSHAddress.js';
3
+ import { MLDSASecurityLevel } from '@btc-vision/bip32';
3
4
  export declare class Address extends Uint8Array {
4
5
  #private;
5
- private classicPublicKey;
6
+ private legacyPublicKey;
6
7
  constructor(mldsaPublicKey?: ArrayLike<number>, publicKeyOrTweak?: ArrayLike<number>);
8
+ get mldsaLevel(): MLDSASecurityLevel | undefined;
9
+ set mldsaLevel(level: MLDSASecurityLevel);
10
+ get originalMDLSAPublicKey(): Uint8Array | undefined;
11
+ set originalMDLSAPublicKey(key: Buffer | Uint8Array);
7
12
  get originalPublicKey(): Uint8Array | undefined;
8
13
  get mldsaPublicKey(): Uint8Array | undefined;
9
14
  private get keyPair();
10
15
  static dead(): Address;
11
- static fromString(mldsaPublicKey: string, classicPublicKey?: string): Address;
16
+ static fromString(mldsaPublicKey: string, legacyPublicKey?: string): Address;
12
17
  static wrap(bytes: ArrayLike<number>): Address;
13
18
  static uncompressedToCompressed(publicKey: ArrayLike<number>): Buffer;
14
19
  static fromBigInt(value: bigint): Address;
15
20
  static fromUint64Array(w0: bigint, w1: bigint, w2: bigint, w3: bigint): Address;
16
21
  toUint64Array(): [bigint, bigint, bigint, bigint];
22
+ isDead(): boolean;
17
23
  toHex(): string;
18
24
  tweakedToHex(): string;
19
25
  toBuffer(): Buffer;
@@ -28,7 +34,7 @@ export declare class Address extends Uint8Array {
28
34
  lessThan(a: Address): boolean;
29
35
  greaterThan(a: Address): boolean;
30
36
  set(mldsaPublicKey: ArrayLike<number>): void;
31
- isValid(network: Network): boolean;
37
+ isValidLegacyPublicKey(network: Network): boolean;
32
38
  p2pk(): string;
33
39
  p2wpkh(network: Network): string;
34
40
  p2pkh(network: Network): string;