@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
@@ -23,54 +23,62 @@ import { Beef } from './Beef.js'
23
23
  */
24
24
  export class BeefParty extends Beef {
25
25
  /**
26
- * keys are party identifiers.
27
- * values are records of txids with truthy value for which the party already has validity proof.
28
- */
26
+ * keys are party identifiers.
27
+ * values are records of txids with truthy value for which the party already has validity proof.
28
+ */
29
29
  knownTo: Record<string, Record<string, boolean>> = {}
30
30
 
31
31
  /**
32
- *
33
- * @param parties Optional array of initial unique party identifiers.
34
- */
32
+ *
33
+ * @param parties Optional array of initial unique party identifiers.
34
+ */
35
35
  constructor (parties?: string[]) {
36
36
  super()
37
- if (parties) {
38
- for (const party of parties) { this.addParty(party) }
37
+ if (parties != null) {
38
+ for (const party of parties) {
39
+ this.addParty(party)
40
+ }
39
41
  }
40
42
  }
41
43
 
42
44
  /**
43
- * @param party
44
- * @returns `true` if `party` has already been added to this `BeefParty`.
45
- */
46
- isParty (party: string) {
45
+ * @param party
46
+ * @returns `true` if `party` has already been added to this `BeefParty`.
47
+ */
48
+ isParty (party: string): boolean {
47
49
  const r = Object.keys(this.knownTo).includes(party)
48
50
  return r
49
51
  }
50
52
 
51
53
  /**
52
- * Adds a new unique party identifier to this `BeefParty`.
53
- * @param party
54
- */
55
- addParty (party: string) {
56
- if (this.isParty(party)) { throw new Error(`Party ${party} already exists.`) }
54
+ * Adds a new unique party identifier to this `BeefParty`.
55
+ * @param party
56
+ */
57
+ addParty (party: string): void {
58
+ if (this.isParty(party)) {
59
+ throw new Error(`Party ${party} already exists.`)
60
+ }
57
61
  this.knownTo[party] = {}
58
62
  }
59
63
 
60
64
  /**
61
- * @param party
62
- * @returns Array of txids "known" to `party`.
63
- */
65
+ * @param party
66
+ * @returns Array of txids "known" to `party`.
67
+ */
64
68
  getKnownTxidsForParty (party: string): string[] {
65
69
  const knownTxids = this.knownTo[party]
66
- if (!knownTxids) { throw new Error(`Party ${party} is unknown.`) }
70
+
71
+ if (knownTxids === undefined) { // ✅ Explicitly check for undefined
72
+ throw new Error(`Party ${party} is unknown.`)
73
+ }
74
+
67
75
  return Object.keys(knownTxids)
68
76
  }
69
77
 
70
78
  /**
71
- * @param party
72
- * @returns trimmed beef of unknown transactions and proofs for `party`
73
- */
79
+ * @param party
80
+ * @returns trimmed beef of unknown transactions and proofs for `party`
81
+ */
74
82
  getTrimmedBeefForParty (party: string): Beef {
75
83
  const knownTxids = this.getKnownTxidsForParty(party)
76
84
  const prunedBeef = this.clone()
@@ -79,12 +87,14 @@ export class BeefParty extends Beef {
79
87
  }
80
88
 
81
89
  /**
82
- * Make note of additional txids "known" to `party`.
83
- * @param party unique identifier, added if new.
84
- * @param knownTxids
85
- */
86
- addKnownTxidsForParty (party: string, knownTxids: string[]) {
87
- if (!this.isParty(party)) { this.addParty(party) }
90
+ * Make note of additional txids "known" to `party`.
91
+ * @param party unique identifier, added if new.
92
+ * @param knownTxids
93
+ */
94
+ addKnownTxidsForParty (party: string, knownTxids: string[]): void {
95
+ if (!this.isParty(party)) {
96
+ this.addParty(party)
97
+ }
88
98
  const kts = this.knownTo[party]
89
99
  for (const txid of knownTxids) {
90
100
  kts[txid] = true
@@ -102,7 +112,7 @@ export class BeefParty extends Beef {
102
112
  * @param party
103
113
  * @param beef
104
114
  */
105
- mergeBeefFromParty (party: string, beef: number[] | Beef) {
115
+ mergeBeefFromParty (party: string, beef: number[] | Beef): void {
106
116
  const b: Beef = Array.isArray(beef) ? Beef.fromBinary(beef) : beef
107
117
  const knownTxids = b.getValidTxids()
108
118
  this.mergeBeef(b)
@@ -25,7 +25,9 @@ export default class BeefTx {
25
25
  */
26
26
  isValid?: boolean = undefined
27
27
 
28
- get bumpIndex (): number | undefined { return this._bumpIndex }
28
+ get bumpIndex (): number | undefined {
29
+ return this._bumpIndex
30
+ }
29
31
 
30
32
  set bumpIndex (v: number | undefined) {
31
33
  this._bumpIndex = v
@@ -37,34 +39,34 @@ export default class BeefTx {
37
39
  }
38
40
 
39
41
  get isTxidOnly (): boolean {
40
- return !!this._txid && !this._rawTx && !this._tx
42
+ return this._txid !== undefined && this._txid !== null && (this._rawTx == null) && (this._tx == null)
41
43
  }
42
44
 
43
- get txid () {
44
- if (this._txid) return this._txid
45
- if (this._tx) {
45
+ get txid (): string {
46
+ if (this._txid !== undefined && this._txid !== null && this._txid !== '') return this._txid
47
+ if (this._tx != null) {
46
48
  this._txid = this._tx.id('hex')
47
49
  return this._txid
48
50
  }
49
- if (this._rawTx) {
51
+ if (this._rawTx != null) {
50
52
  this._txid = toHex(hash256(this._rawTx))
51
53
  return this._txid
52
54
  }
53
55
  throw new Error('Internal')
54
56
  }
55
57
 
56
- get tx () {
57
- if (this._tx) return this._tx
58
- if (this._rawTx) {
58
+ get tx (): Transaction | undefined {
59
+ if (this._tx != null) return this._tx
60
+ if (this._rawTx != null) {
59
61
  this._tx = Transaction.fromBinary(this._rawTx)
60
62
  return this._tx
61
63
  }
62
64
  return undefined
63
65
  }
64
66
 
65
- get rawTx () {
66
- if (this._rawTx) return this._rawTx
67
- if (this._tx) {
67
+ get rawTx (): number[] | undefined {
68
+ if (this._rawTx != null) return this._rawTx
69
+ if (this._tx != null) {
68
70
  this._rawTx = this._tx.toBinary()
69
71
  return this._rawTx
70
72
  }
@@ -72,9 +74,9 @@ export default class BeefTx {
72
74
  }
73
75
 
74
76
  /**
75
- * @param tx If string, must be a valid txid. If `number[]` must be a valid serialized transaction.
76
- * @param bumpIndex If transaction already has a proof in the beef to which it will be added.
77
- */
77
+ * @param tx If string, must be a valid txid. If `number[]` must be a valid serialized transaction.
78
+ * @param bumpIndex If transaction already has a proof in the beef to which it will be added.
79
+ */
78
80
  constructor (tx: Transaction | number[] | string, bumpIndex?: number) {
79
81
  if (typeof tx === 'string') {
80
82
  this._txid = tx
@@ -99,37 +101,45 @@ export default class BeefTx {
99
101
  return new BeefTx(txid, bumpIndex)
100
102
  }
101
103
 
102
- private updateInputTxids () {
103
- if (this.hasProof || !this.tx) {
104
+ private updateInputTxids (): void {
105
+ if (this.hasProof || (this.tx == null)) {
104
106
  // If we have a proof, or don't have a parsed transaction
105
107
  this.inputTxids = []
106
108
  } else {
107
- const inputTxids = {}
108
- for (const input of this.tx.inputs) { inputTxids[input.sourceTXID] = true }
109
+ const inputTxids: Record<string, boolean> = {} // ✅ Explicit object type
110
+ for (const input of this.tx.inputs) {
111
+ if (input.sourceTXID !== undefined && input.sourceTXID !== null && input.sourceTXID !== '') {
112
+ // ✅ Ensure sourceTXID is defined
113
+ inputTxids[input.sourceTXID] = true
114
+ }
115
+ }
109
116
  this.inputTxids = Object.keys(inputTxids)
110
117
  }
111
118
  }
112
119
 
113
120
  toWriter (writer: Writer, version: number): void {
114
- const writeByte = (bb: number) => {
121
+ const writeByte = (bb: number): void => {
115
122
  writer.writeUInt8(bb)
116
123
  }
117
124
 
118
- const writeTxid = () => {
125
+ const writeTxid = (): void => {
126
+ if (this._txid == null) {
127
+ throw new Error('Transaction ID (_txid) is undefined')
128
+ }
119
129
  writer.writeReverse(toArray(this._txid, 'hex'))
120
130
  }
121
131
 
122
- const writeTx = () => {
123
- if (this._rawTx) {
132
+ const writeTx = (): void => {
133
+ if (this._rawTx != null) {
124
134
  writer.write(this._rawTx)
125
- } else if (this._tx) {
135
+ } else if (this._tx != null) {
126
136
  writer.write(this._tx.toBinary())
127
137
  } else {
128
138
  throw new Error('a valid serialized Transaction is expected')
129
139
  }
130
140
  }
131
141
 
132
- const writeBumpIndex = () => {
142
+ const writeBumpIndex = (): void => {
133
143
  if (this.bumpIndex === undefined) {
134
144
  writeByte(TX_DATA_FORMAT.RAWTX) // 0
135
145
  } else {
@@ -175,7 +185,7 @@ export default class BeefTx {
175
185
  } else {
176
186
  // V1
177
187
  data = Transaction.fromReader(br)
178
- bumpIndex = br.readUInt8() ? br.readVarIntNum() : undefined
188
+ bumpIndex = br.readUInt8() !== 0 ? br.readVarIntNum() : undefined
179
189
  beefTx = BeefTx.fromTx(data, bumpIndex)
180
190
  }
181
191
 
@@ -44,22 +44,26 @@ export interface BroadcastFailure {
44
44
  * The promise resolves to an array of broadcast result response objects.
45
45
  */
46
46
  export interface Broadcaster {
47
- broadcast: (transaction: Transaction) =>
48
- Promise<BroadcastResponse | BroadcastFailure>
49
- broadcastMany?: (txs: Transaction[]) =>
50
- Promise<object[]>
47
+ broadcast: (
48
+ transaction: Transaction
49
+ ) => Promise<BroadcastResponse | BroadcastFailure>
50
+ broadcastMany?: (txs: Transaction[]) => Promise<object[]>
51
51
  }
52
52
 
53
53
  /**
54
54
  * Convenience type guard for response from `Broadcaster.broadcast`
55
55
  */
56
- export function isBroadcastResponse (r: BroadcastResponse | BroadcastFailure): r is BroadcastResponse {
56
+ export function isBroadcastResponse (
57
+ r: BroadcastResponse | BroadcastFailure
58
+ ): r is BroadcastResponse {
57
59
  return r.status === 'success'
58
60
  }
59
61
 
60
62
  /**
61
63
  * Convenience type guard for response from `Broadcaster.broadcast`
62
64
  */
63
- export function isBroadcastFailure (r: BroadcastResponse | BroadcastFailure): r is BroadcastFailure {
65
+ export function isBroadcastFailure (
66
+ r: BroadcastResponse | BroadcastFailure
67
+ ): r is BroadcastFailure {
64
68
  return r.status === 'error'
65
69
  }
@@ -18,8 +18,8 @@
18
18
  * // Implementation to check if the Merkle root is valid for the specified block height.
19
19
  * }
20
20
  * currentHeight: async () => {
21
- * // Implementation to get the current block height.
22
- * }
21
+ * // Implementation to get the current block height.
22
+ * }
23
23
  * };
24
24
  */
25
25
  export default interface ChainTracker {
@@ -1,5 +1,4 @@
1
1
  import Transaction from './Transaction.js'
2
- import BigNumber from '../primitives/BigNumber.js'
3
2
 
4
3
  /**
5
4
  * Represents the interface for a transaction fee model.
@@ -1,3 +1,4 @@
1
+
1
2
  import { Reader, Writer, toHex, toArray } from '../primitives/utils.js'
2
3
  import { hash256 } from '../primitives/Hash.js'
3
4
  import ChainTracker from './ChainTracker.js'
@@ -32,12 +33,14 @@ export interface MerklePathLeaf {
32
33
  */
33
34
  export default class MerklePath {
34
35
  blockHeight: number
35
- path: Array<Array<{
36
+ path: Array<
37
+ Array<{
36
38
  offset: number
37
39
  hash?: string
38
40
  txid?: boolean
39
41
  duplicate?: boolean
40
- }>>
42
+ }>
43
+ >
41
44
 
42
45
  /**
43
46
  * Creates a MerklePath instance from a hexadecimal string.
@@ -50,14 +53,20 @@ export default class MerklePath {
50
53
  return MerklePath.fromBinary(toArray(hex, 'hex'))
51
54
  }
52
55
 
53
- static fromReader (reader: Reader, legalOffsetsOnly: boolean = true): MerklePath {
56
+ static fromReader (
57
+ reader: Reader,
58
+ legalOffsetsOnly: boolean = true
59
+ ): MerklePath {
54
60
  const blockHeight = reader.readVarIntNum()
55
61
  const treeHeight = reader.readUInt8()
56
- const path = Array(treeHeight).fill(0).map(() => ([]))
57
- let flags, offset, nLeavesAtThisHeight
62
+ // Explicitly define the type of path as an array of arrays of leaf objects
63
+ const path: Array<Array<{ offset: number, hash?: string, txid?: boolean, duplicate?: boolean }>> = Array(treeHeight)
64
+ .fill(null)
65
+ .map(() => [])
66
+ let flags: number, offset: number, nLeavesAtThisHeight: number
58
67
  for (let level = 0; level < treeHeight; level++) {
59
68
  nLeavesAtThisHeight = reader.readVarIntNum()
60
- while (nLeavesAtThisHeight) {
69
+ while (nLeavesAtThisHeight > 0) {
61
70
  offset = reader.readVarIntNum()
62
71
  flags = reader.readUInt8()
63
72
  const leaf: {
@@ -66,17 +75,22 @@ export default class MerklePath {
66
75
  txid?: boolean
67
76
  duplicate?: boolean
68
77
  } = { offset }
69
- if (flags & 1) {
78
+ if ((flags & 1) !== 0) {
70
79
  leaf.duplicate = true
71
80
  } else {
72
- if (flags & 2) {
81
+ if ((flags & 2) !== 0) {
73
82
  leaf.txid = true
74
83
  }
75
84
  leaf.hash = toHex(reader.read(32).reverse())
76
85
  }
86
+ // Ensure path[level] exists before pushing
87
+ if (!Array.isArray(path[level]) || path[level].length === 0) {
88
+ path[level] = []
89
+ }
77
90
  path[level].push(leaf)
78
91
  nLeavesAtThisHeight--
79
92
  }
93
+ // Sort the array based on the offset property
80
94
  path[level].sort((a, b) => a.offset - b.offset)
81
95
  }
82
96
  return new MerklePath(blockHeight, path, legalOffsetsOnly)
@@ -109,34 +123,48 @@ export default class MerklePath {
109
123
  return new MerklePath(height, [[{ offset: 0, hash: txid, txid: true }]])
110
124
  }
111
125
 
112
- constructor (blockHeight: number, path: Array<Array<{
113
- offset: number
114
- hash?: string
115
- txid?: boolean
116
- duplicate?: boolean
117
- }>>, legalOffsetsOnly: boolean = true) {
126
+ constructor (
127
+ blockHeight: number,
128
+ path: Array<
129
+ Array<{
130
+ offset: number
131
+ hash?: string
132
+ txid?: boolean
133
+ duplicate?: boolean
134
+ }>
135
+ >,
136
+ legalOffsetsOnly: boolean = true
137
+ ) {
118
138
  this.blockHeight = blockHeight
119
139
  this.path = path
120
140
 
121
141
  // store all of the legal offsets which we expect given the txid indices.
122
- const legalOffsets = Array(this.path.length).fill(0).map(() => new Set())
123
- this.path.map((leaves, height) => {
142
+ const legalOffsets = Array(this.path.length)
143
+ .fill(0)
144
+ .map(() => new Set())
145
+ this.path.forEach((leaves, height) => {
124
146
  if (leaves.length === 0 && height === 0) {
125
147
  throw new Error(`Empty level at height: ${height}`)
126
148
  }
127
149
  const offsetsAtThisHeight = new Set()
128
- leaves.map(leaf => {
129
- if (offsetsAtThisHeight.has(leaf.offset)) throw new Error(`Duplicate offset: ${leaf.offset}, at height: ${height}`)
150
+ leaves.forEach((leaf) => {
151
+ if (offsetsAtThisHeight.has(leaf.offset)) {
152
+ throw new Error(
153
+ `Duplicate offset: ${leaf.offset}, at height: ${height}`
154
+ )
155
+ }
130
156
  offsetsAtThisHeight.add(leaf.offset)
131
157
  if (height === 0) {
132
- if (!leaf.duplicate) {
158
+ if (leaf.duplicate !== true) {
133
159
  for (let h = 1; h < this.path.length; h++) {
134
- legalOffsets[h].add(leaf.offset >> h ^ 1)
160
+ legalOffsets[h].add((leaf.offset >> h) ^ 1)
135
161
  }
136
162
  }
137
163
  } else {
138
164
  if (legalOffsetsOnly && !legalOffsets[height].has(leaf.offset)) {
139
- throw new Error(`Invalid offset: ${leaf.offset}, at height: ${height}, with legal offsets: ${Array.from(legalOffsets[height]).join(', ')}`)
165
+ throw new Error(
166
+ `Invalid offset: ${leaf.offset}, at height: ${height}, with legal offsets: ${Array.from(legalOffsets[height]).join(', ')}`
167
+ )
140
168
  }
141
169
  }
142
170
  })
@@ -144,7 +172,7 @@ export default class MerklePath {
144
172
 
145
173
  // every txid must calculate to the same root.
146
174
  let root: string
147
- this.path[0].map((leaf, idx) => {
175
+ this.path[0].forEach((leaf, idx) => {
148
176
  if (idx === 0) root = this.computeRoot(leaf.hash)
149
177
  if (root !== this.computeRoot(leaf.hash)) {
150
178
  throw new Error('Mismatched roots')
@@ -168,10 +196,10 @@ export default class MerklePath {
168
196
  for (const leaf of this.path[level]) {
169
197
  writer.writeVarIntNum(leaf.offset)
170
198
  let flags = 0
171
- if (leaf?.duplicate) {
199
+ if (leaf?.duplicate === true) {
172
200
  flags |= 1
173
201
  }
174
- if (leaf?.txid) {
202
+ if (leaf?.txid !== undefined && leaf.txid !== null) {
175
203
  flags |= 2
176
204
  }
177
205
  writer.writeUInt8(flags)
@@ -194,7 +222,11 @@ export default class MerklePath {
194
222
 
195
223
  //
196
224
  private indexOf (txid: string): number {
197
- return this.path[0].find(l => l.hash === txid).offset
225
+ const leaf = this.path[0].find((l) => l.hash === txid)
226
+ if (leaf === null || leaf === undefined) {
227
+ throw new Error(`Transaction ID ${txid} not found in the Merkle Path`)
228
+ }
229
+ return leaf.offset
198
230
  }
199
231
 
200
232
  /**
@@ -206,35 +238,42 @@ export default class MerklePath {
206
238
  */
207
239
  computeRoot (txid?: string): string {
208
240
  if (typeof txid !== 'string') {
209
- txid = this.path[0].find(leaf => Boolean(leaf?.hash)).hash
241
+ const foundLeaf = this.path[0].find((leaf) => Boolean(leaf?.hash))
242
+ if (foundLeaf === null || foundLeaf === undefined) {
243
+ throw new Error('No valid leaf found in the Merkle Path')
244
+ }
245
+ txid = foundLeaf.hash
210
246
  }
211
247
  // Find the index of the txid at the lowest level of the Merkle tree
248
+ if (typeof txid !== 'string') {
249
+ throw new Error('Transaction ID is undefined')
250
+ }
212
251
  const index = this.indexOf(txid)
213
252
  if (typeof index !== 'number') {
214
- throw new Error(`This proof does not contain the txid: ${txid}`)
253
+ throw new Error(`This proof does not contain the txid: ${txid ?? 'undefined'}`)
215
254
  }
216
255
  // Calculate the root using the index as a way to determine which direction to concatenate.
217
- const hash = (m: string): string => toHex((
218
- hash256(toArray(m, 'hex').reverse())
219
- ).reverse())
256
+ const hash = (m: string): string =>
257
+ toHex(hash256(toArray(m, 'hex').reverse()).reverse())
220
258
  let workingHash = txid
221
259
 
222
260
  // special case for blocks with only one transaction
223
261
  if (this.path.length === 1 && this.path[0].length === 1) return workingHash
224
262
 
225
263
  for (let height = 0; height < this.path.length; height++) {
264
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
226
265
  const leaves = this.path[height]
227
- const offset = index >> height ^ 1
266
+ const offset = (index >> height) ^ 1
228
267
  const leaf = this.findOrComputeLeaf(height, offset)
229
268
  if (typeof leaf !== 'object') {
230
269
  throw new Error(`Missing hash for index ${index} at height ${height}`)
231
270
  }
232
- if (leaf.duplicate) {
233
- workingHash = hash(workingHash + workingHash)
271
+ if (leaf.duplicate === true) {
272
+ workingHash = hash((workingHash ?? '') + (workingHash ?? ''))
234
273
  } else if (offset % 2 !== 0) {
235
- workingHash = hash(leaf.hash + workingHash)
274
+ workingHash = hash((leaf.hash ?? '') + (workingHash ?? ''))
236
275
  } else {
237
- workingHash = hash(workingHash + leaf.hash)
276
+ workingHash = hash((workingHash ?? '') + (leaf.hash ?? ''))
238
277
  }
239
278
  }
240
279
  return workingHash
@@ -248,14 +287,18 @@ export default class MerklePath {
248
287
  * @param height
249
288
  * @param offset
250
289
  */
251
- findOrComputeLeaf (height: number, offset: number): MerklePathLeaf | undefined {
252
- const hash = (m: string): string => toHex((
253
- hash256(toArray(m, 'hex').reverse())
254
- ).reverse())
290
+ findOrComputeLeaf (
291
+ height: number,
292
+ offset: number
293
+ ): MerklePathLeaf | undefined {
294
+ const hash = (m: string): string =>
295
+ toHex(hash256(toArray(m, 'hex').reverse()).reverse())
255
296
 
256
- let leaf: MerklePathLeaf | undefined = this.path[height].find(l => l.offset === offset)
297
+ let leaf: MerklePathLeaf | undefined = this.path[height].find(
298
+ (l) => l.offset === offset
299
+ )
257
300
 
258
- if (leaf) return leaf
301
+ if (leaf != null) return leaf
259
302
 
260
303
  if (height === 0) return undefined
261
304
 
@@ -263,13 +306,17 @@ export default class MerklePath {
263
306
  const l = offset << 1
264
307
 
265
308
  const leaf0 = this.findOrComputeLeaf(h, l)
266
- if (!leaf0 || !leaf0.hash) return undefined
309
+ if (leaf0 == null || leaf0.hash == null || leaf0.hash === '') return undefined
267
310
 
268
311
  const leaf1 = this.findOrComputeLeaf(h, l + 1)
269
- if (!leaf1) return undefined
312
+ if (leaf1 == null) return undefined
270
313
 
271
314
  let workinghash: string
272
- if (leaf1.duplicate) { workinghash = hash(leaf0.hash + leaf0.hash) } else { workinghash = hash(leaf1.hash + leaf0.hash) }
315
+ if (leaf1.duplicate === true) {
316
+ workinghash = hash(leaf0.hash + leaf0.hash)
317
+ } else {
318
+ workinghash = hash((leaf1.hash ?? '') + (leaf0.hash ?? ''))
319
+ }
273
320
  leaf = {
274
321
  offset,
275
322
  hash: workinghash
@@ -306,27 +353,39 @@ export default class MerklePath {
306
353
  */
307
354
  combine (other: MerklePath): void {
308
355
  if (this.blockHeight !== other.blockHeight) {
309
- throw new Error('You cannot combine paths which do not have the same block height.')
356
+ throw new Error(
357
+ 'You cannot combine paths which do not have the same block height.'
358
+ )
310
359
  }
311
360
  const root1 = this.computeRoot()
312
361
  const root2 = other.computeRoot()
313
362
  if (root1 !== root2) {
314
- throw new Error('You cannot combine paths which do not have the same root.')
363
+ throw new Error(
364
+ 'You cannot combine paths which do not have the same root.'
365
+ )
315
366
  }
316
- const combinedPath = []
367
+ const combinedPath: Array<Array<{ offset: number, hash?: string, txid?: boolean, duplicate?: boolean }>> = []
317
368
  for (let h = 0; h < this.path.length; h++) {
318
369
  combinedPath.push([])
319
370
  for (let l = 0; l < this.path[h].length; l++) {
320
371
  combinedPath[h].push(this.path[h][l])
321
372
  }
322
373
  for (let l = 0; l < other.path[h].length; l++) {
323
- if (!(combinedPath[h].find(leaf => leaf.offset === other.path[h][l].offset) as boolean)) {
374
+ if (
375
+ combinedPath[h].find(
376
+ (leaf) => leaf.offset === other.path[h][l].offset
377
+ ) === undefined
378
+ ) {
324
379
  combinedPath[h].push(other.path[h][l])
325
380
  } else {
326
381
  // Ensure that any elements which appear in both are not downgraded to a non txid.
327
- if (other.path[h][l]?.txid) {
328
- const target = combinedPath[h].find(leaf => leaf.offset === other.path[h][l].offset)
329
- target.txid = true
382
+ if (other.path[h][l]?.txid !== undefined && other.path[h][l]?.txid !== null) {
383
+ const target = combinedPath[h].find(
384
+ (leaf) => leaf.offset === other.path[h][l].offset
385
+ )
386
+ if (target !== null && target !== undefined) {
387
+ target.txid = true
388
+ }
330
389
  }
331
390
  }
332
391
  }
@@ -340,15 +399,21 @@ export default class MerklePath {
340
399
  * Assumes that at least all required nodes are present.
341
400
  * Leaves all levels sorted by increasing offset.
342
401
  */
343
- trim () {
344
- const pushIfNew = (v: number, a: number[]) => {
345
- if (a.length === 0 || a.slice(-1)[0] !== v) { a.push(v) }
402
+ trim (): void {
403
+ const pushIfNew = (v: number, a: number[]): void => {
404
+ if (a.length === 0 || a.slice(-1)[0] !== v) {
405
+ a.push(v)
406
+ }
346
407
  }
347
408
 
348
- const dropOffsetsFromLevel = (dropOffsets: number[], level: number) => {
409
+ const dropOffsetsFromLevel = (dropOffsets: number[], level: number): void => {
349
410
  for (let i = dropOffsets.length; i >= 0; i--) {
350
- const l = this.path[level].findIndex(n => n.offset === dropOffsets[i])
351
- if (l >= 0) { this.path[level].splice(l, 1) }
411
+ const l = this.path[level].findIndex(
412
+ (n) => n.offset === dropOffsets[i]
413
+ )
414
+ if (l >= 0) {
415
+ this.path[level].splice(l, 1)
416
+ }
352
417
  }
353
418
  }
354
419
 
@@ -368,13 +433,13 @@ export default class MerklePath {
368
433
  }
369
434
  for (let l = 0; l < this.path[0].length; l++) {
370
435
  const n = this.path[0][l]
371
- if (n.txid) {
436
+ if (n.txid === true) {
372
437
  // level 0 must enable computing level 1 for txid nodes
373
438
  pushIfNew(n.offset >> 1, computedOffsets)
374
439
  } else {
375
440
  const isOdd = n.offset % 2 === 1
376
441
  const peer = this.path[0][l + (isOdd ? -1 : 1)]
377
- if (!peer.txid) {
442
+ if (peer.txid === undefined || peer.txid === null || !peer.txid) {
378
443
  // drop non-txid level 0 nodes without a txid peer
379
444
  pushIfNew(peer.offset, dropOffsets)
380
445
  }