@btc-vision/transaction 1.0.85 → 1.0.87

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 (281) hide show
  1. package/.gitattributes +2 -2
  2. package/browser/_version.d.ts +1 -1
  3. package/browser/index.js +1 -1
  4. package/browser/keypair/Wallet.d.ts +3 -0
  5. package/browser/transaction/builders/TapUnwarpTransaction.d.ts +40 -40
  6. package/browser/transaction/builders/UnwarpTransaction.d.ts +34 -34
  7. package/browser/utxo/UTXOManager.d.ts +7 -7
  8. package/build/Utils.d.ts +0 -0
  9. package/build/Utils.js +1 -0
  10. package/build/_version.d.ts +1 -1
  11. package/build/_version.js +1 -1
  12. package/build/consensus/metadata/RoswsellConsensus.d.ts +2 -0
  13. package/build/consensus/metadata/RoswsellConsensus.js +4 -0
  14. package/build/contracts/ContractMetadataManager.d.ts +0 -0
  15. package/build/contracts/ContractMetadataManager.js +1 -0
  16. package/build/generators/OPNetAddressGenerator.d.ts +0 -0
  17. package/build/generators/OPNetAddressGenerator.js +1 -0
  18. package/build/generators/builders/UnwrapGenerator.d.ts +8 -0
  19. package/build/generators/builders/UnwrapGenerator.js +79 -0
  20. package/build/keypair/Wallet.d.ts +3 -0
  21. package/build/keypair/Wallet.js +8 -0
  22. package/build/keypair/interfaces/GeneratedWallet.d.ts +5 -0
  23. package/build/keypair/interfaces/GeneratedWallet.js +1 -0
  24. package/build/metadata/CommonContracts.d.ts +6 -0
  25. package/build/metadata/CommonContracts.js +5 -0
  26. package/build/metadata/ContractMetadataManager.d.ts +1 -0
  27. package/build/metadata/ContractMetadataManager.js +9 -0
  28. package/build/metadata/contracts/ContractBase.d.ts +9 -0
  29. package/build/metadata/contracts/ContractBase.js +13 -0
  30. package/build/metadata/contracts/ContractBaseMetadata.d.ts +9 -0
  31. package/build/metadata/contracts/ContractBaseMetadata.js +13 -0
  32. package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
  33. package/build/metadata/contracts/ContractMetadataManager.js +1 -0
  34. package/build/metadata/tokens.js +1 -1
  35. package/build/network/NetworkConverter.d.ts +0 -0
  36. package/build/network/NetworkConverter.js +14 -0
  37. package/build/scripts/Regtest.d.ts +2 -0
  38. package/build/scripts/Regtest.js +15 -0
  39. package/build/scripts/test.d.ts +1 -0
  40. package/build/scripts/test.js +74 -0
  41. package/build/signer/Regtest.d.ts +2 -0
  42. package/build/signer/Regtest.js +15 -0
  43. package/build/tests/Regtest.d.ts +3 -0
  44. package/build/tests/Regtest.js +29 -0
  45. package/build/tests/adaptPSBT.d.ts +1 -0
  46. package/build/tests/adaptPSBT.js +44 -0
  47. package/build/tests/btc/send.d.ts +1 -0
  48. package/build/tests/btc/send.js +35 -0
  49. package/build/tests/btc/transfer.d.ts +1 -0
  50. package/build/tests/btc/transfer.js +35 -0
  51. package/build/tests/createPairReg.d.ts +1 -0
  52. package/build/tests/createPairReg.js +73 -0
  53. package/build/tests/deploy/deployMoto.d.ts +4 -0
  54. package/build/tests/deploy/deployMoto.js +89 -0
  55. package/build/tests/deploy/deployPool.d.ts +1 -0
  56. package/build/tests/deploy/deployPool.js +5 -0
  57. package/build/tests/deploy/deployStep1.d.ts +1 -0
  58. package/build/tests/deploy/deployStep1.js +5 -0
  59. package/build/tests/deploy/deployStep2.d.ts +1 -0
  60. package/build/tests/deploy/deployStep2.js +5 -0
  61. package/build/tests/deploy/deployStep3.d.ts +1 -0
  62. package/build/tests/deploy/deployStep3.js +5 -0
  63. package/build/tests/deploy.d.ts +1 -0
  64. package/build/tests/deploy.js +41 -0
  65. package/build/tests/deployMotoRegStep1.d.ts +1 -0
  66. package/build/tests/deployMotoRegStep1.js +85 -0
  67. package/build/tests/deployReg.d.ts +1 -0
  68. package/build/tests/deployReg.js +85 -0
  69. package/build/tests/factory/createPairReg.d.ts +1 -0
  70. package/build/tests/factory/createPairReg.js +13 -0
  71. package/build/tests/gen.d.ts +1 -0
  72. package/build/tests/gen.js +19 -0
  73. package/build/tests/interaction.d.ts +5 -0
  74. package/build/tests/interaction.js +62 -0
  75. package/build/tests/massWrapReg.d.ts +1 -0
  76. package/build/tests/massWrapReg.js +105 -0
  77. package/build/tests/mineReg.d.ts +1 -0
  78. package/build/tests/mineReg.js +19 -0
  79. package/build/tests/moto/airdropToken.d.ts +1 -0
  80. package/build/tests/moto/airdropToken.js +21 -0
  81. package/build/tests/moto/airdropTokens.d.ts +1 -0
  82. package/build/tests/moto/airdropTokens.js +60 -0
  83. package/build/tests/moto/allowance.d.ts +1 -0
  84. package/build/tests/moto/allowance.js +6 -0
  85. package/build/tests/moto/approve.d.ts +1 -0
  86. package/build/tests/moto/approve.js +10 -0
  87. package/build/tests/moto/approveWBTC.d.ts +1 -0
  88. package/build/tests/moto/approveWBTC.js +12 -0
  89. package/build/tests/moto/balanceOf.d.ts +1 -0
  90. package/build/tests/moto/balanceOf.js +12 -0
  91. package/build/tests/moto/transfer.d.ts +1 -0
  92. package/build/tests/moto/transfer.js +16 -0
  93. package/build/tests/motoswap/airdropToken.d.ts +11 -0
  94. package/build/tests/motoswap/airdropToken.js +36 -0
  95. package/build/tests/motoswap/deployMoto.d.ts +4 -0
  96. package/build/tests/motoswap/deployMoto.js +89 -0
  97. package/build/tests/motoswap/deployMotoRegStep1.d.ts +1 -0
  98. package/build/tests/motoswap/deployMotoRegStep1.js +91 -0
  99. package/build/tests/motoswap/deployMotoRegStep2.d.ts +1 -0
  100. package/build/tests/motoswap/deployMotoRegStep2.js +91 -0
  101. package/build/tests/motoswap/deployPool.d.ts +1 -0
  102. package/build/tests/motoswap/deployPool.js +5 -0
  103. package/build/tests/motoswap/deployStep1.d.ts +1 -0
  104. package/build/tests/motoswap/deployStep1.js +5 -0
  105. package/build/tests/motoswap/deployStep2.d.ts +1 -0
  106. package/build/tests/motoswap/deployStep2.js +5 -0
  107. package/build/tests/motoswap/deployStep3.d.ts +1 -0
  108. package/build/tests/motoswap/deployStep3.js +5 -0
  109. package/build/tests/motoswap/interaction.d.ts +3 -0
  110. package/build/tests/motoswap/interaction.js +63 -0
  111. package/build/tests/motoswap/routerAddLiquidity.d.ts +11 -0
  112. package/build/tests/motoswap/routerAddLiquidity.js +35 -0
  113. package/build/tests/motoswap-router/addLiquidity.d.ts +11 -0
  114. package/build/tests/motoswap-router/addLiquidity.js +36 -0
  115. package/build/tests/motoswap-router/deployMoto.d.ts +4 -0
  116. package/build/tests/motoswap-router/deployMoto.js +89 -0
  117. package/build/tests/motoswap-router/deployPool.d.ts +1 -0
  118. package/build/tests/motoswap-router/deployPool.js +5 -0
  119. package/build/tests/motoswap-router/deployStep1.d.ts +1 -0
  120. package/build/tests/motoswap-router/deployStep1.js +5 -0
  121. package/build/tests/motoswap-router/deployStep2.d.ts +1 -0
  122. package/build/tests/motoswap-router/deployStep2.js +5 -0
  123. package/build/tests/motoswap-router/deployStep3.d.ts +1 -0
  124. package/build/tests/motoswap-router/deployStep3.js +5 -0
  125. package/build/tests/motoswap-router/getAmountsOut.d.ts +5 -0
  126. package/build/tests/motoswap-router/getAmountsOut.js +34 -0
  127. package/build/tests/motoswap-router/routerAddLiquidity.d.ts +11 -0
  128. package/build/tests/motoswap-router/routerAddLiquidity.js +35 -0
  129. package/build/tests/motoswap-router/swap.d.ts +8 -0
  130. package/build/tests/motoswap-router/swap.js +24 -0
  131. package/build/tests/multisign.d.ts +1 -0
  132. package/build/tests/multisign.js +47 -0
  133. package/build/tests/multisign2.d.ts +1 -0
  134. package/build/tests/multisign2.js +27 -0
  135. package/build/tests/pool/DecodePoolAddress.d.ts +6 -0
  136. package/build/tests/pool/DecodePoolAddress.js +12 -0
  137. package/build/tests/pool/decodeReserves.d.ts +5 -0
  138. package/build/tests/pool/decodeReserves.js +13 -0
  139. package/build/tests/pool/reserves.d.ts +1 -0
  140. package/build/tests/pool/reserves.js +18 -0
  141. package/build/tests/shared/Utils.d.ts +2 -0
  142. package/build/tests/shared/Utils.js +14 -0
  143. package/build/tests/shared/interaction.d.ts +7 -0
  144. package/build/tests/shared/interaction.js +85 -0
  145. package/build/tests/shared/tokens.d.ts +6 -0
  146. package/build/tests/shared/tokens.js +5 -0
  147. package/build/tests/stakeReg.d.ts +1 -0
  148. package/build/tests/stakeReg.js +73 -0
  149. package/build/tests/stakedReg.d.ts +1 -0
  150. package/build/tests/stakedReg.js +28 -0
  151. package/build/tests/test.d.ts +1 -0
  152. package/build/tests/test.js +51 -0
  153. package/build/tests/test2.d.ts +1 -0
  154. package/build/tests/test2.js +73 -0
  155. package/build/tests/testReg.d.ts +1 -0
  156. package/build/tests/testReg.js +91 -0
  157. package/build/tests/tokens.d.ts +6 -0
  158. package/build/tests/tokens.js +5 -0
  159. package/build/tests/totalRewardReg.d.ts +1 -0
  160. package/build/tests/totalRewardReg.js +28 -0
  161. package/build/tests/transfer.d.ts +1 -0
  162. package/build/tests/transfer.js +74 -0
  163. package/build/tests/transferReg.d.ts +1 -0
  164. package/build/tests/transferReg.js +74 -0
  165. package/build/tests/unStakeReg.d.ts +1 -0
  166. package/build/tests/unStakeReg.js +72 -0
  167. package/build/tests/unwrapReg.d.ts +1 -0
  168. package/build/tests/unwrapReg.js +61 -0
  169. package/build/tests/unwrapReg2.d.ts +1 -0
  170. package/build/tests/unwrapReg2.js +56 -0
  171. package/build/tests/unwrapRegSegwit.d.ts +1 -0
  172. package/build/tests/unwrapRegSegwit.js +83 -0
  173. package/build/tests/wbtc/approve.d.ts +1 -0
  174. package/build/tests/wbtc/approve.js +6 -0
  175. package/build/tests/wbtc/approveWBTC.d.ts +1 -0
  176. package/build/tests/wbtc/approveWBTC.js +12 -0
  177. package/build/tests/wbtc/massWrapReg.d.ts +1 -0
  178. package/build/tests/wbtc/massWrapReg.js +105 -0
  179. package/build/tests/wbtc/transfer.d.ts +1 -0
  180. package/build/tests/wbtc/transfer.js +16 -0
  181. package/build/tests/wbtc/transferReg.d.ts +1 -0
  182. package/build/tests/wbtc/transferReg.js +16 -0
  183. package/build/tests/wbtc/unStakeReg.d.ts +1 -0
  184. package/build/tests/wbtc/unStakeReg.js +72 -0
  185. package/build/tests/wbtc/unwrapReg.d.ts +1 -0
  186. package/build/tests/wbtc/unwrapReg.js +60 -0
  187. package/build/tests/wbtc/unwrapRegSegwit.d.ts +1 -0
  188. package/build/tests/wbtc/unwrapRegSegwit.js +83 -0
  189. package/build/tests/wbtc/withdrawalRequestReg.d.ts +1 -0
  190. package/build/tests/wbtc/withdrawalRequestReg.js +71 -0
  191. package/build/tests/wbtc/wrapReg.d.ts +1 -0
  192. package/build/tests/wbtc/wrapReg.js +65 -0
  193. package/build/tests/wbtc/wrapTest.d.ts +1 -0
  194. package/build/tests/wbtc/wrapTest.js +66 -0
  195. package/build/tests/withdrawalRequestReg.d.ts +1 -0
  196. package/build/tests/withdrawalRequestReg.js +71 -0
  197. package/build/tests/wrap.d.ts +1 -0
  198. package/build/tests/wrap.js +65 -0
  199. package/build/tests/wrapReg.d.ts +1 -0
  200. package/build/tests/wrapReg.js +68 -0
  201. package/build/tests/wrapTest.d.ts +1 -0
  202. package/build/tests/wrapTest.js +66 -0
  203. package/build/tests/wrapTestg.d.ts +1 -0
  204. package/build/tests/wrapTestg.js +66 -0
  205. package/build/tests/writers/allowance.d.ts +3 -0
  206. package/build/tests/writers/allowance.js +10 -0
  207. package/build/tests/writers/approve.d.ts +4 -0
  208. package/build/tests/writers/approve.js +11 -0
  209. package/build/transaction/TransactionBuilder.d.ts +60 -0
  210. package/build/transaction/TransactionBuilder.js +244 -0
  211. package/build/transaction/TransactionFactory.js +2 -0
  212. package/build/transaction/browser/BrowserSigner.d.ts +11 -0
  213. package/build/transaction/browser/BrowserSigner.js +10 -0
  214. package/build/transaction/browser/extensions/Unisat.d.ts +54 -0
  215. package/build/transaction/browser/extensions/Unisat.js +11 -0
  216. package/build/transaction/builders/GenericTransaction.d.ts +11 -0
  217. package/build/transaction/builders/GenericTransaction.js +23 -0
  218. package/build/transaction/builders/TapUnwarpTransaction.d.ts +37 -0
  219. package/build/transaction/builders/TapUnwarpTransaction.js +201 -0
  220. package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +34 -0
  221. package/build/transaction/builders/UnwarpSegwitTransaction.js +184 -0
  222. package/build/transaction/builders/UnwarpTransaction.d.ts +35 -0
  223. package/build/transaction/builders/UnwarpTransaction.js +199 -0
  224. package/build/transaction/interfaces/ITransactions.d.ts +32 -0
  225. package/build/transaction/interfaces/ITransactions.js +1 -0
  226. package/build/utxo/IUTXO.d.ts +0 -0
  227. package/build/utxo/IUTXO.js +1 -0
  228. package/build/utxo/OPNetUtils.d.ts +7 -0
  229. package/build/utxo/OPNetUtils.js +47 -0
  230. package/build/utxo/UTXOManager.d.ts +7 -0
  231. package/build/utxo/UTXOManager.js +47 -0
  232. package/build/wbtc/BroadcastResponse.d.ts +0 -0
  233. package/build/wbtc/BroadcastResponse.js +1 -0
  234. package/gulpfile.js +152 -152
  235. package/package.json +109 -109
  236. package/src/_version.ts +1 -1
  237. package/src/consensus/Consensus.ts +36 -36
  238. package/src/consensus/ConsensusConfig.ts +39 -39
  239. package/src/crypto/crypto-browser.js +75 -75
  240. package/src/generators/AddressGenerator.ts +24 -24
  241. package/src/generators/Features.ts +5 -5
  242. package/src/generators/Generator.ts +75 -75
  243. package/src/generators/builders/CalldataGenerator.ts +148 -148
  244. package/src/generators/builders/DeploymentGenerator.ts +66 -66
  245. package/src/index.ts +4 -4
  246. package/src/keypair/AddressVerificator.ts +40 -40
  247. package/src/keypair/EcKeyPair.ts +282 -282
  248. package/src/keypair/Wallet.ts +120 -97
  249. package/src/keypair/interfaces/IWallet.ts +19 -19
  250. package/src/metadata/ContractBaseMetadata.ts +23 -23
  251. package/src/metadata/contracts/wBTC.ts +60 -60
  252. package/src/metadata/tokens.ts +1 -1
  253. package/src/network/NetworkInformation.ts +7 -7
  254. package/src/transaction/TransactionFactory.ts +2 -0
  255. package/src/transaction/browser/BrowserSignerBase.ts +37 -37
  256. package/src/transaction/browser/Web3Provider.ts +46 -46
  257. package/src/transaction/browser/extensions/UnisatSigner.ts +218 -218
  258. package/src/transaction/browser/types/Unisat.ts +97 -97
  259. package/src/transaction/builders/FundingTransaction.ts +40 -40
  260. package/src/transaction/builders/InteractionTransaction.ts +38 -38
  261. package/src/transaction/builders/SharedInteractionTransaction.ts +368 -368
  262. package/src/transaction/builders/TransactionBuilder.ts +665 -665
  263. package/src/transaction/builders/UnwrapSegwitTransaction.ts +365 -365
  264. package/src/transaction/builders/UnwrapTransaction.ts +507 -507
  265. package/src/transaction/builders/WrapTransaction.ts +346 -346
  266. package/src/transaction/interfaces/ITransactionParameters.ts +59 -59
  267. package/src/transaction/interfaces/Tap.ts +26 -26
  268. package/src/transaction/psbt/PSBTTypes.ts +3 -3
  269. package/src/transaction/shared/TweakedTransaction.ts +539 -539
  270. package/src/utxo/OPNetLimitedProvider.ts +244 -244
  271. package/src/utxo/interfaces/BroadcastResponse.ts +10 -10
  272. package/src/utxo/interfaces/IUTXO.ts +29 -29
  273. package/src/verification/TapscriptVerificator.ts +89 -89
  274. package/src/wbtc/Generate.ts +40 -40
  275. package/src/wbtc/UnwrapGeneration.ts +13 -13
  276. package/src/wbtc/WrappedGenerationParameters.ts +33 -33
  277. package/webpack.config.js +78 -78
  278. /package/build/generators/builders/{MultiSignGenerator.d.ts → MultisignGenerator.d.ts} +0 -0
  279. /package/build/generators/builders/{MultiSignGenerator.js → MultisignGenerator.js} +0 -0
  280. /package/build/generators/{Features.d.ts → features.d.ts} +0 -0
  281. /package/build/generators/{Features.js → features.js} +0 -0
