@bsv/sdk 1.6.9 → 1.6.11

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 (654) hide show
  1. package/README.md +9 -4
  2. package/dist/cjs/package.json +4 -2
  3. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -1
  4. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  5. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  6. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -1
  7. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  8. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  9. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  10. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  11. package/dist/umd/bundle.js +1 -1
  12. package/docs/concepts/beef.md +84 -0
  13. package/docs/concepts/chain-tracking.md +122 -0
  14. package/docs/concepts/decentralized-identity.md +184 -0
  15. package/docs/concepts/fees.md +217 -0
  16. package/docs/concepts/identity-certificates.md +255 -0
  17. package/docs/concepts/index.md +62 -0
  18. package/docs/concepts/key-management.md +176 -0
  19. package/docs/concepts/script-templates.md +163 -0
  20. package/docs/concepts/sdk-philosophy.md +72 -0
  21. package/docs/concepts/signatures.md +179 -0
  22. package/docs/concepts/spv-verification.md +106 -0
  23. package/docs/concepts/transaction-encoding.md +148 -0
  24. package/docs/concepts/transaction-structure.md +63 -0
  25. package/docs/concepts/trust-model.md +123 -0
  26. package/docs/concepts/verification.md +219 -0
  27. package/docs/concepts/wallet-integration.md +95 -0
  28. package/docs/guides/direct-transaction-creation.md +137 -0
  29. package/docs/guides/http-client-configuration.md +414 -0
  30. package/docs/guides/index.md +30 -0
  31. package/docs/guides/transaction-signing-methods.md +268 -0
  32. package/docs/index.md +74 -0
  33. package/docs/reference/arc-config.md +698 -0
  34. package/docs/reference/brc-100.md +33 -0
  35. package/docs/reference/configuration.md +829 -0
  36. package/docs/reference/debugging.md +700 -0
  37. package/docs/reference/errors.md +547 -0
  38. package/docs/reference/index.md +98 -0
  39. package/docs/reference/network-config.md +914 -0
  40. package/docs/reference/op-codes.md +306 -0
  41. package/docs/reference/transaction-signatures.md +94 -0
  42. package/docs/requirements.txt +3 -0
  43. package/docs/tutorials/advanced-transaction.md +575 -0
  44. package/docs/tutorials/aes-encryption.md +947 -0
  45. package/docs/tutorials/authfetch-tutorial.md +957 -0
  46. package/docs/tutorials/ecdh-key-exchange.md +547 -0
  47. package/docs/tutorials/elliptic-curve-fundamentals.md +603 -0
  48. package/docs/tutorials/error-handling.md +1215 -0
  49. package/docs/tutorials/first-transaction-low-level.md +204 -0
  50. package/docs/tutorials/first-transaction.md +278 -0
  51. package/docs/tutorials/hashes-and-hmacs.md +814 -0
  52. package/docs/tutorials/identity-management.md +702 -0
  53. package/docs/tutorials/index.md +182 -0
  54. package/docs/tutorials/key-management.md +536 -0
  55. package/docs/tutorials/protowallet-development.md +716 -0
  56. package/docs/tutorials/script-construction.md +690 -0
  57. package/docs/tutorials/spv-merkle-proofs.md +682 -0
  58. package/docs/tutorials/testnet-transactions-low-level.md +352 -0
  59. package/docs/tutorials/transaction-broadcasting.md +535 -0
  60. package/docs/tutorials/transaction-types.md +419 -0
  61. package/docs/tutorials/type-42.md +582 -0
  62. package/docs/tutorials/uhrp-storage.md +579 -0
  63. package/package.json +4 -2
  64. package/src/wallet/substrates/HTTPWalletJSON.ts +6 -1
  65. package/dist/cjs/src/auth/__tests/Peer.test.js +0 -446
  66. package/dist/cjs/src/auth/__tests/Peer.test.js.map +0 -1
  67. package/dist/cjs/src/auth/__tests/SessionManager.test.js +0 -69
  68. package/dist/cjs/src/auth/__tests/SessionManager.test.js.map +0 -1
  69. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js +0 -182
  70. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
  71. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
  72. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
  73. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
  74. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
  75. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js +0 -101
  76. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
  77. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
  78. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
  79. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js +0 -111
  80. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
  81. package/dist/cjs/src/auth/utils/certificateHelpers.js +0 -51
  82. package/dist/cjs/src/auth/utils/certificateHelpers.js.map +0 -1
  83. package/dist/cjs/src/compat/__tests/BSM.test.js +0 -69
  84. package/dist/cjs/src/compat/__tests/BSM.test.js.map +0 -1
  85. package/dist/cjs/src/compat/__tests/ECIES.test.js +0 -115
  86. package/dist/cjs/src/compat/__tests/ECIES.test.js.map +0 -1
  87. package/dist/cjs/src/compat/__tests/HD.test.js +0 -336
  88. package/dist/cjs/src/compat/__tests/HD.test.js.map +0 -1
  89. package/dist/cjs/src/compat/__tests/Mnemonic.test.js +0 -150
  90. package/dist/cjs/src/compat/__tests/Mnemonic.test.js.map +0 -1
  91. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js +0 -175
  92. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
  93. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js +0 -57
  94. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
  95. package/dist/cjs/src/messages/__tests/SignedMessage.test.js +0 -52
  96. package/dist/cjs/src/messages/__tests/SignedMessage.test.js.map +0 -1
  97. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
  98. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
  99. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
  100. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
  101. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
  102. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
  103. package/dist/cjs/src/primitives/__tests/AESGCM.test.js +0 -248
  104. package/dist/cjs/src/primitives/__tests/AESGCM.test.js.map +0 -1
  105. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js +0 -36
  106. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
  107. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js +0 -36
  108. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
  109. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
  110. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
  111. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js +0 -185
  112. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
  113. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
  114. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
  115. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
  116. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
  117. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js +0 -268
  118. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
  119. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
  120. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
  121. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js +0 -322
  122. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
  123. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js +0 -145
  124. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js.map +0 -1
  125. package/dist/cjs/src/primitives/__tests/DRBG.test.js +0 -22
  126. package/dist/cjs/src/primitives/__tests/DRBG.test.js.map +0 -1
  127. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js +0 -170
  128. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js.map +0 -1
  129. package/dist/cjs/src/primitives/__tests/ECDH.test.js +0 -34
  130. package/dist/cjs/src/primitives/__tests/ECDH.test.js.map +0 -1
  131. package/dist/cjs/src/primitives/__tests/ECDSA.test.js +0 -89
  132. package/dist/cjs/src/primitives/__tests/ECDSA.test.js.map +0 -1
  133. package/dist/cjs/src/primitives/__tests/HMAC.test.js +0 -60
  134. package/dist/cjs/src/primitives/__tests/HMAC.test.js.map +0 -1
  135. package/dist/cjs/src/primitives/__tests/Hash.test.js +0 -159
  136. package/dist/cjs/src/primitives/__tests/Hash.test.js.map +0 -1
  137. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js +0 -122
  138. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
  139. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js +0 -105
  140. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
  141. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js +0 -90
  142. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js.map +0 -1
  143. package/dist/cjs/src/primitives/__tests/PublicKey.test.js +0 -83
  144. package/dist/cjs/src/primitives/__tests/PublicKey.test.js.map +0 -1
  145. package/dist/cjs/src/primitives/__tests/Random.test.js +0 -19
  146. package/dist/cjs/src/primitives/__tests/Random.test.js.map +0 -1
  147. package/dist/cjs/src/primitives/__tests/Reader.test.js +0 -282
  148. package/dist/cjs/src/primitives/__tests/Reader.test.js.map +0 -1
  149. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js +0 -224
  150. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js.map +0 -1
  151. package/dist/cjs/src/primitives/__tests/Schnorr.test.js +0 -213
  152. package/dist/cjs/src/primitives/__tests/Schnorr.test.js.map +0 -1
  153. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js +0 -51
  154. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
  155. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
  156. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
  157. package/dist/cjs/src/primitives/__tests/Writer.test.js +0 -176
  158. package/dist/cjs/src/primitives/__tests/Writer.test.js.map +0 -1
  159. package/dist/cjs/src/primitives/__tests/bug-31.test.js +0 -32
  160. package/dist/cjs/src/primitives/__tests/bug-31.test.js.map +0 -1
  161. package/dist/cjs/src/primitives/__tests/sighash.vectors.js +0 -3506
  162. package/dist/cjs/src/primitives/__tests/sighash.vectors.js.map +0 -1
  163. package/dist/cjs/src/primitives/__tests/utils.test.js +0 -110
  164. package/dist/cjs/src/primitives/__tests/utils.test.js.map +0 -1
  165. package/dist/cjs/src/script/__tests/Script.test.js +0 -347
  166. package/dist/cjs/src/script/__tests/Script.test.js.map +0 -1
  167. package/dist/cjs/src/script/__tests/Spend.test.js +0 -282
  168. package/dist/cjs/src/script/__tests/Spend.test.js.map +0 -1
  169. package/dist/cjs/src/script/__tests/SpendComplex.test.js +0 -52
  170. package/dist/cjs/src/script/__tests/SpendComplex.test.js.map +0 -1
  171. package/dist/cjs/src/script/__tests/script.invalid.vectors.js +0 -2370
  172. package/dist/cjs/src/script/__tests/script.invalid.vectors.js.map +0 -1
  173. package/dist/cjs/src/script/__tests/script.valid.vectors.js +0 -1181
  174. package/dist/cjs/src/script/__tests/script.valid.vectors.js.map +0 -1
  175. package/dist/cjs/src/script/__tests/spend.valid.vectors.js +0 -2298
  176. package/dist/cjs/src/script/__tests/spend.valid.vectors.js.map +0 -1
  177. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js +0 -161
  178. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js.map +0 -1
  179. package/dist/cjs/src/totp/__tests/totp.test.js +0 -67
  180. package/dist/cjs/src/totp/__tests/totp.test.js.map +0 -1
  181. package/dist/cjs/src/transaction/__tests/Beef.test.js +0 -393
  182. package/dist/cjs/src/transaction/__tests/Beef.test.js.map +0 -1
  183. package/dist/cjs/src/transaction/__tests/MerklePath.test.js +0 -209
  184. package/dist/cjs/src/transaction/__tests/MerklePath.test.js.map +0 -1
  185. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
  186. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
  187. package/dist/cjs/src/transaction/__tests/Transaction.test.js +0 -1073
  188. package/dist/cjs/src/transaction/__tests/Transaction.test.js.map +0 -1
  189. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js +0 -7
  190. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js.map +0 -1
  191. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js +0 -11
  192. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
  193. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js +0 -7
  194. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
  195. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js +0 -230
  196. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
  197. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js +0 -296
  198. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
  199. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
  200. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
  201. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
  202. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
  203. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
  204. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
  205. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js +0 -39
  206. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
  207. package/dist/cjs/src/wallet/WalletSigner.js +0 -260
  208. package/dist/cjs/src/wallet/WalletSigner.js.map +0 -1
  209. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
  210. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
  211. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js +0 -114
  212. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
  213. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js +0 -475
  214. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
  215. package/dist/cjs/src/wallet/createActionSdk.js +0 -230
  216. package/dist/cjs/src/wallet/createActionSdk.js.map +0 -1
  217. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js +0 -174
  218. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
  219. package/dist/cjs/src/wallet/sdk/CertOps.js +0 -181
  220. package/dist/cjs/src/wallet/sdk/CertOps.js.map +0 -1
  221. package/dist/cjs/src/wallet/sdk/Certificate.js +0 -162
  222. package/dist/cjs/src/wallet/sdk/Certificate.js.map +0 -1
  223. package/dist/cjs/src/wallet/sdk/KeyDeriver.js +0 -176
  224. package/dist/cjs/src/wallet/sdk/KeyDeriver.js.map +0 -1
  225. package/dist/cjs/src/wallet/sdk/ProtoWallet.js +0 -75
  226. package/dist/cjs/src/wallet/sdk/ProtoWallet.js.map +0 -1
  227. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js +0 -3
  228. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js.map +0 -1
  229. package/dist/cjs/src/wallet/sdk/WERR_errors.js +0 -107
  230. package/dist/cjs/src/wallet/sdk/WERR_errors.js.map +0 -1
  231. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js +0 -3
  232. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
  233. package/dist/cjs/src/wallet/sdk/WalletCrypto.js +0 -171
  234. package/dist/cjs/src/wallet/sdk/WalletCrypto.js.map +0 -1
  235. package/dist/cjs/src/wallet/sdk/WalletError.js +0 -103
  236. package/dist/cjs/src/wallet/sdk/WalletError.js.map +0 -1
  237. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js +0 -3
  238. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
  239. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js +0 -3
  240. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
  241. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js +0 -3
  242. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
  243. package/dist/cjs/src/wallet/sdk/index.js +0 -31
  244. package/dist/cjs/src/wallet/sdk/index.js.map +0 -1
  245. package/dist/cjs/src/wallet/sdk/types.js +0 -11
  246. package/dist/cjs/src/wallet/sdk/types.js.map +0 -1
  247. package/dist/cjs/src/wallet/sdk/validationHelpers.js +0 -601
  248. package/dist/cjs/src/wallet/sdk/validationHelpers.js.map +0 -1
  249. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
  250. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
  251. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js +0 -579
  252. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
  253. package/dist/cjs/src/wallet/utilityHelpers.js +0 -305
  254. package/dist/cjs/src/wallet/utilityHelpers.js.map +0 -1
  255. package/dist/cjs/src/wallet/validationHelpers.js +0 -601
  256. package/dist/cjs/src/wallet/validationHelpers.js.map +0 -1
  257. package/dist/esm/src/auth/__tests/Peer.test.js +0 -448
  258. package/dist/esm/src/auth/__tests/Peer.test.js.map +0 -1
  259. package/dist/esm/src/auth/__tests/SessionManager.test.js +0 -69
  260. package/dist/esm/src/auth/__tests/SessionManager.test.js.map +0 -1
  261. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js +0 -182
  262. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js.map +0 -1
  263. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js +0 -184
  264. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js.map +0 -1
  265. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js +0 -75
  266. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +0 -1
  267. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js +0 -101
  268. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js.map +0 -1
  269. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js +0 -106
  270. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +0 -1
  271. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js +0 -111
  272. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js.map +0 -1
  273. package/dist/esm/src/auth/utils/certificateHelpers.js +0 -47
  274. package/dist/esm/src/auth/utils/certificateHelpers.js.map +0 -1
  275. package/dist/esm/src/compat/__tests/BSM.test.js +0 -69
  276. package/dist/esm/src/compat/__tests/BSM.test.js.map +0 -1
  277. package/dist/esm/src/compat/__tests/ECIES.test.js +0 -115
  278. package/dist/esm/src/compat/__tests/ECIES.test.js.map +0 -1
  279. package/dist/esm/src/compat/__tests/HD.test.js +0 -336
  280. package/dist/esm/src/compat/__tests/HD.test.js.map +0 -1
  281. package/dist/esm/src/compat/__tests/Mnemonic.test.js +0 -150
  282. package/dist/esm/src/compat/__tests/Mnemonic.test.js.map +0 -1
  283. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js +0 -175
  284. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js.map +0 -1
  285. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js +0 -57
  286. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js.map +0 -1
  287. package/dist/esm/src/messages/__tests/SignedMessage.test.js +0 -52
  288. package/dist/esm/src/messages/__tests/SignedMessage.test.js.map +0 -1
  289. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js +0 -1471
  290. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js.map +0 -1
  291. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +0 -78
  292. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +0 -1
  293. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js +0 -933
  294. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +0 -1
  295. package/dist/esm/src/primitives/__tests/AESGCM.test.js +0 -248
  296. package/dist/esm/src/primitives/__tests/AESGCM.test.js.map +0 -1
  297. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js +0 -36
  298. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js.map +0 -1
  299. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js +0 -36
  300. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js.map +0 -1
  301. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js +0 -501
  302. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js.map +0 -1
  303. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js +0 -185
  304. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js.map +0 -1
  305. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js +0 -149
  306. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js.map +0 -1
  307. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js +0 -23
  308. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js.map +0 -1
  309. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js +0 -268
  310. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js.map +0 -1
  311. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js +0 -147
  312. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js.map +0 -1
  313. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js +0 -322
  314. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js.map +0 -1
  315. package/dist/esm/src/primitives/__tests/Curve.unit.test.js +0 -145
  316. package/dist/esm/src/primitives/__tests/Curve.unit.test.js.map +0 -1
  317. package/dist/esm/src/primitives/__tests/DRBG.test.js +0 -22
  318. package/dist/esm/src/primitives/__tests/DRBG.test.js.map +0 -1
  319. package/dist/esm/src/primitives/__tests/DRBG.vectors.js +0 -170
  320. package/dist/esm/src/primitives/__tests/DRBG.vectors.js.map +0 -1
  321. package/dist/esm/src/primitives/__tests/ECDH.test.js +0 -34
  322. package/dist/esm/src/primitives/__tests/ECDH.test.js.map +0 -1
  323. package/dist/esm/src/primitives/__tests/ECDSA.test.js +0 -89
  324. package/dist/esm/src/primitives/__tests/ECDSA.test.js.map +0 -1
  325. package/dist/esm/src/primitives/__tests/HMAC.test.js +0 -60
  326. package/dist/esm/src/primitives/__tests/HMAC.test.js.map +0 -1
  327. package/dist/esm/src/primitives/__tests/Hash.test.js +0 -159
  328. package/dist/esm/src/primitives/__tests/Hash.test.js.map +0 -1
  329. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js +0 -122
  330. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js.map +0 -1
  331. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js +0 -105
  332. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js.map +0 -1
  333. package/dist/esm/src/primitives/__tests/PrivateKey.test.js +0 -90
  334. package/dist/esm/src/primitives/__tests/PrivateKey.test.js.map +0 -1
  335. package/dist/esm/src/primitives/__tests/PublicKey.test.js +0 -83
  336. package/dist/esm/src/primitives/__tests/PublicKey.test.js.map +0 -1
  337. package/dist/esm/src/primitives/__tests/Random.test.js +0 -19
  338. package/dist/esm/src/primitives/__tests/Random.test.js.map +0 -1
  339. package/dist/esm/src/primitives/__tests/Reader.test.js +0 -282
  340. package/dist/esm/src/primitives/__tests/Reader.test.js.map +0 -1
  341. package/dist/esm/src/primitives/__tests/ReductionContext.test.js +0 -223
  342. package/dist/esm/src/primitives/__tests/ReductionContext.test.js.map +0 -1
  343. package/dist/esm/src/primitives/__tests/Schnorr.test.js +0 -213
  344. package/dist/esm/src/primitives/__tests/Schnorr.test.js.map +0 -1
  345. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js +0 -51
  346. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js.map +0 -1
  347. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js +0 -43
  348. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js.map +0 -1
  349. package/dist/esm/src/primitives/__tests/Writer.test.js +0 -176
  350. package/dist/esm/src/primitives/__tests/Writer.test.js.map +0 -1
  351. package/dist/esm/src/primitives/__tests/bug-31.test.js +0 -32
  352. package/dist/esm/src/primitives/__tests/bug-31.test.js.map +0 -1
  353. package/dist/esm/src/primitives/__tests/sighash.vectors.js +0 -3506
  354. package/dist/esm/src/primitives/__tests/sighash.vectors.js.map +0 -1
  355. package/dist/esm/src/primitives/__tests/utils.test.js +0 -110
  356. package/dist/esm/src/primitives/__tests/utils.test.js.map +0 -1
  357. package/dist/esm/src/script/__tests/Script.test.js +0 -347
  358. package/dist/esm/src/script/__tests/Script.test.js.map +0 -1
  359. package/dist/esm/src/script/__tests/Spend.test.js +0 -282
  360. package/dist/esm/src/script/__tests/Spend.test.js.map +0 -1
  361. package/dist/esm/src/script/__tests/SpendComplex.test.js +0 -51
  362. package/dist/esm/src/script/__tests/SpendComplex.test.js.map +0 -1
  363. package/dist/esm/src/script/__tests/script.invalid.vectors.js +0 -2370
  364. package/dist/esm/src/script/__tests/script.invalid.vectors.js.map +0 -1
  365. package/dist/esm/src/script/__tests/script.valid.vectors.js +0 -1181
  366. package/dist/esm/src/script/__tests/script.valid.vectors.js.map +0 -1
  367. package/dist/esm/src/script/__tests/spend.valid.vectors.js +0 -2298
  368. package/dist/esm/src/script/__tests/spend.valid.vectors.js.map +0 -1
  369. package/dist/esm/src/script/templates/__tests/PushDrop.test.js +0 -161
  370. package/dist/esm/src/script/templates/__tests/PushDrop.test.js.map +0 -1
  371. package/dist/esm/src/totp/__tests/totp.test.js +0 -67
  372. package/dist/esm/src/totp/__tests/totp.test.js.map +0 -1
  373. package/dist/esm/src/transaction/__tests/Beef.test.js +0 -393
  374. package/dist/esm/src/transaction/__tests/Beef.test.js.map +0 -1
  375. package/dist/esm/src/transaction/__tests/MerklePath.test.js +0 -209
  376. package/dist/esm/src/transaction/__tests/MerklePath.test.js.map +0 -1
  377. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js +0 -219
  378. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js.map +0 -1
  379. package/dist/esm/src/transaction/__tests/Transaction.test.js +0 -1072
  380. package/dist/esm/src/transaction/__tests/Transaction.test.js.map +0 -1
  381. package/dist/esm/src/transaction/__tests/bigtx.vectors.js +0 -7
  382. package/dist/esm/src/transaction/__tests/bigtx.vectors.js.map +0 -1
  383. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js +0 -11
  384. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js.map +0 -1
  385. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js +0 -7
  386. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js.map +0 -1
  387. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js +0 -230
  388. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js.map +0 -1
  389. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js +0 -296
  390. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js.map +0 -1
  391. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js +0 -246
  392. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js.map +0 -1
  393. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +0 -148
  394. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +0 -1
  395. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +0 -155
  396. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +0 -1
  397. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js +0 -37
  398. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js.map +0 -1
  399. package/dist/esm/src/wallet/WalletSigner.js +0 -263
  400. package/dist/esm/src/wallet/WalletSigner.js.map +0 -1
  401. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js +0 -269
  402. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js.map +0 -1
  403. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js +0 -113
  404. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js.map +0 -1
  405. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js +0 -475
  406. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js.map +0 -1
  407. package/dist/esm/src/wallet/createActionSdk.js +0 -223
  408. package/dist/esm/src/wallet/createActionSdk.js.map +0 -1
  409. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js +0 -174
  410. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js.map +0 -1
  411. package/dist/esm/src/wallet/sdk/CertOps.js +0 -181
  412. package/dist/esm/src/wallet/sdk/CertOps.js.map +0 -1
  413. package/dist/esm/src/wallet/sdk/Certificate.js +0 -186
  414. package/dist/esm/src/wallet/sdk/Certificate.js.map +0 -1
  415. package/dist/esm/src/wallet/sdk/KeyDeriver.js +0 -174
  416. package/dist/esm/src/wallet/sdk/KeyDeriver.js.map +0 -1
  417. package/dist/esm/src/wallet/sdk/ProtoWallet.js +0 -71
  418. package/dist/esm/src/wallet/sdk/ProtoWallet.js.map +0 -1
  419. package/dist/esm/src/wallet/sdk/StorageSyncReader.js +0 -2
  420. package/dist/esm/src/wallet/sdk/StorageSyncReader.js.map +0 -1
  421. package/dist/esm/src/wallet/sdk/WERR_errors.js +0 -99
  422. package/dist/esm/src/wallet/sdk/WERR_errors.js.map +0 -1
  423. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js +0 -2
  424. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js.map +0 -1
  425. package/dist/esm/src/wallet/sdk/WalletCrypto.js +0 -168
  426. package/dist/esm/src/wallet/sdk/WalletCrypto.js.map +0 -1
  427. package/dist/esm/src/wallet/sdk/WalletError.js +0 -100
  428. package/dist/esm/src/wallet/sdk/WalletError.js.map +0 -1
  429. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js +0 -2
  430. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js.map +0 -1
  431. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js +0 -2
  432. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js.map +0 -1
  433. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js +0 -2
  434. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js.map +0 -1
  435. package/dist/esm/src/wallet/sdk/index.js +0 -15
  436. package/dist/esm/src/wallet/sdk/index.js.map +0 -1
  437. package/dist/esm/src/wallet/sdk/types.js +0 -8
  438. package/dist/esm/src/wallet/sdk/types.js.map +0 -1
  439. package/dist/esm/src/wallet/sdk/validationHelpers.js +0 -566
  440. package/dist/esm/src/wallet/sdk/validationHelpers.js.map +0 -1
  441. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js +0 -1962
  442. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +0 -1
  443. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js +0 -579
  444. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js.map +0 -1
  445. package/dist/esm/src/wallet/utilityHelpers.js +0 -275
  446. package/dist/esm/src/wallet/utilityHelpers.js.map +0 -1
  447. package/dist/esm/src/wallet/validationHelpers.js +0 -566
  448. package/dist/esm/src/wallet/validationHelpers.js.map +0 -1
  449. package/dist/types/src/auth/__tests/Peer.test.d.ts +0 -2
  450. package/dist/types/src/auth/__tests/Peer.test.d.ts.map +0 -1
  451. package/dist/types/src/auth/__tests/SessionManager.test.d.ts +0 -2
  452. package/dist/types/src/auth/__tests/SessionManager.test.d.ts.map +0 -1
  453. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts +0 -2
  454. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts.map +0 -1
  455. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts +0 -2
  456. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts.map +0 -1
  457. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts +0 -2
  458. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts.map +0 -1
  459. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts +0 -2
  460. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts.map +0 -1
  461. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts +0 -2
  462. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts.map +0 -1
  463. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts +0 -2
  464. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts.map +0 -1
  465. package/dist/types/src/auth/utils/certificateHelpers.d.ts +0 -26
  466. package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +0 -1
  467. package/dist/types/src/compat/__tests/BSM.test.d.ts +0 -2
  468. package/dist/types/src/compat/__tests/BSM.test.d.ts.map +0 -1
  469. package/dist/types/src/compat/__tests/ECIES.test.d.ts +0 -2
  470. package/dist/types/src/compat/__tests/ECIES.test.d.ts.map +0 -1
  471. package/dist/types/src/compat/__tests/HD.test.d.ts +0 -2
  472. package/dist/types/src/compat/__tests/HD.test.d.ts.map +0 -1
  473. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts +0 -2
  474. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts.map +0 -1
  475. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts +0 -11
  476. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts.map +0 -1
  477. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts +0 -2
  478. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts.map +0 -1
  479. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts +0 -2
  480. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts.map +0 -1
  481. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts +0 -2
  482. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts.map +0 -1
  483. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts +0 -2
  484. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts.map +0 -1
  485. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts +0 -2
  486. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts.map +0 -1
  487. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts +0 -2
  488. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts.map +0 -1
  489. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts +0 -8
  490. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts.map +0 -1
  491. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts +0 -8
  492. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts.map +0 -1
  493. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts +0 -2
  494. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts.map +0 -1
  495. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts +0 -2
  496. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts.map +0 -1
  497. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts +0 -2
  498. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts.map +0 -1
  499. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts +0 -2
  500. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts.map +0 -1
  501. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts +0 -15
  502. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts.map +0 -1
  503. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts +0 -2
  504. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts.map +0 -1
  505. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts +0 -2
  506. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts.map +0 -1
  507. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts +0 -2
  508. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts.map +0 -1
  509. package/dist/types/src/primitives/__tests/DRBG.test.d.ts +0 -2
  510. package/dist/types/src/primitives/__tests/DRBG.test.d.ts.map +0 -1
  511. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts +0 -10
  512. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts.map +0 -1
  513. package/dist/types/src/primitives/__tests/ECDH.test.d.ts +0 -2
  514. package/dist/types/src/primitives/__tests/ECDH.test.d.ts.map +0 -1
  515. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts +0 -2
  516. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts.map +0 -1
  517. package/dist/types/src/primitives/__tests/HMAC.test.d.ts +0 -2
  518. package/dist/types/src/primitives/__tests/HMAC.test.d.ts.map +0 -1
  519. package/dist/types/src/primitives/__tests/Hash.test.d.ts +0 -2
  520. package/dist/types/src/primitives/__tests/Hash.test.d.ts.map +0 -1
  521. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts +0 -68
  522. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts.map +0 -1
  523. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts +0 -2
  524. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts.map +0 -1
  525. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts +0 -2
  526. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts.map +0 -1
  527. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts +0 -2
  528. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts.map +0 -1
  529. package/dist/types/src/primitives/__tests/Random.test.d.ts +0 -2
  530. package/dist/types/src/primitives/__tests/Random.test.d.ts.map +0 -1
  531. package/dist/types/src/primitives/__tests/Reader.test.d.ts +0 -2
  532. package/dist/types/src/primitives/__tests/Reader.test.d.ts.map +0 -1
  533. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts +0 -2
  534. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts.map +0 -1
  535. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts +0 -2
  536. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts.map +0 -1
  537. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts +0 -2
  538. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts.map +0 -1
  539. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts +0 -20
  540. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts.map +0 -1
  541. package/dist/types/src/primitives/__tests/Writer.test.d.ts +0 -2
  542. package/dist/types/src/primitives/__tests/Writer.test.d.ts.map +0 -1
  543. package/dist/types/src/primitives/__tests/bug-31.test.d.ts +0 -2
  544. package/dist/types/src/primitives/__tests/bug-31.test.d.ts.map +0 -1
  545. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts +0 -3
  546. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts.map +0 -1
  547. package/dist/types/src/primitives/__tests/utils.test.d.ts +0 -2
  548. package/dist/types/src/primitives/__tests/utils.test.d.ts.map +0 -1
  549. package/dist/types/src/script/__tests/Script.test.d.ts +0 -2
  550. package/dist/types/src/script/__tests/Script.test.d.ts.map +0 -1
  551. package/dist/types/src/script/__tests/Spend.test.d.ts +0 -2
  552. package/dist/types/src/script/__tests/Spend.test.d.ts.map +0 -1
  553. package/dist/types/src/script/__tests/SpendComplex.test.d.ts +0 -2
  554. package/dist/types/src/script/__tests/SpendComplex.test.d.ts.map +0 -1
  555. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts +0 -3
  556. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts.map +0 -1
  557. package/dist/types/src/script/__tests/script.valid.vectors.d.ts +0 -3
  558. package/dist/types/src/script/__tests/script.valid.vectors.d.ts.map +0 -1
  559. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts +0 -3
  560. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts.map +0 -1
  561. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts +0 -2
  562. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts.map +0 -1
  563. package/dist/types/src/totp/__tests/totp.test.d.ts +0 -2
  564. package/dist/types/src/totp/__tests/totp.test.d.ts.map +0 -1
  565. package/dist/types/src/transaction/__tests/Beef.test.d.ts +0 -2
  566. package/dist/types/src/transaction/__tests/Beef.test.d.ts.map +0 -1
  567. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts +0 -2
  568. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts.map +0 -1
  569. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts +0 -2
  570. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts.map +0 -1
  571. package/dist/types/src/transaction/__tests/Transaction.test.d.ts +0 -2
  572. package/dist/types/src/transaction/__tests/Transaction.test.d.ts.map +0 -1
  573. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts +0 -6
  574. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts.map +0 -1
  575. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts +0 -6
  576. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts.map +0 -1
  577. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts +0 -5
  578. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts.map +0 -1
  579. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts +0 -3
  580. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts.map +0 -1
  581. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts +0 -3
  582. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts.map +0 -1
  583. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts +0 -2
  584. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts.map +0 -1
  585. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts +0 -2
  586. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts.map +0 -1
  587. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts +0 -2
  588. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts.map +0 -1
  589. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts +0 -25
  590. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts.map +0 -1
  591. package/dist/types/src/wallet/WalletSigner.d.ts +0 -110
  592. package/dist/types/src/wallet/WalletSigner.d.ts.map +0 -1
  593. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts +0 -2
  594. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts.map +0 -1
  595. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts +0 -2
  596. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts.map +0 -1
  597. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts +0 -2
  598. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts.map +0 -1
  599. package/dist/types/src/wallet/createActionSdk.d.ts +0 -8
  600. package/dist/types/src/wallet/createActionSdk.d.ts.map +0 -1
  601. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts +0 -94
  602. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts.map +0 -1
  603. package/dist/types/src/wallet/sdk/CertOps.d.ts +0 -63
  604. package/dist/types/src/wallet/sdk/CertOps.d.ts.map +0 -1
  605. package/dist/types/src/wallet/sdk/Certificate.d.ts +0 -77
  606. package/dist/types/src/wallet/sdk/Certificate.d.ts.map +0 -1
  607. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts +0 -128
  608. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts.map +0 -1
  609. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts +0 -30
  610. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts.map +0 -1
  611. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts +0 -102
  612. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts.map +0 -1
  613. package/dist/types/src/wallet/sdk/WERR_errors.d.ts +0 -84
  614. package/dist/types/src/wallet/sdk/WERR_errors.d.ts.map +0 -1
  615. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts +0 -1036
  616. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts.map +0 -1
  617. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts +0 -31
  618. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts.map +0 -1
  619. package/dist/types/src/wallet/sdk/WalletError.d.ts +0 -46
  620. package/dist/types/src/wallet/sdk/WalletError.d.ts.map +0 -1
  621. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts +0 -293
  622. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts.map +0 -1
  623. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts +0 -48
  624. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts.map +0 -1
  625. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts +0 -296
  626. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts.map +0 -1
  627. package/dist/types/src/wallet/sdk/index.d.ts +0 -15
  628. package/dist/types/src/wallet/sdk/index.d.ts.map +0 -1
  629. package/dist/types/src/wallet/sdk/types.d.ts +0 -56
  630. package/dist/types/src/wallet/sdk/types.d.ts.map +0 -1
  631. package/dist/types/src/wallet/sdk/validationHelpers.d.ts +0 -301
  632. package/dist/types/src/wallet/sdk/validationHelpers.d.ts.map +0 -1
  633. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts +0 -2
  634. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts.map +0 -1
  635. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts +0 -5
  636. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts.map +0 -1
  637. package/dist/types/src/wallet/utilityHelpers.d.ts +0 -142
  638. package/dist/types/src/wallet/utilityHelpers.d.ts.map +0 -1
  639. package/dist/types/src/wallet/validationHelpers.d.ts +0 -301
  640. package/dist/types/src/wallet/validationHelpers.d.ts.map +0 -1
  641. package/docs/README.md +0 -21
  642. /package/docs/{auth.md → reference/auth.md} +0 -0
  643. /package/docs/{compat.md → reference/compat.md} +0 -0
  644. /package/docs/{identity.md → reference/identity.md} +0 -0
  645. /package/docs/{kvstore.md → reference/kvstore.md} +0 -0
  646. /package/docs/{messages.md → reference/messages.md} +0 -0
  647. /package/docs/{overlay-tools.md → reference/overlay-tools.md} +0 -0
  648. /package/docs/{primitives.md → reference/primitives.md} +0 -0
  649. /package/docs/{registry.md → reference/registry.md} +0 -0
  650. /package/docs/{script.md → reference/script.md} +0 -0
  651. /package/docs/{storage.md → reference/storage.md} +0 -0
  652. /package/docs/{totp.md → reference/totp.md} +0 -0
  653. /package/docs/{transaction.md → reference/transaction.md} +0 -0
  654. /package/docs/{wallet.md → reference/wallet.md} +0 -0
