@bsv/sdk 2.1.0 → 2.1.1

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 (383) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/auth/Peer.js +8 -13
  4. package/dist/cjs/src/auth/Peer.js.map +1 -1
  5. package/dist/cjs/src/auth/SessionManager.js +4 -7
  6. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  7. package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  9. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  10. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  11. package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
  12. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  13. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  14. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  15. package/dist/cjs/src/compat/ECIES.js +29 -34
  16. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  17. package/dist/cjs/src/compat/HD.js +9 -4
  18. package/dist/cjs/src/compat/HD.js.map +1 -1
  19. package/dist/cjs/src/compat/Mnemonic.js +12 -12
  20. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  21. package/dist/cjs/src/identity/ContactsManager.js +172 -232
  22. package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
  23. package/dist/cjs/src/identity/IdentityClient.js +122 -55
  24. package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
  25. package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
  26. package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
  27. package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
  28. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  29. package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
  30. package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
  31. package/dist/cjs/src/messages/SignedMessage.js +1 -1
  32. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  33. package/dist/cjs/src/overlay-tools/Historian.js +1 -1
  34. package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
  35. package/dist/cjs/src/overlay-tools/LookupResolver.js +139 -46
  36. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  37. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
  38. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  39. package/dist/cjs/src/primitives/AESGCM.js +2 -2
  40. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  41. package/dist/cjs/src/primitives/BigNumber.js +164 -148
  42. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  43. package/dist/cjs/src/primitives/Curve.js +17 -15
  44. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  45. package/dist/cjs/src/primitives/ECDSA.js +12 -7
  46. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  47. package/dist/cjs/src/primitives/Hash.js +140 -56
  48. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  49. package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
  50. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  51. package/dist/cjs/src/primitives/K256.js +3 -3
  52. package/dist/cjs/src/primitives/K256.js.map +1 -1
  53. package/dist/cjs/src/primitives/Point.js +36 -40
  54. package/dist/cjs/src/primitives/Point.js.map +1 -1
  55. package/dist/cjs/src/primitives/PrivateKey.js +4 -4
  56. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  57. package/dist/cjs/src/primitives/PublicKey.js +4 -4
  58. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  59. package/dist/cjs/src/primitives/Random.js +10 -14
  60. package/dist/cjs/src/primitives/Random.js.map +1 -1
  61. package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
  62. package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
  63. package/dist/cjs/src/primitives/Schnorr.js +2 -2
  64. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  65. package/dist/cjs/src/primitives/Secp256r1.js +2 -1
  66. package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
  67. package/dist/cjs/src/primitives/Signature.js +8 -8
  68. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  69. package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
  70. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  71. package/dist/cjs/src/primitives/utils.js +39 -46
  72. package/dist/cjs/src/primitives/utils.js.map +1 -1
  73. package/dist/cjs/src/registry/RegistryClient.js +31 -23
  74. package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
  75. package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
  76. package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
  77. package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
  78. package/dist/cjs/src/script/Script.js +93 -170
  79. package/dist/cjs/src/script/Script.js.map +1 -1
  80. package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
  81. package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
  82. package/dist/cjs/src/script/Spend.js +14 -12
  83. package/dist/cjs/src/script/Spend.js.map +1 -1
  84. package/dist/cjs/src/script/templates/PushDrop.js +22 -18
  85. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  86. package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
  87. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  88. package/dist/cjs/src/storage/StorageDownloader.js +42 -9
  89. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  90. package/dist/cjs/src/totp/totp.js +1 -1
  91. package/dist/cjs/src/totp/totp.js.map +1 -1
  92. package/dist/cjs/src/transaction/Beef.js +239 -192
  93. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  94. package/dist/cjs/src/transaction/BeefConstants.js +19 -0
  95. package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
  96. package/dist/cjs/src/transaction/BeefTx.js +12 -12
  97. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  98. package/dist/cjs/src/transaction/MerklePath.js +4 -4
  99. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  100. package/dist/cjs/src/transaction/Transaction.js +49 -52
  101. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  102. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  103. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  104. package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
  105. package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
  106. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
  107. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  108. package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
  109. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  110. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  111. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  112. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  113. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  114. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
  115. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  116. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
  117. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  118. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  119. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  120. package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
  121. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  122. package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
  123. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  124. package/dist/cjs/src/wallet/validationHelpers.js +9 -9
  125. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
  126. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  127. package/dist/esm/src/auth/Peer.js +25 -13
  128. package/dist/esm/src/auth/Peer.js.map +1 -1
  129. package/dist/esm/src/auth/SessionManager.js +4 -7
  130. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  131. package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
  132. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  133. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  134. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  135. package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
  136. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  137. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  138. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  139. package/dist/esm/src/compat/ECIES.js +29 -34
  140. package/dist/esm/src/compat/ECIES.js.map +1 -1
  141. package/dist/esm/src/compat/HD.js +9 -4
  142. package/dist/esm/src/compat/HD.js.map +1 -1
  143. package/dist/esm/src/compat/Mnemonic.js +12 -12
  144. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  145. package/dist/esm/src/identity/ContactsManager.js +172 -232
  146. package/dist/esm/src/identity/ContactsManager.js.map +1 -1
  147. package/dist/esm/src/identity/IdentityClient.js +122 -55
  148. package/dist/esm/src/identity/IdentityClient.js.map +1 -1
  149. package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
  150. package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
  151. package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
  152. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  153. package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
  154. package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
  155. package/dist/esm/src/messages/SignedMessage.js +1 -1
  156. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  157. package/dist/esm/src/overlay-tools/Historian.js +1 -1
  158. package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
  159. package/dist/esm/src/overlay-tools/LookupResolver.js +139 -46
  160. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  161. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
  162. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  163. package/dist/esm/src/primitives/AESGCM.js +2 -2
  164. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  165. package/dist/esm/src/primitives/BigNumber.js +167 -154
  166. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  167. package/dist/esm/src/primitives/Curve.js +17 -15
  168. package/dist/esm/src/primitives/Curve.js.map +1 -1
  169. package/dist/esm/src/primitives/ECDSA.js +12 -7
  170. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  171. package/dist/esm/src/primitives/Hash.js +140 -56
  172. package/dist/esm/src/primitives/Hash.js.map +1 -1
  173. package/dist/esm/src/primitives/JacobianPoint.js +8 -8
  174. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  175. package/dist/esm/src/primitives/K256.js +3 -3
  176. package/dist/esm/src/primitives/K256.js.map +1 -1
  177. package/dist/esm/src/primitives/Point.js +36 -40
  178. package/dist/esm/src/primitives/Point.js.map +1 -1
  179. package/dist/esm/src/primitives/PrivateKey.js +4 -4
  180. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  181. package/dist/esm/src/primitives/PublicKey.js +4 -4
  182. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  183. package/dist/esm/src/primitives/Random.js +10 -14
  184. package/dist/esm/src/primitives/Random.js.map +1 -1
  185. package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
  186. package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
  187. package/dist/esm/src/primitives/Schnorr.js +1 -1
  188. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  189. package/dist/esm/src/primitives/Secp256r1.js +2 -1
  190. package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
  191. package/dist/esm/src/primitives/Signature.js +8 -8
  192. package/dist/esm/src/primitives/Signature.js.map +1 -1
  193. package/dist/esm/src/primitives/TransactionSignature.js +20 -21
  194. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  195. package/dist/esm/src/primitives/utils.js +39 -48
  196. package/dist/esm/src/primitives/utils.js.map +1 -1
  197. package/dist/esm/src/registry/RegistryClient.js +31 -23
  198. package/dist/esm/src/registry/RegistryClient.js.map +1 -1
  199. package/dist/esm/src/remittance/RemittanceManager.js +19 -18
  200. package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
  201. package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
  202. package/dist/esm/src/script/Script.js +93 -170
  203. package/dist/esm/src/script/Script.js.map +1 -1
  204. package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
  205. package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
  206. package/dist/esm/src/script/Spend.js +14 -12
  207. package/dist/esm/src/script/Spend.js.map +1 -1
  208. package/dist/esm/src/script/templates/PushDrop.js +4 -3
  209. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  210. package/dist/esm/src/script/templates/RPuzzle.js +2 -4
  211. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  212. package/dist/esm/src/storage/StorageDownloader.js +1 -1
  213. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  214. package/dist/esm/src/totp/totp.js +1 -1
  215. package/dist/esm/src/totp/totp.js.map +1 -1
  216. package/dist/esm/src/transaction/Beef.js +229 -186
  217. package/dist/esm/src/transaction/Beef.js.map +1 -1
  218. package/dist/esm/src/transaction/BeefConstants.js +16 -0
  219. package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
  220. package/dist/esm/src/transaction/BeefTx.js +3 -3
  221. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  222. package/dist/esm/src/transaction/MerklePath.js +4 -4
  223. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  224. package/dist/esm/src/transaction/Transaction.js +49 -52
  225. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  226. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  227. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  228. package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
  229. package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
  230. package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
  231. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  232. package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
  233. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  234. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  235. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  236. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  237. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  238. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
  239. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  240. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
  241. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  242. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  243. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  244. package/dist/esm/src/wallet/substrates/XDM.js +4 -4
  245. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  246. package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
  247. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  248. package/dist/esm/src/wallet/validationHelpers.js +9 -9
  249. package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
  250. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  251. package/dist/types/src/auth/Peer.d.ts +13 -0
  252. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  253. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  254. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  255. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  256. package/dist/types/src/compat/HD.d.ts.map +1 -1
  257. package/dist/types/src/identity/ContactsManager.d.ts +18 -0
  258. package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
  259. package/dist/types/src/identity/IdentityClient.d.ts +47 -8
  260. package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
  261. package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
  262. package/dist/types/src/overlay-tools/LookupResolver.d.ts +59 -1
  263. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  264. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
  265. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  266. package/dist/types/src/primitives/BigNumber.d.ts +13 -3
  267. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  268. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  269. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  270. package/dist/types/src/primitives/Hash.d.ts +3 -3
  271. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  272. package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
  273. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  274. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  275. package/dist/types/src/primitives/Random.d.ts +2 -2
  276. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  277. package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Schnorr.d.ts +2 -1
  279. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
  281. package/dist/types/src/primitives/utils.d.ts +2 -4
  282. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  283. package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
  284. package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
  285. package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
  286. package/dist/types/src/script/Script.d.ts +15 -8
  287. package/dist/types/src/script/Script.d.ts.map +1 -1
  288. package/dist/types/src/script/Spend.d.ts.map +1 -1
  289. package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
  290. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  291. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  292. package/dist/types/src/transaction/Beef.d.ts +46 -8
  293. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  294. package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
  295. package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
  296. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  297. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  298. package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
  299. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  300. package/dist/types/src/wallet/Wallet.interfaces.d.ts +2 -2
  301. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  302. package/dist/types/src/wallet/WalletClient.d.ts +7 -7
  303. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  304. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
  305. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  306. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
  307. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  308. package/dist/types/src/wallet/substrates/window.CWI.d.ts +8 -8
  309. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  310. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  311. package/dist/umd/bundle.js +3 -3
  312. package/package.json +1 -1
  313. package/src/auth/Peer.ts +26 -13
  314. package/src/auth/SessionManager.ts +4 -7
  315. package/src/auth/certificates/MasterCertificate.ts +1 -1
  316. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
  317. package/src/auth/clients/AuthFetch.ts +41 -41
  318. package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
  319. package/src/compat/ECIES.ts +29 -34
  320. package/src/compat/HD.ts +10 -5
  321. package/src/compat/Mnemonic.ts +11 -11
  322. package/src/compat/__tests/HD.test.ts +19 -0
  323. package/src/identity/ContactsManager.ts +194 -257
  324. package/src/identity/IdentityClient.ts +155 -66
  325. package/src/identity/__tests/IdentityClient.test.ts +25 -1
  326. package/src/kvstore/GlobalKVStore.ts +31 -32
  327. package/src/kvstore/LocalKVStore.ts +8 -8
  328. package/src/kvstore/kvStoreInterpreter.ts +2 -2
  329. package/src/messages/SignedMessage.ts +1 -1
  330. package/src/overlay-tools/Historian.ts +1 -1
  331. package/src/overlay-tools/LookupResolver.ts +182 -45
  332. package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
  333. package/src/primitives/AESGCM.ts +2 -2
  334. package/src/primitives/BigNumber.ts +122 -113
  335. package/src/primitives/Curve.ts +16 -15
  336. package/src/primitives/ECDSA.ts +10 -8
  337. package/src/primitives/Hash.ts +152 -53
  338. package/src/primitives/JacobianPoint.ts +13 -11
  339. package/src/primitives/K256.ts +3 -3
  340. package/src/primitives/Point.ts +35 -38
  341. package/src/primitives/PrivateKey.ts +3 -3
  342. package/src/primitives/PublicKey.ts +3 -3
  343. package/src/primitives/Random.ts +11 -14
  344. package/src/primitives/ReaderUint8Array.ts +7 -7
  345. package/src/primitives/Schnorr.ts +2 -1
  346. package/src/primitives/Secp256r1.ts +2 -1
  347. package/src/primitives/Signature.ts +8 -8
  348. package/src/primitives/TransactionSignature.ts +16 -16
  349. package/src/primitives/utils.ts +37 -47
  350. package/src/registry/RegistryClient.ts +25 -25
  351. package/src/remittance/RemittanceManager.ts +17 -18
  352. package/src/remittance/modules/BasicBRC29.ts +2 -5
  353. package/src/script/Script.ts +114 -170
  354. package/src/script/ScriptEvaluationError.ts +2 -2
  355. package/src/script/Spend.ts +14 -15
  356. package/src/script/templates/PushDrop.ts +5 -3
  357. package/src/script/templates/RPuzzle.ts +2 -4
  358. package/src/storage/StorageDownloader.ts +1 -1
  359. package/src/totp/totp.ts +1 -1
  360. package/src/transaction/Beef.ts +241 -203
  361. package/src/transaction/BeefConstants.ts +16 -0
  362. package/src/transaction/BeefTx.ts +3 -3
  363. package/src/transaction/MerklePath.ts +4 -4
  364. package/src/transaction/Transaction.ts +48 -51
  365. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
  366. package/src/transaction/http/BinaryFetchClient.ts +8 -8
  367. package/src/transaction/http/DefaultHttpClient.ts +8 -8
  368. package/src/wallet/CachedKeyDeriver.ts +8 -6
  369. package/src/wallet/KeyDeriver.ts +1 -1
  370. package/src/wallet/Wallet.interfaces.ts +2 -4
  371. package/src/wallet/WalletClient.ts +8 -8
  372. package/src/wallet/WalletError.ts +1 -1
  373. package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
  374. package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
  375. package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
  376. package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
  377. package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
  378. package/src/wallet/substrates/XDM.ts +4 -4
  379. package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
  380. package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
  381. package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
  382. package/src/wallet/substrates/window.CWI.ts +10 -10
  383. package/src/wallet/validationHelpers.ts +9 -9
