@bsv/sdk 1.4.6 → 1.4.7

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