@@ -1,1072 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const BigNumber_1 = __importDefault(require("../../primitives/BigNumber"));
7
- const TransactionSignature_1 = __importDefault(require("../../primitives/TransactionSignature"));
8
- const utils_1 = require("../../primitives/utils");
9
- const Script_1 = __importDefault(require("../../script/Script"));
10
- const UnlockingScript_1 = __importDefault(require("../../script/UnlockingScript"));
11
- const LockingScript_1 = __importDefault(require("../../script/LockingScript"));
12
- const Transaction_1 = __importDefault(require("../../transaction/Transaction"));
13
- const Hash_1 = require("../../primitives/Hash");
14
- const PrivateKey_1 = __importDefault(require("../../primitives/PrivateKey"));
15
- const Curve_1 = __importDefault(require("../../primitives/Curve"));
16
- const P2PKH_1 = __importDefault(require("../../script/templates/P2PKH"));
17
- const Utxo_1 = __importDefault(require("../../compat/Utxo"));
18
- const MerklePath_1 = __importDefault(require("../../transaction/MerklePath"));
19
- const Beef_1 = require("../../transaction/Beef");
20
- const sighash_vectors_1 = __importDefault(require("../../primitives/__tests/sighash.vectors"));
21
- const tx_invalid_vectors_1 = __importDefault(require("./tx.invalid.vectors"));
22
- const tx_valid_vectors_1 = __importDefault(require("./tx.valid.vectors"));
23
- const bigtx_vectors_1 = __importDefault(require("./bigtx.vectors"));
24
- const BRC62Hex = '0100beef01fe636d0c0007021400fe507c0c7aa754cef1f7889d5fd395cf1f785dd7de98eed895dbedfe4e5bc70d1502ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e010b00bc4ff395efd11719b277694cface5aa50d085a0bb81f613f70313acd28cf4557010400574b2d9142b8d28b61d88e3b2c3f44d858411356b49a28a4643b6d1a6a092a5201030051a05fc84d531b5d250c23f4f886f6812f9fe3f402d61607f977b4ecd2701c19010000fd781529d58fc2523cf396a7f25440b409857e7e221766c57214b1d38c7b481f01010062f542f45ea3660f86c013ced80534cb5fd4c19d66c56e7e8c5d4bf2d40acc5e010100b121e91836fd7cd5102b654e9f72f3cf6fdbfd0b161c53a9c54b12c841126331020100000001cd4e4cac3c7b56920d1e7655e7e260d31f29d9a388d04910f1bbd72304a79029010000006b483045022100e75279a205a547c445719420aa3138bf14743e3f42618e5f86a19bde14bb95f7022064777d34776b05d816daf1699493fcdf2ef5a5ab1ad710d9c97bfb5b8f7cef3641210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff013e660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac0000000001000100000001ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e000000006a47304402203a61a2e931612b4bda08d541cfb980885173b8dcf64a3471238ae7abcd368d6402204cbf24f04b9aa2256d8901f0ed97866603d2be8324c2bfb7a37bf8fc90edd5b441210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff013c660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac0000000000';
25
- const MerkleRootFromBEEF = 'bb6f640cc4ee56bf38eb5a1969ac0c16caa2d3d202b22bf3735d10eec0ca6e00';
26
- describe('Transaction', () => {
27
- const txIn = {
28
- sourceTXID: '0000000000000000000000000000000000000000000000000000000000000000',
29
- sourceOutputIndex: 0,
30
- unlockingScript: UnlockingScript_1.default.fromHex('ae'),
31
- sequence: 0
32
- };
33
- const txOut = {
34
- satoshis: BigNumber_1.default.fromHex('05000000000000', 'big').toNumber(),
35
- lockingScript: LockingScript_1.default.fromHex('ae')
36
- };
37
- const tx = new Transaction_1.default(0, [txIn], [txOut], 0);
38
- const txhex = '000000000100000000000000000000000000000000000000000000000000000000000000000000000001ae0000000001050000000000000001ae00000000';
39
- const txbuf = (0, utils_1.toArray)(txhex, 'hex');
40
- const tx2idhex = '8c9aa966d35bfeaf031409e0001b90ccdafd8d859799eb945a3c515b8260bcf2';
41
- const tx2hex = '01000000029e8d016a7b0dc49a325922d05da1f916d1e4d4f0cb840c9727f3d22ce8d1363f000000008c493046022100e9318720bee5425378b4763b0427158b1051eec8b08442ce3fbfbf7b30202a44022100d4172239ebd701dae2fbaaccd9f038e7ca166707333427e3fb2a2865b19a7f27014104510c67f46d2cbb29476d1f0b794be4cb549ea59ab9cc1e731969a7bf5be95f7ad5e7f904e5ccf50a9dc1714df00fbeb794aa27aaff33260c1032d931a75c56f2ffffffffa3195e7a1ab665473ff717814f6881485dc8759bebe97e31c301ffe7933a656f020000008b48304502201c282f35f3e02a1f32d2089265ad4b561f07ea3c288169dedcf2f785e6065efa022100e8db18aadacb382eed13ee04708f00ba0a9c40e3b21cf91da8859d0f7d99e0c50141042b409e1ebbb43875be5edde9c452c82c01e3903d38fa4fd89f3887a52cb8aea9dc8aec7e2c9d5b3609c03eb16259a2537135a1bf0f9c5fbbcbdbaf83ba402442ffffffff02206b1000000000001976a91420bb5c3bfaef0231dc05190e7f1c8e22e098991e88acf0ca0100000000001976a9149e3e2d23973a04ec1b02be97c30ab9f2f27c3b2c88ac00000000';
42
- const tx2buf = (0, utils_1.toArray)(tx2hex, 'hex');
43
- it('should make a new transaction', () => {
44
- let tx = new Transaction_1.default();
45
- expect(tx).toBeDefined();
46
- tx = new Transaction_1.default();
47
- expect(tx).toBeDefined();
48
- expect(Transaction_1.default.fromBinary(txbuf).toHex()).toEqual(txhex);
49
- // should set known defaults
50
- expect(tx.version).toEqual(1);
51
- expect(tx.inputs.length).toEqual(0);
52
- expect(tx.outputs.length).toEqual(0);
53
- expect(tx.lockTime).toEqual(0);
54
- });
55
- describe('#constructor', () => {
56
- it('should set these known defaults', () => {
57
- const tx = new Transaction_1.default();
58
- expect(tx.version).toEqual(1);
59
- expect(tx.inputs.length).toEqual(0);
60
- expect(tx.outputs.length).toEqual(0);
61
- expect(tx.lockTime).toEqual(0);
62
- });
63
- });
64
- describe('#fromHex', () => {
65
- it('should recover from this known tx', () => {
66
- expect(Transaction_1.default.fromHex(txhex).toHex()).toEqual(txhex);
67
- });
68
- it('should recover from this known tx from the blockchain', () => {
69
- expect(Transaction_1.default.fromHex(tx2hex).toHex()).toEqual(tx2hex);
70
- });
71
- });
72
- describe('#fromBinary', () => {
73
- it('should recover from this known tx', () => {
74
- expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(txbuf).toBinary())).toEqual(txhex);
75
- });
76
- it('should recover from this known tx from the blockchain', () => {
77
- expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(tx2buf).toBinary())).toEqual(tx2hex);
78
- });
79
- });
80
- describe('#parseScriptOffsets', () => {
81
- it('should match sliced scripts to parsed scripts', async () => {
82
- const tx = Transaction_1.default.fromBinary(tx2buf);
83
- expect(tx.id('hex')).toBe(tx2idhex);
84
- const r = Transaction_1.default.parseScriptOffsets(tx2buf);
85
- expect(r.inputs.length).toBe(2);
86
- expect(r.outputs.length).toBe(2);
87
- for (let vin = 0; vin < 2; vin++) {
88
- const i = r.inputs[vin];
89
- const script = tx2buf.slice(i.offset, i.length + i.offset);
90
- expect(script).toEqual(tx.inputs[vin].unlockingScript?.toBinary());
91
- }
92
- for (let vout = 0; vout < 2; vout++) {
93
- const o = r.outputs[vout];
94
- const script = tx2buf.slice(o.offset, o.length + o.offset);
95
- expect(script).toEqual(tx.outputs[vout].lockingScript?.toBinary());
96
- }
97
- });
98
- });
99
- describe('#toHex', () => {
100
- it('should produce this known tx', () => {
101
- expect(Transaction_1.default.fromHex(txhex).toHex()).toEqual(txhex);
102
- });
103
- });
104
- describe('#toBinary', () => {
105
- it('should produce this known tx', () => {
106
- expect((0, utils_1.toHex)(Transaction_1.default.fromBinary(txbuf).toBinary())).toEqual(txhex);
107
- });
108
- });
109
- describe('#hash', () => {
110
- it('should correctly calculate the hash of this known transaction', () => {
111
- const tx = Transaction_1.default.fromBinary(tx2buf);
112
- const hash = tx.hash();
113
- const reversedHash = Array.isArray(hash)
114
- ? hash.reverse()
115
- : (0, utils_1.toArray)(hash, 'hex').reverse();
116
- expect((0, utils_1.toHex)(reversedHash)).toEqual(tx2idhex);
117
- });
118
- });
119
- describe('#id', () => {
120
- it('should correctly calculate the txid of this known transaction', () => {
121
- const tx = Transaction_1.default.fromBinary(tx2buf);
122
- expect(tx.id('hex')).toEqual(tx2idhex);
123
- });
124
- });
125
- describe('#addInput', () => {
126
- it('should add an input', () => {
127
- const txIn = {
128
- sourceTXID: '0000000000000000000000000000000000000000000000000000000000000000',
129
- sourceOutputIndex: 0,
130
- unlockingScript: new UnlockingScript_1.default(),
131
- sequence: 0xffffffff
132
- };
133
- const tx = new Transaction_1.default();
134
- expect(tx.inputs.length).toEqual(0);
135
- tx.addInput(txIn);
136
- expect(tx.inputs.length).toEqual(1);
137
- });
138
- });
139
- describe('#addOutput', () => {
140
- it('should add an output', () => {
141
- const txOut = {
142
- lockingScript: new LockingScript_1.default(),
143
- satoshis: 1
144
- };
145
- const tx = new Transaction_1.default();
146
- expect(tx.outputs.length).toEqual(0);
147
- tx.addOutput(txOut);
148
- expect(tx.outputs.length).toEqual(1);
149
- });
150
- });
151
- describe('Signing', () => {
152
- it('Signs unlocking script templates, hydrating the scripts', async () => {
153
- const privateKey = new PrivateKey_1.default(1);
154
- const publicKey = new Curve_1.default().g.mul(privateKey);
155
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
156
- const p2pkh = new P2PKH_1.default();
157
- const sourceTx = new Transaction_1.default(1, [], [
158
- {
159
- lockingScript: p2pkh.lock(publicKeyHash),
160
- satoshis: 4000
161
- }
162
- ], 0);
163
- const spendTx = new Transaction_1.default(1, [
164
- {
165
- sourceTransaction: sourceTx,
166
- sourceOutputIndex: 0,
167
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
168
- sequence: 0xffffffff
169
- }
170
- ], [
171
- {
172
- satoshis: 1000,
173
- lockingScript: p2pkh.lock(publicKeyHash)
174
- },
175
- {
176
- lockingScript: p2pkh.lock(publicKeyHash),
177
- change: true
178
- }
179
- ], 0);
180
- expect(spendTx.inputs[0].unlockingScript).not.toBeDefined();
181
- await spendTx.fee();
182
- await spendTx.sign();
183
- expect(spendTx.inputs[0].unlockingScript).toBeDefined();
184
- // P2PKH unlocking scripts have two chunks (the signature and public key)
185
- expect(spendTx.inputs[0].unlockingScript.chunks.length).toBe(2);
186
- });
187
- it('Signs a large number of unlocking script templates in a timely manner', async () => {
188
- const privateKey = new PrivateKey_1.default(134);
189
- const publicKey = new Curve_1.default().g.mul(privateKey);
190
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
191
- const p2pkh = new P2PKH_1.default();
192
- const spendCount = 30;
193
- const output = {
194
- lockingScript: p2pkh.lock(publicKeyHash),
195
- satoshis: 4000
196
- };
197
- const manyOutputs = [output];
198
- for (let i = 1; i < spendCount; i++) {
199
- manyOutputs[i] = {
200
- lockingScript: p2pkh.lock(publicKeyHash),
201
- satoshis: 4000
202
- };
203
- }
204
- const sourceTx = new Transaction_1.default(1, [], manyOutputs, 0);
205
- const input = {
206
- sourceTransaction: sourceTx,
207
- sourceOutputIndex: 0,
208
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
209
- sequence: 0xffffffff
210
- };
211
- const manyInputs = [input];
212
- for (let i = 1; i < spendCount; i++) {
213
- manyInputs[i] = {
214
- sourceTransaction: sourceTx,
215
- sourceOutputIndex: i,
216
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
217
- sequence: 0xffffffff
218
- };
219
- }
220
- const spendTx = new Transaction_1.default(1, manyInputs, [
221
- {
222
- satoshis: 1000,
223
- lockingScript: p2pkh.lock(publicKeyHash)
224
- },
225
- {
226
- lockingScript: p2pkh.lock(publicKeyHash),
227
- change: true
228
- }
229
- ], 0);
230
- expect(spendTx.inputs[0].unlockingScript).not.toBeDefined();
231
- await spendTx.fee();
232
- await spendTx.sign();
233
- expect(spendTx.inputs[0].unlockingScript).toBeDefined();
234
- // P2PKH unlocking scripts have two chunks (the signature and public key)
235
- expect(spendTx.inputs[0].unlockingScript.chunks.length).toBe(2);
236
- });
237
- it('Throws an Error if signing before the fee is computed', async () => {
238
- const privateKey = new PrivateKey_1.default(1);
239
- const publicKey = new Curve_1.default().g.mul(privateKey);
240
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true), 'hex');
241
- const p2pkh = new P2PKH_1.default();
242
- const sourceTx = new Transaction_1.default(1, [], [
243
- {
244
- lockingScript: p2pkh.lock(publicKeyHash),
245
- satoshis: 4000
246
- }
247
- ], 0);
248
- const spendTx = new Transaction_1.default(1, [
249
- {
250
- sourceTransaction: sourceTx,
251
- sourceOutputIndex: 0,
252
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
253
- sequence: 0xffffffff
254
- }
255
- ], [
256
- {
257
- satoshis: 1000,
258
- lockingScript: p2pkh.lock(publicKeyHash)
259
- },
260
- {
261
- lockingScript: p2pkh.lock(publicKeyHash),
262
- change: true
263
- }
264
- ], 0);
265
- await expect(spendTx.sign()).rejects.toThrow();
266
- });
267
- });
268
- describe('Fees', () => {
269
- it('Computes fees with the default fee model', async () => {
270
- const privateKey = new PrivateKey_1.default(1);
271
- const publicKey = new Curve_1.default().g.mul(privateKey);
272
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
273
- const p2pkh = new P2PKH_1.default();
274
- const sourceTx = new Transaction_1.default(1, [], [
275
- {
276
- lockingScript: p2pkh.lock(publicKeyHash),
277
- satoshis: 4000
278
- }
279
- ], 0);
280
- const spendTx = new Transaction_1.default(1, [
281
- {
282
- sourceTransaction: sourceTx,
283
- sourceOutputIndex: 0,
284
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
285
- sequence: 0xffffffff
286
- }
287
- ], [
288
- {
289
- satoshis: 1000,
290
- lockingScript: p2pkh.lock(publicKeyHash)
291
- },
292
- {
293
- lockingScript: p2pkh.lock(publicKeyHash),
294
- change: true
295
- }
296
- ], 0);
297
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
298
- await spendTx.fee();
299
- // Transaction size is 225 bytes for one-input two-output P2PKH.
300
- // Default fee rate is 10 sat/kb = 2.25 sats (round up to 3).
301
- // 4000 sats in - 1000 sats out - 3 sats fee = expected 2997 sats change.
302
- expect(spendTx.outputs[1].satoshis).toEqual(2997);
303
- });
304
- it('Computes fees with a custom fee model', async () => {
305
- const privateKey = new PrivateKey_1.default(1);
306
- const publicKey = new Curve_1.default().g.mul(privateKey);
307
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
308
- const p2pkh = new P2PKH_1.default();
309
- const sourceTx = new Transaction_1.default(1, [], [
310
- {
311
- lockingScript: p2pkh.lock(publicKeyHash),
312
- satoshis: 4000
313
- }
314
- ], 0);
315
- const spendTx = new Transaction_1.default(1, [
316
- {
317
- sourceTransaction: sourceTx,
318
- sourceOutputIndex: 0,
319
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
320
- sequence: 0xffffffff
321
- }
322
- ], [
323
- {
324
- satoshis: 1000,
325
- lockingScript: p2pkh.lock(publicKeyHash)
326
- },
327
- {
328
- lockingScript: p2pkh.lock(publicKeyHash),
329
- change: true
330
- }
331
- ], 0);
332
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
333
- await spendTx.fee({
334
- // Our custom fee model will always charge 1033 sats for a tx.
335
- computeFee: async () => 1033
336
- });
337
- // 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
338
- expect(spendTx.outputs[1].satoshis).toEqual(1967);
339
- });
340
- it('Computes fee using FixedFee model', async () => {
341
- const privateKey = new PrivateKey_1.default(1);
342
- const publicKey = new Curve_1.default().g.mul(privateKey);
343
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
344
- const p2pkh = new P2PKH_1.default();
345
- const sourceTx = new Transaction_1.default(1, [], [
346
- {
347
- lockingScript: p2pkh.lock(publicKeyHash),
348
- satoshis: 4000
349
- }
350
- ], 0);
351
- const spendTx = new Transaction_1.default(1, [
352
- {
353
- sourceTransaction: sourceTx,
354
- sourceOutputIndex: 0,
355
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
356
- sequence: 0xffffffff
357
- }
358
- ], [
359
- {
360
- satoshis: 1000,
361
- lockingScript: p2pkh.lock(publicKeyHash)
362
- },
363
- {
364
- lockingScript: p2pkh.lock(publicKeyHash),
365
- change: true
366
- }
367
- ], 0);
368
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
369
- await spendTx.fee(1033);
370
- // 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
371
- expect(spendTx.outputs[1].satoshis).toEqual(1967);
372
- });
373
- it('Distributes change equally among multiple change outputs', async () => {
374
- const privateKey = new PrivateKey_1.default(1);
375
- const publicKey = new Curve_1.default().g.mul(privateKey);
376
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
377
- const p2pkh = new P2PKH_1.default();
378
- const sourceTx = new Transaction_1.default(1, [], [
379
- {
380
- lockingScript: p2pkh.lock(publicKeyHash),
381
- satoshis: 4000
382
- }
383
- ], 0);
384
- const spendTx = new Transaction_1.default(1, [
385
- {
386
- sourceTransaction: sourceTx,
387
- sourceOutputIndex: 0,
388
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
389
- sequence: 0xffffffff
390
- }
391
- ], [
392
- {
393
- satoshis: 1000,
394
- lockingScript: p2pkh.lock(publicKeyHash)
395
- },
396
- {
397
- lockingScript: p2pkh.lock(publicKeyHash),
398
- change: true
399
- },
400
- {
401
- lockingScript: p2pkh.lock(publicKeyHash),
402
- change: true
403
- },
404
- {
405
- lockingScript: p2pkh.lock(publicKeyHash),
406
- change: true
407
- },
408
- {
409
- lockingScript: p2pkh.lock(publicKeyHash),
410
- change: true
411
- }
412
- ], 0);
413
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
414
- expect(spendTx.outputs[2].satoshis).not.toBeDefined();
415
- expect(spendTx.outputs[3].satoshis).not.toBeDefined();
416
- expect(spendTx.outputs[4].satoshis).not.toBeDefined();
417
- await spendTx.fee({
418
- // Our custom fee model will always charge 1033 sats for a tx.
419
- computeFee: async () => 1032
420
- });
421
- // 4000 sats in - 1000 sats out - 1033 sats fee = expected 1967 sats change
422
- // Divide by 2 (no remainder) = 983 sats per change output
423
- expect(spendTx.outputs[0].satoshis).toEqual(1000);
424
- expect(spendTx.outputs[1].satoshis).toEqual(492);
425
- expect(spendTx.outputs[2].satoshis).toEqual(492);
426
- expect(spendTx.outputs[3].satoshis).toEqual(492);
427
- expect(spendTx.outputs[4].satoshis).toEqual(492);
428
- });
429
- it('Distributes change randomly among multiple change outputs', async () => {
430
- const privateKey = new PrivateKey_1.default(1);
431
- const publicKey = new Curve_1.default().g.mul(privateKey);
432
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
433
- const p2pkh = new P2PKH_1.default();
434
- const sourceTx = new Transaction_1.default(1, [], [
435
- {
436
- lockingScript: p2pkh.lock(publicKeyHash),
437
- satoshis: 900
438
- }
439
- ], 0);
440
- const spendTx = new Transaction_1.default(1, [
441
- {
442
- sourceTransaction: sourceTx,
443
- sourceOutputIndex: 0,
444
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
445
- sequence: 0xffffffff
446
- }
447
- ], [
448
- {
449
- satoshis: 1,
450
- lockingScript: p2pkh.lock(publicKeyHash)
451
- },
452
- {
453
- lockingScript: p2pkh.lock(publicKeyHash),
454
- change: true
455
- },
456
- {
457
- lockingScript: p2pkh.lock(publicKeyHash),
458
- change: true
459
- },
460
- {
461
- lockingScript: p2pkh.lock(publicKeyHash),
462
- change: true
463
- },
464
- {
465
- lockingScript: p2pkh.lock(publicKeyHash),
466
- change: true
467
- },
468
- {
469
- lockingScript: p2pkh.lock(publicKeyHash),
470
- change: true
471
- },
472
- {
473
- lockingScript: p2pkh.lock(publicKeyHash),
474
- change: true
475
- }
476
- ], 0);
477
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
478
- expect(spendTx.outputs[2].satoshis).not.toBeDefined();
479
- expect(spendTx.outputs[3].satoshis).not.toBeDefined();
480
- expect(spendTx.outputs[4].satoshis).not.toBeDefined();
481
- expect(spendTx.outputs[5].satoshis).not.toBeDefined();
482
- expect(spendTx.outputs[6].satoshis).not.toBeDefined();
483
- await spendTx.fee({
484
- computeFee: async () => 3
485
- }, 'random');
486
- expect(spendTx.outputs[0].satoshis).toEqual(1);
487
- expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(897);
488
- });
489
- it('Distributes change randomly among multiple change outputs, with one set output', async () => {
490
- const privateKey = new PrivateKey_1.default(1);
491
- const publicKey = new Curve_1.default().g.mul(privateKey);
492
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
493
- const p2pkh = new P2PKH_1.default();
494
- const sourceTx = new Transaction_1.default(1, [], [
495
- {
496
- lockingScript: p2pkh.lock(publicKeyHash),
497
- satoshis: 9
498
- }
499
- ], 0);
500
- const spendTx = new Transaction_1.default(1, [
501
- {
502
- sourceTransaction: sourceTx,
503
- sourceOutputIndex: 0,
504
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
505
- sequence: 0xffffffff
506
- }
507
- ], [
508
- {
509
- satoshis: 1,
510
- lockingScript: p2pkh.lock(publicKeyHash)
511
- },
512
- {
513
- lockingScript: p2pkh.lock(publicKeyHash),
514
- change: true
515
- },
516
- {
517
- lockingScript: p2pkh.lock(publicKeyHash),
518
- change: true
519
- },
520
- {
521
- lockingScript: p2pkh.lock(publicKeyHash),
522
- change: true
523
- },
524
- {
525
- lockingScript: p2pkh.lock(publicKeyHash),
526
- change: true
527
- },
528
- {
529
- lockingScript: p2pkh.lock(publicKeyHash),
530
- change: true
531
- },
532
- {
533
- lockingScript: p2pkh.lock(publicKeyHash),
534
- change: true
535
- }
536
- ], 0);
537
- expect(spendTx.outputs[1].satoshis).not.toBeDefined();
538
- expect(spendTx.outputs[2].satoshis).not.toBeDefined();
539
- expect(spendTx.outputs[3].satoshis).not.toBeDefined();
540
- expect(spendTx.outputs[4].satoshis).not.toBeDefined();
541
- expect(spendTx.outputs[5].satoshis).not.toBeDefined();
542
- expect(spendTx.outputs[6].satoshis).not.toBeDefined();
543
- await spendTx.fee({
544
- computeFee: async () => 1
545
- }, 'random');
546
- expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(8);
547
- });
548
- it('Distributes change randomly among multiple change outputs, thinnly spread', async () => {
549
- const privateKey = new PrivateKey_1.default(1);
550
- const publicKey = new Curve_1.default().g.mul(privateKey);
551
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
552
- const p2pkh = new P2PKH_1.default();
553
- const sourceTx = new Transaction_1.default(1, [], [
554
- {
555
- lockingScript: p2pkh.lock(publicKeyHash),
556
- satoshis: 46
557
- }
558
- ], 0);
559
- const spendTx = new Transaction_1.default(1, [
560
- {
561
- sourceTransaction: sourceTx,
562
- sourceOutputIndex: 0,
563
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
564
- sequence: 0xffffffff
565
- }
566
- ], Array(21)
567
- .fill(null)
568
- .map(() => ({
569
- lockingScript: p2pkh.lock(publicKeyHash),
570
- change: true
571
- })), 0);
572
- await spendTx.fee({
573
- computeFee: async () => 1
574
- }, 'random');
575
- expect(spendTx.outputs.reduce((a, b) => a + b.satoshis, 0)).toEqual(45);
576
- });
577
- it('Calculates fee for utxo based transaction', async () => {
578
- const utxos = [
579
- // WoC format utxos
580
- {
581
- height: 1600000,
582
- tx_pos: 0,
583
- tx_hash: '672dd6a93fa5d7ba6794e0bdf8b479440b95a55ec10ad3d9e03585ecb5628d8d',
584
- value: 10000
585
- },
586
- {
587
- height: 1600000,
588
- tx_pos: 0,
589
- tx_hash: 'f33505acf37a7726cc37d391bc6f889b8684ac2a2d581c4be2a4b1c8b46609bc',
590
- value: 10000
591
- }
592
- ];
593
- const priv = PrivateKey_1.default.fromRandom();
594
- const tx = new Transaction_1.default();
595
- utxos.forEach(utxo => {
596
- const u = {
597
- txid: utxo.tx_hash,
598
- vout: utxo.tx_pos,
599
- script: new P2PKH_1.default().lock(priv.toPublicKey().toHash()).toHex(),
600
- satoshis: utxo.value
601
- };
602
- tx.addInput((0, Utxo_1.default)(u, new P2PKH_1.default().unlock(priv)));
603
- });
604
- tx.addOutput({
605
- lockingScript: new P2PKH_1.default().lock(priv.toAddress()),
606
- change: true
607
- });
608
- await tx.fee({ computeFee: async () => 10 });
609
- expect(tx.outputs[0].satoshis).toEqual(20000 - 10);
610
- expect(tx.getFee()).toEqual(10);
611
- });
612
- });
613
- describe('Broadcast', () => {
614
- it('Broadcasts with the default Broadcaster instance', async () => {
615
- const mockedFetch = jest.fn().mockResolvedValue({
616
- ok: true,
617
- status: 200,
618
- statusText: 'OK',
619
- headers: {
620
- get(key) {
621
- if (key === 'Content-Type') {
622
- return 'application/json';
623
- }
624
- }
625
- },
626
- json: async () => ({
627
- txid: 'mocked_txid',
628
- txStatus: 'success',
629
- extraInfo: 'received'
630
- })
631
- });
632
- global.window = { fetch: mockedFetch };
633
- const tx = new Transaction_1.default();
634
- const rv = await tx.broadcast();
635
- expect(mockedFetch).toHaveBeenCalled();
636
- const url = mockedFetch.mock.calls[0][0];
637
- expect(url).toEqual('https://arc.taal.com/v1/tx');
638
- expect(rv).toEqual({
639
- status: 'success',
640
- txid: 'mocked_txid',
641
- message: 'success received'
642
- });
643
- });
644
- it('Broadcasts with the provided Broadcaster instance', async () => {
645
- const mockBroadcast = jest.fn(async () => {
646
- return {
647
- status: 'success', // Explicitly matches the literal type "success"
648
- txid: 'mock_txid',
649
- message: 'Transaction successfully broadcasted.'
650
- };
651
- });
652
- const tx = new Transaction_1.default();
653
- const rv = await tx.broadcast({
654
- broadcast: mockBroadcast
655
- });
656
- // Ensure the mock function was called with the correct argument
657
- expect(mockBroadcast).toHaveBeenCalledWith(tx);
658
- // Verify the return value matches the mocked response
659
- expect(rv).toEqual({
660
- status: 'success',
661
- txid: 'mock_txid',
662
- message: 'Transaction successfully broadcasted.'
663
- });
664
- });
665
- describe('BEEF', () => {
666
- it('Serialization and deserialization', async () => {
667
- const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BRC62Hex, 'hex'));
668
- expect(tx.inputs[0].sourceTransaction.merklePath.blockHeight).toEqual(814435);
669
- const beef = (0, utils_1.toHex)(tx.toBEEF());
670
- expect(beef).toEqual(BRC62Hex);
671
- });
672
- it('Does not double-encode transactions', () => {
673
- // Source: https://github.com/bitcoin-sv/ts-sdk/issues/77
674
- const incorrect = '0100beef01fe76eb0c000e02c402deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111c500f4076b7f48031fc467f87d5e99d9c3c0b59e4dca5e3049f58b735c59b413a8b6016300bad9c2d948e8a2ca647fdb50f2fd36641c4adf937b41134405a3e7f734b8beb201300053604a579558b5f7030e618d5c726a19229e0ff677f6edf109f41c5cfdafc93e0119005f8465c2a8d1558afbfa80c2395f3f8866a2fa5015e54fab778b0149da58376c010d00cd452b4e74f57d199cdb81b8a0e4a62dcdaf89504d6c63a5a65d5b866912b8c0010700d2ae7e2ce76da560509172066f1a1cf81faf81d73f9c0f6fd5af0904973dcfb10102006e5e077bcaa35c0240d61c1f3bba8d789223711ec035ef88b0911fc569d2b95a010000c961038959b9d404297a180c066816562dd2a34986c0960121a87ba91a51262f010100a50e381b4e8812479ea561e5bab7dcaa80078652b1b39ee5410966c515a3442b010100383ce8891ca7bf1ddefa5e0d8a1ba9ab01cb4e18046e9d7d0d438b5aaecc38b2010100c694be322b4e74acca8a5ef7703afedb708281321fd674f1221eebc743b0e01c0101000f3cc61f2b3d762cfecdd977ba768a5cbb0a4b402ad4f0d1bd3a98a582794c35010100094ad56eeea3b47edb2b298775f2efabe48172612cb3419962632251d8cdb78e010100de84bf9dd8873f37decbda1b5188e24ead978b147a63c809691702d19c47e8cb050200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac00000000000200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac000000000001000000022e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b000000006b483045022100d9a2d1efea4896b36b2eb5af42cf52009982c7c31b446213fe37f26835d9d72202203e4dee0ceb068a4936e79b0bf69f72203906a00a4256cb1a7b30a40764616e8441210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff2e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b010000006b483045022100b57a09145c57b7b5efb4b546f1b0bfb7adbc5e64d35d9d6989345d4c60c483940220280998a210a49a6efaacda6fb73670001bb7269d069be80eb14ea2227a73e82241210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff0174660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac0000000000';
675
- const correct = '0100beef01fe76eb0c000e02c402deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111c500f4076b7f48031fc467f87d5e99d9c3c0b59e4dca5e3049f58b735c59b413a8b6016300bad9c2d948e8a2ca647fdb50f2fd36641c4adf937b41134405a3e7f734b8beb201300053604a579558b5f7030e618d5c726a19229e0ff677f6edf109f41c5cfdafc93e0119005f8465c2a8d1558afbfa80c2395f3f8866a2fa5015e54fab778b0149da58376c010d00cd452b4e74f57d199cdb81b8a0e4a62dcdaf89504d6c63a5a65d5b866912b8c0010700d2ae7e2ce76da560509172066f1a1cf81faf81d73f9c0f6fd5af0904973dcfb10102006e5e077bcaa35c0240d61c1f3bba8d789223711ec035ef88b0911fc569d2b95a010000c961038959b9d404297a180c066816562dd2a34986c0960121a87ba91a51262f010100a50e381b4e8812479ea561e5bab7dcaa80078652b1b39ee5410966c515a3442b010100383ce8891ca7bf1ddefa5e0d8a1ba9ab01cb4e18046e9d7d0d438b5aaecc38b2010100c694be322b4e74acca8a5ef7703afedb708281321fd674f1221eebc743b0e01c0101000f3cc61f2b3d762cfecdd977ba768a5cbb0a4b402ad4f0d1bd3a98a582794c35010100094ad56eeea3b47edb2b298775f2efabe48172612cb3419962632251d8cdb78e010100de84bf9dd8873f37decbda1b5188e24ead978b147a63c809691702d19c47e8cb030200000001b67f1b6a6c3e70742a39b82ba45d51c983f598963ebf237101cc372da1144b83020000006b483045022100d14c3eb0c1438747c124f099bc664bf945cd27cbd96915027057e508bbc9e03302203c73f79d4e00f8018783e1008ce0fbb8e8c58bff6bd8042ab7e3966a66c8788c41210356762156ee9347c3e2ceca17d13713028d5446f453e9cbcb0ea170b4ca7fab52ffffffff037c660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac75330100000000001976a914eb645f9ea7e4e232e54b9651474c100026698c3088acf2458005000000001976a914802737e30c85b6fe86e26fb28e03140058aca65e88ac0000000001000100000001deff5437203e0b5cb22646cbada24a60349bf45c8b280ffb755868f2955c3111000000006a473044022076da9f61380c208f43652587c219b4452a7b803a0407c2c7c0f3bc27612c4e88022021a9eb02da5529873a5986933f9c35965aa78537b9e2aef9382de33cfb1ab4bb41210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff023c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac3c330000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac000000000001000000022e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b000000006b483045022100d9a2d1efea4896b36b2eb5af42cf52009982c7c31b446213fe37f26835d9d72202203e4dee0ceb068a4936e79b0bf69f72203906a00a4256cb1a7b30a40764616e8441210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff2e7f69f3e1e17e22cfb8818577b3c83a4fbbbc1bab55c70ffcdd994ae30ea48b010000006b483045022100b57a09145c57b7b5efb4b546f1b0bfb7adbc5e64d35d9d6989345d4c60c483940220280998a210a49a6efaacda6fb73670001bb7269d069be80eb14ea2227a73e82241210314793e1758db3caa7d2bce97b347ae3ced2f8a402b797ed986be63473d4644a0ffffffff0174660000000000001976a91417c85798ff61f7ec8af257f672d973b6ec6d88fd88ac0000000000';
676
- const tx1 = Transaction_1.default.fromHexBEEF(incorrect);
677
- expect(tx1.toHexBEEF()).toEqual(correct);
678
- });
679
- });
680
- describe('EF', () => {
681
- it('Serialization and deserialization', async () => {
682
- const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BRC62Hex, 'hex'));
683
- const ef = (0, utils_1.toHex)(tx.toEF());
684
- expect(ef).toEqual('010000000000000000ef01ac4e164f5bc16746bb0868404292ac8318bbac3800e4aad13a014da427adce3e000000006a47304402203a61a2e931612b4bda08d541cfb980885173b8dcf64a3471238ae7abcd368d6402204cbf24f04b9aa2256d8901f0ed97866603d2be8324c2bfb7a37bf8fc90edd5b441210263e2dee22b1ddc5e11f6fab8bcd2378bdd19580d640501ea956ec0e786f93e76ffffffff3e660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac013c660000000000001976a9146bfd5c7fbe21529d45803dbcf0c87dd3c71efbc288ac00000000');
685
- });
686
- });
687
- describe('Verification', () => {
688
- it('Verifies the transaction from the BEEF spec', async () => {
689
- const tx = Transaction_1.default.fromHexBEEF(BRC62Hex);
690
- const alwaysYesChainTracker = {
691
- currentHeight: async () => 1631619, // Mocked current height
692
- isValidRootForHeight: async () => true // Always returns true
693
- };
694
- const verified = await tx.verify(alwaysYesChainTracker);
695
- expect(verified).toBe(true);
696
- });
697
- });
698
- it('Verifies the transaction from the BEEF spec with a default chain tracker', async () => {
699
- const mockFetch = jest.fn().mockResolvedValue({
700
- ok: true,
701
- status: 200,
702
- statusText: 'OK',
703
- headers: {
704
- get(key) {
705
- if (key === 'Content-Type') {
706
- return 'application/json';
707
- }
708
- }
709
- },
710
- json: async () => ({
711
- merkleroot: MerkleRootFromBEEF
712
- })
713
- });
714
- global.window = { fetch: mockFetch };
715
- const tx = Transaction_1.default.fromHexBEEF(BRC62Hex);
716
- const verified = await tx.verify();
717
- expect(mockFetch).toHaveBeenCalled();
718
- expect(verified).toBe(true);
719
- });
720
- it('Verifies the transaction from the BEEF spec with a scripts only', async () => {
721
- const BEEF = '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';
722
- const tx = Transaction_1.default.fromBEEF((0, utils_1.toArray)(BEEF, 'base64'));
723
- // Verifies transaction with scripts only
724
- const verified = await tx.verify('scripts only');
725
- expect(verified).toBe(true);
726
- });
727
- it('Verifies tx scripts only when our input has no MerklePath.', async () => {
728
- const sourceTransaction = Transaction_1.default.fromHex('01000000013834506e4af751dc3a0d73e9bdd067709ade5248860967fb3eb72854be6011dc020000006b4830450221008abf2ce1afbcc3c4895265b0966ac69e2275fb35a738f9873b5416cd3bb68cc102202c906f9771d2d6868f81a34d6a3af4cd7de070969286db7097c5e0f3a009b638412102f6a81c442dcd903c7808a75abde9217268bb70417ad538c18fb597b4c553c354ffffffff0301000000000000007c21039bf52152665699e24c1018bf5b48e575de316f844962a79db32b93b7e328bf71ac1062656e63686d61726b546f6b656e5f36463044022034ca3cc49163e4d5bc24f41c5ea4631efd4ae7c243f904c90e1db6e6a55e8f0e02206bb031baca2fc6d64da5ad722ce2e07137718e5e58092e5ecf54e52fcdd664ab6dc8000000000000001976a91470763a553d615a8144fa0889a0e1f93d1d8da8b088acaf430000000000001976a9145aa12f9be0121eee54e7331d8f995fe4dded72f588ac00000000');
729
- const tx = Transaction_1.default.fromHex('01000000015c22e8d34a95a761a0685b8b5a99a0845e9f03d87d5716a7351d08939db5cd92020000006a47304402205101f2bdc40098cbde1a270071a5bfdd5a6fbefc8a38a8b4a1adaca0a6ff55e702200ec5c0a57cb65dfc6aa22e6856bb4c62b8987a7b9fa32cb601c94b579ba67d83412103c8be6b217fc55939851e28239fbbf731f997e026ad344aa9d4b739181fe96743ffffffff0301000000000000007c21039bf52152665699e24c1018bf5b48e575de316f844962a79db32b93b7e328bf71ac1062656e63686d61726b546f6b656e5f374630440220026808e9453f75ca1fc3c7bb0f7be1efaca5cea6b1eda96ab7db56c519b6793202207d1fa5e7d54254d2142256947f93a061781280a6ed2464052470633a7c888d1f6dc8000000000000001976a91428bb6f207ac8f4b7f6c1c5914e143a6165586b2488ace5420000000000001976a914197cbde77abbcb985ca60a85c2988b2ac32c541a88ac00000000');
730
- // Create a mock MerklePath
731
- const mockMerklePath = new MerklePath_1.default(0, [
732
- [{ offset: 0, hash: 'dummyHash' }]
733
- ]);
734
- sourceTransaction.merklePath = mockMerklePath;
735
- tx.inputs[0].sourceTransaction = sourceTransaction;
736
- const verified = await tx.verify('scripts only', undefined);
737
- expect(verified).toBe(true);
738
- });
739
- describe('vectors: a 1mb transaction', () => {
740
- it('should find the correct id of this (valid, on the blockchain) 1 mb transaction', () => {
741
- const txidhex = bigtx_vectors_1.default.txidhex;
742
- const txhex = bigtx_vectors_1.default.txhex;
743
- const tx = Transaction_1.default.fromHex(txhex);
744
- const txid = tx.id('hex');
745
- expect(txid).toEqual(txidhex);
746
- });
747
- });
748
- describe('vectors: sighash and serialization', () => {
749
- sighash_vectors_1.default.forEach((vector, i) => {
750
- if (i === 0) {
751
- return;
752
- }
753
- it(`should pass bitcoin-abc sighash test vector ${i}`, () => {
754
- const txbuf = (0, utils_1.toArray)(vector[0], 'hex');
755
- const scriptbuf = (0, utils_1.toArray)(vector[1], 'hex');
756
- const subScript = Script_1.default.fromBinary(scriptbuf);
757
- const nIn = vector[2];
758
- const nHashType = vector[3];
759
- const sighashBuf = (0, utils_1.toArray)(vector[4], 'hex');
760
- const tx = Transaction_1.default.fromBinary(txbuf);
761
- // make sure transacion to/from buffer is isomorphic
762
- expect((0, utils_1.toHex)(tx.toBinary())).toEqual((0, utils_1.toHex)(txbuf));
763
- // sighash ought to be correct
764
- const valueBn = new BigNumber_1.default(0).toNumber();
765
- const otherInputs = [...tx.inputs];
766
- const [input] = otherInputs.splice(nIn, 1);
767
- const preimage = TransactionSignature_1.default.format({
768
- sourceTXID: input.sourceTXID,
769
- sourceOutputIndex: input.sourceOutputIndex,
770
- sourceSatoshis: valueBn,
771
- transactionVersion: tx.version,
772
- otherInputs,
773
- outputs: tx.outputs,
774
- inputIndex: nIn,
775
- subscript: subScript,
776
- inputSequence: input.sequence,
777
- lockTime: tx.lockTime,
778
- scope: nHashType
779
- });
780
- const hash = (0, Hash_1.hash256)(preimage);
781
- hash.reverse();
782
- expect((0, utils_1.toHex)(hash)).toEqual((0, utils_1.toHex)(sighashBuf));
783
- });
784
- });
785
- tx_valid_vectors_1.default.forEach((vector, i) => {
786
- if (vector.length === 1) {
787
- return;
788
- }
789
- it(`should correctly serialized/deserialize tx_valid test vector ${i}`, () => {
790
- const expectedHex = vector[1];
791
- const expectedBin = (0, utils_1.toArray)(vector[1], 'hex');
792
- const actualTX = Transaction_1.default.fromBinary(expectedBin);
793
- const actualBin = actualTX.toBinary();
794
- const actualHex = (0, utils_1.toHex)(actualBin);
795
- expect(actualHex).toEqual(expectedHex);
796
- });
797
- });
798
- tx_invalid_vectors_1.default.forEach((vector, i) => {
799
- if (vector.length === 1) {
800
- return;
801
- }
802
- // 151, 142 and 25 have invalid Satoshi amounts that exceed 53 bits in length, causing exceptions that make serialization and deserialization impossible.
803
- if (i === 151 || i === 142 || i === 25) {
804
- return;
805
- }
806
- it(`should correctly serialized/deserialize tx_invalid test vector ${i}`, () => {
807
- const expectedHex = vector[1];
808
- const expectedBin = (0, utils_1.toArray)(vector[1], 'hex');
809
- const actualTX = Transaction_1.default.fromBinary(expectedBin);
810
- const actualBin = actualTX.toBinary();
811
- const actualHex = (0, utils_1.toHex)(actualBin);
812
- expect(actualHex).toEqual(expectedHex);
813
- });
814
- });
815
- });
816
- describe('Atomic BEEF', () => {
817
- it('should serialize a transaction to Atomic BEEF format correctly', async () => {
818
- const privateKey = new PrivateKey_1.default(1);
819
- const publicKey = new Curve_1.default().g.mul(privateKey);
820
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
821
- const p2pkh = new P2PKH_1.default();
822
- // Create a simple transaction
823
- const sourceTx = new Transaction_1.default(1, [], [
824
- {
825
- lockingScript: p2pkh.lock(publicKeyHash),
826
- satoshis: 10000
827
- }
828
- ], 0);
829
- const spendTx = new Transaction_1.default(1, [
830
- {
831
- sourceTransaction: sourceTx,
832
- sourceOutputIndex: 0,
833
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
834
- sequence: 0xffffffff
835
- }
836
- ], [
837
- {
838
- satoshis: 9000,
839
- lockingScript: p2pkh.lock(publicKeyHash)
840
- }
841
- ], 0);
842
- // Sign the transaction
843
- await spendTx.fee();
844
- await spendTx.sign();
845
- // Assign a MerklePath to the source transaction to simulate mined transaction
846
- const sourceTxID = sourceTx.id('hex');
847
- const merklePath = new MerklePath_1.default(1000, [
848
- [
849
- { offset: 0, hash: sourceTxID, txid: true },
850
- { offset: 1, duplicate: true }
851
- ]
852
- ]);
853
- sourceTx.merklePath = merklePath;
854
- // Serialize to Atomic BEEF
855
- const atomicBEEF = spendTx.toAtomicBEEF();
856
- expect(atomicBEEF).toBeDefined();
857
- // Verify that the Atomic BEEF starts with the correct prefix and TXID
858
- const expectedPrefix = [0x01, 0x01, 0x01, 0x01];
859
- expect(atomicBEEF.slice(0, 4)).toEqual(expectedPrefix);
860
- const txid = spendTx.id();
861
- expect(atomicBEEF.slice(4, 36)).toEqual(txid);
862
- // Deserialize from Atomic BEEF
863
- const deserializedTx = Transaction_1.default.fromAtomicBEEF(atomicBEEF);
864
- expect(deserializedTx.toHex()).toEqual(spendTx.toHex());
865
- });
866
- it('should throw an error when deserializing Atomic BEEF if subject transaction is missing', () => {
867
- // Create Atomic BEEF data with missing subject transaction
868
- const writer = new utils_1.Writer();
869
- // Write Atomic BEEF prefix
870
- writer.writeUInt32LE(0x01010101);
871
- // Write subject TXID
872
- const fakeTXID = (0, utils_1.toArray)('00'.repeat(32), 'hex');
873
- writer.write(fakeTXID);
874
- // Write empty BEEF data
875
- writer.writeUInt32LE(Beef_1.BEEF_V1); // BEEF version
876
- writer.writeVarIntNum(0); // No BUMPs
877
- writer.writeVarIntNum(0); // No transactions
878
- const atomicBEEFData = writer.toArray();
879
- expect(() => {
880
- Transaction_1.default.fromAtomicBEEF(atomicBEEFData);
881
- }).toThrow('beef must include at least one transaction.');
882
- });
883
- it('should allow selecting a specific TXID from BEEF data', async () => {
884
- // Create two transactions, one depending on the other
885
- const privateKey = new PrivateKey_1.default(1);
886
- const publicKey = new Curve_1.default().g.mul(privateKey);
887
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
888
- const p2pkh = new P2PKH_1.default();
889
- const sourceTx = new Transaction_1.default(1, [], [
890
- {
891
- lockingScript: p2pkh.lock(publicKeyHash),
892
- satoshis: 10000
893
- }
894
- ], 0);
895
- const spendTx = new Transaction_1.default(1, [
896
- {
897
- sourceTransaction: sourceTx,
898
- sourceOutputIndex: 0,
899
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
900
- sequence: 0xffffffff
901
- }
902
- ], [
903
- {
904
- satoshis: 9000,
905
- lockingScript: p2pkh.lock(publicKeyHash)
906
- }
907
- ], 0);
908
- // Sign transactions
909
- await spendTx.fee();
910
- await spendTx.sign();
911
- // Assign merkle path to source transaction
912
- const sourceTxID = sourceTx.id('hex');
913
- sourceTx.merklePath = new MerklePath_1.default(1000, [
914
- [
915
- { offset: 0, hash: sourceTxID, txid: true },
916
- { offset: 1, duplicate: true }
917
- ]
918
- ]);
919
- // Serialize to BEEF
920
- const beefData = spendTx.toBEEF();
921
- // Get TXIDs
922
- const spendTxID = spendTx.id('hex');
923
- // Deserialize the source transaction from BEEF data
924
- const deserializedSourceTx = Transaction_1.default.fromBEEF(beefData, sourceTxID);
925
- expect(deserializedSourceTx.id('hex')).toEqual(sourceTxID);
926
- // Deserialize the spend transaction from BEEF data
927
- const deserializedSpendTx = Transaction_1.default.fromBEEF(beefData, spendTxID);
928
- expect(deserializedSpendTx.id('hex')).toEqual(spendTxID);
929
- // Attempt to deserialize a non-existent transaction
930
- expect(() => {
931
- Transaction_1.default.fromBEEF(beefData, '00'.repeat(32));
932
- }).toThrowError('Transaction with TXID 0000000000000000000000000000000000000000000000000000000000000000 not found in BEEF data.');
933
- });
934
- });
935
- describe('addP2PKHOutput', () => {
936
- it('should create an output on the current transaction using an address hash or string', async () => {
937
- const privateKey = PrivateKey_1.default.fromRandom();
938
- const lockingScript = new P2PKH_1.default().lock(privateKey.toAddress());
939
- const tx = new Transaction_1.default();
940
- tx.addInput({
941
- sourceTXID: '00'.repeat(32),
942
- sourceOutputIndex: 0,
943
- unlockingScriptTemplate: new P2PKH_1.default().unlock(privateKey)
944
- });
945
- tx.addP2PKHOutput(privateKey.toAddress(), 10000);
946
- expect(tx.outputs.length).toEqual(1);
947
- expect(tx.outputs[0].satoshis).toEqual(10000);
948
- expect(tx.outputs[0].lockingScript.toHex() === lockingScript.toHex()).toBeTruthy();
949
- });
950
- });
951
- });
952
- describe('Atomic BEEF', () => {
953
- it('should serialize a transaction to Atomic BEEF format correctly', async () => {
954
- const privateKey = new PrivateKey_1.default(1);
955
- const publicKey = new Curve_1.default().g.mul(privateKey);
956
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
957
- const p2pkh = new P2PKH_1.default();
958
- // Create a simple transaction
959
- const sourceTx = new Transaction_1.default(1, [], [{
960
- lockingScript: p2pkh.lock(publicKeyHash),
961
- satoshis: 10000
962
- }], 0);
963
- const spendTx = new Transaction_1.default(1, [{
964
- sourceTransaction: sourceTx,
965
- sourceOutputIndex: 0,
966
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
967
- sequence: 0xffffffff
968
- }], [{
969
- satoshis: 9000,
970
- lockingScript: p2pkh.lock(publicKeyHash)
971
- }], 0);
972
- // Sign the transaction
973
- await spendTx.fee();
974
- await spendTx.sign();
975
- // Assign a MerklePath to the source transaction to simulate mined transaction
976
- const sourceTxID = sourceTx.id('hex');
977
- const merklePath = new MerklePath_1.default(1000, [
978
- [
979
- { offset: 0, hash: sourceTxID, txid: true },
980
- { offset: 1, duplicate: true }
981
- ]
982
- ]);
983
- sourceTx.merklePath = merklePath;
984
- // Serialize to Atomic BEEF
985
- const atomicBEEF = spendTx.toAtomicBEEF();
986
- expect(atomicBEEF).toBeDefined();
987
- // Verify that the Atomic BEEF starts with the correct prefix and TXID
988
- const expectedPrefix = [0x01, 0x01, 0x01, 0x01];
989
- expect(atomicBEEF.slice(0, 4)).toEqual(expectedPrefix);
990
- const txid = spendTx.id();
991
- expect(atomicBEEF.slice(4, 36)).toEqual(txid);
992
- // Deserialize from Atomic BEEF
993
- const deserializedTx = Transaction_1.default.fromAtomicBEEF(atomicBEEF);
994
- expect(deserializedTx.toHex()).toEqual(spendTx.toHex());
995
- });
996
- it('should throw an error when deserializing Atomic BEEF if subject transaction is missing', () => {
997
- // Create Atomic BEEF data with missing subject transaction
998
- const writer = new utils_1.Writer();
999
- // Write Atomic BEEF prefix
1000
- writer.writeUInt32LE(0x01010101);
1001
- // Write subject TXID
1002
- const fakeTXID = (0, utils_1.toArray)('00'.repeat(32), 'hex');
1003
- writer.write(fakeTXID);
1004
- // Write empty BEEF data
1005
- writer.writeUInt32LE(Beef_1.BEEF_V1); // BEEF version
1006
- writer.writeVarIntNum(0); // No BUMPs
1007
- writer.writeVarIntNum(0); // No transactions
1008
- const atomicBEEFData = writer.toArray();
1009
- expect(() => {
1010
- Transaction_1.default.fromAtomicBEEF(atomicBEEFData);
1011
- }).toThrowError('beef must include at least one transaction.');
1012
- });
1013
- it('should allow selecting a specific TXID from BEEF data', async () => {
1014
- // Create two transactions, one depending on the other
1015
- const privateKey = new PrivateKey_1.default(1);
1016
- const publicKey = new Curve_1.default().g.mul(privateKey);
1017
- const publicKeyHash = (0, Hash_1.hash160)(publicKey.encode(true));
1018
- const p2pkh = new P2PKH_1.default();
1019
- const sourceTx = new Transaction_1.default(1, [], [{
1020
- lockingScript: p2pkh.lock(publicKeyHash),
1021
- satoshis: 10000
1022
- }], 0);
1023
- const spendTx = new Transaction_1.default(1, [{
1024
- sourceTransaction: sourceTx,
1025
- sourceOutputIndex: 0,
1026
- unlockingScriptTemplate: p2pkh.unlock(privateKey),
1027
- sequence: 0xffffffff
1028
- }], [{
1029
- satoshis: 9000,
1030
- lockingScript: p2pkh.lock(publicKeyHash)
1031
- }], 0);
1032
- // Sign transactions
1033
- await spendTx.fee();
1034
- await spendTx.sign();
1035
- // Assign merkle path to source transaction
1036
- const sourceTxID = sourceTx.id('hex');
1037
- sourceTx.merklePath = new MerklePath_1.default(1000, [
1038
- [
1039
- { offset: 0, hash: sourceTxID, txid: true },
1040
- { offset: 1, duplicate: true }
1041
- ]
1042
- ]);
1043
- // Serialize to BEEF
1044
- const beefData = spendTx.toBEEF();
1045
- // Get TXIDs
1046
- const spendTxID = spendTx.id('hex');
1047
- // Deserialize the source transaction from BEEF data
1048
- const deserializedSourceTx = Transaction_1.default.fromBEEF(beefData, sourceTxID);
1049
- expect(deserializedSourceTx.id('hex')).toEqual(sourceTxID);
1050
- // Deserialize the spend transaction from BEEF data
1051
- const deserializedSpendTx = Transaction_1.default.fromBEEF(beefData, spendTxID);
1052
- expect(deserializedSpendTx.id('hex')).toEqual(spendTxID);
1053
- // Attempt to deserialize a non-existent transaction
1054
- expect(() => {
1055
- Transaction_1.default.fromBEEF(beefData, '00'.repeat(32));
1056
- }).toThrowError('Transaction with TXID 0000000000000000000000000000000000000000000000000000000000000000 not found in BEEF data.');
1057
- });
1058
- });
1059
- describe('addP2PKHOutput', () => {
1060
- it('should create an output on the current transaction using an address hash or string', async () => {
1061
- const privateKey = PrivateKey_1.default.fromRandom();
1062
- const lockingScript = new P2PKH_1.default().lock(privateKey.toAddress());
1063
- const tx = new Transaction_1.default();
1064
- tx.addInput({
1065
- sourceTXID: '00'.repeat(32),
1066
- sourceOutputIndex: 0,
1067
- unlockingScriptTemplate: new P2PKH_1.default().unlock(privateKey),
1068
- });
1069
- });
1070
- });
1071
- });
1072
- //# sourceMappingURL=Transaction.test.js.map