@bsv/sdk 1.3.12 → 1.3.14

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 (607) hide show
  1. package/dist/cjs/package.json +15 -3
  2. package/dist/cjs/src/auth/Peer.js +83 -57
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/auth/SessionManager.js +14 -9
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  6. package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  12. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  18. package/dist/cjs/src/auth/utils/createNonce.js +2 -1
  19. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  20. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
  22. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  25. package/dist/cjs/src/compat/BSM.js +7 -17
  26. package/dist/cjs/src/compat/BSM.js.map +1 -1
  27. package/dist/cjs/src/compat/ECIES.js +172 -133
  28. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  29. package/dist/cjs/src/compat/HD.js +63 -73
  30. package/dist/cjs/src/compat/HD.js.map +1 -1
  31. package/dist/cjs/src/compat/Mnemonic.js +102 -106
  32. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  33. package/dist/cjs/src/compat/Utxo.js +2 -2
  34. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  35. package/dist/cjs/src/compat/index.js +7 -17
  36. package/dist/cjs/src/compat/index.js.map +1 -1
  37. package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
  38. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  39. package/dist/cjs/src/messages/SignedMessage.js +1 -0
  40. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  41. package/dist/cjs/src/messages/index.js +7 -17
  42. package/dist/cjs/src/messages/index.js.map +1 -1
  43. package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
  44. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  45. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  46. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  47. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
  48. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  49. package/dist/cjs/src/primitives/AESGCM.js +6 -5
  50. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  51. package/dist/cjs/src/primitives/BasePoint.js +1 -1
  52. package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
  53. package/dist/cjs/src/primitives/BigNumber.js +50 -62
  54. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  55. package/dist/cjs/src/primitives/Curve.js +46 -22
  56. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  57. package/dist/cjs/src/primitives/DRBG.js +2 -8
  58. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  59. package/dist/cjs/src/primitives/ECDSA.js +51 -35
  60. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  61. package/dist/cjs/src/primitives/Hash.js +191 -216
  62. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  63. package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
  64. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  65. package/dist/cjs/src/primitives/K256.js.map +1 -1
  66. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  67. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  68. package/dist/cjs/src/primitives/Point.js +117 -88
  69. package/dist/cjs/src/primitives/Point.js.map +1 -1
  70. package/dist/cjs/src/primitives/Polynomial.js +4 -2
  71. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  72. package/dist/cjs/src/primitives/PrivateKey.js +32 -33
  73. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  74. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  75. package/dist/cjs/src/primitives/Random.js +6 -5
  76. package/dist/cjs/src/primitives/Random.js.map +1 -1
  77. package/dist/cjs/src/primitives/ReductionContext.js +1 -1
  78. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  79. package/dist/cjs/src/primitives/Schnorr.js +21 -15
  80. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  81. package/dist/cjs/src/primitives/Signature.js +8 -7
  82. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  83. package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
  84. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  85. package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
  86. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  87. package/dist/cjs/src/primitives/index.js +7 -17
  88. package/dist/cjs/src/primitives/index.js.map +1 -1
  89. package/dist/cjs/src/primitives/utils.js +79 -68
  90. package/dist/cjs/src/primitives/utils.js.map +1 -1
  91. package/dist/cjs/src/script/OP.js +3 -3
  92. package/dist/cjs/src/script/OP.js.map +1 -1
  93. package/dist/cjs/src/script/Script.js +12 -10
  94. package/dist/cjs/src/script/Script.js.map +1 -1
  95. package/dist/cjs/src/script/Spend.js +47 -49
  96. package/dist/cjs/src/script/Spend.js.map +1 -1
  97. package/dist/cjs/src/script/templates/P2PKH.js +24 -12
  98. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  99. package/dist/cjs/src/script/templates/PushDrop.js +28 -23
  100. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  101. package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
  102. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  103. package/dist/cjs/src/totp/totp.js +2 -1
  104. package/dist/cjs/src/totp/totp.js.map +1 -1
  105. package/dist/cjs/src/transaction/Beef.js +177 -154
  106. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  107. package/dist/cjs/src/transaction/BeefParty.js +24 -24
  108. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  109. package/dist/cjs/src/transaction/BeefTx.js +26 -18
  110. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  111. package/dist/cjs/src/transaction/Broadcaster.js +3 -2
  112. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  113. package/dist/cjs/src/transaction/MerklePath.js +64 -37
  114. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  115. package/dist/cjs/src/transaction/Transaction.js +111 -137
  116. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  117. package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
  118. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  119. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
  120. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  121. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  122. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
  123. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  124. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  125. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  126. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  127. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
  128. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  129. package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
  130. package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
  131. package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
  132. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  133. package/dist/cjs/src/transaction/http/index.js.map +1 -1
  134. package/dist/cjs/src/transaction/index.js.map +1 -1
  135. package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
  136. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  137. package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
  138. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  139. package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
  140. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  141. package/dist/cjs/src/wallet/WalletClient.js +7 -2
  142. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  143. package/dist/cjs/src/wallet/WalletError.js +2 -2
  144. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  145. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
  146. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  147. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
  148. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  149. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  150. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  151. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
  152. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  153. package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
  154. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  155. package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
  156. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  157. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  158. package/dist/esm/mod.js +15 -15
  159. package/dist/esm/src/auth/Peer.js +75 -54
  160. package/dist/esm/src/auth/Peer.js.map +1 -1
  161. package/dist/esm/src/auth/SessionManager.js +14 -9
  162. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  163. package/dist/esm/src/auth/certificates/Certificate.js +15 -11
  164. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  165. package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
  166. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  167. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
  168. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  169. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
  170. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  171. package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
  172. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  173. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
  174. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  175. package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
  176. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
  177. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  178. package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
  179. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  180. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
  181. package/dist/esm/src/compat/BSM.js.map +1 -1
  182. package/dist/esm/src/compat/ECIES.js +165 -116
  183. package/dist/esm/src/compat/ECIES.js.map +1 -1
  184. package/dist/esm/src/compat/HD.js +56 -56
  185. package/dist/esm/src/compat/HD.js.map +1 -1
  186. package/dist/esm/src/compat/Mnemonic.js +95 -89
  187. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  188. package/dist/esm/src/compat/Utxo.js +1 -1
  189. package/dist/esm/src/compat/Utxo.js.map +1 -1
  190. package/dist/esm/src/messages/EncryptedMessage.js +3 -1
  191. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  192. package/dist/esm/src/messages/SignedMessage.js +1 -0
  193. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  194. package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
  195. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  196. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  197. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  198. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
  199. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  200. package/dist/esm/src/primitives/AESGCM.js +1 -0
  201. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  202. package/dist/esm/src/primitives/BasePoint.js +1 -1
  203. package/dist/esm/src/primitives/BasePoint.js.map +1 -1
  204. package/dist/esm/src/primitives/BigNumber.js +50 -62
  205. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  206. package/dist/esm/src/primitives/Curve.js +45 -22
  207. package/dist/esm/src/primitives/Curve.js.map +1 -1
  208. package/dist/esm/src/primitives/DRBG.js +2 -8
  209. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  210. package/dist/esm/src/primitives/ECDSA.js +50 -35
  211. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  212. package/dist/esm/src/primitives/Hash.js +188 -213
  213. package/dist/esm/src/primitives/Hash.js.map +1 -1
  214. package/dist/esm/src/primitives/JacobianPoint.js +18 -5
  215. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  216. package/dist/esm/src/primitives/K256.js.map +1 -1
  217. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  218. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  219. package/dist/esm/src/primitives/Point.js +107 -88
  220. package/dist/esm/src/primitives/Point.js.map +1 -1
  221. package/dist/esm/src/primitives/Polynomial.js +4 -2
  222. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  223. package/dist/esm/src/primitives/PrivateKey.js +25 -16
  224. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  225. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  226. package/dist/esm/src/primitives/Random.js +7 -6
  227. package/dist/esm/src/primitives/Random.js.map +1 -1
  228. package/dist/esm/src/primitives/ReductionContext.js +1 -1
  229. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  230. package/dist/esm/src/primitives/Schnorr.js +21 -15
  231. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  232. package/dist/esm/src/primitives/Signature.js +8 -7
  233. package/dist/esm/src/primitives/Signature.js.map +1 -1
  234. package/dist/esm/src/primitives/SymmetricKey.js +13 -13
  235. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  236. package/dist/esm/src/primitives/TransactionSignature.js +22 -12
  237. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  238. package/dist/esm/src/primitives/utils.js +76 -66
  239. package/dist/esm/src/primitives/utils.js.map +1 -1
  240. package/dist/esm/src/script/OP.js +3 -3
  241. package/dist/esm/src/script/OP.js.map +1 -1
  242. package/dist/esm/src/script/Script.js +12 -10
  243. package/dist/esm/src/script/Script.js.map +1 -1
  244. package/dist/esm/src/script/Spend.js +39 -32
  245. package/dist/esm/src/script/Spend.js.map +1 -1
  246. package/dist/esm/src/script/templates/P2PKH.js +26 -11
  247. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  248. package/dist/esm/src/script/templates/PushDrop.js +29 -22
  249. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  250. package/dist/esm/src/script/templates/RPuzzle.js +11 -6
  251. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  252. package/dist/esm/src/totp/totp.js +2 -1
  253. package/dist/esm/src/totp/totp.js.map +1 -1
  254. package/dist/esm/src/transaction/Beef.js +176 -154
  255. package/dist/esm/src/transaction/Beef.js.map +1 -1
  256. package/dist/esm/src/transaction/BeefParty.js +24 -24
  257. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  258. package/dist/esm/src/transaction/BeefTx.js +26 -18
  259. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  260. package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
  261. package/dist/esm/src/transaction/MerklePath.js +61 -36
  262. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  263. package/dist/esm/src/transaction/Transaction.js +105 -138
  264. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  265. package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
  266. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  267. package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  268. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  269. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  270. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  271. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  272. package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
  273. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  274. package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
  275. package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
  276. package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
  277. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  278. package/dist/esm/src/transaction/http/index.js.map +1 -1
  279. package/dist/esm/src/transaction/index.js.map +1 -1
  280. package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
  281. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  282. package/dist/esm/src/wallet/KeyDeriver.js +60 -52
  283. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  284. package/dist/esm/src/wallet/ProtoWallet.js +75 -29
  285. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  286. package/dist/esm/src/wallet/WalletClient.js +7 -2
  287. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  288. package/dist/esm/src/wallet/WalletError.js +2 -2
  289. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  290. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
  291. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  292. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
  293. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  294. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  295. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  296. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
  297. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  298. package/dist/esm/src/wallet/substrates/XDM.js +8 -3
  299. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  300. package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
  301. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  302. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  303. package/dist/types/mod.d.ts +15 -15
  304. package/dist/types/src/auth/Peer.d.ts +10 -10
  305. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  306. package/dist/types/src/auth/SessionManager.d.ts +4 -4
  307. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  308. package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
  309. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
  310. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
  311. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  312. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
  313. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
  314. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
  315. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  316. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
  317. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
  318. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
  319. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
  320. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  321. package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
  322. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  323. package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
  324. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
  325. package/dist/types/src/compat/BSM.d.ts +1 -1
  326. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  327. package/dist/types/src/compat/ECIES.d.ts +36 -36
  328. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  329. package/dist/types/src/compat/HD.d.ts +51 -51
  330. package/dist/types/src/compat/HD.d.ts.map +1 -1
  331. package/dist/types/src/compat/Mnemonic.d.ts +79 -79
  332. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
  333. package/dist/types/src/compat/Utxo.d.ts.map +1 -1
  334. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  335. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  336. package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
  337. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  338. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
  339. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
  340. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
  341. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  342. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  343. package/dist/types/src/primitives/BasePoint.d.ts +8 -8
  344. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
  345. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  346. package/dist/types/src/primitives/Curve.d.ts +14 -7
  347. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  348. package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +1 -1
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +11 -11
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  354. package/dist/types/src/primitives/Point.d.ts +14 -10
  355. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  356. package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
  357. package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
  358. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  359. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  360. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  361. package/dist/types/src/primitives/Schnorr.d.ts +14 -14
  362. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  363. package/dist/types/src/primitives/Signature.d.ts +1 -1
  364. package/dist/types/src/primitives/Signature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
  366. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  367. package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
  368. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  369. package/dist/types/src/primitives/utils.d.ts +3 -6
  370. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  371. package/dist/types/src/script/Script.d.ts +3 -3
  372. package/dist/types/src/script/Script.d.ts.map +1 -1
  373. package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
  374. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
  375. package/dist/types/src/script/Spend.d.ts.map +1 -1
  376. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
  377. package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
  378. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  379. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  380. package/dist/types/src/totp/totp.d.ts.map +1 -1
  381. package/dist/types/src/transaction/Beef.d.ts +96 -96
  382. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  383. package/dist/types/src/transaction/BeefParty.d.ts +22 -22
  384. package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
  385. package/dist/types/src/transaction/BeefTx.d.ts +5 -5
  386. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  387. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
  388. package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
  389. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
  390. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  391. package/dist/types/src/transaction/Transaction.d.ts +4 -12
  392. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  393. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
  394. package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
  395. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  396. package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
  397. package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
  398. package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
  399. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  400. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
  401. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
  402. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
  403. package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
  404. package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
  405. package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
  406. package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
  407. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
  408. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
  409. package/dist/types/src/transaction/http/index.d.ts.map +1 -1
  410. package/dist/types/src/transaction/index.d.ts.map +1 -1
  411. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
  412. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  413. package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
  414. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  415. package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
  416. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  417. package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
  418. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  419. package/dist/types/src/wallet/WalletClient.d.ts +5 -5
  420. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  421. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
  422. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  423. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
  424. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
  425. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  426. package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
  427. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
  428. package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
  429. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  430. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  431. package/dist/umd/bundle.js +1 -1
  432. package/docs/auth.md +92 -82
  433. package/docs/compat.md +24 -24
  434. package/docs/messages.md +7 -5
  435. package/docs/overlay-tools.md +21 -21
  436. package/docs/primitives.md +336 -315
  437. package/docs/script.md +35 -35
  438. package/docs/swagger/dist/swagger-initializer.js +7 -7
  439. package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
  440. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
  441. package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
  442. package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
  443. package/docs/swagger/dist/swagger-ui.js +2 -2
  444. package/docs/totp.md +5 -5
  445. package/docs/transaction.md +103 -105
  446. package/docs/wallet-substrates.md +17 -17
  447. package/docs/wallet.md +202 -204
  448. package/mod.ts +15 -15
  449. package/package.json +15 -3
  450. package/src/auth/Peer.ts +271 -121
  451. package/src/auth/SessionManager.ts +17 -10
  452. package/src/auth/__tests/Peer.test.ts +361 -179
  453. package/src/auth/__tests/SessionManager.test.ts +67 -19
  454. package/src/auth/__tests/build.test.ts +11 -0
  455. package/src/auth/certificates/Certificate.ts +27 -14
  456. package/src/auth/certificates/MasterCertificate.ts +106 -62
  457. package/src/auth/certificates/VerifiableCertificate.ts +30 -8
  458. package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
  459. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
  460. package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
  461. package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
  462. package/src/auth/certificates/index.ts +1 -1
  463. package/src/auth/clients/AuthFetch.ts +1 -0
  464. package/src/auth/clients/index.ts +1 -1
  465. package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
  466. package/src/auth/transports/index.ts +1 -1
  467. package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
  468. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
  469. package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
  470. package/src/auth/utils/createNonce.ts +11 -3
  471. package/src/auth/utils/getVerifiableCertificates.ts +12 -7
  472. package/src/auth/utils/validateCertificates.ts +57 -39
  473. package/src/auth/utils/verifyNonce.ts +6 -2
  474. package/src/compat/BSM.ts +10 -2
  475. package/src/compat/ECIES.ts +265 -141
  476. package/src/compat/HD.ts +81 -63
  477. package/src/compat/Mnemonic.ts +104 -91
  478. package/src/compat/Utxo.ts +8 -5
  479. package/src/compat/__tests/BSM.test.ts +42 -16
  480. package/src/compat/__tests/ECIES.test.ts +117 -52
  481. package/src/compat/__tests/HD.test.ts +55 -42
  482. package/src/compat/__tests/Mnemonic.test.ts +11 -12
  483. package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
  484. package/src/messages/EncryptedMessage.ts +6 -2
  485. package/src/messages/SignedMessage.ts +14 -8
  486. package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
  487. package/src/messages/__tests/SignedMessage.test.ts +17 -11
  488. package/src/overlay-tools/LookupResolver.ts +108 -56
  489. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
  490. package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
  491. package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
  492. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
  493. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
  494. package/src/primitives/AESGCM.ts +2 -0
  495. package/src/primitives/BasePoint.ts +4 -4
  496. package/src/primitives/BigNumber.ts +99 -90
  497. package/src/primitives/Curve.ts +117 -46
  498. package/src/primitives/DRBG.ts +9 -11
  499. package/src/primitives/ECDSA.ts +109 -63
  500. package/src/primitives/Hash.ts +492 -321
  501. package/src/primitives/JacobianPoint.ts +67 -19
  502. package/src/primitives/Point.ts +254 -152
  503. package/src/primitives/Polynomial.ts +8 -3
  504. package/src/primitives/PrivateKey.ts +41 -17
  505. package/src/primitives/PublicKey.ts +13 -3
  506. package/src/primitives/Random.ts +14 -8
  507. package/src/primitives/ReductionContext.ts +1 -1
  508. package/src/primitives/Schnorr.ts +40 -18
  509. package/src/primitives/Signature.ts +26 -16
  510. package/src/primitives/SymmetricKey.ts +14 -14
  511. package/src/primitives/TransactionSignature.ts +41 -17
  512. package/src/primitives/__tests/AESGCM.test.ts +457 -151
  513. package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
  514. package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
  515. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
  516. package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
  517. package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
  518. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
  519. package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
  520. package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
  521. package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
  522. package/src/primitives/__tests/Curve.unit.test.ts +75 -53
  523. package/src/primitives/__tests/DRBG.test.ts +1 -1
  524. package/src/primitives/__tests/DRBG.vectors.ts +45 -75
  525. package/src/primitives/__tests/ECDH.test.ts +15 -8
  526. package/src/primitives/__tests/ECDSA.test.ts +12 -6
  527. package/src/primitives/__tests/HMAC.test.ts +24 -18
  528. package/src/primitives/__tests/Hash.test.ts +57 -46
  529. package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
  530. package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
  531. package/src/primitives/__tests/PrivateKey.test.ts +11 -10
  532. package/src/primitives/__tests/PublicKey.test.ts +64 -53
  533. package/src/primitives/__tests/Random.test.ts +1 -1
  534. package/src/primitives/__tests/Reader.test.ts +240 -219
  535. package/src/primitives/__tests/ReductionContext.test.ts +98 -61
  536. package/src/primitives/__tests/Schnorr.test.ts +249 -237
  537. package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
  538. package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
  539. package/src/primitives/__tests/Writer.test.ts +23 -13
  540. package/src/primitives/__tests/bug-31.test.ts +6 -10
  541. package/src/primitives/__tests/utils.test.ts +70 -19
  542. package/src/primitives/utils.ts +103 -79
  543. package/src/script/Script.ts +18 -12
  544. package/src/script/ScriptTemplate.ts +3 -5
  545. package/src/script/Spend.ts +306 -108
  546. package/src/script/__tests/Script.test.ts +73 -55
  547. package/src/script/__tests/Spend.test.ts +208 -83
  548. package/src/script/__tests/SpendComplex.test.ts +19 -13
  549. package/src/script/__tests/script.invalid.vectors.ts +428 -1796
  550. package/src/script/__tests/script.valid.vectors.ts +728 -2764
  551. package/src/script/templates/P2PKH.ts +34 -12
  552. package/src/script/templates/PushDrop.ts +65 -31
  553. package/src/script/templates/RPuzzle.ts +29 -8
  554. package/src/script/templates/__tests/PushDrop.test.ts +146 -41
  555. package/src/totp/__tests/totp.test.ts +45 -44
  556. package/src/totp/totp.ts +3 -2
  557. package/src/transaction/Beef.ts +269 -174
  558. package/src/transaction/BeefParty.ts +41 -31
  559. package/src/transaction/BeefTx.ts +36 -26
  560. package/src/transaction/Broadcaster.ts +10 -6
  561. package/src/transaction/ChainTracker.ts +2 -2
  562. package/src/transaction/FeeModel.ts +0 -1
  563. package/src/transaction/MerklePath.ts +124 -59
  564. package/src/transaction/Transaction.ts +188 -187
  565. package/src/transaction/TransactionOutput.ts +0 -1
  566. package/src/transaction/__tests/Beef.test.ts +390 -287
  567. package/src/transaction/__tests/MerklePath.test.ts +59 -26
  568. package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
  569. package/src/transaction/__tests/Transaction.test.ts +758 -482
  570. package/src/transaction/__tests/bigtx.vectors.ts +2 -1
  571. package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
  572. package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
  573. package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
  574. package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
  575. package/src/transaction/broadcasters/ARC.ts +69 -38
  576. package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
  577. package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
  578. package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
  579. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
  580. package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
  581. package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
  582. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
  583. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
  584. package/src/transaction/http/DefaultHttpClient.ts +5 -4
  585. package/src/transaction/http/FetchHttpClient.ts +18 -9
  586. package/src/transaction/http/HttpClient.ts +27 -22
  587. package/src/transaction/http/NodejsHttpClient.ts +23 -9
  588. package/src/transaction/http/index.ts +5 -1
  589. package/src/transaction/index.ts +5 -1
  590. package/src/wallet/CachedKeyDeriver.ts +151 -82
  591. package/src/wallet/KeyDeriver.ts +186 -105
  592. package/src/wallet/ProtoWallet.ts +121 -52
  593. package/src/wallet/Wallet.interfaces.ts +167 -156
  594. package/src/wallet/WalletClient.ts +314 -59
  595. package/src/wallet/WalletError.ts +2 -2
  596. package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
  597. package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
  598. package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
  599. package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
  600. package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
  601. package/src/wallet/substrates/WalletWireCalls.ts +2 -2
  602. package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
  603. package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
  604. package/src/wallet/substrates/XDM.ts +425 -36
  605. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
  606. package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
  607. package/src/wallet/substrates/window.CWI.ts +520 -61
