@btc-vision/transaction 1.0.60 → 1.0.61

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 (271) 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/transaction/builders/TapUnwarpTransaction.d.ts +40 -40
  5. package/browser/transaction/builders/UnwarpTransaction.d.ts +34 -34
  6. package/browser/utxo/UTXOManager.d.ts +7 -7
  7. package/build/Utils.d.ts +0 -0
  8. package/build/Utils.js +1 -0
  9. package/build/_version.d.ts +1 -1
  10. package/build/_version.js +1 -1
  11. package/build/consensus/metadata/RoswsellConsensus.d.ts +2 -0
  12. package/build/consensus/metadata/RoswsellConsensus.js +4 -0
  13. package/build/contracts/ContractMetadataManager.d.ts +0 -0
  14. package/build/contracts/ContractMetadataManager.js +1 -0
  15. package/build/generators/OPNetAddressGenerator.d.ts +0 -0
  16. package/build/generators/OPNetAddressGenerator.js +1 -0
  17. package/build/generators/builders/UnwrapGenerator.d.ts +8 -0
  18. package/build/generators/builders/UnwrapGenerator.js +79 -0
  19. package/build/keypair/interfaces/GeneratedWallet.d.ts +5 -0
  20. package/build/keypair/interfaces/GeneratedWallet.js +1 -0
  21. package/build/metadata/CommonContracts.d.ts +6 -0
  22. package/build/metadata/CommonContracts.js +5 -0
  23. package/build/metadata/ContractMetadataManager.d.ts +1 -0
  24. package/build/metadata/ContractMetadataManager.js +9 -0
  25. package/build/metadata/contracts/ContractBase.d.ts +9 -0
  26. package/build/metadata/contracts/ContractBase.js +13 -0
  27. package/build/metadata/contracts/ContractBaseMetadata.d.ts +9 -0
  28. package/build/metadata/contracts/ContractBaseMetadata.js +13 -0
  29. package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
  30. package/build/metadata/contracts/ContractMetadataManager.js +1 -0
  31. package/build/network/NetworkConverter.d.ts +0 -0
  32. package/build/network/NetworkConverter.js +14 -0
  33. package/build/scripts/Regtest.d.ts +2 -0
  34. package/build/scripts/Regtest.js +15 -0
  35. package/build/scripts/test.d.ts +1 -0
  36. package/build/scripts/test.js +74 -0
  37. package/build/signer/Regtest.d.ts +2 -0
  38. package/build/signer/Regtest.js +15 -0
  39. package/build/tests/Regtest.d.ts +3 -0
  40. package/build/tests/Regtest.js +29 -0
  41. package/build/tests/adaptPSBT.d.ts +1 -0
  42. package/build/tests/adaptPSBT.js +44 -0
  43. package/build/tests/btc/send.d.ts +1 -0
  44. package/build/tests/btc/send.js +35 -0
  45. package/build/tests/btc/transfer.d.ts +1 -0
  46. package/build/tests/btc/transfer.js +35 -0
  47. package/build/tests/createPairReg.d.ts +1 -0
  48. package/build/tests/createPairReg.js +73 -0
  49. package/build/tests/deploy/deployMoto.d.ts +4 -0
  50. package/build/tests/deploy/deployMoto.js +89 -0
  51. package/build/tests/deploy/deployPool.d.ts +1 -0
  52. package/build/tests/deploy/deployPool.js +5 -0
  53. package/build/tests/deploy/deployStep1.d.ts +1 -0
  54. package/build/tests/deploy/deployStep1.js +5 -0
  55. package/build/tests/deploy/deployStep2.d.ts +1 -0
  56. package/build/tests/deploy/deployStep2.js +5 -0
  57. package/build/tests/deploy/deployStep3.d.ts +1 -0
  58. package/build/tests/deploy/deployStep3.js +5 -0
  59. package/build/tests/deploy.d.ts +1 -0
  60. package/build/tests/deploy.js +41 -0
  61. package/build/tests/deployMotoRegStep1.d.ts +1 -0
  62. package/build/tests/deployMotoRegStep1.js +85 -0
  63. package/build/tests/deployReg.d.ts +1 -0
  64. package/build/tests/deployReg.js +85 -0
  65. package/build/tests/factory/createPairReg.d.ts +1 -0
  66. package/build/tests/factory/createPairReg.js +13 -0
  67. package/build/tests/gen.d.ts +1 -0
  68. package/build/tests/gen.js +19 -0
  69. package/build/tests/interaction.d.ts +5 -0
  70. package/build/tests/interaction.js +62 -0
  71. package/build/tests/massWrapReg.d.ts +1 -0
  72. package/build/tests/massWrapReg.js +105 -0
  73. package/build/tests/mineReg.d.ts +1 -0
  74. package/build/tests/mineReg.js +19 -0
  75. package/build/tests/moto/airdropToken.d.ts +1 -0
  76. package/build/tests/moto/airdropToken.js +21 -0
  77. package/build/tests/moto/airdropTokens.d.ts +1 -0
  78. package/build/tests/moto/airdropTokens.js +60 -0
  79. package/build/tests/moto/allowance.d.ts +1 -0
  80. package/build/tests/moto/allowance.js +6 -0
  81. package/build/tests/moto/approve.d.ts +1 -0
  82. package/build/tests/moto/approve.js +10 -0
  83. package/build/tests/moto/approveWBTC.d.ts +1 -0
  84. package/build/tests/moto/approveWBTC.js +12 -0
  85. package/build/tests/moto/balanceOf.d.ts +1 -0
  86. package/build/tests/moto/balanceOf.js +12 -0
  87. package/build/tests/moto/transfer.d.ts +1 -0
  88. package/build/tests/moto/transfer.js +16 -0
  89. package/build/tests/motoswap/airdropToken.d.ts +11 -0
  90. package/build/tests/motoswap/airdropToken.js +36 -0
  91. package/build/tests/motoswap/deployMoto.d.ts +4 -0
  92. package/build/tests/motoswap/deployMoto.js +89 -0
  93. package/build/tests/motoswap/deployMotoRegStep1.d.ts +1 -0
  94. package/build/tests/motoswap/deployMotoRegStep1.js +91 -0
  95. package/build/tests/motoswap/deployMotoRegStep2.d.ts +1 -0
  96. package/build/tests/motoswap/deployMotoRegStep2.js +91 -0
  97. package/build/tests/motoswap/deployPool.d.ts +1 -0
  98. package/build/tests/motoswap/deployPool.js +5 -0
  99. package/build/tests/motoswap/deployStep1.d.ts +1 -0
  100. package/build/tests/motoswap/deployStep1.js +5 -0
  101. package/build/tests/motoswap/deployStep2.d.ts +1 -0
  102. package/build/tests/motoswap/deployStep2.js +5 -0
  103. package/build/tests/motoswap/deployStep3.d.ts +1 -0
  104. package/build/tests/motoswap/deployStep3.js +5 -0
  105. package/build/tests/motoswap/interaction.d.ts +3 -0
  106. package/build/tests/motoswap/interaction.js +63 -0
  107. package/build/tests/motoswap/routerAddLiquidity.d.ts +11 -0
  108. package/build/tests/motoswap/routerAddLiquidity.js +35 -0
  109. package/build/tests/motoswap-router/addLiquidity.d.ts +11 -0
  110. package/build/tests/motoswap-router/addLiquidity.js +36 -0
  111. package/build/tests/motoswap-router/deployMoto.d.ts +4 -0
  112. package/build/tests/motoswap-router/deployMoto.js +89 -0
  113. package/build/tests/motoswap-router/deployPool.d.ts +1 -0
  114. package/build/tests/motoswap-router/deployPool.js +5 -0
  115. package/build/tests/motoswap-router/deployStep1.d.ts +1 -0
  116. package/build/tests/motoswap-router/deployStep1.js +5 -0
  117. package/build/tests/motoswap-router/deployStep2.d.ts +1 -0
  118. package/build/tests/motoswap-router/deployStep2.js +5 -0
  119. package/build/tests/motoswap-router/deployStep3.d.ts +1 -0
  120. package/build/tests/motoswap-router/deployStep3.js +5 -0
  121. package/build/tests/motoswap-router/getAmountsOut.d.ts +5 -0
  122. package/build/tests/motoswap-router/getAmountsOut.js +34 -0
  123. package/build/tests/motoswap-router/routerAddLiquidity.d.ts +11 -0
  124. package/build/tests/motoswap-router/routerAddLiquidity.js +35 -0
  125. package/build/tests/motoswap-router/swap.d.ts +8 -0
  126. package/build/tests/motoswap-router/swap.js +24 -0
  127. package/build/tests/multisign.d.ts +1 -0
  128. package/build/tests/multisign.js +47 -0
  129. package/build/tests/multisign2.d.ts +1 -0
  130. package/build/tests/multisign2.js +27 -0
  131. package/build/tests/pool/DecodePoolAddress.d.ts +6 -0
  132. package/build/tests/pool/DecodePoolAddress.js +12 -0
  133. package/build/tests/pool/decodeReserves.d.ts +5 -0
  134. package/build/tests/pool/decodeReserves.js +13 -0
  135. package/build/tests/pool/reserves.d.ts +1 -0
  136. package/build/tests/pool/reserves.js +18 -0
  137. package/build/tests/shared/Utils.d.ts +2 -0
  138. package/build/tests/shared/Utils.js +14 -0
  139. package/build/tests/shared/interaction.d.ts +7 -0
  140. package/build/tests/shared/interaction.js +85 -0
  141. package/build/tests/shared/tokens.d.ts +6 -0
  142. package/build/tests/shared/tokens.js +5 -0
  143. package/build/tests/stakeReg.d.ts +1 -0
  144. package/build/tests/stakeReg.js +73 -0
  145. package/build/tests/stakedReg.d.ts +1 -0
  146. package/build/tests/stakedReg.js +28 -0
  147. package/build/tests/test.d.ts +1 -0
  148. package/build/tests/test.js +51 -0
  149. package/build/tests/test2.d.ts +1 -0
  150. package/build/tests/test2.js +73 -0
  151. package/build/tests/testReg.d.ts +1 -0
  152. package/build/tests/testReg.js +91 -0
  153. package/build/tests/tokens.d.ts +6 -0
  154. package/build/tests/tokens.js +5 -0
  155. package/build/tests/totalRewardReg.d.ts +1 -0
  156. package/build/tests/totalRewardReg.js +28 -0
  157. package/build/tests/transfer.d.ts +1 -0
  158. package/build/tests/transfer.js +74 -0
  159. package/build/tests/transferReg.d.ts +1 -0
  160. package/build/tests/transferReg.js +74 -0
  161. package/build/tests/unStakeReg.d.ts +1 -0
  162. package/build/tests/unStakeReg.js +72 -0
  163. package/build/tests/unwrapReg.d.ts +1 -0
  164. package/build/tests/unwrapReg.js +61 -0
  165. package/build/tests/unwrapReg2.d.ts +1 -0
  166. package/build/tests/unwrapReg2.js +56 -0
  167. package/build/tests/unwrapRegSegwit.d.ts +1 -0
  168. package/build/tests/unwrapRegSegwit.js +83 -0
  169. package/build/tests/wbtc/approve.d.ts +1 -0
  170. package/build/tests/wbtc/approve.js +6 -0
  171. package/build/tests/wbtc/approveWBTC.d.ts +1 -0
  172. package/build/tests/wbtc/approveWBTC.js +12 -0
  173. package/build/tests/wbtc/massWrapReg.d.ts +1 -0
  174. package/build/tests/wbtc/massWrapReg.js +105 -0
  175. package/build/tests/wbtc/transfer.d.ts +1 -0
  176. package/build/tests/wbtc/transfer.js +16 -0
  177. package/build/tests/wbtc/transferReg.d.ts +1 -0
  178. package/build/tests/wbtc/transferReg.js +16 -0
  179. package/build/tests/wbtc/unStakeReg.d.ts +1 -0
  180. package/build/tests/wbtc/unStakeReg.js +72 -0
  181. package/build/tests/wbtc/unwrapReg.d.ts +1 -0
  182. package/build/tests/wbtc/unwrapReg.js +60 -0
  183. package/build/tests/wbtc/unwrapRegSegwit.d.ts +1 -0
  184. package/build/tests/wbtc/unwrapRegSegwit.js +83 -0
  185. package/build/tests/wbtc/withdrawalRequestReg.d.ts +1 -0
  186. package/build/tests/wbtc/withdrawalRequestReg.js +71 -0
  187. package/build/tests/wbtc/wrapReg.d.ts +1 -0
  188. package/build/tests/wbtc/wrapReg.js +65 -0
  189. package/build/tests/wbtc/wrapTest.d.ts +1 -0
  190. package/build/tests/wbtc/wrapTest.js +66 -0
  191. package/build/tests/withdrawalRequestReg.d.ts +1 -0
  192. package/build/tests/withdrawalRequestReg.js +71 -0
  193. package/build/tests/wrap.d.ts +1 -0
  194. package/build/tests/wrap.js +65 -0
  195. package/build/tests/wrapReg.d.ts +1 -0
  196. package/build/tests/wrapReg.js +68 -0
  197. package/build/tests/wrapTest.d.ts +1 -0
  198. package/build/tests/wrapTest.js +66 -0
  199. package/build/tests/wrapTestg.d.ts +1 -0
  200. package/build/tests/wrapTestg.js +66 -0
  201. package/build/tests/writers/allowance.d.ts +3 -0
  202. package/build/tests/writers/allowance.js +10 -0
  203. package/build/tests/writers/approve.d.ts +4 -0
  204. package/build/tests/writers/approve.js +11 -0
  205. package/build/transaction/TransactionBuilder.d.ts +60 -0
  206. package/build/transaction/TransactionBuilder.js +244 -0
  207. package/build/transaction/browser/BrowserSigner.d.ts +11 -0
  208. package/build/transaction/browser/BrowserSigner.js +10 -0
  209. package/build/transaction/browser/extensions/Unisat.d.ts +54 -0
  210. package/build/transaction/browser/extensions/Unisat.js +11 -0
  211. package/build/transaction/builders/GenericTransaction.d.ts +11 -0
  212. package/build/transaction/builders/GenericTransaction.js +23 -0
  213. package/build/transaction/builders/TapUnwarpTransaction.d.ts +37 -0
  214. package/build/transaction/builders/TapUnwarpTransaction.js +201 -0
  215. package/build/transaction/builders/TransactionBuilder.js +1 -1
  216. package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +34 -0
  217. package/build/transaction/builders/UnwarpSegwitTransaction.js +184 -0
  218. package/build/transaction/builders/UnwarpTransaction.d.ts +35 -0
  219. package/build/transaction/builders/UnwarpTransaction.js +199 -0
  220. package/build/transaction/interfaces/ITransactions.d.ts +32 -0
  221. package/build/transaction/interfaces/ITransactions.js +1 -0
  222. package/build/utxo/IUTXO.d.ts +0 -0
  223. package/build/utxo/IUTXO.js +1 -0
  224. package/build/utxo/OPNetUtils.d.ts +7 -0
  225. package/build/utxo/OPNetUtils.js +47 -0
  226. package/build/utxo/UTXOManager.d.ts +7 -0
  227. package/build/utxo/UTXOManager.js +47 -0
  228. package/build/wbtc/BroadcastResponse.d.ts +0 -0
  229. package/build/wbtc/BroadcastResponse.js +1 -0
  230. package/gulpfile.js +152 -152
  231. package/package.json +1 -1
  232. package/src/_version.ts +1 -1
  233. package/src/consensus/Consensus.ts +36 -36
  234. package/src/consensus/ConsensusConfig.ts +39 -39
  235. package/src/crypto/crypto-browser.js +75 -75
  236. package/src/generators/AddressGenerator.ts +24 -24
  237. package/src/generators/Features.ts +5 -5
  238. package/src/generators/Generator.ts +75 -75
  239. package/src/generators/builders/CalldataGenerator.ts +148 -148
  240. package/src/generators/builders/DeploymentGenerator.ts +66 -66
  241. package/src/index.ts +4 -4
  242. package/src/keypair/AddressVerificator.ts +40 -40
  243. package/src/keypair/EcKeyPair.ts +282 -282
  244. package/src/keypair/Wallet.ts +97 -97
  245. package/src/keypair/interfaces/IWallet.ts +19 -19
  246. package/src/metadata/ContractBaseMetadata.ts +23 -23
  247. package/src/network/NetworkInformation.ts +7 -7
  248. package/src/opnet.ts +84 -84
  249. package/src/transaction/browser/BrowserSignerBase.ts +37 -37
  250. package/src/transaction/browser/Web3Provider.ts +46 -46
  251. package/src/transaction/browser/extensions/UnisatSigner.ts +218 -218
  252. package/src/transaction/browser/types/Unisat.ts +80 -80
  253. package/src/transaction/builders/FundingTransaction.ts +40 -40
  254. package/src/transaction/builders/InteractionTransaction.ts +38 -38
  255. package/src/transaction/builders/SharedInteractionTransaction.ts +368 -368
  256. package/src/transaction/builders/TransactionBuilder.ts +665 -665
  257. package/src/transaction/interfaces/Tap.ts +26 -26
  258. package/src/transaction/psbt/PSBTTypes.ts +3 -3
  259. package/src/transaction/shared/TweakedTransaction.ts +537 -537
  260. package/src/utxo/OPNetLimitedProvider.ts +244 -244
  261. package/src/utxo/interfaces/BroadcastResponse.ts +10 -10
  262. package/src/utxo/interfaces/IUTXO.ts +29 -29
  263. package/src/verification/TapscriptVerificator.ts +89 -89
  264. package/src/wbtc/Generate.ts +40 -40
  265. package/src/wbtc/UnwrapGeneration.ts +13 -13
  266. package/src/wbtc/WrappedGenerationParameters.ts +33 -33
  267. package/webpack.config.js +78 -78
  268. /package/build/generators/builders/{MultiSignGenerator.d.ts → MultisignGenerator.d.ts} +0 -0
  269. /package/build/generators/builders/{MultiSignGenerator.js → MultisignGenerator.js} +0 -0
  270. /package/build/generators/{Features.d.ts → features.d.ts} +0 -0
  271. /package/build/generators/{Features.js → features.js} +0 -0
