@btc-vision/transaction 1.0.97 → 1.0.99

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 (477) hide show
  1. package/.babelrc +4 -7
  2. package/.prettierrc.json +11 -11
  3. package/CONTRIBUTING.md +71 -71
  4. package/LICENSE.md +62 -62
  5. package/README.md +76 -76
  6. package/browser/_version.d.ts +1 -1
  7. package/browser/bytecode/Compressor.d.ts +0 -1
  8. package/browser/crypto/crypto-browser.d.ts +1 -30
  9. package/browser/crypto/crypto.d.ts +0 -1
  10. package/browser/generators/AddressGenerator.d.ts +0 -1
  11. package/browser/generators/Generator.d.ts +0 -1
  12. package/browser/generators/builders/CalldataGenerator.d.ts +0 -1
  13. package/browser/generators/builders/DeploymentGenerator.d.ts +0 -1
  14. package/browser/generators/builders/MultiSignGenerator.d.ts +0 -1
  15. package/browser/index.js +1 -1
  16. package/browser/keypair/EcKeyPair.d.ts +0 -1
  17. package/browser/keypair/Wallet.d.ts +0 -1
  18. package/browser/signer/TweakedSigner.d.ts +0 -1
  19. package/browser/transaction/browser/BrowserSignerBase.d.ts +0 -1
  20. package/browser/transaction/browser/extensions/UnisatSigner.d.ts +0 -1
  21. package/browser/transaction/builders/DeploymentTransaction.d.ts +0 -1
  22. package/browser/transaction/builders/InteractionTransaction.d.ts +0 -1
  23. package/browser/transaction/builders/MultiSignTransaction.d.ts +0 -1
  24. package/browser/transaction/builders/SharedInteractionTransaction.d.ts +0 -1
  25. package/browser/transaction/builders/TransactionBuilder.d.ts +0 -1
  26. package/browser/transaction/builders/UnwrapSegwitTransaction.d.ts +0 -1
  27. package/browser/transaction/builders/UnwrapTransaction.d.ts +0 -1
  28. package/browser/transaction/builders/WrapTransaction.d.ts +0 -1
  29. package/browser/transaction/interfaces/ITransactionParameters.d.ts +0 -1
  30. package/browser/transaction/interfaces/Tap.d.ts +0 -1
  31. package/browser/transaction/shared/P2TR_MS.d.ts +0 -1
  32. package/browser/transaction/shared/TweakedTransaction.d.ts +0 -1
  33. package/browser/utils/BitcoinUtils.d.ts +0 -1
  34. package/browser/verification/TapscriptVerificator.d.ts +0 -1
  35. package/browser/wbtc/WrappedGenerationParameters.d.ts +0 -1
  36. package/build/bytecode/Compressor.d.ts +0 -1
  37. package/build/bytecode/Compressor.js +4 -4
  38. package/build/crypto/crypto.d.ts +0 -1
  39. package/build/generators/AddressGenerator.d.ts +0 -1
  40. package/build/generators/Generator.d.ts +0 -1
  41. package/build/generators/Generator.js +3 -5
  42. package/build/generators/builders/CalldataGenerator.d.ts +0 -1
  43. package/build/generators/builders/DeploymentGenerator.d.ts +0 -1
  44. package/build/generators/builders/{MultisignGenerator.d.ts → MultiSignGenerator.d.ts} +0 -1
  45. package/build/generators/builders/{MultisignGenerator.js → MultiSignGenerator.js} +1 -1
  46. package/build/keypair/EcKeyPair.d.ts +0 -1
  47. package/build/keypair/EcKeyPair.js +2 -2
  48. package/build/keypair/Wallet.d.ts +0 -1
  49. package/build/keypair/Wallet.js +0 -5
  50. package/build/metadata/ContractBaseMetadata.js +0 -1
  51. package/build/metadata/contracts/wBTC.js +3 -5
  52. package/build/metadata/tokens.js +27 -25
  53. package/build/signer/TweakedSigner.d.ts +0 -1
  54. package/build/transaction/browser/BrowserSignerBase.d.ts +0 -1
  55. package/build/transaction/browser/extensions/UnisatSigner.d.ts +0 -1
  56. package/build/transaction/browser/extensions/UnisatSigner.js +1 -6
  57. package/build/transaction/builders/DeploymentTransaction.d.ts +0 -1
  58. package/build/transaction/builders/DeploymentTransaction.js +25 -33
  59. package/build/transaction/builders/FundingTransaction.js +1 -3
  60. package/build/transaction/builders/InteractionTransaction.d.ts +0 -1
  61. package/build/transaction/builders/InteractionTransaction.js +2 -5
  62. package/build/transaction/builders/MultiSignTransaction.d.ts +0 -1
  63. package/build/transaction/builders/MultiSignTransaction.js +66 -73
  64. package/build/transaction/builders/SharedInteractionTransaction.d.ts +0 -1
  65. package/build/transaction/builders/SharedInteractionTransaction.js +20 -25
  66. package/build/transaction/builders/TransactionBuilder.d.ts +0 -1
  67. package/build/transaction/builders/TransactionBuilder.js +12 -21
  68. package/build/transaction/builders/UnwrapSegwitTransaction.d.ts +0 -1
  69. package/build/transaction/builders/UnwrapSegwitTransaction.js +4 -10
  70. package/build/transaction/builders/UnwrapTransaction.d.ts +0 -1
  71. package/build/transaction/builders/UnwrapTransaction.js +5 -11
  72. package/build/transaction/builders/WrapTransaction.d.ts +0 -1
  73. package/build/transaction/builders/WrapTransaction.js +5 -12
  74. package/build/transaction/interfaces/ITransactionParameters.d.ts +0 -1
  75. package/build/transaction/interfaces/Tap.d.ts +0 -1
  76. package/build/transaction/processor/PsbtTransaction.js +3 -4
  77. package/build/transaction/shared/P2TR_MS.d.ts +0 -1
  78. package/build/transaction/shared/TweakedTransaction.d.ts +0 -1
  79. package/build/transaction/shared/TweakedTransaction.js +11 -16
  80. package/build/utils/BitcoinUtils.d.ts +0 -1
  81. package/build/utxo/OPNetLimitedProvider.js +2 -3
  82. package/build/verification/TapscriptVerificator.d.ts +0 -1
  83. package/build/verification/TapscriptVerificator.js +1 -1
  84. package/build/wbtc/UnwrapGeneration.js +0 -2
  85. package/build/wbtc/WrappedGenerationParameters.d.ts +0 -1
  86. package/build/wbtc/WrappedGenerationParameters.js +0 -6
  87. package/cjs/package.json +3 -0
  88. package/docs/.nojekyll +1 -0
  89. package/docs/assets/highlight.css +43 -0
  90. package/docs/assets/icons.js +15 -0
  91. package/docs/assets/icons.svg +1 -0
  92. package/docs/assets/main.js +59 -0
  93. package/docs/assets/material-style.css +247 -0
  94. package/docs/assets/navigation.js +1 -0
  95. package/docs/assets/search.js +1 -0
  96. package/docs/assets/style.css +1412 -0
  97. package/docs/classes/AddressGenerator.html +177 -0
  98. package/docs/classes/AddressVerificator.html +177 -0
  99. package/docs/classes/BitcoinUtils.html +196 -0
  100. package/docs/classes/CalldataGenerator.html +213 -0
  101. package/docs/classes/Compressor.html +185 -0
  102. package/docs/classes/ContractBaseMetadata.html +182 -0
  103. package/docs/classes/CustomKeypair.html +189 -0
  104. package/docs/classes/DeploymentGenerator.html +201 -0
  105. package/docs/classes/DeploymentTransaction.html +465 -0
  106. package/docs/classes/EcKeyPair.html +280 -0
  107. package/docs/classes/FundingTransaction.html +425 -0
  108. package/docs/classes/Generator.html +199 -0
  109. package/docs/classes/InteractionTransaction.html +467 -0
  110. package/docs/classes/MultiSignGenerator.html +178 -0
  111. package/docs/classes/MultiSignTransaction.html +490 -0
  112. package/docs/classes/OPNetLimitedProvider.html +225 -0
  113. package/docs/classes/OPNetTokenAddressManager.html +182 -0
  114. package/docs/classes/P2TR_MS.html +186 -0
  115. package/docs/classes/PsbtTransaction.html +320 -0
  116. package/docs/classes/SharedInteractionTransaction.html +477 -0
  117. package/docs/classes/TapscriptVerificator.html +180 -0
  118. package/docs/classes/TransactionBuilder.html +423 -0
  119. package/docs/classes/TransactionFactory.html +230 -0
  120. package/docs/classes/TweakedSigner.html +181 -0
  121. package/docs/classes/TweakedTransaction.html +301 -0
  122. package/docs/classes/UnisatSigner.html +199 -0
  123. package/docs/classes/UnwrapGeneration.html +177 -0
  124. package/docs/classes/UnwrapTransaction.html +518 -0
  125. package/docs/classes/Wallet.html +204 -0
  126. package/docs/classes/WrapTransaction.html +509 -0
  127. package/docs/classes/WrappedGeneration.html +187 -0
  128. package/docs/classes/wBTC.html +190 -0
  129. package/docs/enums/ChainId.html +176 -0
  130. package/docs/enums/Consensus.html +204 -0
  131. package/docs/enums/Features.html +175 -0
  132. package/docs/enums/MessageType.html +176 -0
  133. package/docs/enums/OPNetNetwork.html +177 -0
  134. package/docs/enums/PSBTTypes.html +175 -0
  135. package/docs/enums/TransactionSequence.html +177 -0
  136. package/docs/enums/TransactionType.html +181 -0
  137. package/docs/enums/UnisatChainType.html +181 -0
  138. package/docs/enums/UnisatNetwork.html +177 -0
  139. package/docs/hierarchy.html +174 -0
  140. package/docs/index.html +215 -0
  141. package/docs/interfaces/Balance.html +177 -0
  142. package/docs/interfaces/BitcoinTransferResponse.html +178 -0
  143. package/docs/interfaces/BroadcastResponse.html +181 -0
  144. package/docs/interfaces/BroadcastTransactionOptions.html +176 -0
  145. package/docs/interfaces/BroadcastedTransaction.html +184 -0
  146. package/docs/interfaces/ConsensusConfig.html +182 -0
  147. package/docs/interfaces/ContractAddressVerificationParams.html +179 -0
  148. package/docs/interfaces/DeploymentResult.html +178 -0
  149. package/docs/interfaces/FetchUTXOParams.html +178 -0
  150. package/docs/interfaces/FetchUTXOParamsMultiAddress.html +178 -0
  151. package/docs/interfaces/FundingTransactionResponse.html +178 -0
  152. package/docs/interfaces/GenerationConstraints.html +182 -0
  153. package/docs/interfaces/IDeploymentParameters.html +186 -0
  154. package/docs/interfaces/IFundingTransactionParameters.html +186 -0
  155. package/docs/interfaces/IInteractionParameters.html +187 -0
  156. package/docs/interfaces/ITransactionParameters.html +184 -0
  157. package/docs/interfaces/ITweakedTransactionData.html +178 -0
  158. package/docs/interfaces/IUnwrapParameters.html +189 -0
  159. package/docs/interfaces/IWBTCUTXODocument.html +180 -0
  160. package/docs/interfaces/IWallet.html +181 -0
  161. package/docs/interfaces/IWrapParameters.html +190 -0
  162. package/docs/interfaces/MultiSignFromBase64Params.html +188 -0
  163. package/docs/interfaces/MultiSignParameters.html +188 -0
  164. package/docs/interfaces/OPNetTokenMetadata.html +179 -0
  165. package/docs/interfaces/PsbtInputExtended.html +194 -0
  166. package/docs/interfaces/PsbtOutputExtendedAddress.html +183 -0
  167. package/docs/interfaces/PsbtOutputExtendedScript.html +183 -0
  168. package/docs/interfaces/PsbtSignatureOptions.html +176 -0
  169. package/docs/interfaces/PsbtTransactionData.html +179 -0
  170. package/docs/interfaces/RawUTXOResponse.html +178 -0
  171. package/docs/interfaces/SharedInteractionParameters.html +187 -0
  172. package/docs/interfaces/TapLeafScript.html +177 -0
  173. package/docs/interfaces/ToSignInputAddress.html +178 -0
  174. package/docs/interfaces/ToSignInputPublicKey.html +178 -0
  175. package/docs/interfaces/TweakSettings.html +179 -0
  176. package/docs/interfaces/UTXO.html +178 -0
  177. package/docs/interfaces/Unisat.html +190 -0
  178. package/docs/interfaces/UnisatChainInfo.html +177 -0
  179. package/docs/interfaces/UnwrapResult.html +181 -0
  180. package/docs/interfaces/UnwrappedGenerationParameters.html +178 -0
  181. package/docs/interfaces/UpdateInput.html +175 -0
  182. package/docs/interfaces/VaultUTXOs.html +178 -0
  183. package/docs/interfaces/Web3Provider.html +180 -0
  184. package/docs/interfaces/WrapResult.html +179 -0
  185. package/docs/interfaces/WrappedGenerationParameters.html +184 -0
  186. package/docs/modules.html +289 -0
  187. package/docs/types/FromBase64Params.html +174 -0
  188. package/docs/types/IDeploymentParametersWithoutSigner.html +174 -0
  189. package/docs/types/IUnwrapParametersWithoutSigner.html +174 -0
  190. package/docs/types/IWrapParametersWithoutSigner.html +174 -0
  191. package/docs/types/InteractionParametersWithoutSigner.html +174 -0
  192. package/docs/types/PsbtOutputExtended.html +174 -0
  193. package/docs/types/ToSignInput.html +174 -0
  194. package/docs/variables/FACTORY_ADDRESS_FRACTAL.html +174 -0
  195. package/docs/variables/FACTORY_ADDRESS_REGTEST.html +174 -0
  196. package/docs/variables/FACTORY_ADDRESS_TESTNET.html +174 -0
  197. package/docs/variables/MOTO_ADDRESS_FRACTAL.html +174 -0
  198. package/docs/variables/MOTO_ADDRESS_REGTEST.html +174 -0
  199. package/docs/variables/MOTO_ADDRESS_TESTNET.html +174 -0
  200. package/docs/variables/OPNetConsensusConfig.html +174 -0
  201. package/docs/variables/OPNetMetadata.html +174 -0
  202. package/docs/variables/POOL_ADDRESS_FRACTAL.html +174 -0
  203. package/docs/variables/POOL_ADDRESS_REGTEST.html +174 -0
  204. package/docs/variables/POOL_ADDRESS_TESTNET.html +174 -0
  205. package/docs/variables/ROUTER_ADDRESS_FRACTAL.html +174 -0
  206. package/docs/variables/ROUTER_ADDRESS_REGTEST.html +174 -0
  207. package/docs/variables/ROUTER_ADDRESS_TESTNET.html +174 -0
  208. package/docs/variables/RoswellConsensus.html +174 -0
  209. package/docs/variables/WBTC_ADDRESS_FRACTAL.html +174 -0
  210. package/docs/variables/WBTC_ADDRESS_REGTEST.html +174 -0
  211. package/docs/variables/WBTC_ADDRESS_TESTNET.html +174 -0
  212. package/docs/variables/currentConsensus.html +174 -0
  213. package/docs/variables/currentConsensusConfig.html +174 -0
  214. package/docs/variables/version.html +174 -0
  215. package/gulpfile.js +49 -133
  216. package/package.json +112 -113
  217. package/src/bytecode/Compressor.ts +27 -27
  218. package/src/consensus/metadata/RoswellConsensus.ts +26 -26
  219. package/src/crypto/crypto.ts +1 -1
  220. package/src/generators/Generator.ts +75 -75
  221. package/src/generators/builders/MultiSignGenerator.ts +73 -73
  222. package/src/metadata/contracts/wBTC.ts +60 -60
  223. package/src/metadata/tokens.ts +135 -135
  224. package/src/network/ChainId.ts +6 -6
  225. package/src/opnet.ts +82 -82
  226. package/src/signer/TweakedSigner.ts +56 -56
  227. package/src/transaction/builders/DeploymentTransaction.ts +356 -356
  228. package/src/transaction/builders/MultiSignTransaction.ts +659 -659
  229. package/src/transaction/builders/UnwrapSegwitTransaction.ts +365 -365
  230. package/src/transaction/builders/UnwrapTransaction.ts +507 -507
  231. package/src/transaction/enums/TransactionType.ts +9 -9
  232. package/src/transaction/processor/PsbtTransaction.ts +173 -173
  233. package/src/transaction/shared/P2TR_MS.ts +42 -42
  234. package/src/transaction/shared/TweakedTransaction.ts +539 -539
  235. package/src/utils/BitcoinUtils.ts +96 -96
  236. package/tsconfig.base.json +27 -43
  237. package/tsconfig.json +15 -8
  238. package/tsconfig.webpack.json +22 -22
  239. package/EPOCH.md +0 -250
  240. package/VAULT_TARGET_CONSOLIDATION.md +0 -111
  241. package/browser/network/NetworkInformation.d.ts +0 -6
  242. package/browser/transaction/browser/BrowserSigner.d.ts +0 -9
  243. package/browser/transaction/builders/TapUnwarpTransaction.d.ts +0 -40
  244. package/browser/transaction/builders/UnwarpTransaction.d.ts +0 -34
  245. package/browser/utxo/UTXOManager.d.ts +0 -7
  246. package/build/Utils.d.ts +0 -0
  247. package/build/Utils.js +0 -1
  248. package/build/consensus/metadata/RoswsellConsensus.d.ts +0 -2
  249. package/build/consensus/metadata/RoswsellConsensus.js +0 -4
  250. package/build/contracts/ContractMetadataManager.d.ts +0 -0
  251. package/build/contracts/ContractMetadataManager.js +0 -1
  252. package/build/generators/OPNetAddressGenerator.d.ts +0 -0
  253. package/build/generators/OPNetAddressGenerator.js +0 -1
  254. package/build/generators/builders/DeploymentGeneratorV2.d.ts +0 -13
  255. package/build/generators/builders/DeploymentGeneratorV2.js +0 -57
  256. package/build/generators/builders/UnwrapGenerator.d.ts +0 -8
  257. package/build/generators/builders/UnwrapGenerator.js +0 -79
  258. package/build/keypair/interfaces/GeneratedWallet.d.ts +0 -5
  259. package/build/keypair/interfaces/GeneratedWallet.js +0 -1
  260. package/build/metadata/CommonContracts.d.ts +0 -6
  261. package/build/metadata/CommonContracts.js +0 -5
  262. package/build/metadata/ContractMetadataManager.d.ts +0 -1
  263. package/build/metadata/ContractMetadataManager.js +0 -9
  264. package/build/metadata/contracts/ContractBase.d.ts +0 -9
  265. package/build/metadata/contracts/ContractBase.js +0 -13
  266. package/build/metadata/contracts/ContractBaseMetadata.d.ts +0 -9
  267. package/build/metadata/contracts/ContractBaseMetadata.js +0 -13
  268. package/build/metadata/contracts/ContractMetadataManager.d.ts +0 -0
  269. package/build/metadata/contracts/ContractMetadataManager.js +0 -1
  270. package/build/network/NetworkConverter.d.ts +0 -0
  271. package/build/network/NetworkConverter.js +0 -14
  272. package/build/network/NetworkInformation.d.ts +0 -6
  273. package/build/network/NetworkInformation.js +0 -1
  274. package/build/scripts/Regtest.d.ts +0 -2
  275. package/build/scripts/Regtest.js +0 -15
  276. package/build/scripts/test.d.ts +0 -1
  277. package/build/scripts/test.js +0 -74
  278. package/build/signer/Regtest.d.ts +0 -2
  279. package/build/signer/Regtest.js +0 -15
  280. package/build/tests/Regtest.d.ts +0 -3
  281. package/build/tests/Regtest.js +0 -29
  282. package/build/tests/adaptPSBT.d.ts +0 -1
  283. package/build/tests/adaptPSBT.js +0 -44
  284. package/build/tests/btc/send.d.ts +0 -1
  285. package/build/tests/btc/send.js +0 -35
  286. package/build/tests/btc/transfer.d.ts +0 -1
  287. package/build/tests/btc/transfer.js +0 -35
  288. package/build/tests/createPairReg.d.ts +0 -1
  289. package/build/tests/createPairReg.js +0 -73
  290. package/build/tests/deploy/deployMoto.d.ts +0 -4
  291. package/build/tests/deploy/deployMoto.js +0 -89
  292. package/build/tests/deploy/deployPool.d.ts +0 -1
  293. package/build/tests/deploy/deployPool.js +0 -5
  294. package/build/tests/deploy/deployStep1.d.ts +0 -1
  295. package/build/tests/deploy/deployStep1.js +0 -5
  296. package/build/tests/deploy/deployStep2.d.ts +0 -1
  297. package/build/tests/deploy/deployStep2.js +0 -5
  298. package/build/tests/deploy/deployStep3.d.ts +0 -1
  299. package/build/tests/deploy/deployStep3.js +0 -5
  300. package/build/tests/deploy.d.ts +0 -1
  301. package/build/tests/deploy.js +0 -41
  302. package/build/tests/deployMotoRegStep1.d.ts +0 -1
  303. package/build/tests/deployMotoRegStep1.js +0 -85
  304. package/build/tests/deployReg.d.ts +0 -1
  305. package/build/tests/deployReg.js +0 -85
  306. package/build/tests/factory/createPairReg.d.ts +0 -1
  307. package/build/tests/factory/createPairReg.js +0 -13
  308. package/build/tests/gen.d.ts +0 -1
  309. package/build/tests/gen.js +0 -19
  310. package/build/tests/interaction.d.ts +0 -5
  311. package/build/tests/interaction.js +0 -62
  312. package/build/tests/massWrapReg.d.ts +0 -1
  313. package/build/tests/massWrapReg.js +0 -105
  314. package/build/tests/mineReg.d.ts +0 -1
  315. package/build/tests/mineReg.js +0 -19
  316. package/build/tests/moto/airdropToken.d.ts +0 -1
  317. package/build/tests/moto/airdropToken.js +0 -21
  318. package/build/tests/moto/airdropTokens.d.ts +0 -1
  319. package/build/tests/moto/airdropTokens.js +0 -60
  320. package/build/tests/moto/allowance.d.ts +0 -1
  321. package/build/tests/moto/allowance.js +0 -6
  322. package/build/tests/moto/approve.d.ts +0 -1
  323. package/build/tests/moto/approve.js +0 -10
  324. package/build/tests/moto/approveWBTC.d.ts +0 -1
  325. package/build/tests/moto/approveWBTC.js +0 -12
  326. package/build/tests/moto/balanceOf.d.ts +0 -1
  327. package/build/tests/moto/balanceOf.js +0 -12
  328. package/build/tests/moto/transfer.d.ts +0 -1
  329. package/build/tests/moto/transfer.js +0 -16
  330. package/build/tests/motoswap/airdropToken.d.ts +0 -11
  331. package/build/tests/motoswap/airdropToken.js +0 -36
  332. package/build/tests/motoswap/deployMoto.d.ts +0 -4
  333. package/build/tests/motoswap/deployMoto.js +0 -89
  334. package/build/tests/motoswap/deployMotoRegStep1.d.ts +0 -1
  335. package/build/tests/motoswap/deployMotoRegStep1.js +0 -91
  336. package/build/tests/motoswap/deployMotoRegStep2.d.ts +0 -1
  337. package/build/tests/motoswap/deployMotoRegStep2.js +0 -91
  338. package/build/tests/motoswap/deployPool.d.ts +0 -1
  339. package/build/tests/motoswap/deployPool.js +0 -5
  340. package/build/tests/motoswap/deployStep1.d.ts +0 -1
  341. package/build/tests/motoswap/deployStep1.js +0 -5
  342. package/build/tests/motoswap/deployStep2.d.ts +0 -1
  343. package/build/tests/motoswap/deployStep2.js +0 -5
  344. package/build/tests/motoswap/deployStep3.d.ts +0 -1
  345. package/build/tests/motoswap/deployStep3.js +0 -5
  346. package/build/tests/motoswap/interaction.d.ts +0 -3
  347. package/build/tests/motoswap/interaction.js +0 -63
  348. package/build/tests/motoswap/routerAddLiquidity.d.ts +0 -11
  349. package/build/tests/motoswap/routerAddLiquidity.js +0 -35
  350. package/build/tests/motoswap-router/addLiquidity.d.ts +0 -11
  351. package/build/tests/motoswap-router/addLiquidity.js +0 -36
  352. package/build/tests/motoswap-router/deployMoto.d.ts +0 -4
  353. package/build/tests/motoswap-router/deployMoto.js +0 -89
  354. package/build/tests/motoswap-router/deployPool.d.ts +0 -1
  355. package/build/tests/motoswap-router/deployPool.js +0 -5
  356. package/build/tests/motoswap-router/deployStep1.d.ts +0 -1
  357. package/build/tests/motoswap-router/deployStep1.js +0 -5
  358. package/build/tests/motoswap-router/deployStep2.d.ts +0 -1
  359. package/build/tests/motoswap-router/deployStep2.js +0 -5
  360. package/build/tests/motoswap-router/deployStep3.d.ts +0 -1
  361. package/build/tests/motoswap-router/deployStep3.js +0 -5
  362. package/build/tests/motoswap-router/getAmountsOut.d.ts +0 -5
  363. package/build/tests/motoswap-router/getAmountsOut.js +0 -34
  364. package/build/tests/motoswap-router/routerAddLiquidity.d.ts +0 -11
  365. package/build/tests/motoswap-router/routerAddLiquidity.js +0 -35
  366. package/build/tests/motoswap-router/swap.d.ts +0 -8
  367. package/build/tests/motoswap-router/swap.js +0 -24
  368. package/build/tests/multisign.d.ts +0 -1
  369. package/build/tests/multisign.js +0 -47
  370. package/build/tests/multisign2.d.ts +0 -1
  371. package/build/tests/multisign2.js +0 -27
  372. package/build/tests/pool/DecodePoolAddress.d.ts +0 -6
  373. package/build/tests/pool/DecodePoolAddress.js +0 -12
  374. package/build/tests/pool/decodeReserves.d.ts +0 -5
  375. package/build/tests/pool/decodeReserves.js +0 -13
  376. package/build/tests/pool/reserves.d.ts +0 -1
  377. package/build/tests/pool/reserves.js +0 -18
  378. package/build/tests/shared/Utils.d.ts +0 -2
  379. package/build/tests/shared/Utils.js +0 -14
  380. package/build/tests/shared/interaction.d.ts +0 -7
  381. package/build/tests/shared/interaction.js +0 -85
  382. package/build/tests/shared/tokens.d.ts +0 -6
  383. package/build/tests/shared/tokens.js +0 -5
  384. package/build/tests/stakeReg.d.ts +0 -1
  385. package/build/tests/stakeReg.js +0 -73
  386. package/build/tests/stakedReg.d.ts +0 -1
  387. package/build/tests/stakedReg.js +0 -28
  388. package/build/tests/test.d.ts +0 -1
  389. package/build/tests/test.js +0 -51
  390. package/build/tests/test2.d.ts +0 -1
  391. package/build/tests/test2.js +0 -73
  392. package/build/tests/testReg.d.ts +0 -1
  393. package/build/tests/testReg.js +0 -91
  394. package/build/tests/tokens.d.ts +0 -6
  395. package/build/tests/tokens.js +0 -5
  396. package/build/tests/totalRewardReg.d.ts +0 -1
  397. package/build/tests/totalRewardReg.js +0 -28
  398. package/build/tests/transfer.d.ts +0 -1
  399. package/build/tests/transfer.js +0 -74
  400. package/build/tests/transferReg.d.ts +0 -1
  401. package/build/tests/transferReg.js +0 -74
  402. package/build/tests/unStakeReg.d.ts +0 -1
  403. package/build/tests/unStakeReg.js +0 -72
  404. package/build/tests/unwrapReg.d.ts +0 -1
  405. package/build/tests/unwrapReg.js +0 -61
  406. package/build/tests/unwrapReg2.d.ts +0 -1
  407. package/build/tests/unwrapReg2.js +0 -56
  408. package/build/tests/unwrapRegSegwit.d.ts +0 -1
  409. package/build/tests/unwrapRegSegwit.js +0 -83
  410. package/build/tests/wbtc/approve.d.ts +0 -1
  411. package/build/tests/wbtc/approve.js +0 -6
  412. package/build/tests/wbtc/approveWBTC.d.ts +0 -1
  413. package/build/tests/wbtc/approveWBTC.js +0 -12
  414. package/build/tests/wbtc/massWrapReg.d.ts +0 -1
  415. package/build/tests/wbtc/massWrapReg.js +0 -105
  416. package/build/tests/wbtc/transfer.d.ts +0 -1
  417. package/build/tests/wbtc/transfer.js +0 -16
  418. package/build/tests/wbtc/transferReg.d.ts +0 -1
  419. package/build/tests/wbtc/transferReg.js +0 -16
  420. package/build/tests/wbtc/unStakeReg.d.ts +0 -1
  421. package/build/tests/wbtc/unStakeReg.js +0 -72
  422. package/build/tests/wbtc/unwrapReg.d.ts +0 -1
  423. package/build/tests/wbtc/unwrapReg.js +0 -60
  424. package/build/tests/wbtc/unwrapRegSegwit.d.ts +0 -1
  425. package/build/tests/wbtc/unwrapRegSegwit.js +0 -83
  426. package/build/tests/wbtc/withdrawalRequestReg.d.ts +0 -1
  427. package/build/tests/wbtc/withdrawalRequestReg.js +0 -71
  428. package/build/tests/wbtc/wrapReg.d.ts +0 -1
  429. package/build/tests/wbtc/wrapReg.js +0 -65
  430. package/build/tests/wbtc/wrapTest.d.ts +0 -1
  431. package/build/tests/wbtc/wrapTest.js +0 -66
  432. package/build/tests/withdrawalRequestReg.d.ts +0 -1
  433. package/build/tests/withdrawalRequestReg.js +0 -71
  434. package/build/tests/wrap.d.ts +0 -1
  435. package/build/tests/wrap.js +0 -65
  436. package/build/tests/wrapReg.d.ts +0 -1
  437. package/build/tests/wrapReg.js +0 -68
  438. package/build/tests/wrapTest.d.ts +0 -1
  439. package/build/tests/wrapTest.js +0 -66
  440. package/build/tests/wrapTestg.d.ts +0 -1
  441. package/build/tests/wrapTestg.js +0 -66
  442. package/build/tests/writers/allowance.d.ts +0 -3
  443. package/build/tests/writers/allowance.js +0 -10
  444. package/build/tests/writers/approve.d.ts +0 -4
  445. package/build/tests/writers/approve.js +0 -11
  446. package/build/transaction/TransactionBuilder.d.ts +0 -60
  447. package/build/transaction/TransactionBuilder.js +0 -244
  448. package/build/transaction/browser/BrowserSigner.d.ts +0 -11
  449. package/build/transaction/browser/BrowserSigner.js +0 -10
  450. package/build/transaction/browser/extensions/Unisat.d.ts +0 -54
  451. package/build/transaction/browser/extensions/Unisat.js +0 -11
  452. package/build/transaction/builders/DeploymentTransactionV2.d.ts +0 -36
  453. package/build/transaction/builders/DeploymentTransactionV2.js +0 -192
  454. package/build/transaction/builders/GenericTransaction.d.ts +0 -11
  455. package/build/transaction/builders/GenericTransaction.js +0 -23
  456. package/build/transaction/builders/TapUnwarpTransaction.d.ts +0 -37
  457. package/build/transaction/builders/TapUnwarpTransaction.js +0 -201
  458. package/build/transaction/builders/UnwarpSegwitTransaction.d.ts +0 -34
  459. package/build/transaction/builders/UnwarpSegwitTransaction.js +0 -184
  460. package/build/transaction/builders/UnwarpTransaction.d.ts +0 -35
  461. package/build/transaction/builders/UnwarpTransaction.js +0 -199
  462. package/build/transaction/interfaces/ITransactions.d.ts +0 -32
  463. package/build/transaction/interfaces/ITransactions.js +0 -1
  464. package/build/utxo/IUTXO.d.ts +0 -0
  465. package/build/utxo/IUTXO.js +0 -1
  466. package/build/utxo/OPNetUtils.d.ts +0 -7
  467. package/build/utxo/OPNetUtils.js +0 -47
  468. package/build/utxo/UTXOManager.d.ts +0 -7
  469. package/build/utxo/UTXOManager.js +0 -47
  470. package/build/wbtc/BroadcastResponse.d.ts +0 -0
  471. package/build/wbtc/BroadcastResponse.js +0 -1
  472. package/examples/Deploy.md +0 -188
  473. package/examples/Unwrap.md +0 -165
  474. package/examples/Wrap.md +0 -194
  475. package/tsconfig.cjs.json +0 -13
  476. /package/build/generators/{features.d.ts → Features.d.ts} +0 -0
  477. /package/build/generators/{features.js → Features.js} +0 -0