@@ -144,11 +144,13 @@ export default class Spend {
144
144
  }
145
145
 
146
146
  const isOpcodeDisabled = (op: number): boolean => {
147
- return op === OP.OP_2MUL ||
147
+ return (
148
+ op === OP.OP_2MUL ||
148
149
  op === OP.OP_2DIV ||
149
150
  op === OP.OP_VERIF ||
150
151
  op === OP.OP_VERNOTIF ||
151
152
  op === OP.OP_VER
153
+ )
152
154
  }
153
155
 
154
156
  const isChunkMinimal = (chunk: ScriptChunk): boolean => {
@@ -179,8 +181,11 @@ export default class Spend {
179
181
  return true
180
182
  }
181
183
 
182
- // Following example from sCrypt now using Number.MAX_SAFE_INTEGER (bsv/lib/transaction/input/input.js).
183
- const isMinimallyEncoded = (buf: number[], maxNumSize: number = Number.MAX_SAFE_INTEGER): boolean => {
184
+ // Following example from sCrypt now using Number.MAX_SAFE_INTEGER (bsv/lib/transaction/input/input).
185
+ const isMinimallyEncoded = (
186
+ buf: number[],
187
+ maxNumSize: number = Number.MAX_SAFE_INTEGER
188
+ ): boolean => {
184
189
  if (buf.length > maxNumSize) {
185
190
  return false
186
191
  }
@@ -316,15 +321,21 @@ export default class Spend {
316
321
 
317
322
  const checkPublicKeyEncoding = (buf: number[]): boolean => {
318
323
  if (buf.length < 33) {
319
- this.scriptEvaluationError('The public key is too short, it must be at least 33 bytes.')
324
+ this.scriptEvaluationError(
325
+ 'The public key is too short, it must be at least 33 bytes.'
326
+ )
320
327
  }
321
328
  if (buf[0] === 0x04) {
322
329
  if (buf.length !== 65) {
323
- this.scriptEvaluationError('The non-compressed public key must be 65 bytes.')
330
+ this.scriptEvaluationError(
331
+ 'The non-compressed public key must be 65 bytes.'
332
+ )
324
333
  }
325
- } else if ((buf[0] === 0x02 || buf[0] === 0x03)) {
334
+ } else if (buf[0] === 0x02 || buf[0] === 0x03) {
326
335
  if (buf.length !== 33) {
327
- this.scriptEvaluationError('The compressed public key must be 33 bytes.')
336
+ this.scriptEvaluationError(
337
+ 'The compressed public key must be 33 bytes.'
338
+ )
328
339
  }
329
340
  } else {
330
341
  this.scriptEvaluationError('The public key is in an unknown format.')
@@ -355,20 +366,51 @@ export default class Spend {
355
366
  }
356
367
 
357
368
  const isScriptExecuting = !this.ifStack.includes(false)
358
- let buf: number[], buf1: number[], buf2: number[], buf3: number[], spliced: number[][], n: number, size: number, rawnum: number[], num: number[], signbit: number, x1: number[], x2: number[], x3: number[], bn: BigNumber, bn1: BigNumber, bn2: BigNumber, bn3: BigNumber, bufSig: number[], bufPubkey: number[], subscript, bufHash: number[]
359
- let sig, pubkey, i: number, fOk: boolean, nKeysCount: number, ikey: number, ikey2: number, nSigsCount: number, isig: number
369
+ let buf: number[],
370
+ buf1: number[],
371
+ buf2: number[],
372
+ buf3: number[],
373
+ spliced: number[][],
374
+ n: number,
375
+ size: number,
376
+ rawnum: number[],
377
+ num: number[],
378
+ signbit: number,
379
+ x1: number[],
380
+ x2: number[],
381
+ x3: number[],
382
+ bn: BigNumber,
383
+ bn1: BigNumber,
384
+ bn2: BigNumber,
385
+ bn3: BigNumber,
386
+ bufSig: number[],
387
+ bufPubkey: number[],
388
+ subscript
389
+ let sig,
390
+ pubkey,
391
+ i: number,
392
+ fOk: boolean,
393
+ nKeysCount: number,
394
+ ikey: number,
395
+ ikey2: number,
396
+ nSigsCount: number,
397
+ isig: number
360
398
  let fValue: boolean, fEqual: boolean, fSuccess: boolean
361
399
 
362
400
  // Read instruction
363
401
  const currentOpcode = operation.op
364
402
  if (typeof currentOpcode === 'undefined') {
365
- this.scriptEvaluationError(`An opcode is missing in this chunk of the ${this.context}!`)
403
+ this.scriptEvaluationError(
404
+ `An opcode is missing in this chunk of the ${this.context}!`
405
+ )
366
406
  }
367
407
  if (
368
408
  Array.isArray(operation.data) &&
369
409
  operation.data.length > maxScriptElementSize
370
410
  ) {
371
- this.scriptEvaluationError(`It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`)
411
+ this.scriptEvaluationError(
412
+ `It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`
413
+ )
372
414
  }
373
415
 
374
416
  if (isScriptExecuting && isOpcodeDisabled(currentOpcode)) {
@@ -376,7 +418,8 @@ export default class Spend {
376
418
  }
377
419
 
378
420
  if (
379
- isScriptExecuting && currentOpcode >= 0 &&
421
+ isScriptExecuting &&
422
+ currentOpcode >= 0 &&
380
423
  currentOpcode <= OP.OP_PUSHDATA4
381
424
  ) {
382
425
  if (requireMinimalPush && !isChunkMinimal(operation)) {
@@ -388,7 +431,10 @@ export default class Spend {
388
431
  } else {
389
432
  this.stack.push(operation.data)
390
433
  }
391
- } else if (isScriptExecuting || (OP.OP_IF <= currentOpcode && currentOpcode <= OP.OP_ENDIF)) {
434
+ } else if (
435
+ isScriptExecuting ||
436
+ (OP.OP_IF <= currentOpcode && currentOpcode <= OP.OP_ENDIF)
437
+ ) {
392
438
  switch (currentOpcode) {
393
439
  case OP.OP_1NEGATE:
394
440
  case OP.OP_1:
@@ -494,7 +540,9 @@ export default class Spend {
494
540
  fValue = false
495
541
  if (isScriptExecuting) {
496
542
  if (this.stack.length < 1) {
497
- this.scriptEvaluationError('OP_IF and OP_NOTIF require at least one item on the stack when they are used!')
543
+ this.scriptEvaluationError(
544
+ 'OP_IF and OP_NOTIF require at least one item on the stack when they are used!'
545
+ )
498
546
  }
499
547
  buf = this.stacktop(-1)
500
548
 
@@ -511,7 +559,8 @@ export default class Spend {
511
559
  if (this.ifStack.length === 0) {
512
560
  this.scriptEvaluationError('OP_ELSE requires a preceeding OP_IF.')
513
561
  }
514
- this.ifStack[this.ifStack.length - 1] = !this.ifStack[this.ifStack.length - 1]
562
+ this.ifStack[this.ifStack.length - 1] =
563
+ !this.ifStack[this.ifStack.length - 1]
515
564
  break
516
565
 
517
566
  case OP.OP_ENDIF:
@@ -523,14 +572,18 @@ export default class Spend {
523
572
 
524
573
  case OP.OP_VERIFY:
525
574
  if (this.stack.length < 1) {
526
- this.scriptEvaluationError('OP_VERIFY requires at least one item to be on the stack.')
575
+ this.scriptEvaluationError(
576
+ 'OP_VERIFY requires at least one item to be on the stack.'
577
+ )
527
578
  }
528
579
  buf = this.stacktop(-1)
529
580
  fValue = this.castToBool(buf)
530
581
  if (fValue) {
531
582
  this.stack.pop()
532
583
  } else {
533
- this.scriptEvaluationError('OP_VERIFY requires the top stack value to be truthy.')
584
+ this.scriptEvaluationError(
585
+ 'OP_VERIFY requires the top stack value to be truthy.'
586
+ )
534
587
  }
535
588
  break
536
589
 
@@ -545,21 +598,26 @@ export default class Spend {
545
598
 
546
599
  case OP.OP_TOALTSTACK:
547
600
  if (this.stack.length < 1) {
548
- this.scriptEvaluationError('OP_TOALTSTACK requires at oeast one item to be on the stack.')
601
+ this.scriptEvaluationError(
602
+ 'OP_TOALTSTACK requires at oeast one item to be on the stack.')
549
603
  }
550
- this.altStack.push(this.stack.pop())
604
+ this.altStack.push(this.stack.pop() ?? [])
551
605
  break
552
606
 
553
607
  case OP.OP_FROMALTSTACK:
554
608
  if (this.altStack.length < 1) {
555
- this.scriptEvaluationError('OP_FROMALTSTACK requires at least one item to be on the stack.')
609
+ this.scriptEvaluationError(
610
+ 'OP_FROMALTSTACK requires at least one item to be on the stack.'
611
+ )
556
612
  }
557
- this.stack.push(this.altStack.pop())
613
+ this.stack.push(this.altStack.pop() ?? [])
558
614
  break
559
615
 
560
616
  case OP.OP_2DROP:
561
617
  if (this.stack.length < 2) {
562
- this.scriptEvaluationError('OP_2DROP requires at least two items to be on the stack.')
618
+ this.scriptEvaluationError(
619
+ 'OP_2DROP requires at least two items to be on the stack.'
620
+ )
563
621
  }
564
622
  this.stack.pop()
565
623
  this.stack.pop()
@@ -567,7 +625,9 @@ export default class Spend {
567
625
 
568
626
  case OP.OP_2DUP:
569
627
  if (this.stack.length < 2) {
570
- this.scriptEvaluationError('OP_2DUP requires at least two items to be on the stack.')
628
+ this.scriptEvaluationError(
629
+ 'OP_2DUP requires at least two items to be on the stack.'
630
+ )
571
631
  }
572
632
  buf1 = this.stacktop(-2)
573
633
  buf2 = this.stacktop(-1)
@@ -577,7 +637,9 @@ export default class Spend {
577
637
 
578
638
  case OP.OP_3DUP:
579
639
  if (this.stack.length < 3) {
580
- this.scriptEvaluationError('OP_3DUP requires at least three items to be on the stack.')
640
+ this.scriptEvaluationError(
641
+ 'OP_3DUP requires at least three items to be on the stack.'
642
+ )
581
643
  }
582
644
  buf1 = this.stacktop(-3)
583
645
  buf2 = this.stacktop(-2)
@@ -589,7 +651,9 @@ export default class Spend {
589
651
 
590
652
  case OP.OP_2OVER:
591
653
  if (this.stack.length < 4) {
592
- this.scriptEvaluationError('OP_2OVER requires at least four items to be on the stack.')
654
+ this.scriptEvaluationError(
655
+ 'OP_2OVER requires at least four items to be on the stack.'
656
+ )
593
657
  }
594
658
  buf1 = this.stacktop(-4)
595
659
  buf2 = this.stacktop(-3)
@@ -599,7 +663,9 @@ export default class Spend {
599
663
 
600
664
  case OP.OP_2ROT:
601
665
  if (this.stack.length < 6) {
602
- this.scriptEvaluationError('OP_2ROT requires at least six items to be on the stack.')
666
+ this.scriptEvaluationError(
667
+ 'OP_2ROT requires at least six items to be on the stack.'
668
+ )
603
669
  }
604
670
  spliced = this.stack.splice(this.stack.length - 6, 2)
605
671
  this.stack.push(spliced[0])
@@ -608,7 +674,9 @@ export default class Spend {
608
674
 
609
675
  case OP.OP_2SWAP:
610
676
  if (this.stack.length < 4) {
611
- this.scriptEvaluationError('OP_2SWAP requires at least four items to be on the stack.')
677
+ this.scriptEvaluationError(
678
+ 'OP_2SWAP requires at least four items to be on the stack.'
679
+ )
612
680
  }
613
681
  spliced = this.stack.splice(this.stack.length - 4, 2)
614
682
  this.stack.push(spliced[0])
@@ -617,7 +685,9 @@ export default class Spend {
617
685
 
618
686
  case OP.OP_IFDUP:
619
687
  if (this.stack.length < 1) {
620
- this.scriptEvaluationError('OP_IFDUP requires at least one item to be on the stack.')
688
+ this.scriptEvaluationError(
689
+ 'OP_IFDUP requires at least one item to be on the stack.'
690
+ )
621
691
  }
622
692
  buf = this.stacktop(-1)
623
693
  fValue = this.castToBool(buf)
@@ -633,28 +703,36 @@ export default class Spend {
633
703
 
634
704
  case OP.OP_DROP:
635
705
  if (this.stack.length < 1) {
636
- this.scriptEvaluationError('OP_DROP requires at least one item to be on the stack.')
706
+ this.scriptEvaluationError(
707
+ 'OP_DROP requires at least one item to be on the stack.'
708
+ )
637
709
  }
638
710
  this.stack.pop()
639
711
  break
640
712
 
641
713
  case OP.OP_DUP:
642
714
  if (this.stack.length < 1) {
643
- this.scriptEvaluationError('OP_DUP requires at least one item to be on the stack.')
715
+ this.scriptEvaluationError(
716
+ 'OP_DUP requires at least one item to be on the stack.'
717
+ )
644
718
  }
645
719
  this.stack.push([...this.stacktop(-1)])
646
720
  break
647
721
 
648
722
  case OP.OP_NIP:
649
723
  if (this.stack.length < 2) {
650
- this.scriptEvaluationError('OP_NIP requires at least two items to be on the stack.')
724
+ this.scriptEvaluationError(
725
+ 'OP_NIP requires at least two items to be on the stack.'
726
+ )
651
727
  }
652
728
  this.stack.splice(this.stack.length - 2, 1)
653
729
  break
654
730
 
655
731
  case OP.OP_OVER:
656
732
  if (this.stack.length < 2) {
657
- this.scriptEvaluationError('OP_OVER requires at least two items to be on the stack.')
733
+ this.scriptEvaluationError(
734
+ 'OP_OVER requires at least two items to be on the stack.'
735
+ )
658
736
  }
659
737
  this.stack.push([...this.stacktop(-2)])
660
738
  break
@@ -662,14 +740,18 @@ export default class Spend {
662
740
  case OP.OP_PICK:
663
741
  case OP.OP_ROLL:
664
742
  if (this.stack.length < 2) {
665
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least two items to be on the stack.`)
743
+ this.scriptEvaluationError(
744
+ `${OP[currentOpcode] as string} requires at least two items to be on the stack.`
745
+ )
666
746
  }
667
747
  buf = this.stacktop(-1)
668
748
  bn = BigNumber.fromScriptNum(buf, requireMinimalPush)
669
749
  n = bn.toNumber()
670
750
  this.stack.pop()
671
751
  if (n < 0 || n >= this.stack.length) {
672
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the top stack element to be 0 or a positive number less than the current size of the stack.`)
752
+ this.scriptEvaluationError(
753
+ `${OP[currentOpcode] as string} requires the top stack element to be 0 or a positive number less than the current size of the stack.`
754
+ )
673
755
  }
674
756
  buf = this.stacktop(-n - 1)
675
757
  if (currentOpcode === OP.OP_ROLL) {
@@ -680,7 +762,9 @@ export default class Spend {
680
762
 
681
763
  case OP.OP_ROT:
682
764
  if (this.stack.length < 3) {
683
- this.scriptEvaluationError('OP_ROT requires at least three items to be on the stack.')
765
+ this.scriptEvaluationError(
766
+ 'OP_ROT requires at least three items to be on the stack.'
767
+ )
684
768
  }
685
769
  x1 = this.stacktop(-3)
686
770
  x2 = this.stacktop(-2)
@@ -692,7 +776,9 @@ export default class Spend {
692
776
 
693
777
  case OP.OP_SWAP:
694
778
  if (this.stack.length < 2) {
695
- this.scriptEvaluationError('OP_SWAP requires at least two items to be on the stack.')
779
+ this.scriptEvaluationError(
780
+ 'OP_SWAP requires at least two items to be on the stack.'
781
+ )
696
782
  }
697
783
  x1 = this.stacktop(-2)
698
784
  x2 = this.stacktop(-1)
@@ -702,14 +788,18 @@ export default class Spend {
702
788
 
703
789
  case OP.OP_TUCK:
704
790
  if (this.stack.length < 2) {
705
- this.scriptEvaluationError('OP_TUCK requires at least two items to be on the stack.')
791
+ this.scriptEvaluationError(
792
+ 'OP_TUCK requires at least two items to be on the stack.'
793
+ )
706
794
  }
707
795
  this.stack.splice(this.stack.length - 2, 0, [...this.stacktop(-1)])
708
796
  break
709
797
 
710
798
  case OP.OP_SIZE:
711
799
  if (this.stack.length < 1) {
712
- this.scriptEvaluationError('OP_SIZE requires at least one item to be on the stack.')
800
+ this.scriptEvaluationError(
801
+ 'OP_SIZE requires at least one item to be on the stack.'
802
+ )
713
803
  }
714
804
  bn = new BigNumber(this.stacktop(-1).length)
715
805
  this.stack.push(bn.toScriptNum())
@@ -719,13 +809,17 @@ export default class Spend {
719
809
  case OP.OP_OR:
720
810
  case OP.OP_XOR:
721
811
  if (this.stack.length < 2) {
722
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least one item to be on the stack.`)
812
+ this.scriptEvaluationError(
813
+ `${OP[currentOpcode] as string} requires at least one item to be on the stack.`
814
+ )
723
815
  }
724
816
  buf1 = this.stacktop(-2)
725
817
  buf2 = this.stacktop(-1)
726
818
 
727
819
  if (buf1.length !== buf2.length) {
728
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the top two stack items to be the same size.`)
820
+ this.scriptEvaluationError(
821
+ `${OP[currentOpcode] as string} requires the top two stack items to be the same size.`
822
+ )
729
823
  }
730
824
 
731
825
  switch (currentOpcode) {
@@ -752,7 +846,9 @@ export default class Spend {
752
846
 
753
847
  case OP.OP_INVERT:
754
848
  if (this.stack.length < 1) {
755
- this.scriptEvaluationError('OP_INVERT requires at least one item to be on the stack.')
849
+ this.scriptEvaluationError(
850
+ 'OP_INVERT requires at least one item to be on the stack.'
851
+ )
756
852
  }
757
853
  buf = this.stacktop(-1)
758
854
  for (let i = 0; i < buf.length; i++) {
@@ -763,17 +859,24 @@ export default class Spend {
763
859
  case OP.OP_LSHIFT:
764
860
  case OP.OP_RSHIFT:
765
861
  if (this.stack.length < 2) {
766
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least two items to be on the stack.`)
862
+ this.scriptEvaluationError(
863
+ `${OP[currentOpcode] as string} requires at least two items to be on the stack.`
864
+ )
767
865
  }
768
866
  buf1 = this.stacktop(-2)
769
867
  if (buf1.length === 0) {
770
868
  this.stack.pop()
771
869
  } else {
772
870
  bn1 = new BigNumber(buf1)
773
- bn2 = BigNumber.fromScriptNum(this.stacktop(-1), requireMinimalPush)
871
+ bn2 = BigNumber.fromScriptNum(
872
+ this.stacktop(-1),
873
+ requireMinimalPush
874
+ )
774
875
  n = bn2.toNumber()
775
876
  if (n < 0) {
776
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the top item on the stack not to be negative.`)
877
+ this.scriptEvaluationError(
878
+ `${OP[currentOpcode] as string} requires the top item on the stack not to be negative.`
879
+ )
777
880
  }
778
881
  this.stack.pop()
779
882
  this.stack.pop()
@@ -795,7 +898,9 @@ export default class Spend {
795
898
  case OP.OP_EQUAL:
796
899
  case OP.OP_EQUALVERIFY:
797
900
  if (this.stack.length < 2) {
798
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least two items to be on the stack.`)
901
+ this.scriptEvaluationError(
902
+ `${OP[currentOpcode] as string} requires at least two items to be on the stack.`
903
+ )
799
904
  }
800
905
  buf1 = this.stacktop(-2)
801
906
  buf2 = this.stacktop(-1)
@@ -807,7 +912,9 @@ export default class Spend {
807
912
  if (fEqual) {
808
913
  this.stack.pop()
809
914
  } else {
810
- this.scriptEvaluationError('OP_EQUALVERIFY requires the top two stack items to be equal.')
915
+ this.scriptEvaluationError(
916
+ 'OP_EQUALVERIFY requires the top two stack items to be equal.'
917
+ )
811
918
  }
812
919
  }
813
920
  break
@@ -819,7 +926,9 @@ export default class Spend {
819
926
  case OP.OP_NOT:
820
927
  case OP.OP_0NOTEQUAL:
821
928
  if (this.stack.length < 1) {
822
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least one items to be on the stack.`)
929
+ this.scriptEvaluationError(
930
+ `${OP[currentOpcode] as string} requires at least one items to be on the stack.`
931
+ )
823
932
  }
824
933
  buf = this.stacktop(-1)
825
934
  bn = BigNumber.fromScriptNum(buf, requireMinimalPush)
@@ -839,10 +948,10 @@ export default class Spend {
839
948
  }
840
949
  break
841
950
  case OP.OP_NOT:
842
- bn = new BigNumber((bn.cmpn(0) === 0) ? 1 : 0 + 0)
951
+ bn = new BigNumber(bn.cmpn(0) === 0 ? 1 : 0 + 0)
843
952
  break
844
953
  case OP.OP_0NOTEQUAL:
845
- bn = new BigNumber((bn.cmpn(0) !== 0) ? 1 : 0 + 0)
954
+ bn = new BigNumber(bn.cmpn(0) !== 0 ? 1 : 0 + 0)
846
955
  break
847
956
  }
848
957
  this.stack.pop()
@@ -866,7 +975,9 @@ export default class Spend {
866
975
  case OP.OP_MIN:
867
976
  case OP.OP_MAX:
868
977
  if (this.stack.length < 2) {
869
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least two items to be on the stack.`)
978
+ this.scriptEvaluationError(
979
+ `${OP[currentOpcode] as string} requires at least two items to be on the stack.`
980
+ )
870
981
  }
871
982
  bn1 = BigNumber.fromScriptNum(this.stacktop(-2), requireMinimalPush)
872
983
  bn2 = BigNumber.fromScriptNum(this.stacktop(-1), requireMinimalPush)
@@ -896,40 +1007,40 @@ export default class Spend {
896
1007
  break
897
1008
  case OP.OP_BOOLAND:
898
1009
  bn = new BigNumber(
899
- ((bn1.cmpn(0) !== 0) && (bn2.cmpn(0) !== 0)) ? 1 : 0 + 0
1010
+ bn1.cmpn(0) !== 0 && bn2.cmpn(0) !== 0 ? 1 : 0 + 0
900
1011
  )
901
1012
  break
902
1013
  case OP.OP_BOOLOR:
903
1014
  bn = new BigNumber(
904
- ((bn1.cmpn(0) !== 0) || (bn2.cmpn(0) !== 0)) ? 1 : 0 + 0
1015
+ bn1.cmpn(0) !== 0 || bn2.cmpn(0) !== 0 ? 1 : 0 + 0
905
1016
  )
906
1017
  break
907
1018
  case OP.OP_NUMEQUAL:
908
- bn = new BigNumber((bn1.cmp(bn2) === 0) ? 1 : 0 + 0)
1019
+ bn = new BigNumber(bn1.cmp(bn2) === 0 ? 1 : 0 + 0)
909
1020
  break
910
1021
  case OP.OP_NUMEQUALVERIFY:
911
- bn = new BigNumber((bn1.cmp(bn2) === 0) ? 1 : 0 + 0)
1022
+ bn = new BigNumber(bn1.cmp(bn2) === 0 ? 1 : 0 + 0)
912
1023
  break
913
1024
  case OP.OP_NUMNOTEQUAL:
914
- bn = new BigNumber((bn1.cmp(bn2) !== 0) ? 1 : 0 + 0)
1025
+ bn = new BigNumber(bn1.cmp(bn2) !== 0 ? 1 : 0 + 0)
915
1026
  break
916
1027
  case OP.OP_LESSTHAN:
917
- bn = new BigNumber((bn1.cmp(bn2) < 0) ? 1 : 0 + 0)
1028
+ bn = new BigNumber(bn1.cmp(bn2) < 0 ? 1 : 0 + 0)
918
1029
  break
919
1030
  case OP.OP_GREATERTHAN:
920
- bn = new BigNumber((bn1.cmp(bn2) > 0) ? 1 : 0 + 0)
1031
+ bn = new BigNumber(bn1.cmp(bn2) > 0 ? 1 : 0 + 0)
921
1032
  break
922
1033
  case OP.OP_LESSTHANOREQUAL:
923
- bn = new BigNumber((bn1.cmp(bn2) <= 0) ? 1 : 0 + 0)
1034
+ bn = new BigNumber(bn1.cmp(bn2) <= 0 ? 1 : 0 + 0)
924
1035
  break
925
1036
  case OP.OP_GREATERTHANOREQUAL:
926
- bn = new BigNumber((bn1.cmp(bn2) >= 0) ? 1 : 0 + 0)
1037
+ bn = new BigNumber(bn1.cmp(bn2) >= 0 ? 1 : 0 + 0)
927
1038
  break
928
1039
  case OP.OP_MIN:
929
- bn = (bn1.cmp(bn2) < 0 ? bn1 : bn2)
1040
+ bn = bn1.cmp(bn2) < 0 ? bn1 : bn2
930
1041
  break
931
1042
  case OP.OP_MAX:
932
- bn = (bn1.cmp(bn2) > 0 ? bn1 : bn2)
1043
+ bn = bn1.cmp(bn2) > 0 ? bn1 : bn2
933
1044
  break
934
1045
  }
935
1046
  this.stack.pop()
@@ -940,19 +1051,23 @@ export default class Spend {
940
1051
  if (this.castToBool(this.stacktop(-1))) {
941
1052
  this.stack.pop()
942
1053
  } else {
943
- this.scriptEvaluationError('OP_NUMEQUALVERIFY requires the top stack item to be truthy.')
1054
+ this.scriptEvaluationError(
1055
+ 'OP_NUMEQUALVERIFY requires the top stack item to be truthy.'
1056
+ )
944
1057
  }
945
1058
  }
946
1059
  break
947
1060
 
948
1061
  case OP.OP_WITHIN:
949
1062
  if (this.stack.length < 3) {
950
- this.scriptEvaluationError('OP_WITHIN requires at least three items to be on the stack.')
1063
+ this.scriptEvaluationError(
1064
+ 'OP_WITHIN requires at least three items to be on the stack.'
1065
+ )
951
1066
  }
952
1067
  bn1 = BigNumber.fromScriptNum(this.stacktop(-3), requireMinimalPush)
953
1068
  bn2 = BigNumber.fromScriptNum(this.stacktop(-2), requireMinimalPush)
954
1069
  bn3 = BigNumber.fromScriptNum(this.stacktop(-1), requireMinimalPush)
955
- fValue = (bn2.cmp(bn1) <= 0) && (bn1.cmp(bn3) < 0)
1070
+ fValue = bn2.cmp(bn1) <= 0 && bn1.cmp(bn3) < 0
956
1071
  this.stack.pop()
957
1072
  this.stack.pop()
958
1073
  this.stack.pop()
@@ -963,10 +1078,14 @@ export default class Spend {
963
1078
  case OP.OP_SHA1:
964
1079
  case OP.OP_SHA256:
965
1080
  case OP.OP_HASH160:
966
- case OP.OP_HASH256:
1081
+ case OP.OP_HASH256: {
967
1082
  if (this.stack.length < 1) {
968
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least one item to be on the stack.`)
1083
+ this.scriptEvaluationError(
1084
+ `${OP[currentOpcode] as string} requires at least one item to be on the stack.`
1085
+ )
969
1086
  }
1087
+
1088
+ let bufHash: number[] = [] // ✅ Initialize bufHash to an empty array
970
1089
  buf = this.stacktop(-1)
971
1090
  if (currentOpcode === OP.OP_RIPEMD160) {
972
1091
  bufHash = Hash.ripemd160(buf)
@@ -979,9 +1098,11 @@ export default class Spend {
979
1098
  } else if (currentOpcode === OP.OP_HASH256) {
980
1099
  bufHash = Hash.hash256(buf)
981
1100
  }
1101
+
982
1102
  this.stack.pop()
983
1103
  this.stack.push(bufHash)
984
1104
  break
1105
+ }
985
1106
 
986
1107
  case OP.OP_CODESEPARATOR:
987
1108
  this.lastCodeSeparator = this.programCounter
@@ -990,7 +1111,9 @@ export default class Spend {
990
1111
  case OP.OP_CHECKSIG:
991
1112
  case OP.OP_CHECKSIGVERIFY:
992
1113
  if (this.stack.length < 2) {
993
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least two items to be on the stack.`)
1114
+ this.scriptEvaluationError(
1115
+ `${OP[currentOpcode] as string} requires at least two items to be on the stack.`
1116
+ )
994
1117
  }
995
1118
 
996
1119
  bufSig = this.stacktop(-2)
@@ -1000,15 +1123,21 @@ export default class Spend {
1000
1123
  !checkSignatureEncoding(bufSig) ||
1001
1124
  !checkPublicKeyEncoding(bufPubkey)
1002
1125
  ) {
1003
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires correct encoding for the public key and signature.`)
1126
+ this.scriptEvaluationError(
1127
+ `${OP[currentOpcode] as string} requires correct encoding for the public key and signature.`
1128
+ )
1004
1129
  }
1005
1130
 
1006
1131
  // Subset of script starting at the most recent codeseparator
1007
1132
  // CScript scriptCode(pbegincodehash, pend);
1008
1133
  if (this.context === 'UnlockingScript') {
1009
- subscript = new Script(this.unlockingScript.chunks.slice(this.lastCodeSeparator))
1134
+ subscript = new Script(
1135
+ this.unlockingScript.chunks.slice(this.lastCodeSeparator ?? 0)
1136
+ )
1010
1137
  } else {
1011
- subscript = new Script(this.lockingScript.chunks.slice(this.lastCodeSeparator))
1138
+ subscript = new Script(
1139
+ this.lockingScript.chunks.slice(this.lastCodeSeparator ?? 0)
1140
+ )
1012
1141
  }
1013
1142
 
1014
1143
  // Drop the signature, since there's no way for a signature to sign itself
@@ -1024,7 +1153,9 @@ export default class Spend {
1024
1153
  }
1025
1154
 
1026
1155
  if (!fSuccess && bufSig.length > 0) {
1027
- this.scriptEvaluationError(`${OP[currentOpcode] as string} failed to verify the signature, and requires an empty signature when verification fails.`)
1156
+ this.scriptEvaluationError(
1157
+ `${OP[currentOpcode] as string} failed to verify the signature, and requires an empty signature when verification fails.`
1158
+ )
1028
1159
  }
1029
1160
 
1030
1161
  this.stack.pop()
@@ -1036,23 +1167,31 @@ export default class Spend {
1036
1167
  if (fSuccess) {
1037
1168
  this.stack.pop()
1038
1169
  } else {
1039
- this.scriptEvaluationError('OP_CHECKSIGVERIFY requires that a valid signature is provided.')
1170
+ this.scriptEvaluationError(
1171
+ 'OP_CHECKSIGVERIFY requires that a valid signature is provided.'
1172
+ )
1040
1173
  }
1041
1174
  }
1042
1175
  break
1043
1176
 
1044
1177
  case OP.OP_CHECKMULTISIG:
1045
1178
  case OP.OP_CHECKMULTISIGVERIFY:
1046
-
1047
1179
  i = 1
1048
1180
  if (this.stack.length < i) {
1049
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires at least 1 item to be on the stack.`)
1181
+ this.scriptEvaluationError(
1182
+ `${OP[currentOpcode] as string} requires at least 1 item to be on the stack.`
1183
+ )
1050
1184
  }
1051
1185
 
1052
- nKeysCount = BigNumber.fromScriptNum(this.stacktop(-i), requireMinimalPush).toNumber()
1186
+ nKeysCount = BigNumber.fromScriptNum(
1187
+ this.stacktop(-i),
1188
+ requireMinimalPush
1189
+ ).toNumber()
1053
1190
  // TODO: Keys and opcount are parameterized in client. No magic numbers!
1054
1191
  if (nKeysCount < 0 || nKeysCount > maxMultisigKeyCount) {
1055
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires a key count between 0 and ${maxMultisigKeyCount}.`)
1192
+ this.scriptEvaluationError(
1193
+ `${OP[currentOpcode] as string} requires a key count between 0 and ${maxMultisigKeyCount}.`
1194
+ )
1056
1195
  }
1057
1196
  ikey = ++i
1058
1197
  i += nKeysCount
@@ -1064,24 +1203,37 @@ export default class Spend {
1064
1203
  ikey2 = nKeysCount + 2
1065
1204
 
1066
1205
  if (this.stack.length < i) {
1067
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the number of stack items not to be less than the number of keys used.`)
1206
+ this.scriptEvaluationError(
1207
+ `${OP[currentOpcode] as string} requires the number of stack items not to be less than the number of keys used.`
1208
+ )
1068
1209
  }
1069
1210
 
1070
- nSigsCount = BigNumber.fromScriptNum(this.stacktop(-i), requireMinimalPush).toNumber()
1211
+ nSigsCount = BigNumber.fromScriptNum(
1212
+ this.stacktop(-i),
1213
+ requireMinimalPush
1214
+ ).toNumber()
1071
1215
  if (nSigsCount < 0 || nSigsCount > nKeysCount) {
1072
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the number of signatures to be no greater than the number of keys.`)
1216
+ this.scriptEvaluationError(
1217
+ `${OP[currentOpcode] as string} requires the number of signatures to be no greater than the number of keys.`
1218
+ )
1073
1219
  }
1074
1220
  isig = ++i
1075
1221
  i += nSigsCount
1076
1222
  if (this.stack.length < i) {
1077
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the number of stack items not to be less than the number of signatures provided.`)
1223
+ this.scriptEvaluationError(
1224
+ `${OP[currentOpcode] as string} requires the number of stack items not to be less than the number of signatures provided.`
1225
+ )
1078
1226
  }
1079
1227
 
1080
1228
  // Subset of script starting at the most recent codeseparator
1081
1229
  if (this.context === 'UnlockingScript') {
1082
- subscript = new Script(this.unlockingScript.chunks.slice(this.lastCodeSeparator))
1230
+ subscript = new Script(
1231
+ this.unlockingScript.chunks.slice(this.lastCodeSeparator ?? 0)
1232
+ )
1083
1233
  } else {
1084
- subscript = new Script(this.lockingScript.chunks.slice(this.lastCodeSeparator))
1234
+ subscript = new Script(
1235
+ this.lockingScript.chunks.slice(this.lastCodeSeparator ?? 0)
1236
+ )
1085
1237
  }
1086
1238
 
1087
1239
  // Drop the signatures, since there's no way for a signature to sign itself
@@ -1101,7 +1253,9 @@ export default class Spend {
1101
1253
  !checkSignatureEncoding(bufSig) ||
1102
1254
  !checkPublicKeyEncoding(bufPubkey)
1103
1255
  ) {
1104
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires correct encoding for the public key and signature.`)
1256
+ this.scriptEvaluationError(
1257
+ `${OP[currentOpcode] as string} requires correct encoding for the public key and signature.`
1258
+ )
1105
1259
  }
1106
1260
 
1107
1261
  try {
@@ -1129,10 +1283,10 @@ export default class Spend {
1129
1283
 
1130
1284
  // Clean up stack of actual arguments
1131
1285
  while (i-- > 1) {
1132
- if (
1133
- !fSuccess && !ikey2 && (this.stacktop(-1).length > 0)
1134
- ) {
1135
- this.scriptEvaluationError(`${OP[currentOpcode] as string} failed to verify a signature, and requires an empty signature when verification fails.`)
1286
+ if (!fSuccess && ikey2 === 0 && this.stacktop(-1).length > 0) {
1287
+ this.scriptEvaluationError(
1288
+ `${OP[currentOpcode] as string} failed to verify a signature, and requires an empty signature when verification fails.`
1289
+ )
1136
1290
  }
1137
1291
 
1138
1292
  if (ikey2 > 0) {
@@ -1149,10 +1303,15 @@ export default class Spend {
1149
1303
  // so optionally verify it is exactly equal to zero prior
1150
1304
  // to removing it from the stack.
1151
1305
  if (this.stack.length < 1) {
1152
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires an extra item to be on the stack.`)
1306
+ this.scriptEvaluationError(
1307
+ `${OP[currentOpcode] as string} requires an extra item to be on the stack.`
1308
+ )
1153
1309
  }
1154
- if (this.stacktop(-1).length > 0) { // NOTE: Is this necessary? We don't care about malleability.
1155
- this.scriptEvaluationError(`${OP[currentOpcode] as string} requires the extra stack item to be empty.`)
1310
+ if (this.stacktop(-1).length > 0) {
1311
+ // NOTE: Is this necessary? We don't care about malleability.
1312
+ this.scriptEvaluationError(
1313
+ `${OP[currentOpcode] as string} requires the extra stack item to be empty.`
1314
+ )
1156
1315
  }
1157
1316
  this.stack.pop()
1158
1317
 
@@ -1162,20 +1321,26 @@ export default class Spend {
1162
1321
  if (fSuccess) {
1163
1322
  this.stack.pop()
1164
1323
  } else {
1165
- this.scriptEvaluationError('OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided.')
1324
+ this.scriptEvaluationError(
1325
+ 'OP_CHECKMULTISIGVERIFY requires that a sufficient number of valid signatures are provided.'
1326
+ )
1166
1327
  }
1167
1328
  }
1168
1329
  break
1169
1330
 
1170
1331
  case OP.OP_CAT:
1171
1332
  if (this.stack.length < 2) {
1172
- this.scriptEvaluationError('OP_CAT requires at least two items to be on the stack.')
1333
+ this.scriptEvaluationError(
1334
+ 'OP_CAT requires at least two items to be on the stack.'
1335
+ )
1173
1336
  }
1174
1337
 
1175
1338
  buf1 = this.stacktop(-2)
1176
1339
  buf2 = this.stacktop(-1)
1177
1340
  if (buf1.length + buf2.length > maxScriptElementSize) {
1178
- this.scriptEvaluationError(`It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`)
1341
+ this.scriptEvaluationError(
1342
+ `It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`
1343
+ )
1179
1344
  }
1180
1345
  this.stack[this.stack.length - 2] = [...buf1, ...buf2]
1181
1346
  this.stack.pop()
@@ -1183,14 +1348,21 @@ export default class Spend {
1183
1348
 
1184
1349
  case OP.OP_SPLIT:
1185
1350
  if (this.stack.length < 2) {
1186
- this.scriptEvaluationError('OP_SPLIT requires at least two items to be on the stack.')
1351
+ this.scriptEvaluationError(
1352
+ 'OP_SPLIT requires at least two items to be on the stack.'
1353
+ )
1187
1354
  }
1188
1355
  buf1 = this.stacktop(-2)
1189
1356
 
1190
1357
  // Make sure the split point is apropriate.
1191
- n = BigNumber.fromScriptNum(this.stacktop(-1), requireMinimalPush).toNumber()
1358
+ n = BigNumber.fromScriptNum(
1359
+ this.stacktop(-1),
1360
+ requireMinimalPush
1361
+ ).toNumber()
1192
1362
  if (n < 0 || n > buf1.length) {
1193
- this.scriptEvaluationError('OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item.')
1363
+ this.scriptEvaluationError(
1364
+ 'OP_SPLIT requires the first stack item to be a non-negative number less than or equal to the size of the second-from-top stack item.'
1365
+ )
1194
1366
  }
1195
1367
 
1196
1368
  // Prepare the results in their own buffer as `data`
@@ -1205,12 +1377,19 @@ export default class Spend {
1205
1377
 
1206
1378
  case OP.OP_NUM2BIN:
1207
1379
  if (this.stack.length < 2) {
1208
- this.scriptEvaluationError('OP_NUM2BIN requires at least two items to be on the stack.')
1380
+ this.scriptEvaluationError(
1381
+ 'OP_NUM2BIN requires at least two items to be on the stack.'
1382
+ )
1209
1383
  }
1210
1384
 
1211
- size = BigNumber.fromScriptNum(this.stacktop(-1), requireMinimalPush).toNumber()
1385
+ size = BigNumber.fromScriptNum(
1386
+ this.stacktop(-1),
1387
+ requireMinimalPush
1388
+ ).toNumber()
1212
1389
  if (size > maxScriptElementSize) {
1213
- this.scriptEvaluationError(`It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`)
1390
+ this.scriptEvaluationError(
1391
+ `It's not currently possible to push data larger than ${maxScriptElementSize} bytes.`
1392
+ )
1214
1393
  }
1215
1394
 
1216
1395
  this.stack.pop()
@@ -1221,7 +1400,9 @@ export default class Spend {
1221
1400
  rawnum = minimallyEncode(rawnum)
1222
1401
 
1223
1402
  if (rawnum.length > size) {
1224
- this.scriptEvaluationError('OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item.')
1403
+ this.scriptEvaluationError(
1404
+ 'OP_NUM2BIN requires that the size expressed in the top stack item is large enough to hold the value expressed in the second-from-top stack item.'
1405
+ )
1225
1406
  }
1226
1407
 
1227
1408
  // We already have an element of the right size, we
@@ -1254,7 +1435,9 @@ export default class Spend {
1254
1435
 
1255
1436
  case OP.OP_BIN2NUM:
1256
1437
  if (this.stack.length < 1) {
1257
- this.scriptEvaluationError('OP_BIN2NUM requires at least one item to be on the stack.')
1438
+ this.scriptEvaluationError(
1439
+ 'OP_BIN2NUM requires at least one item to be on the stack.'
1440
+ )
1258
1441
  }
1259
1442
 
1260
1443
  buf1 = this.stacktop(-1)
@@ -1264,7 +1447,9 @@ export default class Spend {
1264
1447
 
1265
1448
  // The resulting number must be a valid number.
1266
1449
  if (!isMinimallyEncoded(buf2)) {
1267
- this.scriptEvaluationError('OP_BIN2NUM requires that the resulting number is valid.')
1450
+ this.scriptEvaluationError(
1451
+ 'OP_BIN2NUM requires that the resulting number is valid.'
1452
+ )
1268
1453
  }
1269
1454
  break
1270
1455
 
@@ -1290,24 +1475,35 @@ export default class Spend {
1290
1475
  */
1291
1476
  validate (): boolean {
1292
1477
  if (requirePushOnlyUnlockingScripts && !this.unlockingScript.isPushOnly()) {
1293
- this.scriptEvaluationError('Unlocking scripts can only contain push operations, and no other opcodes.')
1478
+ this.scriptEvaluationError(
1479
+ 'Unlocking scripts can only contain push operations, and no other opcodes.'
1480
+ )
1294
1481
  }
1295
1482
  while (true) {
1296
1483
  this.step()
1297
- if (this.context === 'LockingScript' && this.programCounter >= this.lockingScript.chunks.length) {
1484
+ if (
1485
+ this.context === 'LockingScript' &&
1486
+ this.programCounter >= this.lockingScript.chunks.length
1487
+ ) {
1298
1488
  break
1299
1489
  }
1300
1490
  }
1301
1491
  if (this.ifStack.length > 0) {
1302
- this.scriptEvaluationError('Every OP_IF must be terminated prior to the end of the script.')
1492
+ this.scriptEvaluationError(
1493
+ 'Every OP_IF must be terminated prior to the end of the script.'
1494
+ )
1303
1495
  }
1304
1496
  if (requireCleanStack) {
1305
1497
  if (this.stack.length !== 1) {
1306
- this.scriptEvaluationError('The clean stack rule requires exactly one item to be on the stack after script execution.')
1498
+ this.scriptEvaluationError(
1499
+ 'The clean stack rule requires exactly one item to be on the stack after script execution.'
1500
+ )
1307
1501
  }
1308
1502
  }
1309
1503
  if (!this.castToBool(this.stacktop(-1))) {
1310
- this.scriptEvaluationError('The top stack element must be truthy after script evaluation.')
1504
+ this.scriptEvaluationError(
1505
+ 'The top stack element must be truthy after script evaluation.'
1506
+ )
1311
1507
  }
1312
1508
  return true
1313
1509
  }
@@ -1330,6 +1526,8 @@ export default class Spend {
1330
1526
  }
1331
1527
 
1332
1528
  private scriptEvaluationError (str: string): void {
1333
- throw new Error(`Script evaluation error: ${str}\n\nSource TXID: ${this.sourceTXID}\nSource output index: ${this.sourceOutputIndex}\nContext: ${this.context}\nProgram counter: ${this.programCounter}\nStack size: ${this.stack.length}\nAlt stack size: ${this.altStack.length}`)
1529
+ throw new Error(
1530
+ `Script evaluation error: ${str}\n\nSource TXID: ${this.sourceTXID}\nSource output index: ${this.sourceOutputIndex}\nContext: ${this.context}\nProgram counter: ${this.programCounter}\nStack size: ${this.stack.length}\nAlt stack size: ${this.altStack.length}`
1531
+ )
1334
1532
  }
1335
1533
  }