@@ -1,282 +1,282 @@
1
- import bip32, { BIP32Interface } from 'bip32';
2
- import { address, initEccLib, Network, networks, payments } from 'bitcoinjs-lib';
3
- import { ECPairFactory, ECPairInterface } from 'ecpair';
4
- import * as ecc from '@bitcoinerlab/secp256k1';
5
- import { Address } from '@btc-vision/bsi-binary';
6
- import { IWallet } from './interfaces/IWallet.js';
7
- import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
8
-
9
- initEccLib(ecc);
10
-
11
- // @ts-ignore
12
- const BIP32Factory = typeof bip32 === 'function' ? bip32 : bip32.BIP32Factory;
13
-
14
- /**
15
- * Class for handling EC key pairs
16
- * @class EcKeyPair
17
- * @module EcKeyPair
18
- * @typicalname EcKeyPair
19
- * @example import { EcKeyPair } from '@btc-vision/transaction';
20
- */
21
- export class EcKeyPair {
22
- // @ts-ignore
23
- public static BIP32 = BIP32Factory(ecc);
24
- public static ECPair = ECPairFactory(ecc);
25
-
26
- /**
27
- * Generate a keypair from a WIF
28
- * @param {string} wif - The WIF to use
29
- * @param {Network} network - The network to use
30
- * @returns {ECPairInterface} - The generated keypair
31
- */
32
- public static fromWIF(wif: string, network: Network = networks.bitcoin): ECPairInterface {
33
- return this.ECPair.fromWIF(wif, network);
34
- }
35
-
36
- /**
37
- * Generate a keypair from a private key
38
- * @param {Buffer} privateKey - The private key to use
39
- * @param {Network} network - The network to use
40
- * @returns {ECPairInterface} - The generated keypair
41
- */
42
- public static fromPrivateKey(
43
- privateKey: Buffer,
44
- network: Network = networks.bitcoin,
45
- ): ECPairInterface {
46
- return this.ECPair.fromPrivateKey(privateKey, { network });
47
- }
48
-
49
- /**
50
- * Generate a keypair from a public key
51
- * @param {Buffer} publicKey - The public key to use
52
- * @param {Network} network - The network to use
53
- * @returns {ECPairInterface} - The generated keypair
54
- */
55
- public static fromPublicKey(
56
- publicKey: Buffer,
57
- network: Network = networks.bitcoin,
58
- ): ECPairInterface {
59
- return this.ECPair.fromPublicKey(publicKey, { network });
60
- }
61
-
62
- /**
63
- * Generate a multi-sig address
64
- * @param {Buffer[]} pubKeys - The public keys to use
65
- * @param {number} minimumSignatureRequired - The minimum number of signatures required
66
- * @param {Network} network - The network to use
67
- * @returns {Address} - The generated address
68
- * @throws {Error} - If the address cannot be generated
69
- */
70
- public static generateMultiSigAddress(
71
- pubKeys: Buffer[],
72
- minimumSignatureRequired: number,
73
- network: Network = networks.bitcoin,
74
- ): Address {
75
- const publicKeys: Buffer[] = this.verifyPubKeys(pubKeys, network);
76
- if (publicKeys.length !== pubKeys.length) throw new Error(`Contains invalid public keys`);
77
-
78
- const p2ms = payments.p2ms({
79
- m: minimumSignatureRequired,
80
- pubkeys: publicKeys,
81
- network: network,
82
- });
83
-
84
- const p2wsh = payments.p2wsh({ redeem: p2ms, network: network });
85
- const address = p2wsh.address;
86
-
87
- // fake params
88
- /*const multiSignParams: MultiSignParameters = {
89
- network: network,
90
- utxos: [],
91
- pubkeys: pubKeys,
92
- minimumSignatures: minimumSignatureRequired,
93
- feeRate: 100,
94
- receiver: 'a',
95
- requestedAmount: 1n,
96
- refundVault: 'a',
97
- };
98
-
99
- const address = new MultiSignTransaction(multiSignParams).getScriptAddress();
100
- */
101
- if (!address) {
102
- throw new Error('Failed to generate address');
103
- }
104
-
105
- return address;
106
- }
107
-
108
- /**
109
- * Verify public keys and return the public keys
110
- * @param {Buffer[]} pubKeys - The public keys to verify
111
- * @param {Network} network - The network to use
112
- * @returns {Buffer[]} - The verified public keys
113
- * @throws {Error} - If the key cannot be regenerated
114
- */
115
- public static verifyPubKeys(pubKeys: Buffer[], network: Network = networks.bitcoin): Buffer[] {
116
- return pubKeys.map((pubKey) => {
117
- const key = EcKeyPair.fromPublicKey(pubKey, network);
118
-
119
- if (!key) {
120
- throw new Error('Failed to regenerate key');
121
- }
122
-
123
- return key.publicKey;
124
- });
125
- }
126
-
127
- /**
128
- * Get a P2WPKH address from a keypair
129
- * @param {ECPairInterface} keyPair - The keypair to get the address for
130
- * @param {Network} network - The network to use
131
- * @returns {Address} - The address
132
- */
133
- public static getP2WPKHAddress(
134
- keyPair: ECPairInterface,
135
- network: Network = networks.bitcoin,
136
- ): Address {
137
- const res = payments.p2wpkh({ pubkey: keyPair.publicKey, network: network });
138
-
139
- if (!res.address) {
140
- throw new Error('Failed to generate wallet');
141
- }
142
-
143
- return res.address;
144
- }
145
-
146
- /**
147
- * Generate a random wallet
148
- * @param {Network} network - The network to use
149
- * @returns {IWallet} - The generated wallet
150
- */
151
- public static generateWallet(network: Network = networks.bitcoin): IWallet {
152
- const keyPair = this.ECPair.makeRandom({
153
- network: network,
154
- });
155
-
156
- const wallet = this.getP2WPKHAddress(keyPair, network);
157
-
158
- if (!wallet) {
159
- throw new Error('Failed to generate wallet');
160
- }
161
-
162
- return {
163
- address: wallet,
164
- privateKey: keyPair.toWIF(),
165
- publicKey: keyPair.publicKey.toString('hex'),
166
- };
167
- }
168
-
169
- /**
170
- * Verify that a contract address is a valid p2tr address
171
- * @param {Address} contractAddress - The contract address to verify
172
- * @param {Network} network - The network to use
173
- * @returns {boolean} - Whether the address is valid
174
- */
175
- public static verifyContractAddress(
176
- contractAddress: Address,
177
- network: Network = networks.bitcoin,
178
- ): boolean {
179
- return !!address.toOutputScript(contractAddress, network);
180
- }
181
-
182
- /**
183
- * Get the legacy address from a keypair
184
- * @param {ECPairInterface} keyPair - The keypair to get the address for
185
- * @param {Network} network - The network to use
186
- * @returns {Address} - The legacy address
187
- */
188
- public static getLegacyAddress(
189
- keyPair: ECPairInterface,
190
- network: Network = networks.bitcoin,
191
- ): Address {
192
- const wallet = payments.p2pkh({ pubkey: keyPair.publicKey, network: network });
193
-
194
- if (!wallet.address) {
195
- throw new Error('Failed to generate wallet');
196
- }
197
-
198
- return wallet.address;
199
- }
200
-
201
- /**
202
- * Generate a random keypair
203
- * @param {Network} network - The network to use
204
- * @returns {ECPairInterface} - The generated keypair
205
- */
206
- public static generateRandomKeyPair(network: Network = networks.bitcoin): ECPairInterface {
207
- return this.ECPair.makeRandom({
208
- network: network,
209
- });
210
- }
211
-
212
- /**
213
- * Generate a BIP32 keypair from a seed
214
- * @param {Buffer} seed - The seed to generate the keypair from
215
- * @param {Network} network - The network to use
216
- * @returns {BIP32Interface} - The generated keypair
217
- */
218
- public static fromSeed(seed: Buffer, network: Network = networks.bitcoin): BIP32Interface {
219
- return this.BIP32.fromSeed(seed, network);
220
- }
221
-
222
- /**
223
- * Get taproot address from keypair
224
- * @param {ECPairInterface} keyPair - The keypair to get the taproot address for
225
- * @param {Network} network - The network to use
226
- * @returns {Address} - The taproot address
227
- */
228
- public static getTaprootAddress(
229
- keyPair: ECPairInterface,
230
- network: Network = networks.bitcoin,
231
- ): Address {
232
- const { address } = payments.p2tr({
233
- internalPubkey: toXOnly(keyPair.publicKey),
234
- network: network,
235
- });
236
-
237
- if (!address) {
238
- throw new Error(`Failed to generate sender address for transaction`);
239
- }
240
-
241
- return address;
242
- }
243
-
244
- /**
245
- * Get taproot address from address
246
- * @param {Address} inAddr - The address to convert to taproot
247
- * @param {Network} network - The network to use
248
- * @returns {Address} - The taproot address
249
- */
250
- public static getTaprootAddressFromAddress(
251
- inAddr: Address,
252
- network: Network = networks.bitcoin,
253
- ): Address {
254
- const { address } = payments.p2tr({
255
- address: inAddr,
256
- network: network,
257
- });
258
-
259
- if (!address) {
260
- throw new Error(`Failed to generate sender address for transaction`);
261
- }
262
-
263
- return address;
264
- }
265
-
266
- /**
267
- * Get a keypair from a given seed.
268
- * @param {Buffer} seed - The seed to generate the key pair from
269
- * @param {Network} network - The network to use
270
- * @returns {ECPairInterface} - The generated key pair
271
- */
272
- public static fromSeedKeyPair(
273
- seed: Buffer,
274
- network: Network = networks.bitcoin,
275
- ): ECPairInterface {
276
- const fromSeed = this.BIP32.fromSeed(seed, network);
277
- const privKey = fromSeed.privateKey;
278
- if (!privKey) throw new Error('Failed to generate key pair');
279
-
280
- return this.ECPair.fromPrivateKey(privKey, { network });
281
- }
282
- }
1
+ import bip32, { BIP32Interface } from 'bip32';
2
+ import { address, initEccLib, Network, networks, payments } from 'bitcoinjs-lib';
3
+ import { ECPairFactory, ECPairInterface } from 'ecpair';
4
+ import * as ecc from '@bitcoinerlab/secp256k1';
5
+ import { Address } from '@btc-vision/bsi-binary';
6
+ import { IWallet } from './interfaces/IWallet.js';
7
+ import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
8
+
9
+ initEccLib(ecc);
10
+
11
+ // @ts-ignore
12
+ const BIP32Factory = typeof bip32 === 'function' ? bip32 : bip32.BIP32Factory;
13
+
14
+ /**
15
+ * Class for handling EC key pairs
16
+ * @class EcKeyPair
17
+ * @module EcKeyPair
18
+ * @typicalname EcKeyPair
19
+ * @example import { EcKeyPair } from '@btc-vision/transaction';
20
+ */
21
+ export class EcKeyPair {
22
+ // @ts-ignore
23
+ public static BIP32 = BIP32Factory(ecc);
24
+ public static ECPair = ECPairFactory(ecc);
25
+
26
+ /**
27
+ * Generate a keypair from a WIF
28
+ * @param {string} wif - The WIF to use
29
+ * @param {Network} network - The network to use
30
+ * @returns {ECPairInterface} - The generated keypair
31
+ */
32
+ public static fromWIF(wif: string, network: Network = networks.bitcoin): ECPairInterface {
33
+ return this.ECPair.fromWIF(wif, network);
34
+ }
35
+
36
+ /**
37
+ * Generate a keypair from a private key
38
+ * @param {Buffer} privateKey - The private key to use
39
+ * @param {Network} network - The network to use
40
+ * @returns {ECPairInterface} - The generated keypair
41
+ */
42
+ public static fromPrivateKey(
43
+ privateKey: Buffer,
44
+ network: Network = networks.bitcoin,
45
+ ): ECPairInterface {
46
+ return this.ECPair.fromPrivateKey(privateKey, { network });
47
+ }
48
+
49
+ /**
50
+ * Generate a keypair from a public key
51
+ * @param {Buffer} publicKey - The public key to use
52
+ * @param {Network} network - The network to use
53
+ * @returns {ECPairInterface} - The generated keypair
54
+ */
55
+ public static fromPublicKey(
56
+ publicKey: Buffer,
57
+ network: Network = networks.bitcoin,
58
+ ): ECPairInterface {
59
+ return this.ECPair.fromPublicKey(publicKey, { network });
60
+ }
61
+
62
+ /**
63
+ * Generate a multi-sig address
64
+ * @param {Buffer[]} pubKeys - The public keys to use
65
+ * @param {number} minimumSignatureRequired - The minimum number of signatures required
66
+ * @param {Network} network - The network to use
67
+ * @returns {Address} - The generated address
68
+ * @throws {Error} - If the address cannot be generated
69
+ */
70
+ public static generateMultiSigAddress(
71
+ pubKeys: Buffer[],
72
+ minimumSignatureRequired: number,
73
+ network: Network = networks.bitcoin,
74
+ ): Address {
75
+ const publicKeys: Buffer[] = this.verifyPubKeys(pubKeys, network);
76
+ if (publicKeys.length !== pubKeys.length) throw new Error(`Contains invalid public keys`);
77
+
78
+ const p2ms = payments.p2ms({
79
+ m: minimumSignatureRequired,
80
+ pubkeys: publicKeys,
81
+ network: network,
82
+ });
83
+
84
+ const p2wsh = payments.p2wsh({ redeem: p2ms, network: network });
85
+ const address = p2wsh.address;
86
+
87
+ // fake params
88
+ /*const multiSignParams: MultiSignParameters = {
89
+ network: network,
90
+ utxos: [],
91
+ pubkeys: pubKeys,
92
+ minimumSignatures: minimumSignatureRequired,
93
+ feeRate: 100,
94
+ receiver: 'a',
95
+ requestedAmount: 1n,
96
+ refundVault: 'a',
97
+ };
98
+
99
+ const address = new MultiSignTransaction(multiSignParams).getScriptAddress();
100
+ */
101
+ if (!address) {
102
+ throw new Error('Failed to generate address');
103
+ }
104
+
105
+ return address;
106
+ }
107
+
108
+ /**
109
+ * Verify public keys and return the public keys
110
+ * @param {Buffer[]} pubKeys - The public keys to verify
111
+ * @param {Network} network - The network to use
112
+ * @returns {Buffer[]} - The verified public keys
113
+ * @throws {Error} - If the key cannot be regenerated
114
+ */
115
+ public static verifyPubKeys(pubKeys: Buffer[], network: Network = networks.bitcoin): Buffer[] {
116
+ return pubKeys.map((pubKey) => {
117
+ const key = EcKeyPair.fromPublicKey(pubKey, network);
118
+
119
+ if (!key) {
120
+ throw new Error('Failed to regenerate key');
121
+ }
122
+
123
+ return key.publicKey;
124
+ });
125
+ }
126
+
127
+ /**
128
+ * Get a P2WPKH address from a keypair
129
+ * @param {ECPairInterface} keyPair - The keypair to get the address for
130
+ * @param {Network} network - The network to use
131
+ * @returns {Address} - The address
132
+ */
133
+ public static getP2WPKHAddress(
134
+ keyPair: ECPairInterface,
135
+ network: Network = networks.bitcoin,
136
+ ): Address {
137
+ const res = payments.p2wpkh({ pubkey: keyPair.publicKey, network: network });
138
+
139
+ if (!res.address) {
140
+ throw new Error('Failed to generate wallet');
141
+ }
142
+
143
+ return res.address;
144
+ }
145
+
146
+ /**
147
+ * Generate a random wallet
148
+ * @param {Network} network - The network to use
149
+ * @returns {IWallet} - The generated wallet
150
+ */
151
+ public static generateWallet(network: Network = networks.bitcoin): IWallet {
152
+ const keyPair = this.ECPair.makeRandom({
153
+ network: network,
154
+ });
155
+
156
+ const wallet = this.getP2WPKHAddress(keyPair, network);
157
+
158
+ if (!wallet) {
159
+ throw new Error('Failed to generate wallet');
160
+ }
161
+
162
+ return {
163
+ address: wallet,
164
+ privateKey: keyPair.toWIF(),
165
+ publicKey: keyPair.publicKey.toString('hex'),
166
+ };
167
+ }
168
+
169
+ /**
170
+ * Verify that a contract address is a valid p2tr address
171
+ * @param {Address} contractAddress - The contract address to verify
172
+ * @param {Network} network - The network to use
173
+ * @returns {boolean} - Whether the address is valid
174
+ */
175
+ public static verifyContractAddress(
176
+ contractAddress: Address,
177
+ network: Network = networks.bitcoin,
178
+ ): boolean {
179
+ return !!address.toOutputScript(contractAddress, network);
180
+ }
181
+
182
+ /**
183
+ * Get the legacy address from a keypair
184
+ * @param {ECPairInterface} keyPair - The keypair to get the address for
185
+ * @param {Network} network - The network to use
186
+ * @returns {Address} - The legacy address
187
+ */
188
+ public static getLegacyAddress(
189
+ keyPair: ECPairInterface,
190
+ network: Network = networks.bitcoin,
191
+ ): Address {
192
+ const wallet = payments.p2pkh({ pubkey: keyPair.publicKey, network: network });
193
+
194
+ if (!wallet.address) {
195
+ throw new Error('Failed to generate wallet');
196
+ }
197
+
198
+ return wallet.address;
199
+ }
200
+
201
+ /**
202
+ * Generate a random keypair
203
+ * @param {Network} network - The network to use
204
+ * @returns {ECPairInterface} - The generated keypair
205
+ */
206
+ public static generateRandomKeyPair(network: Network = networks.bitcoin): ECPairInterface {
207
+ return this.ECPair.makeRandom({
208
+ network: network,
209
+ });
210
+ }
211
+
212
+ /**
213
+ * Generate a BIP32 keypair from a seed
214
+ * @param {Buffer} seed - The seed to generate the keypair from
215
+ * @param {Network} network - The network to use
216
+ * @returns {BIP32Interface} - The generated keypair
217
+ */
218
+ public static fromSeed(seed: Buffer, network: Network = networks.bitcoin): BIP32Interface {
219
+ return this.BIP32.fromSeed(seed, network);
220
+ }
221
+
222
+ /**
223
+ * Get taproot address from keypair
224
+ * @param {ECPairInterface} keyPair - The keypair to get the taproot address for
225
+ * @param {Network} network - The network to use
226
+ * @returns {Address} - The taproot address
227
+ */
228
+ public static getTaprootAddress(
229
+ keyPair: ECPairInterface,
230
+ network: Network = networks.bitcoin,
231
+ ): Address {
232
+ const { address } = payments.p2tr({
233
+ internalPubkey: toXOnly(keyPair.publicKey),
234
+ network: network,
235
+ });
236
+
237
+ if (!address) {
238
+ throw new Error(`Failed to generate sender address for transaction`);
239
+ }
240
+
241
+ return address;
242
+ }
243
+
244
+ /**
245
+ * Get taproot address from address
246
+ * @param {Address} inAddr - The address to convert to taproot
247
+ * @param {Network} network - The network to use
248
+ * @returns {Address} - The taproot address
249
+ */
250
+ public static getTaprootAddressFromAddress(
251
+ inAddr: Address,
252
+ network: Network = networks.bitcoin,
253
+ ): Address {
254
+ const { address } = payments.p2tr({
255
+ address: inAddr,
256
+ network: network,
257
+ });
258
+
259
+ if (!address) {
260
+ throw new Error(`Failed to generate sender address for transaction`);
261
+ }
262
+
263
+ return address;
264
+ }
265
+
266
+ /**
267
+ * Get a keypair from a given seed.
268
+ * @param {Buffer} seed - The seed to generate the key pair from
269
+ * @param {Network} network - The network to use
270
+ * @returns {ECPairInterface} - The generated key pair
271
+ */
272
+ public static fromSeedKeyPair(
273
+ seed: Buffer,
274
+ network: Network = networks.bitcoin,
275
+ ): ECPairInterface {
276
+ const fromSeed = this.BIP32.fromSeed(seed, network);
277
+ const privKey = fromSeed.privateKey;
278
+ if (!privKey) throw new Error('Failed to generate key pair');
279
+
280
+ return this.ECPair.fromPrivateKey(privKey, { network });
281
+ }
282
+ }