@@ -1,356 +1,356 @@
1
- import { TransactionType } from '../enums/TransactionType.js';
2
- import { IDeploymentParameters } from '../interfaces/ITransactionParameters.js';
3
- import { crypto as bitCrypto, Payment, Psbt, Signer } from 'bitcoinjs-lib';
4
- import { TransactionBuilder } from './TransactionBuilder.js';
5
- import { Taptree } from 'bitcoinjs-lib/src/types.js';
6
- import { TapLeafScript } from '../interfaces/Tap.js';
7
- import { DeploymentGenerator } from '../../generators/builders/DeploymentGenerator.js';
8
- import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
9
- import { EcKeyPair } from '../../keypair/EcKeyPair.js';
10
- import { BitcoinUtils } from '../../utils/BitcoinUtils.js';
11
- import { PsbtInput } from 'bip174/src/lib/interfaces.js';
12
- import { Compressor } from '../../bytecode/Compressor.js';
13
- import { AddressGenerator } from '../../generators/AddressGenerator.js';
14
- import { Address } from '@btc-vision/bsi-binary';
15
-
16
- export class DeploymentTransaction extends TransactionBuilder<TransactionType.DEPLOYMENT> {
17
- public type: TransactionType.DEPLOYMENT = TransactionType.DEPLOYMENT;
18
- public static readonly MAXIMUM_CONTRACT_SIZE = 128*1024;
19
-
20
- /**
21
- * The contract address
22
- * @protected
23
- */
24
- protected readonly _contractAddress: Address;
25
- /**
26
- * The tap leaf script
27
- * @private
28
- */
29
- protected tapLeafScript: TapLeafScript | null = null;
30
- /**
31
- * The target script redeem
32
- * @private
33
- */
34
- private targetScriptRedeem: Payment | null = null;
35
- /**
36
- * The left over funds script redeem
37
- * @private
38
- */
39
- private leftOverFundsScriptRedeem: Payment | null = null;
40
- /**
41
- * The compiled target script
42
- * @private
43
- */
44
- private readonly compiledTargetScript: Buffer;
45
- /**
46
- * The script tree
47
- * @private
48
- */
49
- private readonly scriptTree: Taptree;
50
- /**
51
- * The deployment bitcoin generator
52
- * @private
53
- */
54
- private deploymentGenerator: DeploymentGenerator;
55
-
56
- /**
57
- * The contract seed
58
- * @private
59
- */
60
- private readonly contractSeed: Buffer;
61
-
62
- /**
63
- * The contract bytecode
64
- * @private
65
- */
66
- private readonly bytecode: Buffer;
67
-
68
- /**
69
- * The contract signer
70
- * @private
71
- */
72
- private readonly contractSigner: Signer;
73
-
74
- /**
75
- * The contract salt random bytes
76
- * @private
77
- */
78
- private readonly randomBytes: Buffer;
79
-
80
- public constructor(parameters: IDeploymentParameters) {
81
- super(parameters);
82
-
83
- this.bytecode = Compressor.compress(parameters.bytecode);
84
- if (!this.bytecode) throw new Error('Bytecode is required');
85
-
86
- if (this.bytecode.length > DeploymentTransaction.MAXIMUM_CONTRACT_SIZE) throw new Error('Contract size overflow.');
87
-
88
- this.randomBytes = parameters.randomBytes || BitcoinUtils.rndBytes();
89
-
90
- this.contractSeed = this.getContractSeed();
91
- this.contractSigner = EcKeyPair.fromSeedKeyPair(this.contractSeed, this.network);
92
-
93
- this.deploymentGenerator = new DeploymentGenerator(
94
- this.internalPubKeyToXOnly(),
95
- this.contractSignerXOnlyPubKey(),
96
- this.network,
97
- );
98
-
99
- this.compiledTargetScript = this.deploymentGenerator.compile(
100
- this.bytecode,
101
- this.randomBytes,
102
- );
103
-
104
- this.scriptTree = this.getScriptTree();
105
-
106
- this.internalInit();
107
-
108
- this._contractAddress = AddressGenerator.generatePKSH(this.contractSeed, this.network);
109
- }
110
-
111
- /**
112
- * @description Get the contract address (PKSH)
113
- */
114
- public get contractAddress(): Address {
115
- return this._contractAddress;
116
- }
117
-
118
- /**
119
- * @description Get the P2TR address
120
- */
121
- public get p2trAddress(): Address {
122
- return this.to || this.getScriptAddress();
123
- }
124
-
125
- /**
126
- * Get the random bytes used for the interaction
127
- * @returns {Buffer} The random bytes
128
- */
129
- public getRndBytes(): Buffer {
130
- return this.randomBytes;
131
- }
132
-
133
- /**
134
- * Get the contract signer public key
135
- * @protected
136
- */
137
- protected contractSignerXOnlyPubKey(): Buffer {
138
- return toXOnly(this.contractSigner.publicKey);
139
- }
140
-
141
- /**
142
- * Build the transaction
143
- * @protected
144
- */
145
- protected override async buildTransaction(): Promise<void> {
146
- if (!this.to) {
147
- this.to = this.getScriptAddress();
148
- }
149
-
150
- const selectedRedeem = !!this.contractSigner
151
- ? this.targetScriptRedeem
152
- : this.leftOverFundsScriptRedeem;
153
-
154
- if (!selectedRedeem) {
155
- throw new Error('Left over funds script redeem is required');
156
- }
157
-
158
- if (!selectedRedeem.redeemVersion) {
159
- throw new Error('Left over funds script redeem version is required');
160
- }
161
-
162
- if (!selectedRedeem.output) {
163
- throw new Error('Left over funds script redeem output is required');
164
- }
165
-
166
- this.tapLeafScript = {
167
- leafVersion: selectedRedeem.redeemVersion,
168
- script: selectedRedeem.output,
169
- controlBlock: this.getWitness(),
170
- };
171
-
172
- this.addInputsFromUTXO();
173
-
174
- const amountSpent: bigint = this.getTransactionOPNetFee();
175
- this.addOutput({
176
- value: Number(amountSpent),
177
- address: this.to,
178
- });
179
-
180
- await this.addRefundOutput(amountSpent);
181
- }
182
-
183
- /**
184
- * Sign the inputs
185
- * @param {Psbt} transaction The transaction to sign
186
- * @protected
187
- */
188
- protected async signInputs(transaction: Psbt): Promise<void> {
189
- if (!this.contractSigner) {
190
- await super.signInputs(transaction);
191
-
192
- return;
193
- }
194
-
195
- for (let i = 0; i < transaction.data.inputs.length; i++) {
196
- if (i === 0) {
197
- // multi sig input
198
- transaction.signInput(0, this.contractSigner);
199
- transaction.signInput(0, this.getSignerKey());
200
-
201
- transaction.finalizeInput(0, this.customFinalizer);
202
- } else {
203
- transaction.signInput(i, this.getSignerKey());
204
- transaction.finalizeInput(i);
205
- }
206
- }
207
- }
208
-
209
- /**
210
- * Get the tap output
211
- * @protected
212
- */
213
- protected override generateScriptAddress(): Payment {
214
- return {
215
- internalPubkey: this.internalPubKeyToXOnly(),
216
- network: this.network,
217
- scriptTree: this.scriptTree,
218
- };
219
- }
220
-
221
- /**
222
- * Generate the tap data
223
- * @protected
224
- */
225
- protected override generateTapData(): Payment {
226
- const selectedRedeem = !!this.contractSigner
227
- ? this.targetScriptRedeem
228
- : this.leftOverFundsScriptRedeem;
229
-
230
- if (!selectedRedeem) {
231
- throw new Error('Left over funds script redeem is required');
232
- }
233
-
234
- if (!this.scriptTree) {
235
- throw new Error('Script tree is required');
236
- }
237
-
238
- return {
239
- internalPubkey: this.internalPubKeyToXOnly(),
240
- network: this.network,
241
- scriptTree: this.scriptTree,
242
- redeem: selectedRedeem,
243
- };
244
- }
245
-
246
- /**
247
- * Generate the contract seed for the deployment
248
- * @private
249
- */
250
- private getContractSeed(): Buffer {
251
- if (!this.bytecode) {
252
- throw new Error('Bytecode is required');
253
- }
254
-
255
- const deployerPubKey: Buffer = this.internalPubKeyToXOnly();
256
- const salt: Buffer = bitCrypto.hash256(this.randomBytes);
257
- const sha256OfBytecode: Buffer = bitCrypto.hash256(this.bytecode);
258
-
259
- const buf: Buffer = Buffer.concat([deployerPubKey, salt, sha256OfBytecode]);
260
-
261
- return bitCrypto.hash256(buf);
262
- }
263
-
264
- /**
265
- * Finalize the transaction
266
- * @param _inputIndex
267
- * @param input
268
- */
269
- private customFinalizer = (_inputIndex: number, input: PsbtInput) => {
270
- if (!this.tapLeafScript) {
271
- throw new Error('Tap leaf script is required');
272
- }
273
-
274
- if (!input.tapScriptSig) {
275
- throw new Error('Tap script signature is required');
276
- }
277
-
278
- const scriptSolution = [
279
- this.randomBytes,
280
- this.internalPubKeyToXOnly(),
281
- input.tapScriptSig[0].signature,
282
- input.tapScriptSig[1].signature,
283
- ];
284
-
285
- const witness = scriptSolution
286
- .concat(this.tapLeafScript.script)
287
- .concat(this.tapLeafScript.controlBlock);
288
-
289
- return {
290
- finalScriptWitness: TransactionBuilder.witnessStackToScriptWitness(witness),
291
- };
292
- };
293
-
294
- /**
295
- * Get the public keys for the redeem scripts
296
- * @private
297
- */
298
- private getPubKeys(): Buffer[] {
299
- const pubkeys = [this.signer.publicKey];
300
-
301
- if (this.contractSigner) {
302
- pubkeys.push(this.contractSigner.publicKey);
303
- }
304
-
305
- return pubkeys;
306
- }
307
-
308
- /**
309
- * Generate the redeem scripts
310
- * @private
311
- */
312
- private generateRedeemScripts(): void {
313
- this.targetScriptRedeem = {
314
- pubkeys: this.getPubKeys(),
315
- output: this.compiledTargetScript,
316
- redeemVersion: 192,
317
- };
318
-
319
- this.leftOverFundsScriptRedeem = {
320
- pubkeys: this.getPubKeys(),
321
- output: this.getLeafScript(),
322
- redeemVersion: 192,
323
- };
324
- }
325
-
326
- /**
327
- * Get the second leaf script
328
- * @private
329
- */
330
- private getLeafScript(): Buffer {
331
- return TransactionBuilder.LOCK_LEAF_SCRIPT;
332
- }
333
-
334
- /**
335
- * Get the script tree
336
- * @private
337
- */
338
- private getScriptTree(): Taptree {
339
- if (!this.bytecode) {
340
- throw new Error('Contract bytecode is required');
341
- }
342
-
343
- this.generateRedeemScripts();
344
-
345
- return [
346
- {
347
- output: this.compiledTargetScript,
348
- version: 192,
349
- },
350
- {
351
- output: this.getLeafScript(),
352
- version: 192,
353
- },
354
- ];
355
- }
356
- }
1
+ import { TransactionType } from '../enums/TransactionType.js';
2
+ import { IDeploymentParameters } from '../interfaces/ITransactionParameters.js';
3
+ import { crypto as bitCrypto, Payment, Psbt, Signer } from 'bitcoinjs-lib';
4
+ import { TransactionBuilder } from './TransactionBuilder.js';
5
+ import { Taptree } from 'bitcoinjs-lib/src/types.js';
6
+ import { TapLeafScript } from '../interfaces/Tap.js';
7
+ import { DeploymentGenerator } from '../../generators/builders/DeploymentGenerator.js';
8
+ import { toXOnly } from 'bitcoinjs-lib/src/psbt/bip371.js';
9
+ import { EcKeyPair } from '../../keypair/EcKeyPair.js';
10
+ import { BitcoinUtils } from '../../utils/BitcoinUtils.js';
11
+ import { PsbtInput } from 'bip174/src/lib/interfaces.js';
12
+ import { Compressor } from '../../bytecode/Compressor.js';
13
+ import { AddressGenerator } from '../../generators/AddressGenerator.js';
14
+ import { Address } from '@btc-vision/bsi-binary';
15
+
16
+ export class DeploymentTransaction extends TransactionBuilder<TransactionType.DEPLOYMENT> {
17
+ public type: TransactionType.DEPLOYMENT = TransactionType.DEPLOYMENT;
18
+ public static readonly MAXIMUM_CONTRACT_SIZE = 128*1024;
19
+
20
+ /**
21
+ * The contract address
22
+ * @protected
23
+ */
24
+ protected readonly _contractAddress: Address;
25
+ /**
26
+ * The tap leaf script
27
+ * @private
28
+ */
29
+ protected tapLeafScript: TapLeafScript | null = null;
30
+ /**
31
+ * The target script redeem
32
+ * @private
33
+ */
34
+ private targetScriptRedeem: Payment | null = null;
35
+ /**
36
+ * The left over funds script redeem
37
+ * @private
38
+ */
39
+ private leftOverFundsScriptRedeem: Payment | null = null;
40
+ /**
41
+ * The compiled target script
42
+ * @private
43
+ */
44
+ private readonly compiledTargetScript: Buffer;
45
+ /**
46
+ * The script tree
47
+ * @private
48
+ */
49
+ private readonly scriptTree: Taptree;
50
+ /**
51
+ * The deployment bitcoin generator
52
+ * @private
53
+ */
54
+ private deploymentGenerator: DeploymentGenerator;
55
+
56
+ /**
57
+ * The contract seed
58
+ * @private
59
+ */
60
+ private readonly contractSeed: Buffer;
61
+
62
+ /**
63
+ * The contract bytecode
64
+ * @private
65
+ */
66
+ private readonly bytecode: Buffer;
67
+
68
+ /**
69
+ * The contract signer
70
+ * @private
71
+ */
72
+ private readonly contractSigner: Signer;
73
+
74
+ /**
75
+ * The contract salt random bytes
76
+ * @private
77
+ */
78
+ private readonly randomBytes: Buffer;
79
+
80
+ public constructor(parameters: IDeploymentParameters) {
81
+ super(parameters);
82
+
83
+ this.bytecode = Compressor.compress(parameters.bytecode);
84
+ if (!this.bytecode) throw new Error('Bytecode is required');
85
+
86
+ if (this.bytecode.length > DeploymentTransaction.MAXIMUM_CONTRACT_SIZE) throw new Error('Contract size overflow.');
87
+
88
+ this.randomBytes = parameters.randomBytes || BitcoinUtils.rndBytes();
89
+
90
+ this.contractSeed = this.getContractSeed();
91
+ this.contractSigner = EcKeyPair.fromSeedKeyPair(this.contractSeed, this.network);
92
+
93
+ this.deploymentGenerator = new DeploymentGenerator(
94
+ this.internalPubKeyToXOnly(),
95
+ this.contractSignerXOnlyPubKey(),
96
+ this.network,
97
+ );
98
+
99
+ this.compiledTargetScript = this.deploymentGenerator.compile(
100
+ this.bytecode,
101
+ this.randomBytes,
102
+ );
103
+
104
+ this.scriptTree = this.getScriptTree();
105
+
106
+ this.internalInit();
107
+
108
+ this._contractAddress = AddressGenerator.generatePKSH(this.contractSeed, this.network);
109
+ }
110
+
111
+ /**
112
+ * @description Get the contract address (PKSH)
113
+ */
114
+ public get contractAddress(): Address {
115
+ return this._contractAddress;
116
+ }
117
+
118
+ /**
119
+ * @description Get the P2TR address
120
+ */
121
+ public get p2trAddress(): Address {
122
+ return this.to || this.getScriptAddress();
123
+ }
124
+
125
+ /**
126
+ * Get the random bytes used for the interaction
127
+ * @returns {Buffer} The random bytes
128
+ */
129
+ public getRndBytes(): Buffer {
130
+ return this.randomBytes;
131
+ }
132
+
133
+ /**
134
+ * Get the contract signer public key
135
+ * @protected
136
+ */
137
+ protected contractSignerXOnlyPubKey(): Buffer {
138
+ return toXOnly(this.contractSigner.publicKey);
139
+ }
140
+
141
+ /**
142
+ * Build the transaction
143
+ * @protected
144
+ */
145
+ protected override async buildTransaction(): Promise<void> {
146
+ if (!this.to) {
147
+ this.to = this.getScriptAddress();
148
+ }
149
+
150
+ const selectedRedeem = !!this.contractSigner
151
+ ? this.targetScriptRedeem
152
+ : this.leftOverFundsScriptRedeem;
153
+
154
+ if (!selectedRedeem) {
155
+ throw new Error('Left over funds script redeem is required');
156
+ }
157
+
158
+ if (!selectedRedeem.redeemVersion) {
159
+ throw new Error('Left over funds script redeem version is required');
160
+ }
161
+
162
+ if (!selectedRedeem.output) {
163
+ throw new Error('Left over funds script redeem output is required');
164
+ }
165
+
166
+ this.tapLeafScript = {
167
+ leafVersion: selectedRedeem.redeemVersion,
168
+ script: selectedRedeem.output,
169
+ controlBlock: this.getWitness(),
170
+ };
171
+
172
+ this.addInputsFromUTXO();
173
+
174
+ const amountSpent: bigint = this.getTransactionOPNetFee();
175
+ this.addOutput({
176
+ value: Number(amountSpent),
177
+ address: this.to,
178
+ });
179
+
180
+ await this.addRefundOutput(amountSpent);
181
+ }
182
+
183
+ /**
184
+ * Sign the inputs
185
+ * @param {Psbt} transaction The transaction to sign
186
+ * @protected
187
+ */
188
+ protected async signInputs(transaction: Psbt): Promise<void> {
189
+ if (!this.contractSigner) {
190
+ await super.signInputs(transaction);
191
+
192
+ return;
193
+ }
194
+
195
+ for (let i = 0; i < transaction.data.inputs.length; i++) {
196
+ if (i === 0) {
197
+ // multi sig input
198
+ transaction.signInput(0, this.contractSigner);
199
+ transaction.signInput(0, this.getSignerKey());
200
+
201
+ transaction.finalizeInput(0, this.customFinalizer);
202
+ } else {
203
+ transaction.signInput(i, this.getSignerKey());
204
+ transaction.finalizeInput(i);
205
+ }
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Get the tap output
211
+ * @protected
212
+ */
213
+ protected override generateScriptAddress(): Payment {
214
+ return {
215
+ internalPubkey: this.internalPubKeyToXOnly(),
216
+ network: this.network,
217
+ scriptTree: this.scriptTree,
218
+ };
219
+ }
220
+
221
+ /**
222
+ * Generate the tap data
223
+ * @protected
224
+ */
225
+ protected override generateTapData(): Payment {
226
+ const selectedRedeem = !!this.contractSigner
227
+ ? this.targetScriptRedeem
228
+ : this.leftOverFundsScriptRedeem;
229
+
230
+ if (!selectedRedeem) {
231
+ throw new Error('Left over funds script redeem is required');
232
+ }
233
+
234
+ if (!this.scriptTree) {
235
+ throw new Error('Script tree is required');
236
+ }
237
+
238
+ return {
239
+ internalPubkey: this.internalPubKeyToXOnly(),
240
+ network: this.network,
241
+ scriptTree: this.scriptTree,
242
+ redeem: selectedRedeem,
243
+ };
244
+ }
245
+
246
+ /**
247
+ * Generate the contract seed for the deployment
248
+ * @private
249
+ */
250
+ private getContractSeed(): Buffer {
251
+ if (!this.bytecode) {
252
+ throw new Error('Bytecode is required');
253
+ }
254
+
255
+ const deployerPubKey: Buffer = this.internalPubKeyToXOnly();
256
+ const salt: Buffer = bitCrypto.hash256(this.randomBytes);
257
+ const sha256OfBytecode: Buffer = bitCrypto.hash256(this.bytecode);
258
+
259
+ const buf: Buffer = Buffer.concat([deployerPubKey, salt, sha256OfBytecode]);
260
+
261
+ return bitCrypto.hash256(buf);
262
+ }
263
+
264
+ /**
265
+ * Finalize the transaction
266
+ * @param _inputIndex
267
+ * @param input
268
+ */
269
+ private customFinalizer = (_inputIndex: number, input: PsbtInput) => {
270
+ if (!this.tapLeafScript) {
271
+ throw new Error('Tap leaf script is required');
272
+ }
273
+
274
+ if (!input.tapScriptSig) {
275
+ throw new Error('Tap script signature is required');
276
+ }
277
+
278
+ const scriptSolution = [
279
+ this.randomBytes,
280
+ this.internalPubKeyToXOnly(),
281
+ input.tapScriptSig[0].signature,
282
+ input.tapScriptSig[1].signature,
283
+ ];
284
+
285
+ const witness = scriptSolution
286
+ .concat(this.tapLeafScript.script)
287
+ .concat(this.tapLeafScript.controlBlock);
288
+
289
+ return {
290
+ finalScriptWitness: TransactionBuilder.witnessStackToScriptWitness(witness),
291
+ };
292
+ };
293
+
294
+ /**
295
+ * Get the public keys for the redeem scripts
296
+ * @private
297
+ */
298
+ private getPubKeys(): Buffer[] {
299
+ const pubkeys = [this.signer.publicKey];
300
+
301
+ if (this.contractSigner) {
302
+ pubkeys.push(this.contractSigner.publicKey);
303
+ }
304
+
305
+ return pubkeys;
306
+ }
307
+
308
+ /**
309
+ * Generate the redeem scripts
310
+ * @private
311
+ */
312
+ private generateRedeemScripts(): void {
313
+ this.targetScriptRedeem = {
314
+ pubkeys: this.getPubKeys(),
315
+ output: this.compiledTargetScript,
316
+ redeemVersion: 192,
317
+ };
318
+
319
+ this.leftOverFundsScriptRedeem = {
320
+ pubkeys: this.getPubKeys(),
321
+ output: this.getLeafScript(),
322
+ redeemVersion: 192,
323
+ };
324
+ }
325
+
326
+ /**
327
+ * Get the second leaf script
328
+ * @private
329
+ */
330
+ private getLeafScript(): Buffer {
331
+ return TransactionBuilder.LOCK_LEAF_SCRIPT;
332
+ }
333
+
334
+ /**
335
+ * Get the script tree
336
+ * @private
337
+ */
338
+ private getScriptTree(): Taptree {
339
+ if (!this.bytecode) {
340
+ throw new Error('Contract bytecode is required');
341
+ }
342
+
343
+ this.generateRedeemScripts();
344
+
345
+ return [
346
+ {
347
+ output: this.compiledTargetScript,
348
+ version: 192,
349
+ },
350
+ {
351
+ output: this.getLeafScript(),
352
+ version: 192,
353
+ },
354
+ ];
355
+ }
356
+ }