@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,96 +1,96 @@
1
- import crypto, { createHash } from 'crypto';
2
- import { VaultUTXOs } from '../transaction/processor/PsbtTransaction.js';
3
-
4
- /**
5
- * Utility class for Bitcoin related functions
6
- */
7
- export class BitcoinUtils {
8
- /**
9
- * Converts satoshi to BTC
10
- * @param {number} btc - The amount in BTC
11
- * @returns {BigInt} The amount in satoshi
12
- */
13
- public static btcToSatoshi(btc: number): BigInt {
14
- return BigInt(btc * 100000000);
15
- }
16
-
17
- /**
18
- * Generates random bytes.
19
- * @public
20
- * @returns {Buffer} The random bytes
21
- */
22
- public static rndBytes(): Buffer {
23
- const buf = BitcoinUtils.getUnsafeRandomValues(64);
24
-
25
- return Buffer.from(buf);
26
- }
27
-
28
- public static getUnsafeRandomValues(length: number): Buffer {
29
- if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {
30
- const array = new Uint8Array(length);
31
- window.crypto.getRandomValues(array);
32
-
33
- return Buffer.from(array);
34
- } else if (crypto && typeof crypto.getRandomValues === 'function') {
35
- const array = new Uint8Array(length);
36
- crypto.getRandomValues(array);
37
-
38
- return Buffer.from(array);
39
- } else {
40
- // Fallback to Math.random() if window.crypto is not available
41
- const randomValues = [];
42
- for (let i = 0; i < length; i++) {
43
- randomValues.push(Math.floor(Math.random() * 256));
44
- }
45
-
46
- return Buffer.from(randomValues);
47
- }
48
- }
49
-
50
- /**
51
- * Hashes the given data
52
- * @param {Buffer} data - The data to hash
53
- * @returns {string} The hashed data
54
- */
55
- public static opnetHash(data: Buffer): string {
56
- const hashed = createHash('sha512');
57
- hashed.update(data);
58
-
59
- const hash = hashed.digest();
60
-
61
- return `0x${Buffer.from(hash).toString('hex')}`;
62
- }
63
-
64
- /**
65
- * Deterministically order vaults by address
66
- * @param {VaultUTXOs[]} vaults - The vaults to order
67
- * @returns {VaultUTXOs[]} The ordered vaults
68
- */
69
- public static orderVaultsByAddress(vaults: VaultUTXOs[]): VaultUTXOs[] {
70
- return vaults.sort((a, b) => {
71
- return a.vault.localeCompare(b.vault);
72
- });
73
- }
74
-
75
- /**
76
- * Find the vault with the most public keys in a deterministic way.
77
- * @param {VaultUTXOs[]} vaults - The vaults to search
78
- * @returns {VaultUTXOs} The vault with the most public keys
79
- */
80
- public static findVaultWithMostPublicKeys(vaults: VaultUTXOs[]): VaultUTXOs {
81
- vaults = BitcoinUtils.orderVaultsByAddress(vaults);
82
-
83
- let mostPublicKeys: number = 0;
84
- let vault: VaultUTXOs | undefined;
85
- for (let v of vaults) {
86
- if (v.publicKeys.length > mostPublicKeys) {
87
- mostPublicKeys = v.publicKeys.length;
88
- vault = v;
89
- }
90
- }
91
-
92
- if (!vault) throw new Error('No vault with public keys found.');
93
-
94
- return vault;
95
- }
96
- }
1
+ import crypto, { createHash } from 'crypto';
2
+ import { VaultUTXOs } from '../transaction/processor/PsbtTransaction.js';
3
+
4
+ /**
5
+ * Utility class for Bitcoin related functions
6
+ */
7
+ export class BitcoinUtils {
8
+ /**
9
+ * Converts satoshi to BTC
10
+ * @param {number} btc - The amount in BTC
11
+ * @returns {BigInt} The amount in satoshi
12
+ */
13
+ public static btcToSatoshi(btc: number): BigInt {
14
+ return BigInt(btc * 100000000);
15
+ }
16
+
17
+ /**
18
+ * Generates random bytes.
19
+ * @public
20
+ * @returns {Buffer} The random bytes
21
+ */
22
+ public static rndBytes(): Buffer {
23
+ const buf = BitcoinUtils.getUnsafeRandomValues(64);
24
+
25
+ return Buffer.from(buf);
26
+ }
27
+
28
+ public static getUnsafeRandomValues(length: number): Buffer {
29
+ if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {
30
+ const array = new Uint8Array(length);
31
+ window.crypto.getRandomValues(array);
32
+
33
+ return Buffer.from(array);
34
+ } else if (crypto && typeof crypto.getRandomValues === 'function') {
35
+ const array = new Uint8Array(length);
36
+ crypto.getRandomValues(array);
37
+
38
+ return Buffer.from(array);
39
+ } else {
40
+ // Fallback to Math.random() if window.crypto is not available
41
+ const randomValues = [];
42
+ for (let i = 0; i < length; i++) {
43
+ randomValues.push(Math.floor(Math.random() * 256));
44
+ }
45
+
46
+ return Buffer.from(randomValues);
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Hashes the given data
52
+ * @param {Buffer} data - The data to hash
53
+ * @returns {string} The hashed data
54
+ */
55
+ public static opnetHash(data: Buffer): string {
56
+ const hashed = createHash('sha512');
57
+ hashed.update(data);
58
+
59
+ const hash = hashed.digest();
60
+
61
+ return `0x${Buffer.from(hash).toString('hex')}`;
62
+ }
63
+
64
+ /**
65
+ * Deterministically order vaults by address
66
+ * @param {VaultUTXOs[]} vaults - The vaults to order
67
+ * @returns {VaultUTXOs[]} The ordered vaults
68
+ */
69
+ public static orderVaultsByAddress(vaults: VaultUTXOs[]): VaultUTXOs[] {
70
+ return vaults.sort((a, b) => {
71
+ return a.vault.localeCompare(b.vault);
72
+ });
73
+ }
74
+
75
+ /**
76
+ * Find the vault with the most public keys in a deterministic way.
77
+ * @param {VaultUTXOs[]} vaults - The vaults to search
78
+ * @returns {VaultUTXOs} The vault with the most public keys
79
+ */
80
+ public static findVaultWithMostPublicKeys(vaults: VaultUTXOs[]): VaultUTXOs {
81
+ vaults = BitcoinUtils.orderVaultsByAddress(vaults);
82
+
83
+ let mostPublicKeys: number = 0;
84
+ let vault: VaultUTXOs | undefined;
85
+ for (let v of vaults) {
86
+ if (v.publicKeys.length > mostPublicKeys) {
87
+ mostPublicKeys = v.publicKeys.length;
88
+ vault = v;
89
+ }
90
+ }
91
+
92
+ if (!vault) throw new Error('No vault with public keys found.');
93
+
94
+ return vault;
95
+ }
96
+ }
@@ -1,43 +1,27 @@
1
- {
2
- "compilerOptions": {
3
- "declaration": true,
4
- "noImplicitAny": true,
5
- "removeComments": true,
6
- "suppressImplicitAnyIndexErrors": false,
7
- "preserveConstEnums": true,
8
- "resolveJsonModule": true,
9
- "skipLibCheck": true,
10
- "sourceMap": false,
11
- "moduleDetection": "force",
12
- "experimentalDecorators": true,
13
- "lib": [
14
- "es6",
15
- "es2020",
16
- "es2021",
17
- "es2022",
18
- "esnext",
19
- "webworker",
20
- "dom",
21
- "scripthost"
22
- ],
23
- "strict": true,
24
- "strictNullChecks": true,
25
- "strictFunctionTypes": true,
26
- "strictBindCallApply": true,
27
- "strictPropertyInitialization": true,
28
- "alwaysStrict": true,
29
- "moduleResolution": "node",
30
- "allowJs": true,
31
- "incremental": true,
32
- "allowSyntheticDefaultImports": true,
33
- "esModuleInterop": true
34
- },
35
- "include": [
36
- "src/**/*.ts",
37
- "src/*",
38
- "src/**/*.js",
39
- "src/*.ts",
40
- "src/*.js",
41
- "src/*.cjs"
42
- ]
43
- }
1
+ {
2
+ "compilerOptions": {
3
+ "declaration": true,
4
+ "noImplicitAny": true,
5
+ "removeComments": true,
6
+ "suppressImplicitAnyIndexErrors": false,
7
+ "preserveConstEnums": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": false,
11
+ "moduleDetection": "force",
12
+ "experimentalDecorators": true,
13
+ "lib": ["es6", "es2020", "es2021", "es2022", "esnext", "webworker", "dom", "scripthost"],
14
+ "strict": true,
15
+ "strictNullChecks": true,
16
+ "strictFunctionTypes": true,
17
+ "strictBindCallApply": true,
18
+ "strictPropertyInitialization": true,
19
+ "alwaysStrict": true,
20
+ "moduleResolution": "node",
21
+ "allowJs": true,
22
+ "incremental": true,
23
+ "allowSyntheticDefaultImports": true,
24
+ "esModuleInterop": true
25
+ },
26
+ "include": ["src/**/*.ts", "src/*", "src/**/*.js", "src/*.ts", "src/*.js", "src/*.cjs"]
27
+ }
package/tsconfig.json CHANGED
@@ -1,8 +1,15 @@
1
- {
2
- "extends": "./tsconfig.base.json",
3
- "compilerOptions": {
4
- "module": "esnext",
5
- "outDir": "build",
6
- "target": "esnext"
7
- }
8
- }
1
+ {
2
+ "extends": "./tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "ESNext",
5
+ "target": "ES2020",
6
+ "declaration": true,
7
+ "outDir": "./build",
8
+ "moduleResolution": "node",
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "allowSyntheticDefaultImports": true
12
+ },
13
+ "include": ["src/**/*.ts"],
14
+ "exclude": ["node_modules"]
15
+ }
@@ -1,22 +1,22 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "module": "esnext",
5
- "outDir": "browser",
6
- "target": "esnext",
7
- "declaration": true,
8
- "esModuleInterop": true,
9
- "skipLibCheck": true,
10
- "strict": true,
11
- "baseUrl": ".",
12
- "paths": {
13
- "@btc-vision/logger": [
14
- "node_modules/@btc-vision/logger"
15
- ]
16
- },
17
- "moduleResolution": "bundler"
18
- },
19
- "exclude": [
20
- "./src/tests"
21
- ]
22
- }
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "module": "esnext",
5
+ "outDir": "browser",
6
+ "target": "esnext",
7
+ "declaration": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "strict": true,
11
+ "baseUrl": ".",
12
+ "paths": {
13
+ "@btc-vision/logger": [
14
+ "node_modules/@btc-vision/logger"
15
+ ]
16
+ },
17
+ "moduleResolution": "bundler"
18
+ },
19
+ "exclude": [
20
+ "./src/tests"
21
+ ]
22
+ }
package/EPOCH.md DELETED
@@ -1,250 +0,0 @@
1
- # **OP_Net Quantum EPOCH**
2
-
3
- ## Preface
4
- In the rapidly evolving landscape of blockchain technology, ensuring the secure, efficient, and deterministic processing of transactions is paramount. The OP_NET project aims to enhance the Bitcoin Layer 1 infrastructure by introducing smart contracts and innovative solutions for wrapped Bitcoin (WBTC). This document provides an in-depth exploration of the challenges associated with processing unwrap requests and presents a robust solution designed to maintain the integrity and efficiency of the system.
5
-
6
- ## Introduction
7
- Wrapped Bitcoin (WBTC) offers the same concept as WETH on Ethereum but for the Bitcoin ecosystem. WBTC allows OP_NET smart contracts to hold actual Bitcoins. However, unwrapping WBTC and converting them back to native Bitcoin poses significant challenges, particularly in ensuring that requests are processed deterministically and securely.
8
-
9
- The primary focus of this document is to address the problem of deterministically processing unwrap requests. We will delve into the intricacies of the issue, explore potential solutions, and present a comprehensive method to achieve reliable and efficient unwrap transactions. This approach leverages a pending queue of PSBTs (Partially Signed Bitcoin Transactions) to ensure that transactions are handled in a fair and systematic manner, mitigating risks and enhancing the overall user experience.
10
-
11
- ## Problem Description
12
-
13
- ### Overview of the Unwrap Request Problem
14
-
15
- The process of unwrapping WBTC, which involves converting Wrapped Bitcoin back into native Bitcoin, is critical for users who wish to exit the WBTC ecosystem and reclaim their original Bitcoin assets. However, this process is not without its challenges. The primary issue lies in ensuring that unwrap requests are processed deterministically and securely, minimizing the risks of errors, delays, or fraudulent activities.
16
-
17
- ### Challenges in Deterministic Processing
18
-
19
- 1. **Timing and Synchronization:**
20
- - **Delayed Confirmations:** Transactions on the Bitcoin network can experience delays, sometimes taking hundreds of blocks to confirm. This variability can complicate the tracking and management of unwrap requests, leading to potential inconsistencies in processing.
21
- - **Concurrency Issues:** Multiple unwrap requests may be submitted simultaneously or within a short period, creating the challenge of ensuring that all requests are processed in the correct order and without conflict.
22
-
23
- 2. **UTXO Management:**
24
- - **Unspent Transaction Outputs (UTXOs):** The core of Bitcoin's transaction model is the UTXO system. Managing these UTXOs effectively is crucial for ensuring that unwrap requests are processed correctly. Determining the current balance and status of UTXOs can be challenging, especially if transactions are pending or delayed.
25
- - **Double-Spending Risks:** Ensuring that a UTXO used in an unwrap request has not been double-spent or otherwise compromised is essential for maintaining transaction integrity.
26
-
27
- 3. **Transaction Detection:**
28
- - **Indexing Challenges:** Reliably detecting and indexing transactions on the blockchain is a complex task. Missing or delayed transaction data can lead to discrepancies in processing unwrap requests.
29
- - **Network Latency:** Variability in network latency can affect the timely detection and processing of transactions, further complicating deterministic processing.
30
-
31
- 4. **Fee Management:**
32
- - **Fee Variability:** Transaction fees on the Bitcoin network can vary significantly, influencing the prioritization and confirmation times of transactions. Managing these fees effectively is crucial for ensuring timely processing of unwrap requests.
33
- - **Replace-by-Fee (RBF):** Transactions that support RBF can be replaced with higher-fee transactions, introducing additional complexity in managing and processing unwrap requests.
34
-
35
- ### Example Scenario
36
-
37
- Consider a scenario where a user submits an unwrap request, and the transaction is created but takes an unusually long time to confirm—say, 300 blocks. During this period, the user's WBTC balance and the status of the UTXOs involved in the transaction must be accurately tracked. If another transaction involving the same UTXOs is submitted and processed before the original transaction confirms, it could lead to inconsistencies and potential double-spending issues. Ensuring that all these factors are managed deterministically is a significant challenge.
38
-
39
- ### Summary of the Problem
40
-
41
- The key problem in processing unwrap requests lies in achieving a deterministic and secure system that can handle the variability and complexity of the Bitcoin network. This involves managing UTXOs effectively, ensuring timely and accurate transaction detection, and prioritizing transactions based on fees while avoiding issues such as double-spending and delayed confirmations. Addressing these challenges is essential for maintaining the integrity and reliability of the WBTC unwrapping process on the OP_NET platform.
42
-
43
- In the following chapters, we will explore potential solutions to this problem, evaluate their feasibility, and present a comprehensive approach to implementing a deterministic unwrap processing system.
44
-
45
- ## Solution Overview
46
-
47
- ### Two Approaches to Solving the Problem
48
-
49
- To address the challenges associated with deterministically processing unwrap requests, we have explored two potential solutions. Each approach has its merits and limitations, and this chapter will provide an overview of both, leading to the identification of the most viable solution.
50
-
51
- ### Unviable Solution: Instant Signing
52
-
53
- The first approach involves instantly signing unwrap requests as soon as they are detected and validated. Here’s how this method would work and the reasons why it is ultimately not viable.
54
-
55
- 1. **Instant Signing Process:**
56
- - **Detection and Validation:** As soon as an unwrap request is detected, it is immediately validated.
57
- - **Signing:** Upon successful validation, the transaction is signed by an indexer and posted on-chain.
58
-
59
- 2. **Challenges and Issues:**
60
- - **Transaction Confirmation Delays:** The primary issue with this approach is dealing with transaction confirmation delays. A transaction might take an extended period to confirm, leading to uncertainties about the current WBTC balance of the requester.
61
- - **Concurrent Requests:** If multiple unwrap requests are made close to each other in time, managing the order and ensuring that each request is processed correctly becomes problematic.
62
- - **Undetected Transactions:** There is a risk that some transactions might not be detected by indexers due to network latency or other issues, resulting in inconsistent processing.
63
- - **Double-Spending Risks:** Ensuring that a UTXO remains unspent until the transaction confirms is challenging. If the UTXO is used in another transaction before the original one confirms, it could lead to double-spending issues.
64
- - **Complexity in Tracking UTXOs:** Keeping track of UTXOs and ensuring they are still valid and unspent over a potentially long confirmation period adds significant complexity.
65
-
66
- Given these challenges, the instant signing approach is not a viable solution for deterministic and secure processing of unwrap requests. The potential for delays, missed transactions, and double-spending risks outweigh the benefits of this method.
67
-
68
- ### Viable Solution: Pending Queue of PSBTs
69
-
70
- The second approach, which is more robust and addresses the challenges identified with the instant signing method, involves using a pending queue of Partially Signed Bitcoin Transactions (PSBTs). This method introduces a structured process to ensure deterministic and secure handling of unwrap requests.
71
-
72
- 1. **Pending Queue Process:**
73
- - **Detection and Initial Validation:** Unwrap requests are detected and initially validated.
74
- - **Queueing:** Instead of immediately signing, valid transactions are placed in a pending queue of PSBTs.
75
-
76
- 2. **Advantages Over Instant Signing:**
77
- - **Reduced Risk of Delays:** By queueing transactions, the system can manage and track multiple unwrap requests more effectively, mitigating the risks associated with delayed confirmations.
78
- - **Orderly Processing:** Transactions can be processed in a controlled manner, ensuring that each request is handled sequentially and according to established rules.
79
- - **Enhanced Security:** The pending queue allows for additional checks and validations before finalizing transactions, reducing the risk of double-spending and ensuring UTXOs remain valid.
80
- - **Fee-Based Prioritization:** Transactions can be sorted and prioritized based on the fees provided, optimizing for network efficiency and ensuring timely processing.
81
-
82
- The following chapters will delve deeper into this viable solution, detailing the processes involved in filtering and validating requests, managing the pending queue, and generating proposals for transaction processing. By implementing this method, we can achieve a robust and deterministic system for unwrapping WBTC on the OP_NET platform.
83
-
84
-
85
- ## Viable Solution: **Quantum Epoch**
86
-
87
- ### Detailed Explanation
88
-
89
- The **Quantum Epoch** method offers a structured and reliable solution for processing unwrap requests. This approach addresses the challenges identified with instant signing by introducing a queue system that ensures deterministic and secure handling of transactions.
90
-
91
- ### Advantages Over Instant Signing
92
-
93
- The **Quantum Epoch** method provides several key advantages over the instant signing approach:
94
-
95
- 1. **Reduced Risk of Delays:**
96
- - **Controlled Processing:** By placing transactions in a pending queue, the system can manage the order and timing of each transaction more effectively. This reduces the risk associated with delayed confirmations and ensures that transactions are processed in a predictable manner.
97
- - **Efficient Handling:** The queue system allows for better handling of network congestion and variability in confirmation times, ensuring a smoother user experience.
98
-
99
- 2. **Orderly Processing:**
100
- - **Sequential Management:** Transactions in the pending queue can be processed sequentially, according to established rules and priorities. This orderly approach helps prevent conflicts and race conditions, ensuring that each unwrap request is handled correctly.
101
- - **Conflict Resolution:** The queue system provides a framework for resolving potential conflicts, such as competing transactions for the same UTXO, in a systematic manner.
102
-
103
- 3. **Enhanced Security:**
104
- - **Additional Validations:** The pending queue allows for additional checks and validations before finalizing transactions. This enhances security by ensuring that all transactions meet the necessary criteria and reduces the risk of double-spending.
105
- - **UTXO Integrity:** By maintaining a list of potential UTXO usages, the system can ensure that UTXOs remain valid and unspent until the transaction is confirmed, further enhancing security.
106
-
107
- 4. **Fee-Based Prioritization:**
108
- - **Optimized Processing:** Transactions can be sorted and prioritized based on the fees provided, ensuring that those with higher fees are processed first. This optimizes network efficiency and ensures timely processing of high-priority transactions.
109
- - **Fair Resource Allocation:** Fee-based prioritization helps allocate network resources fairly, ensuring that users who pay higher fees receive faster processing times.
110
-
111
- ### How the Quantum Epoch System Works
112
-
113
- The **Quantum Epoch** method is designed to handle unwrap requests in a structured and secure manner. The process involves several key steps:
114
-
115
- 1. **Detection and Initial Validation:**
116
- - **Request Detection:** Unwrap requests are detected as they are submitted to the system. Each request is initially validated to ensure it meets basic criteria, such as transaction validity and sufficient WBTC balance.
117
- - **Queueing Valid Requests:** Valid requests are placed in the pending queue of PSBTs. This queue serves as a holding area for transactions awaiting further processing and finalization.
118
-
119
- 2. **Filtering and Sorting:**
120
- - **Replace-by-Fee (RBF) Transactions:** Transactions that support RBF are filtered out, as they introduce additional complexity and potential conflicts.
121
- - **Fee-Based Sorting:** The remaining transactions are sorted based on the fees provided. Higher-fee transactions are given priority, ensuring they are processed more quickly and efficiently.
122
-
123
- 3. **Validation and UTXO Management:**
124
- - **Fee Adequacy:** Each transaction is checked to ensure it has provided enough fees to be confirmed within the next two blocks.
125
- - **Balance and UTXO Checks:** The system verifies that the requester has enough WBTC and that the UTXOs used in the transaction are still valid and unspent.
126
- - **Potential UTXO List:** Valid UTXOs are added to a "potential used list," ensuring they are tracked and remain unspent until the transaction is finalized.
127
-
128
- 4. **Finalization and Proposal Generation:**
129
- - **Dropping Invalid Requests:** Transactions that do not comply with the validation rules are dropped from the queue. Users are notified of the status of their transactions through a UI or other means.
130
- - **Proposal Sorting:** Once the valid transactions are identified, they are sorted by OP_NET priority fee, ensuring a deterministic ordering.
131
-
132
- ## OP_NET Epoch Proposal Generation - Quantum Epoch
133
-
134
- ### Proposal Generation
135
-
136
- The final step in the Quantum Epoch process is the generation of proposals. Proposals are collections of valid transactions that are ready to be included in the next block.
137
-
138
- 1. **Proposal Contents:**
139
- - **Current Height:** The height of the blockchain at the time of proposal generation.
140
- - **Last Block Checksum:** A checksum of the last confirmed block, ensuring consistency and security.
141
- - **Transactions (Ordered):** A list of valid transactions, ordered by OP_NET priority fee. Each transaction includes the following information:
142
- - **OP_NET Fee:** The fee paid for OP_NET processing.
143
- - **Bitcoin Fee:** The fee paid for Bitcoin network processing.
144
- - **PSBT Data:** The raw data of the Partially Signed Bitcoin Transaction.
145
- - **Transaction Identity:** A unique identifier for the transaction.
146
- - **Potential Transaction Hash:** The expected hash of the transaction once it is fully signed and broadcasted.
147
- - **Total Bitcoin Fee:** The total fees paid for Bitcoin network processing.
148
- - **Total OP_NET Fee:** The total fees paid for OP_NET processing.
149
- - **Proposal Root Hash:** A Merkle tree root hash of all the transactions, ensuring integrity and security.
150
- - **Proposal OP_NET Signature:** A signature from OP_NET, verifying the authenticity and validity of the proposal.
151
-
152
- 2. **Validator Contributions:**
153
- - **Generating Proposals:** Proposals can be generated by any validator, not just trusted indexers. This decentralized approach ensures fairness and security.
154
- - **Frequency of Proposal Generation:** By default, OP_NET will generate proposals every minute, ensuring timely processing of transactions.
155
-
156
- ## Proposal Contributions
157
-
158
- In the Quantum Epoch system, proposal contributions play a crucial role in ensuring the deterministic and secure processing of unwrap requests. Unlike traditional systems where only trusted indexers generate proposals, Quantum Epoch allows any validator to contribute to proposal generation, enhancing decentralization and security.
159
-
160
- ### Role of Validators and Trusted Indexers
161
-
162
- 1. **Validators:**
163
- - **Proposal Generation:** Any validator within the OP_NET ecosystem can generate proposals. This open contribution model ensures that the system remains decentralized and resilient against potential centralization risks.
164
- - **Validation Responsibilities:** Validators are responsible for verifying the integrity and validity of the transactions included in the proposals. They ensure that all transactions comply with the established rules and criteria.
165
-
166
- 2. **Trusted Indexers:**
167
- - **Specialized Validators:** Trusted indexers are validators with a proven track record of reliability and security. Their job is to sign and validate transactions. They also determine who's proposal will be accepted.
168
-
169
- #### Generating Proposals Every Block
170
-
171
- 1. **Frequency of Proposal Generation:**
172
- - **Block-Based Intervals:** Proposals are generated with every new block. This consistent generation ensures that unwrap requests are processed promptly and efficiently.
173
- - **Consistent Processing:** Generating proposals every block provides a predictable processing rhythm, reducing the risk of delays and ensuring that the system remains responsive to user requests.
174
-
175
- 2. **Target Generation:**
176
- - **Block-Based Generation:** The system uses a block-based approach to trigger proposal generation. Validators generate proposals with each new block, ensuring a steady flow of proposals.
177
- - **Network Efficiency:** This block-based approach optimizes network efficiency by balancing the load and ensuring that transactions are processed in a timely manner.
178
-
179
- ## Authority and Consensus Rules
180
-
181
- The Quantum Epoch system incorporates a robust set of authority and consensus rules to ensure the orderly and secure selection of proposals for inclusion in the blockchain. These rules define the roles and responsibilities of validators and trusted indexers, as well as the process for selecting the best proposals.
182
-
183
- ### Validator Selection Process
184
-
185
- 1. **Consensus Rules:**
186
- - **Height-Based Selection:** The system selects the next trusted validator based on the blockchain height, ensuring a predictable and transparent selection process.
187
-
188
- 2. **Example Rule:**
189
- ```ts
190
- const validators = [...];
191
- const nextValidator = validators[height % validators.length];
192
- ```
193
- - **Height Modulo:** The height modulo operation selects the next validator in a round-robin fashion, ensuring that each validator has an equal opportunity to contribute.
194
-
195
- ### Future Plans for PoS Integration
196
-
197
- 1. **Transition to Proof-of-Stake (PoS):**
198
- - **Enhanced Security:** The system plans to transition to a Proof-of-Stake (PoS) model in the future. PoS offers enhanced security by requiring validators to hold and stake a certain amount of cryptocurrency, aligning their interests with the network’s success.
199
- - **Reduced Energy Consumption:** PoS is more energy-efficient than traditional Proof-of-Work (PoW) models, reducing the environmental impact of the network.
200
-
201
- 2. **PoS Implementation:**
202
- - **Gradual Transition:** The transition to PoS will be gradual, ensuring that the network remains stable and secure throughout the process.
203
- - **Stake-Based Selection:** In a PoS model, validators are selected based on the amount of cryptocurrency they stake, incentivizing good behavior and network participation.
204
-
205
- ## Proposal Submission and UTXO Management
206
-
207
- Once a validator has selected the proposal they believe best suits the chain, this proposal will be broadcast to the entire network as the next proposal to process. The integrity and security of this process are maintained through several steps:
208
-
209
- ### Proposal Submission
210
-
211
- 1. **Broadcasting the Proposal:**
212
- - **Network Broadcast:** The selected proposal is broadcast to the entire network, allowing all nodes to receive and process it.
213
- - **Trusted Indexer Signature:** The proposal submission request includes the signature of the trusted indexer that selected it. This signature ensures that the proposal is authentic and has been vetted by a reliable party.
214
-
215
- 2. **Signature Verification:**
216
- - **Hash Matching:** The network verifies that the proposal hash matches the signature of the trusted indexer. If there is a mismatch, the proposal is dropped to prevent tampering or errors.
217
-
218
- 3. **Block Inclusion:**
219
- - **Adding to Block Header:** Once a block is mined, the proposal hash is added to the block header and the final checksum. This inclusion ensures that the proposal is permanently recorded, providing a traceable and verifiable record of the transaction batch.
220
-
221
- ### Processing a Proposal
222
-
223
- When a proposal is processed, several critical actions are performed to ensure the integrity and reliability of the unwrap transactions:
224
-
225
- 1. **Freezing UTXOs:**
226
- - **Temporary Allocation:** The UTXOs utilized in the proposal are frozen for 2 blocks. This temporary allocation means that these UTXOs are reserved for the unwrap transactions and cannot be used for any other transactions during this period.
227
-
228
- 2. **Unfreezing UTXOs:**
229
- - **Releasing Unused UTXOs:** After processing a block, OP_NET will unfreeze all UTXOs older than 2 blocks that have not been used in any confirmed transactions. This step ensures that newer requests can access these UTXOs, optimizing the use of available resources.
230
-
231
- ### Handling PSBT Requests
232
-
233
- Every time a user submits a PSBT request, OP_NET performs additional filtering to ensure the efficient and secure use of UTXOs:
234
-
235
- 1. **Filtering Frozen UTXOs:**
236
- - **Excluding Frozen UTXOs:** OP_NET filters out any UTXOs that are currently frozen, ensuring that only available UTXOs are considered for new transactions.
237
- - **Potential Transaction Utilization:** If no UTXOs are available, OP_NET will include the potential transactions contained in the last proposal into the list of usable UTXOs. This inclusion ensures that all possible resources are utilized effectively.
238
-
239
- ### Validator Rewards and Proposal Limits
240
-
241
- To incentivize validators and maintain the efficiency of the system, several rules and rewards are established:
242
-
243
- 1. **Validator Rewards:**
244
- - **Contribution Reward:** The validator who proposed the selected proposal will be rewarded for their contribution to the network in WBTC. The reward is calculated as:
245
- 5000 sat * Transaction Count
246
- This formula incentivizes validators to include as many valid transactions as possible in their proposals, enhancing network throughput and efficiency.
247
-
248
- 2. **Proposal Transaction Limits:**
249
- - **Maximum Transaction Limit:** The maximum number of transactions that a proposal may contain is set to 150. This limit ensures that proposals remain manageable and can be processed efficiently.
250
- - **Automatic Rejection:** If a proposal includes more than 150 transactions, it is automatically and instantly rejected. This rule prevents overloaded proposals and maintains the system’s performance.