@@ -163,20 +163,17 @@ export const scalarMultiplyWNAF = (
163
163
  ): JacobianPointBI => {
164
164
  const key = `${window}:${P0.x.toString(16)}:${P0.y.toString(16)}`
165
165
  let tbl = WNAF_TABLE_CACHE.get(key)
166
- let P: JacobianPointBI
167
166
  if (tbl === undefined) {
168
167
  // Convert affine to Jacobian and pre-compute odd multiples
169
168
  const tblSize = 1 << (window - 1) // e.g. w=5 → 16 entries
170
169
  tbl = new Array(tblSize)
171
- P = { X: P0.x, Y: P0.y, Z: BI_ONE }
170
+ const P: JacobianPointBI = { X: P0.x, Y: P0.y, Z: BI_ONE }
172
171
  tbl[0] = P
173
172
  const twoP = jpDouble(P)
174
173
  for (let i = 1; i < tblSize; i++) {
175
174
  tbl[i] = jpAdd(tbl[i - 1], twoP)
176
175
  }
177
176
  WNAF_TABLE_CACHE.set(key, tbl)
178
- } else {
179
- P = tbl[0]
180
177
  }
181
178
 
182
179
  // Build wNAF representation of k
@@ -277,11 +274,11 @@ export default class Point extends BasePoint {
277
274
  bytes.length - 1 === 2 * len
278
275
  ) {
279
276
  if (bytes[0] === 0x06) {
280
- if (bytes[bytes.length - 1] % 2 !== 0) {
277
+ if (bytes.at(-1) % 2 !== 0) {
281
278
  throw new Error('Point string value is wrong length')
282
279
  }
283
280
  } else if (bytes[0] === 0x07) {
284
- if (bytes[bytes.length - 1] % 2 !== 1) {
281
+ if (bytes.at(-1) % 2 !== 1) {
285
282
  throw new Error('Point string value is wrong length')
286
283
  }
287
284
  }
@@ -523,10 +520,10 @@ export default class Point extends BasePoint {
523
520
  } else {
524
521
  res = [0x04].concat(x, this.getY().toArray('be', len))
525
522
  }
526
- if (enc !== 'hex') {
527
- return res
528
- } else {
523
+ if (enc === 'hex') {
529
524
  return toHex(res)
525
+ } else {
526
+ return res
530
527
  }
531
528
  }
532
529
 
@@ -573,19 +570,19 @@ export default class Point extends BasePoint {
573
570
  typeof this.precomputed === 'object' && this.precomputed !== null
574
571
  ? {
575
572
  doubles:
576
- this.precomputed.doubles != null
577
- ? {
573
+ this.precomputed.doubles == null
574
+ ? undefined
575
+ : {
578
576
  step: this.precomputed.doubles.step,
579
577
  points: this.precomputed.doubles.points.slice(1)
580
- }
581
- : undefined,
578
+ },
582
579
  naf:
583
- this.precomputed.naf != null
584
- ? {
580
+ this.precomputed.naf == null
581
+ ? undefined
582
+ : {
585
583
  wnd: this.precomputed.naf.wnd,
586
584
  points: this.precomputed.naf.points.slice(1)
587
585
  }
588
- : undefined
589
586
  }
590
587
  : undefined
591
588
  ]
@@ -827,8 +824,8 @@ export default class Point extends BasePoint {
827
824
  let R1: JacobianPointBI = { X: Px, Y: Py, Z: 1n }
828
825
 
829
826
  const bits = kBig.toString(2)
830
- for (let i = 0; i < bits.length; i++) {
831
- const bit = bits[i] === '1' ? 1n : 0n
827
+ for (const bitChar of bits) {
828
+ const bit = bitChar === '1' ? 1n : 0n
832
829
  ctSwap(bit, R0, R1)
833
830
  R1 = jpAdd(R0, R1)
834
831
  R0 = jpDouble(R0)
@@ -927,18 +924,18 @@ export default class Point extends BasePoint {
927
924
  const pre = this.precomputed
928
925
  const negate = (p: Point): Point => p.neg()
929
926
  res.precomputed = {
930
- naf: pre.naf != null
931
- ? {
927
+ naf: pre.naf == null
928
+ ? undefined
929
+ : {
932
930
  wnd: pre.naf.wnd,
933
931
  points: pre.naf.points.map(negate) as BasePoint[]
934
- }
935
- : undefined,
936
- doubles: pre.doubles != null
937
- ? {
932
+ },
933
+ doubles: pre.doubles == null
934
+ ? undefined
935
+ : {
938
936
  step: pre.doubles.step,
939
937
  points: pre.doubles.points.map((p) => (p as Point).neg())
940
- }
941
- : undefined,
938
+ },
942
939
  beta: undefined
943
940
  }
944
941
  }
@@ -1019,19 +1016,19 @@ export default class Point extends BasePoint {
1019
1016
  beta.precomputed = {
1020
1017
  beta: null,
1021
1018
  naf:
1022
- pre.naf != null
1023
- ? {
1019
+ pre.naf == null
1020
+ ? undefined
1021
+ : {
1024
1022
  wnd: pre.naf.wnd,
1025
1023
  points: pre.naf.points.map(endoMul)
1026
- }
1027
- : undefined,
1024
+ },
1028
1025
  doubles:
1029
- pre.doubles != null
1030
- ? {
1026
+ pre.doubles == null
1027
+ ? undefined
1028
+ : {
1031
1029
  step: pre.doubles.step,
1032
1030
  points: pre.doubles.points.map(endoMul)
1033
1031
  }
1034
- : undefined
1035
1032
  }
1036
1033
  }
1037
1034
  return beta
@@ -1142,8 +1139,8 @@ export default class Point extends BasePoint {
1142
1139
  naf[a] = new Array(max)
1143
1140
  naf[b] = new Array(max)
1144
1141
  for (let j = 0; j < max; j++) {
1145
- const ja = jsf[0][j] | 0
1146
- const jb = jsf[1][j] | 0
1142
+ const ja = Math.trunc(jsf[0][j])
1143
+ const jb = Math.trunc(jsf[1][j])
1147
1144
 
1148
1145
  naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]
1149
1146
  naf[b][j] = 0
@@ -1187,10 +1184,10 @@ export default class Point extends BasePoint {
1187
1184
 
1188
1185
  if (z.cmpn(0) === 0) { // Check if z is 0
1189
1186
  continue
1190
- } else if (!z.isNeg()) { // If z is positive
1191
- p = wnd[j][z.sub(one).div(two).toNumber()]
1192
- } else { // If z is negative
1187
+ } else if (z.isNeg()) { // If z is negative
1193
1188
  p = wnd[j][z.neg().sub(one).div(two).toNumber()].neg()
1189
+ } else { // If z is positive
1190
+ p = wnd[j][z.sub(one).div(two).toNumber()]
1194
1191
  }
1195
1192
 
1196
1193
  if (p.type === 'affine') {
@@ -399,13 +399,13 @@ export default class PrivateKey extends BigNumber {
399
399
  let sharedSecret: Point
400
400
  if (typeof retrieveCachedSharedSecret === 'function') {
401
401
  const retrieved = retrieveCachedSharedSecret(this, publicKey)
402
- if (retrieved !== undefined) {
403
- sharedSecret = retrieved
404
- } else {
402
+ if (retrieved === undefined) {
405
403
  sharedSecret = this.deriveSharedSecret(publicKey)
406
404
  if (typeof cacheSharedSecret === 'function') {
407
405
  cacheSharedSecret(this, publicKey, sharedSecret)
408
406
  }
407
+ } else {
408
+ sharedSecret = retrieved
409
409
  }
410
410
  } else {
411
411
  sharedSecret = this.deriveSharedSecret(publicKey)
@@ -215,13 +215,13 @@ export default class PublicKey extends Point {
215
215
  let sharedSecret: Point
216
216
  if (typeof retrieveCachedSharedSecret === 'function') {
217
217
  const retrieved = retrieveCachedSharedSecret(privateKey, this)
218
- if (typeof retrieved !== 'undefined') {
219
- sharedSecret = retrieved
220
- } else {
218
+ if (retrieved === undefined) {
221
219
  sharedSecret = this.deriveSharedSecret(privateKey)
222
220
  if (typeof cacheSharedSecret === 'function') {
223
221
  cacheSharedSecret(privateKey, this, sharedSecret)
224
222
  }
223
+ } else {
224
+ sharedSecret = retrieved
225
225
  }
226
226
  } else {
227
227
  sharedSecret = this.deriveSharedSecret(privateKey)
@@ -31,7 +31,6 @@ class Rand {
31
31
  // Try globalThis.crypto (works in Node.js 18+, modern browsers, and Deno)
32
32
  if (typeof globalThis !== 'undefined' && typeof (globalThis as any).crypto?.getRandomValues === 'function') {
33
33
  this._rand = (n) => {
34
- /* eslint-disable-next-line */
35
34
  return this.getRandomValues(globalThis as any, n)
36
35
  }
37
36
  return
@@ -41,32 +40,30 @@ class Rand {
41
40
  if (typeof process !== 'undefined' && process.release?.name === 'node') {
42
41
  try {
43
42
  // eslint-disable-next-line @typescript-eslint/no-var-requires
44
- const crypto = require('crypto')
43
+ const crypto = require('node:crypto')
45
44
  if (typeof crypto.randomBytes === 'function') {
46
45
  this._rand = (n) => {
47
46
  return Array.from(crypto.randomBytes(n))
48
47
  }
49
48
  return
50
49
  }
51
- } catch (e) {
52
- // crypto module not available, continue to other checks
50
+ } catch (_cryptoModuleUnavailable) {
51
+ // node:crypto not available in this runtime; continue to other crypto API checks
53
52
  }
54
53
  }
55
54
 
56
55
  // Try self.crypto (Web Workers and Service Workers)
57
- if (typeof self !== 'undefined' && typeof self.crypto?.getRandomValues === 'function') {
56
+ if (typeof globalThis.self !== 'undefined' && typeof globalThis.self.crypto?.getRandomValues === 'function') {
58
57
  this._rand = (n) => {
59
- /* eslint-disable-next-line */
60
- return this.getRandomValues(self as any, n)
58
+ return this.getRandomValues(globalThis.self, n)
61
59
  }
62
60
  return
63
61
  }
64
62
 
65
63
  // Try window.crypto (browsers)
66
- if (typeof window !== 'undefined' && typeof (window as any).crypto?.getRandomValues === 'function') {
64
+ if (typeof globalThis.window !== 'undefined' && typeof (globalThis.window as any).crypto?.getRandomValues === 'function') {
67
65
  this._rand = (n) => {
68
- /* eslint-disable-next-line */
69
- return this.getRandomValues(window as any, n)
66
+ return this.getRandomValues(globalThis.window, n)
70
67
  }
71
68
  return
72
69
  }
@@ -93,9 +90,9 @@ let ayn: Rand | null = null
93
90
  * import Random from '@bsv/sdk/primitives/Random'
94
91
  * const bytes = Random(32) // Produces 32 random bytes
95
92
  */
96
- export default (len: number): number[] => {
97
- if (ayn == null) {
98
- ayn = new Rand()
99
- }
93
+ const Random = (len: number): number[] => {
94
+ ayn ??= new Rand()
100
95
  return ayn.generate(len)
101
96
  }
97
+
98
+ export default Random
@@ -25,7 +25,7 @@ export class ReaderUint8Array {
25
25
  } else if (Array.isArray(bin)) {
26
26
  this.bin = new Uint8Array(bin)
27
27
  } else {
28
- throw new Error('ReaderUint8Array constructor: bin must be Uint8Array or number[]')
28
+ throw new TypeError('ReaderUint8Array constructor: bin must be Uint8Array or number[]')
29
29
  }
30
30
  this.pos = pos
31
31
  this.length = this.bin.length
@@ -61,7 +61,7 @@ export class ReaderUint8Array {
61
61
  const val = this.bin[this.pos]
62
62
  this.pos += 1
63
63
  // If the sign bit is set, convert to negative value
64
- return (val & 0x80) !== 0 ? val - 0x100 : val
64
+ return (val & 0x80) === 0 ? val : val - 0x100
65
65
  }
66
66
 
67
67
  public readUInt16BE (): number {
@@ -73,10 +73,10 @@ export class ReaderUint8Array {
73
73
  public readInt16BE (): number {
74
74
  const val = this.readUInt16BE()
75
75
  // If the sign bit is set, convert to negative value
76
- return (val & 0x8000) !== 0 ? val - 0x10000 : val
76
+ return (val & 0x8000) === 0 ? val : val - 0x10000
77
77
  }
78
78
 
79
- public readUInt16LE (): number {
79
+ public readUInt16LE(): number {
80
80
  const val = this.bin[this.pos] | (this.bin[this.pos + 1] << 8)
81
81
  this.pos += 2
82
82
  return val
@@ -85,7 +85,7 @@ export class ReaderUint8Array {
85
85
  public readInt16LE (): number {
86
86
  const val = this.readUInt16LE()
87
87
  // If the sign bit is set, convert to negative value
88
- const x = (val & 0x8000) !== 0 ? val - 0x10000 : val
88
+ const x = (val & 0x8000) === 0 ? val : val - 0x10000
89
89
  return x
90
90
  }
91
91
 
@@ -102,7 +102,7 @@ export class ReaderUint8Array {
102
102
  public readInt32BE (): number {
103
103
  const val = this.readUInt32BE()
104
104
  // If the sign bit is set, convert to negative value
105
- return (val & 0x80000000) !== 0 ? val - 0x100000000 : val
105
+ return (val & 0x80000000) === 0 ? val : val - 0x100000000
106
106
  }
107
107
 
108
108
  public readUInt32LE (): number {
@@ -119,7 +119,7 @@ export class ReaderUint8Array {
119
119
  public readInt32LE (): number {
120
120
  const val = this.readUInt32LE()
121
121
  // Explicitly check if the sign bit is set and then convert to a negative value
122
- return (val & 0x80000000) !== 0 ? val - 0x100000000 : val
122
+ return (val & 0x80000000) === 0 ? val : val - 0x100000000
123
123
  }
124
124
 
125
125
  public readUInt64BEBn (): BigNumber {
@@ -2,7 +2,8 @@ import BigNumber from './BigNumber.js'
2
2
  import Curve from './Curve.js'
3
3
  import Point from './Point.js'
4
4
  import { sha256 } from './Hash.js'
5
- import { PrivateKey, PublicKey } from './index.js'
5
+ import PrivateKey from './PrivateKey.js'
6
+ import PublicKey from './PublicKey.js'
6
7
 
7
8
  /**
8
9
  * Class representing the Schnorr Zero-Knowledge Proof (ZKP) protocol.
@@ -189,7 +189,8 @@ export default class Secp256r1 {
189
189
  try {
190
190
  this.assertOnCurve(p)
191
191
  return true
192
- } catch (err) {
192
+ } catch (_notOnCurve) {
193
+ // assertOnCurve throws when the point is not on the curve; return false
193
194
  return false
194
195
  }
195
196
  }
@@ -82,17 +82,17 @@ export default class Signature {
82
82
  }
83
83
  let s = data.slice(p.place, slen + p.place)
84
84
  if (r[0] === 0) {
85
- if ((r[1] & 0x80) !== 0) {
86
- r = r.slice(1)
87
- } else {
85
+ if ((r[1] & 0x80) === 0) {
88
86
  throw new Error('Invalid R-value in signature DER')
87
+ } else {
88
+ r = r.slice(1)
89
89
  }
90
90
  }
91
91
  if (s[0] === 0) {
92
- if ((s[1] & 0x80) !== 0) {
93
- s = s.slice(1)
94
- } else {
92
+ if ((s[1] & 0x80) === 0) {
95
93
  throw new Error('Invalid S-value in signature DER')
94
+ } else {
95
+ s = s.slice(1)
96
96
  }
97
97
  }
98
98
 
@@ -285,7 +285,7 @@ export default class Signature {
285
285
  ): number[] | string {
286
286
  if (recovery < 0 || recovery > 3) throw new Error('Invalid recovery param')
287
287
  if (typeof compressed !== 'boolean') {
288
- throw new Error('Invalid compressed param')
288
+ throw new TypeError('Invalid compressed param')
289
289
  }
290
290
  let compactByte = 27 + recovery
291
291
  if (compressed) {
@@ -332,7 +332,7 @@ export default class Signature {
332
332
  const G = curve.g
333
333
 
334
334
  // 1.1 LEt x = r + jn
335
- const x = isSecondKey !== 0 ? r.add(n) : r
335
+ const x = isSecondKey === 0 ? r : r.add(n)
336
336
  const R = Point.fromX(x, isYOdd)
337
337
 
338
338
  // 1.4 Check that nR is at infinity
@@ -153,7 +153,7 @@ export default class TransactionSignature extends Signature {
153
153
  const writer = new Writer()
154
154
 
155
155
  for (const input of inputs) {
156
- if (typeof input.sourceTXID === 'undefined') {
156
+ if (input.sourceTXID === undefined) {
157
157
  if (input.sourceTransaction == null) {
158
158
  throw new Error('Missing sourceTransaction for input')
159
159
  }
@@ -185,7 +185,7 @@ export default class TransactionSignature extends Signature {
185
185
  function getOutputsHash (outputIndex?: number): number[] {
186
186
  const writer = new Writer()
187
187
 
188
- if (typeof outputIndex === 'undefined') {
188
+ if (outputIndex === undefined) {
189
189
  for (const output of params.outputs) {
190
190
  const satoshis = output.satoshis ?? 0 // Default to 0 if undefined
191
191
  writer.writeUInt64LE(satoshis)
@@ -219,11 +219,11 @@ export default class TransactionSignature extends Signature {
219
219
  let hashOutputs = new Array(32).fill(0)
220
220
 
221
221
  if ((params.scope & TransactionSignature.SIGHASH_ANYONECANPAY) === 0) {
222
- if (cache?.hashPrevouts != null) {
223
- hashPrevouts = cache.hashPrevouts
224
- } else {
222
+ if (cache?.hashPrevouts == null) {
225
223
  hashPrevouts = getPrevoutHash()
226
224
  if (cache != null) cache.hashPrevouts = hashPrevouts
225
+ } else {
226
+ hashPrevouts = cache.hashPrevouts
227
227
  }
228
228
  }
229
229
 
@@ -232,11 +232,11 @@ export default class TransactionSignature extends Signature {
232
232
  (params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE &&
233
233
  (params.scope & 31) !== TransactionSignature.SIGHASH_NONE
234
234
  ) {
235
- if (cache?.hashSequence != null) {
236
- hashSequence = cache.hashSequence
237
- } else {
235
+ if (cache?.hashSequence == null) {
238
236
  hashSequence = getSequenceHash()
239
237
  if (cache != null) cache.hashSequence = hashSequence
238
+ } else {
239
+ hashSequence = cache.hashSequence
240
240
  }
241
241
  }
242
242
 
@@ -244,11 +244,11 @@ export default class TransactionSignature extends Signature {
244
244
  (params.scope & 31) !== TransactionSignature.SIGHASH_SINGLE &&
245
245
  (params.scope & 31) !== TransactionSignature.SIGHASH_NONE
246
246
  ) {
247
- if (cache?.hashOutputsAll != null) {
248
- hashOutputs = cache.hashOutputsAll
249
- } else {
247
+ if (cache?.hashOutputsAll == null) {
250
248
  hashOutputs = getOutputsHash()
251
249
  if (cache != null) cache.hashOutputsAll = hashOutputs
250
+ } else {
251
+ hashOutputs = cache.hashOutputsAll
252
252
  }
253
253
  } else if (
254
254
  (params.scope & 31) === TransactionSignature.SIGHASH_SINGLE &&
@@ -256,14 +256,14 @@ export default class TransactionSignature extends Signature {
256
256
  ) {
257
257
  const key = params.inputIndex
258
258
  const cachedSingle = cache?.hashOutputsSingle?.get(key)
259
- if (cachedSingle != null) {
260
- hashOutputs = cachedSingle
261
- } else {
259
+ if (cachedSingle == null) {
262
260
  hashOutputs = getOutputsHash(key)
263
261
  if (cache != null) {
264
- if (cache.hashOutputsSingle == null) cache.hashOutputsSingle = new Map()
262
+ cache.hashOutputsSingle ??= new Map()
265
263
  cache.hashOutputsSingle.set(key, hashOutputs)
266
264
  }
265
+ } else {
266
+ hashOutputs = cachedSingle
267
267
  }
268
268
  }
269
269
 
@@ -349,7 +349,7 @@ export default class TransactionSignature extends Signature {
349
349
  const scope = 1
350
350
  return new TransactionSignature(r, s, scope)
351
351
  }
352
- const scope = buf[buf.length - 1]
352
+ const scope = buf.at(-1)
353
353
  const derbuf = buf.slice(0, buf.length - 1)
354
354
  const tempSig = Signature.fromDER(derbuf)
355
355
  return new TransactionSignature(tempSig.r, tempSig.s, scope)