@@ -1,5 +1,5 @@
1
- import { opcodes } from 'bitcoinjs-lib';
2
-
3
- export enum Features {
4
- UNWRAP = opcodes.OP_16,
5
- }
1
+ import { opcodes } from 'bitcoinjs-lib';
2
+
3
+ export enum Features {
4
+ UNWRAP = opcodes.OP_16,
5
+ }
@@ -1,75 +1,75 @@
1
- import { Network, networks } from 'bitcoinjs-lib';
2
-
3
- /** Bitcoin Script Generator */
4
- export abstract class Generator {
5
- /**
6
- * The maximum size of a data chunk
7
- */
8
- public static readonly DATA_CHUNK_SIZE: number = 512;
9
-
10
- /**
11
- * The magic number of OPNet
12
- */
13
- public static readonly MAGIC: Buffer = Buffer.from('bsi', 'utf-8');
14
-
15
- /**
16
- * The public key of the sender
17
- * @protected
18
- */
19
- protected readonly senderPubKey: Buffer;
20
-
21
- /**
22
- * The public key of the contract salt
23
- * @protected
24
- */
25
- protected readonly contractSaltPubKey: Buffer;
26
-
27
- /**
28
- * The network to use
29
- * @protected
30
- */
31
- protected readonly network: Network = networks.bitcoin;
32
-
33
- protected constructor(
34
- senderPubKey: Buffer,
35
- contractSaltPubKey: Buffer,
36
- network: Network = networks.bitcoin,
37
- ) {
38
- this.senderPubKey = senderPubKey;
39
- this.contractSaltPubKey = contractSaltPubKey;
40
- this.network = network;
41
- }
42
-
43
- /**
44
- * Compile the script
45
- * @param args - The arguments to use when compiling the script
46
- * @returns {Buffer} - The compiled script
47
- */
48
- public abstract compile(...args: unknown[]): Buffer;
49
-
50
- /**
51
- * Split a buffer into chunks
52
- * @param {Buffer} buffer - The buffer to split
53
- * @param {number} chunkSize - The size of each chunk
54
- * @protected
55
- * @returns {Array<Buffer[]>} - The chunks
56
- */
57
- protected splitBufferIntoChunks(
58
- buffer: Buffer,
59
- chunkSize: number = Generator.DATA_CHUNK_SIZE,
60
- ): Array<Buffer[]> {
61
- const chunks: Array<Buffer[]> = [];
62
- for (let i = 0; i < buffer.length; i += chunkSize) {
63
- const dataLength = Math.min(chunkSize, buffer.length - i);
64
-
65
- const buf2 = Buffer.alloc(dataLength);
66
- for (let j = 0; j < dataLength; j++) {
67
- buf2.writeUInt8(buffer[i + j], j);
68
- }
69
-
70
- chunks.push([buf2]);
71
- }
72
-
73
- return chunks;
74
- }
75
- }
1
+ import { Network, networks } from 'bitcoinjs-lib';
2
+
3
+ /** Bitcoin Script Generator */
4
+ export abstract class Generator {
5
+ /**
6
+ * The maximum size of a data chunk
7
+ */
8
+ public static readonly DATA_CHUNK_SIZE: number = 512;
9
+
10
+ /**
11
+ * The magic number of OPNet
12
+ */
13
+ public static readonly MAGIC: Buffer = Buffer.from('bsi', 'utf-8');
14
+
15
+ /**
16
+ * The public key of the sender
17
+ * @protected
18
+ */
19
+ protected readonly senderPubKey: Buffer;
20
+
21
+ /**
22
+ * The public key of the contract salt
23
+ * @protected
24
+ */
25
+ protected readonly contractSaltPubKey: Buffer;
26
+
27
+ /**
28
+ * The network to use
29
+ * @protected
30
+ */
31
+ protected readonly network: Network = networks.bitcoin;
32
+
33
+ protected constructor(
34
+ senderPubKey: Buffer,
35
+ contractSaltPubKey: Buffer,
36
+ network: Network = networks.bitcoin,
37
+ ) {
38
+ this.senderPubKey = senderPubKey;
39
+ this.contractSaltPubKey = contractSaltPubKey;
40
+ this.network = network;
41
+ }
42
+
43
+ /**
44
+ * Compile the script
45
+ * @param args - The arguments to use when compiling the script
46
+ * @returns {Buffer} - The compiled script
47
+ */
48
+ public abstract compile(...args: unknown[]): Buffer;
49
+
50
+ /**
51
+ * Split a buffer into chunks
52
+ * @param {Buffer} buffer - The buffer to split
53
+ * @param {number} chunkSize - The size of each chunk
54
+ * @protected
55
+ * @returns {Array<Buffer[]>} - The chunks
56
+ */
57
+ protected splitBufferIntoChunks(
58
+ buffer: Buffer,
59
+ chunkSize: number = Generator.DATA_CHUNK_SIZE,
60
+ ): Array<Buffer[]> {
61
+ const chunks: Array<Buffer[]> = [];
62
+ for (let i = 0; i < buffer.length; i += chunkSize) {
63
+ const dataLength = Math.min(chunkSize, buffer.length - i);
64
+
65
+ const buf2 = Buffer.alloc(dataLength);
66
+ for (let j = 0; j < dataLength; j++) {
67
+ buf2.writeUInt8(buffer[i + j], j);
68
+ }
69
+
70
+ chunks.push([buf2]);
71
+ }
72
+
73
+ return chunks;
74
+ }
75
+ }
@@ -1,148 +1,148 @@
1
- import { crypto, Network, networks, opcodes, script } from 'bitcoinjs-lib';
2
- import { ECPairInterface } from 'ecpair';
3
- import { Compressor } from '../../bytecode/Compressor.js';
4
- import { Generator } from '../Generator.js';
5
- import { EcKeyPair } from '../../keypair/EcKeyPair.js';
6
- import { Features } from '../Features.js';
7
-
8
- /**
9
- * Class to generate bitcoin script for interaction transactions
10
- */
11
- export class CalldataGenerator extends Generator {
12
- constructor(
13
- senderPubKey: Buffer,
14
- contractSaltPubKey: Buffer,
15
- network: Network = networks.bitcoin,
16
- ) {
17
- super(senderPubKey, contractSaltPubKey, network);
18
- }
19
-
20
- /**
21
- * Get the public key as a buffer
22
- * @param {Buffer[]} witnessKeys - The public keys
23
- * @param {Network} network - The network to use
24
- * @private
25
- * @returns {Buffer} - The public key as a buffer
26
- */
27
- public static getPubKeyAsBuffer(witnessKeys: Buffer[], network: Network): Buffer {
28
- let finalBuffer: Buffer = Buffer.alloc(0);
29
-
30
- for (let pubKey of witnessKeys) {
31
- const key: ECPairInterface = EcKeyPair.fromPublicKey(pubKey, network);
32
-
33
- if (!key.compressed) {
34
- throw new Error('Public key must be compressed');
35
- }
36
-
37
- if (pubKey.byteLength !== 33) {
38
- throw new Error(`Public key must be 33 bytes, got ${pubKey.byteLength} bytes.`);
39
- }
40
-
41
- finalBuffer = Buffer.concat([finalBuffer, pubKey]);
42
- }
43
-
44
- // compress the public keys
45
- const compressed: Buffer = Compressor.compress(finalBuffer);
46
- if (compressed.byteLength >= finalBuffer.byteLength) {
47
- // we ensure that the user pays the smallest amount of fees. [micro-optimization]
48
- return finalBuffer;
49
- }
50
-
51
- // if compressed is smaller, return compressed.
52
- return compressed;
53
- }
54
-
55
- /**
56
- * Compile an interaction bitcoin script
57
- * @param {Buffer} calldata - The calldata to use
58
- * @param {Buffer} contractSecret - The contract secret
59
- * @param {number[]} [features=[]] - The features to use (optional)
60
- * @param {Buffer[]} [vaultPublicKeys=[]] - The public keys of the vault (optional)
61
- * @param {number} [minimumSignatures=0] - The minimum number of signatures (optional)
62
- * @returns {Buffer} - The compiled script
63
- * @throws {Error} - If something goes wrong
64
- */
65
- public compile(
66
- calldata: Buffer,
67
- contractSecret: Buffer,
68
- features: Features[] = [],
69
- vaultPublicKeys: Buffer[] = [],
70
- minimumSignatures: number = 0,
71
- ): Buffer {
72
- const dataChunks: Buffer[][] = this.splitBufferIntoChunks(calldata);
73
- if (!dataChunks.length) throw new Error('No data chunks found');
74
-
75
- let compiledData = [
76
- this.senderPubKey,
77
- opcodes.OP_CHECKSIGVERIFY,
78
-
79
- this.contractSaltPubKey,
80
- opcodes.OP_CHECKSIGVERIFY,
81
-
82
- opcodes.OP_HASH160,
83
- crypto.hash160(this.senderPubKey),
84
- opcodes.OP_EQUALVERIFY,
85
-
86
- opcodes.OP_HASH160,
87
- crypto.hash160(contractSecret),
88
- opcodes.OP_EQUALVERIFY,
89
-
90
- opcodes.OP_DEPTH,
91
- opcodes.OP_1,
92
- opcodes.OP_NUMEQUAL,
93
- opcodes.OP_IF,
94
-
95
- Generator.MAGIC,
96
- ];
97
-
98
- // write pub keys, when requested.
99
- if (vaultPublicKeys.length > 0) {
100
- const pubKeyBuffer = CalldataGenerator.getPubKeyAsBuffer(vaultPublicKeys, this.network);
101
- const pubKeyDataChunks: Buffer[][] = this.splitBufferIntoChunks(pubKeyBuffer);
102
-
103
- compiledData = compiledData.concat(
104
- ...[
105
- opcodes.OP_0, // provide opnet public keys
106
- ...pubKeyDataChunks,
107
- ],
108
- );
109
-
110
- if (minimumSignatures) {
111
- // verify that the minimum is not greater than 255
112
- if (minimumSignatures > 255) {
113
- throw new Error('Minimum signatures cannot exceed 255');
114
- }
115
-
116
- // we use a 2 bytes buffer even if we limit to 255 so it does not use an opcode for the number
117
- const minSigBuffer = Buffer.alloc(2);
118
- minSigBuffer.writeUint16LE(minimumSignatures, 0);
119
-
120
- compiledData = compiledData.concat(
121
- ...[
122
- opcodes.OP_1, // provide minimum signatures
123
- minSigBuffer,
124
- ],
125
- );
126
- } else {
127
- throw new Error('Minimum signatures must be provided');
128
- }
129
- }
130
-
131
- // Write calldata
132
- compiledData = compiledData.concat(
133
- ...features,
134
- ...[opcodes.OP_1NEGATE, ...dataChunks, opcodes.OP_ELSE, opcodes.OP_1, opcodes.OP_ENDIF],
135
- );
136
-
137
- const asm = compiledData.flat();
138
- const compiled = script.compile(asm);
139
-
140
- /** Verify the validity of the script */
141
- const decompiled = script.decompile(compiled);
142
- if (!decompiled) {
143
- throw new Error('Failed to decompile script??');
144
- }
145
-
146
- return compiled;
147
- }
148
- }
1
+ import { crypto, Network, networks, opcodes, script } from 'bitcoinjs-lib';
2
+ import { ECPairInterface } from 'ecpair';
3
+ import { Compressor } from '../../bytecode/Compressor.js';
4
+ import { Generator } from '../Generator.js';
5
+ import { EcKeyPair } from '../../keypair/EcKeyPair.js';
6
+ import { Features } from '../Features.js';
7
+
8
+ /**
9
+ * Class to generate bitcoin script for interaction transactions
10
+ */
11
+ export class CalldataGenerator extends Generator {
12
+ constructor(
13
+ senderPubKey: Buffer,
14
+ contractSaltPubKey: Buffer,
15
+ network: Network = networks.bitcoin,
16
+ ) {
17
+ super(senderPubKey, contractSaltPubKey, network);
18
+ }
19
+
20
+ /**
21
+ * Get the public key as a buffer
22
+ * @param {Buffer[]} witnessKeys - The public keys
23
+ * @param {Network} network - The network to use
24
+ * @private
25
+ * @returns {Buffer} - The public key as a buffer
26
+ */
27
+ public static getPubKeyAsBuffer(witnessKeys: Buffer[], network: Network): Buffer {
28
+ let finalBuffer: Buffer = Buffer.alloc(0);
29
+
30
+ for (let pubKey of witnessKeys) {
31
+ const key: ECPairInterface = EcKeyPair.fromPublicKey(pubKey, network);
32
+
33
+ if (!key.compressed) {
34
+ throw new Error('Public key must be compressed');
35
+ }
36
+
37
+ if (pubKey.byteLength !== 33) {
38
+ throw new Error(`Public key must be 33 bytes, got ${pubKey.byteLength} bytes.`);
39
+ }
40
+
41
+ finalBuffer = Buffer.concat([finalBuffer, pubKey]);
42
+ }
43
+
44
+ // compress the public keys
45
+ const compressed: Buffer = Compressor.compress(finalBuffer);
46
+ if (compressed.byteLength >= finalBuffer.byteLength) {
47
+ // we ensure that the user pays the smallest amount of fees. [micro-optimization]
48
+ return finalBuffer;
49
+ }
50
+
51
+ // if compressed is smaller, return compressed.
52
+ return compressed;
53
+ }
54
+
55
+ /**
56
+ * Compile an interaction bitcoin script
57
+ * @param {Buffer} calldata - The calldata to use
58
+ * @param {Buffer} contractSecret - The contract secret
59
+ * @param {number[]} [features=[]] - The features to use (optional)
60
+ * @param {Buffer[]} [vaultPublicKeys=[]] - The public keys of the vault (optional)
61
+ * @param {number} [minimumSignatures=0] - The minimum number of signatures (optional)
62
+ * @returns {Buffer} - The compiled script
63
+ * @throws {Error} - If something goes wrong
64
+ */
65
+ public compile(
66
+ calldata: Buffer,
67
+ contractSecret: Buffer,
68
+ features: Features[] = [],
69
+ vaultPublicKeys: Buffer[] = [],
70
+ minimumSignatures: number = 0,
71
+ ): Buffer {
72
+ const dataChunks: Buffer[][] = this.splitBufferIntoChunks(calldata);
73
+ if (!dataChunks.length) throw new Error('No data chunks found');
74
+
75
+ let compiledData = [
76
+ this.senderPubKey,
77
+ opcodes.OP_CHECKSIGVERIFY,
78
+
79
+ this.contractSaltPubKey,
80
+ opcodes.OP_CHECKSIGVERIFY,
81
+
82
+ opcodes.OP_HASH160,
83
+ crypto.hash160(this.senderPubKey),
84
+ opcodes.OP_EQUALVERIFY,
85
+
86
+ opcodes.OP_HASH160,
87
+ crypto.hash160(contractSecret),
88
+ opcodes.OP_EQUALVERIFY,
89
+
90
+ opcodes.OP_DEPTH,
91
+ opcodes.OP_1,
92
+ opcodes.OP_NUMEQUAL,
93
+ opcodes.OP_IF,
94
+
95
+ Generator.MAGIC,
96
+ ];
97
+
98
+ // write pub keys, when requested.
99
+ if (vaultPublicKeys.length > 0) {
100
+ const pubKeyBuffer = CalldataGenerator.getPubKeyAsBuffer(vaultPublicKeys, this.network);
101
+ const pubKeyDataChunks: Buffer[][] = this.splitBufferIntoChunks(pubKeyBuffer);
102
+
103
+ compiledData = compiledData.concat(
104
+ ...[
105
+ opcodes.OP_0, // provide opnet public keys
106
+ ...pubKeyDataChunks,
107
+ ],
108
+ );
109
+
110
+ if (minimumSignatures) {
111
+ // verify that the minimum is not greater than 255
112
+ if (minimumSignatures > 255) {
113
+ throw new Error('Minimum signatures cannot exceed 255');
114
+ }
115
+
116
+ // we use a 2 bytes buffer even if we limit to 255 so it does not use an opcode for the number
117
+ const minSigBuffer = Buffer.alloc(2);
118
+ minSigBuffer.writeUint16LE(minimumSignatures, 0);
119
+
120
+ compiledData = compiledData.concat(
121
+ ...[
122
+ opcodes.OP_1, // provide minimum signatures
123
+ minSigBuffer,
124
+ ],
125
+ );
126
+ } else {
127
+ throw new Error('Minimum signatures must be provided');
128
+ }
129
+ }
130
+
131
+ // Write calldata
132
+ compiledData = compiledData.concat(
133
+ ...features,
134
+ ...[opcodes.OP_1NEGATE, ...dataChunks, opcodes.OP_ELSE, opcodes.OP_1, opcodes.OP_ENDIF],
135
+ );
136
+
137
+ const asm = compiledData.flat();
138
+ const compiled = script.compile(asm);
139
+
140
+ /** Verify the validity of the script */
141
+ const decompiled = script.decompile(compiled);
142
+ if (!decompiled) {
143
+ throw new Error('Failed to decompile script??');
144
+ }
145
+
146
+ return compiled;
147
+ }
148
+ }
@@ -1,66 +1,66 @@
1
- import { crypto, Network, networks, opcodes, script } from 'bitcoinjs-lib';
2
- import { Generator } from '../Generator.js';
3
-
4
- export class DeploymentGenerator extends Generator {
5
- constructor(
6
- senderPubKey: Buffer,
7
- contractSaltPubKey: Buffer,
8
- network: Network = networks.bitcoin,
9
- ) {
10
- super(senderPubKey, contractSaltPubKey, network);
11
- }
12
-
13
- /**
14
- * Compile a bitcoin script representing a contract deployment
15
- * @param {Buffer} contractBytecode - The contract bytecode
16
- * @param {Buffer} contractSalt - The contract salt
17
- * @returns {Buffer} - The compiled script
18
- */
19
- public compile(contractBytecode: Buffer, contractSalt: Buffer): Buffer {
20
- const asm = this.getAsm(contractBytecode, contractSalt);
21
- const compiled = script.compile(asm);
22
-
23
- /**
24
- * Verify that the script can be decompiled
25
- */
26
- const decompiled = script.decompile(compiled);
27
- if (!decompiled) {
28
- throw new Error('Failed to decompile script??');
29
- }
30
-
31
- return compiled;
32
- }
33
-
34
- private getAsm(contractBytecode: Buffer, contractSalt: Buffer): (number | Buffer)[] {
35
- const dataChunks = this.splitBufferIntoChunks(contractBytecode);
36
-
37
- return [
38
- this.senderPubKey,
39
- opcodes.OP_CHECKSIGVERIFY,
40
-
41
- this.contractSaltPubKey,
42
- opcodes.OP_CHECKSIGVERIFY,
43
-
44
- opcodes.OP_HASH160,
45
- crypto.hash160(this.senderPubKey),
46
- opcodes.OP_EQUALVERIFY,
47
-
48
- opcodes.OP_HASH256,
49
- crypto.hash256(contractSalt),
50
- opcodes.OP_EQUALVERIFY,
51
-
52
- opcodes.OP_DEPTH,
53
- opcodes.OP_1,
54
- opcodes.OP_NUMEQUAL,
55
- opcodes.OP_IF,
56
-
57
- Generator.MAGIC,
58
- opcodes.OP_1NEGATE,
59
- ...dataChunks,
60
-
61
- opcodes.OP_ELSE,
62
- opcodes.OP_1,
63
- opcodes.OP_ENDIF,
64
- ].flat();
65
- }
66
- }
1
+ import { crypto, Network, networks, opcodes, script } from 'bitcoinjs-lib';
2
+ import { Generator } from '../Generator.js';
3
+
4
+ export class DeploymentGenerator extends Generator {
5
+ constructor(
6
+ senderPubKey: Buffer,
7
+ contractSaltPubKey: Buffer,
8
+ network: Network = networks.bitcoin,
9
+ ) {
10
+ super(senderPubKey, contractSaltPubKey, network);
11
+ }
12
+
13
+ /**
14
+ * Compile a bitcoin script representing a contract deployment
15
+ * @param {Buffer} contractBytecode - The contract bytecode
16
+ * @param {Buffer} contractSalt - The contract salt
17
+ * @returns {Buffer} - The compiled script
18
+ */
19
+ public compile(contractBytecode: Buffer, contractSalt: Buffer): Buffer {
20
+ const asm = this.getAsm(contractBytecode, contractSalt);
21
+ const compiled = script.compile(asm);
22
+
23
+ /**
24
+ * Verify that the script can be decompiled
25
+ */
26
+ const decompiled = script.decompile(compiled);
27
+ if (!decompiled) {
28
+ throw new Error('Failed to decompile script??');
29
+ }
30
+
31
+ return compiled;
32
+ }
33
+
34
+ private getAsm(contractBytecode: Buffer, contractSalt: Buffer): (number | Buffer)[] {
35
+ const dataChunks = this.splitBufferIntoChunks(contractBytecode);
36
+
37
+ return [
38
+ this.senderPubKey,
39
+ opcodes.OP_CHECKSIGVERIFY,
40
+
41
+ this.contractSaltPubKey,
42
+ opcodes.OP_CHECKSIGVERIFY,
43
+
44
+ opcodes.OP_HASH160,
45
+ crypto.hash160(this.senderPubKey),
46
+ opcodes.OP_EQUALVERIFY,
47
+
48
+ opcodes.OP_HASH256,
49
+ crypto.hash256(contractSalt),
50
+ opcodes.OP_EQUALVERIFY,
51
+
52
+ opcodes.OP_DEPTH,
53
+ opcodes.OP_1,
54
+ opcodes.OP_NUMEQUAL,
55
+ opcodes.OP_IF,
56
+
57
+ Generator.MAGIC,
58
+ opcodes.OP_1NEGATE,
59
+ ...dataChunks,
60
+
61
+ opcodes.OP_ELSE,
62
+ opcodes.OP_1,
63
+ opcodes.OP_ENDIF,
64
+ ].flat();
65
+ }
66
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as opnet from './opnet.js';
2
-
3
- export { opnet };
4
- export * from './opnet.js';
1
+ import * as opnet from './opnet.js';
2
+
3
+ export { opnet };
4
+ export * from './opnet.js';