mainnet-js 0.5.9 → 1.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (684) hide show
  1. package/dist/index.html +9 -1
  2. package/dist/mainnet-1.0.0-rc.1.js +2928 -0
  3. package/dist/module/chain.d.ts +1 -0
  4. package/dist/module/chain.d.ts.map +1 -0
  5. package/dist/module/cli.d.ts +1 -0
  6. package/dist/module/cli.d.ts.map +1 -0
  7. package/dist/module/cli.js +2 -2
  8. package/dist/module/cli.js.map +1 -1
  9. package/dist/module/constant.d.ts +1 -0
  10. package/dist/module/constant.d.ts.map +1 -0
  11. package/dist/module/db/ExchangeRateProvider.d.ts +2 -1
  12. package/dist/module/db/ExchangeRateProvider.d.ts.map +1 -0
  13. package/dist/module/db/IndexedDBProvider.d.ts +3 -2
  14. package/dist/module/db/IndexedDBProvider.d.ts.map +1 -0
  15. package/dist/module/db/SqlProvider.d.ts +7 -8
  16. package/dist/module/db/SqlProvider.d.ts.map +1 -0
  17. package/dist/module/db/SqlProvider.js +10 -8
  18. package/dist/module/db/SqlProvider.js.map +1 -1
  19. package/dist/module/db/StorageProvider.d.ts +2 -1
  20. package/dist/module/db/StorageProvider.d.ts.map +1 -0
  21. package/dist/module/db/getStorageProvider.d.ts +3 -0
  22. package/dist/module/db/getStorageProvider.d.ts.map +1 -0
  23. package/dist/module/db/getStorageProvider.js +19 -0
  24. package/dist/module/db/getStorageProvider.js.map +1 -0
  25. package/dist/module/db/index.d.ts +4 -3
  26. package/dist/module/db/index.d.ts.map +1 -0
  27. package/dist/module/db/index.js +2 -2
  28. package/dist/module/db/index.js.map +1 -1
  29. package/dist/module/db/interface.d.ts +1 -0
  30. package/dist/module/db/interface.d.ts.map +1 -0
  31. package/dist/module/db/util.d.ts +2 -3
  32. package/dist/module/db/util.d.ts.map +1 -0
  33. package/dist/module/db/util.js +0 -17
  34. package/dist/module/db/util.js.map +1 -1
  35. package/dist/module/enum.d.ts +1 -0
  36. package/dist/module/enum.d.ts.map +1 -0
  37. package/dist/module/history/electrumTransformer.d.ts +3 -2
  38. package/dist/module/history/electrumTransformer.d.ts.map +1 -0
  39. package/dist/module/history/electrumTransformer.js +11 -11
  40. package/dist/module/history/electrumTransformer.js.map +1 -1
  41. package/dist/module/history/interface.d.ts +2 -1
  42. package/dist/module/history/interface.d.ts.map +1 -0
  43. package/dist/module/index.d.ts +26 -21
  44. package/dist/module/index.d.ts.map +1 -0
  45. package/dist/module/index.js +25 -17
  46. package/dist/module/index.js.map +1 -1
  47. package/dist/module/interface.d.ts +14 -0
  48. package/dist/module/interface.d.ts.map +1 -0
  49. package/dist/module/interface.js +5 -0
  50. package/dist/module/interface.js.map +1 -1
  51. package/dist/module/message/index.d.ts +3 -2
  52. package/dist/module/message/index.d.ts.map +1 -0
  53. package/dist/module/message/index.js +2 -2
  54. package/dist/module/message/index.js.map +1 -1
  55. package/dist/module/message/interface.d.ts +1 -0
  56. package/dist/module/message/interface.d.ts.map +1 -0
  57. package/dist/module/message/signed.d.ts +2 -1
  58. package/dist/module/message/signed.d.ts.map +1 -0
  59. package/dist/module/message/signed.js +10 -4
  60. package/dist/module/message/signed.js.map +1 -1
  61. package/dist/module/mine/index.d.ts +2 -1
  62. package/dist/module/mine/index.d.ts.map +1 -0
  63. package/dist/module/mine/index.js +1 -1
  64. package/dist/module/mine/index.js.map +1 -1
  65. package/dist/module/mine/mine.d.ts +1 -0
  66. package/dist/module/mine/mine.d.ts.map +1 -0
  67. package/dist/module/mine/mine.js +3 -3
  68. package/dist/module/mine/mine.js.map +1 -1
  69. package/dist/module/network/Connection.d.ts +3 -2
  70. package/dist/module/network/Connection.d.ts.map +1 -0
  71. package/dist/module/network/Connection.js +3 -3
  72. package/dist/module/network/Connection.js.map +1 -1
  73. package/dist/module/network/ElectrumNetworkProvider.d.ts +8 -5
  74. package/dist/module/network/ElectrumNetworkProvider.d.ts.map +1 -0
  75. package/dist/module/network/ElectrumNetworkProvider.js +59 -13
  76. package/dist/module/network/ElectrumNetworkProvider.js.map +1 -1
  77. package/dist/module/network/NetworkProvider.d.ts +2 -1
  78. package/dist/module/network/NetworkProvider.d.ts.map +1 -0
  79. package/dist/module/network/configuration.d.ts +8 -10
  80. package/dist/module/network/configuration.d.ts.map +1 -0
  81. package/dist/module/network/configuration.js +29 -17
  82. package/dist/module/network/configuration.js.map +1 -1
  83. package/dist/module/network/constant.d.ts +1 -0
  84. package/dist/module/network/constant.d.ts.map +1 -0
  85. package/dist/module/network/constant.js +8 -4
  86. package/dist/module/network/constant.js.map +1 -1
  87. package/dist/module/network/default.d.ts +4 -3
  88. package/dist/module/network/default.d.ts.map +1 -0
  89. package/dist/module/network/default.js +7 -7
  90. package/dist/module/network/default.js.map +1 -1
  91. package/dist/module/network/getRelayFeeCache.d.ts +2 -1
  92. package/dist/module/network/getRelayFeeCache.d.ts.map +1 -0
  93. package/dist/module/network/getRelayFeeCache.js +2 -2
  94. package/dist/module/network/getRelayFeeCache.js.map +1 -1
  95. package/dist/module/network/index.d.ts +3 -2
  96. package/dist/module/network/index.d.ts.map +1 -0
  97. package/dist/module/network/index.js +2 -2
  98. package/dist/module/network/index.js.map +1 -1
  99. package/dist/module/network/interface.d.ts +1 -0
  100. package/dist/module/network/interface.d.ts.map +1 -0
  101. package/dist/module/network/util.d.ts +2 -1
  102. package/dist/module/network/util.d.ts.map +1 -0
  103. package/dist/module/qr/Qr.d.ts +2 -1
  104. package/dist/module/qr/Qr.d.ts.map +1 -0
  105. package/dist/module/qr/Qr.js +2 -2
  106. package/dist/module/qr/Qr.js.map +1 -1
  107. package/dist/module/qr/interface.d.ts +1 -0
  108. package/dist/module/qr/interface.d.ts.map +1 -0
  109. package/dist/module/rate/ExchangeRate.d.ts +1 -0
  110. package/dist/module/rate/ExchangeRate.d.ts.map +1 -0
  111. package/dist/module/rate/ExchangeRate.js +5 -5
  112. package/dist/module/rate/ExchangeRate.js.map +1 -1
  113. package/dist/module/slp/GsppProvider.d.ts +4 -3
  114. package/dist/module/slp/GsppProvider.d.ts.map +1 -0
  115. package/dist/module/slp/GsppProvider.js +7 -7
  116. package/dist/module/slp/GsppProvider.js.map +1 -1
  117. package/dist/module/slp/SlpDbProvider.d.ts +4 -3
  118. package/dist/module/slp/SlpDbProvider.d.ts.map +1 -0
  119. package/dist/module/slp/SlpDbProvider.js +8 -8
  120. package/dist/module/slp/SlpDbProvider.js.map +1 -1
  121. package/dist/module/slp/SlpDbTemplates.d.ts +1 -0
  122. package/dist/module/slp/SlpDbTemplates.d.ts.map +1 -0
  123. package/dist/module/slp/SlpLibAuth.d.ts +7 -14
  124. package/dist/module/slp/SlpLibAuth.d.ts.map +1 -0
  125. package/dist/module/slp/SlpLibAuth.js +48 -39
  126. package/dist/module/slp/SlpLibAuth.js.map +1 -1
  127. package/dist/module/slp/SlpProvider.d.ts +2 -1
  128. package/dist/module/slp/SlpProvider.d.ts.map +1 -0
  129. package/dist/module/slp/SlpProvider.js.map +1 -1
  130. package/dist/module/slp/index.d.ts +5 -4
  131. package/dist/module/slp/index.d.ts.map +1 -0
  132. package/dist/module/slp/index.js +3 -3
  133. package/dist/module/slp/index.js.map +1 -1
  134. package/dist/module/slp/interface.d.ts +2 -1
  135. package/dist/module/slp/interface.d.ts.map +1 -0
  136. package/dist/module/test/axios.d.ts +3 -0
  137. package/dist/module/test/axios.d.ts.map +1 -0
  138. package/dist/module/test/axios.js +35 -0
  139. package/dist/module/test/axios.js.map +1 -0
  140. package/dist/module/test/expect.d.ts +6 -1
  141. package/dist/module/test/expect.d.ts.map +1 -0
  142. package/dist/module/test/expect.js +22 -1
  143. package/dist/module/test/expect.js.map +1 -1
  144. package/dist/module/transaction/Wif.d.ts +19 -16
  145. package/dist/module/transaction/Wif.d.ts.map +1 -0
  146. package/dist/module/transaction/Wif.js +152 -55
  147. package/dist/module/transaction/Wif.js.map +1 -1
  148. package/dist/module/transaction/allocateFee.d.ts +5 -4
  149. package/dist/module/transaction/allocateFee.d.ts.map +1 -0
  150. package/dist/module/transaction/allocateFee.js +11 -8
  151. package/dist/module/transaction/allocateFee.js.map +1 -1
  152. package/dist/module/util/amountInSatoshi.d.ts +1 -0
  153. package/dist/module/util/amountInSatoshi.d.ts.map +1 -0
  154. package/dist/module/util/amountInSatoshi.js +4 -4
  155. package/dist/module/util/amountInSatoshi.js.map +1 -1
  156. package/dist/module/util/asSendRequestObject.d.ts +3 -2
  157. package/dist/module/util/asSendRequestObject.d.ts.map +1 -0
  158. package/dist/module/util/asSendRequestObject.js +6 -3
  159. package/dist/module/util/asSendRequestObject.js.map +1 -1
  160. package/dist/module/util/balanceObjectFromSatoshi.d.ts +1 -0
  161. package/dist/module/util/balanceObjectFromSatoshi.d.ts.map +1 -0
  162. package/dist/module/util/balanceObjectFromSatoshi.js +5 -5
  163. package/dist/module/util/balanceObjectFromSatoshi.js.map +1 -1
  164. package/dist/module/util/base64.d.ts +2 -1
  165. package/dist/module/util/base64.d.ts.map +1 -0
  166. package/dist/module/util/base64.js +5 -25
  167. package/dist/module/util/base64.js.map +1 -1
  168. package/dist/module/util/bchaddr.d.ts +1 -0
  169. package/dist/module/util/bchaddr.d.ts.map +1 -0
  170. package/dist/module/util/browserNotSupported.d.ts +1 -0
  171. package/dist/module/util/browserNotSupported.d.ts.map +1 -0
  172. package/dist/module/util/browserNotSupported.js +1 -1
  173. package/dist/module/util/browserNotSupported.js.map +1 -1
  174. package/dist/module/util/checkForEmptySeed.d.ts +1 -0
  175. package/dist/module/util/checkForEmptySeed.d.ts.map +1 -0
  176. package/dist/module/util/checkWifNetwork.d.ts +2 -1
  177. package/dist/module/util/checkWifNetwork.d.ts.map +1 -0
  178. package/dist/module/util/checkWifNetwork.js +1 -1
  179. package/dist/module/util/checkWifNetwork.js.map +1 -1
  180. package/dist/module/util/convert.d.ts +1 -0
  181. package/dist/module/util/convert.d.ts.map +1 -0
  182. package/dist/module/util/convert.js +2 -2
  183. package/dist/module/util/convert.js.map +1 -1
  184. package/dist/module/util/delay.d.ts +1 -0
  185. package/dist/module/util/delay.d.ts.map +1 -0
  186. package/dist/module/util/deriveCashaddr.d.ts +6 -1
  187. package/dist/module/util/deriveCashaddr.d.ts.map +1 -0
  188. package/dist/module/util/deriveCashaddr.js +85 -6
  189. package/dist/module/util/deriveCashaddr.js.map +1 -1
  190. package/dist/module/util/deriveLockscript.d.ts +1 -0
  191. package/dist/module/util/deriveLockscript.d.ts.map +1 -0
  192. package/dist/module/util/deriveNetwork.d.ts +1 -0
  193. package/dist/module/util/deriveNetwork.d.ts.map +1 -0
  194. package/dist/module/util/deriveNetwork.js +2 -2
  195. package/dist/module/util/deriveNetwork.js.map +1 -1
  196. package/dist/module/util/derivePublicKeyHash.d.ts +3 -1
  197. package/dist/module/util/derivePublicKeyHash.d.ts.map +1 -0
  198. package/dist/module/util/derivePublicKeyHash.js +1 -1
  199. package/dist/module/util/derivePublicKeyHash.js.map +1 -1
  200. package/dist/module/util/eventsource.d.ts +1 -0
  201. package/dist/module/util/eventsource.d.ts.map +1 -0
  202. package/dist/module/util/eventsource.js +3 -2
  203. package/dist/module/util/eventsource.js.map +1 -1
  204. package/dist/module/util/floor.d.ts +1 -0
  205. package/dist/module/util/floor.d.ts.map +1 -0
  206. package/dist/module/util/getAddrsByXpubKey.d.ts +8 -8
  207. package/dist/module/util/getAddrsByXpubKey.d.ts.map +1 -0
  208. package/dist/module/util/getAddrsByXpubKey.js +17 -21
  209. package/dist/module/util/getAddrsByXpubKey.js.map +1 -1
  210. package/dist/module/util/getRuntimePlatform.d.ts +1 -0
  211. package/dist/module/util/getRuntimePlatform.d.ts.map +1 -0
  212. package/dist/module/util/getUsdRate.d.ts +1 -0
  213. package/dist/module/util/getUsdRate.d.ts.map +1 -0
  214. package/dist/module/util/getUsdRate.js +1 -1
  215. package/dist/module/util/getUsdRate.js.map +1 -1
  216. package/dist/module/util/getXPubKey.d.ts +2 -1
  217. package/dist/module/util/getXPubKey.d.ts.map +1 -0
  218. package/dist/module/util/getXPubKey.js +6 -7
  219. package/dist/module/util/getXPubKey.js.map +1 -1
  220. package/dist/module/util/hash160.d.ts +2 -1
  221. package/dist/module/util/hash160.d.ts.map +1 -0
  222. package/dist/module/util/hash160.js +2 -4
  223. package/dist/module/util/hash160.js.map +1 -1
  224. package/dist/module/util/index.d.ts +21 -20
  225. package/dist/module/util/index.d.ts.map +1 -0
  226. package/dist/module/util/index.js +20 -20
  227. package/dist/module/util/index.js.map +1 -1
  228. package/dist/module/util/randomBytes.d.ts +3 -1
  229. package/dist/module/util/randomBytes.d.ts.map +1 -0
  230. package/dist/module/util/randomBytes.js +2 -3
  231. package/dist/module/util/randomBytes.js.map +1 -1
  232. package/dist/module/util/randomInt.d.ts +1 -0
  233. package/dist/module/util/randomInt.d.ts.map +1 -0
  234. package/dist/module/util/randomValues.d.ts +1 -0
  235. package/dist/module/util/randomValues.d.ts.map +1 -0
  236. package/dist/module/util/randomValues.js +7 -7
  237. package/dist/module/util/randomValues.js.map +1 -1
  238. package/dist/module/util/sanitizeAddress.d.ts +1 -0
  239. package/dist/module/util/sanitizeAddress.d.ts.map +1 -0
  240. package/dist/module/util/sanitizeAddress.js +1 -1
  241. package/dist/module/util/sanitizeAddress.js.map +1 -1
  242. package/dist/module/util/sanitizeUnit.d.ts +2 -1
  243. package/dist/module/util/sanitizeUnit.d.ts.map +1 -0
  244. package/dist/module/util/satoshiToAmount.d.ts +1 -0
  245. package/dist/module/util/satoshiToAmount.d.ts.map +1 -0
  246. package/dist/module/util/satoshiToAmount.js +4 -4
  247. package/dist/module/util/satoshiToAmount.js.map +1 -1
  248. package/dist/module/util/sumSendRequestAmounts.d.ts +3 -2
  249. package/dist/module/util/sumSendRequestAmounts.d.ts.map +1 -0
  250. package/dist/module/util/sumSendRequestAmounts.js +5 -2
  251. package/dist/module/util/sumSendRequestAmounts.js.map +1 -1
  252. package/dist/module/util/sumUtxoValue.d.ts +4 -2
  253. package/dist/module/util/sumUtxoValue.d.ts.map +1 -0
  254. package/dist/module/util/sumUtxoValue.js +17 -3
  255. package/dist/module/util/sumUtxoValue.js.map +1 -1
  256. package/dist/module/util/transaction.d.ts +2 -0
  257. package/dist/module/util/transaction.d.ts.map +1 -0
  258. package/dist/module/util/transaction.js +7 -0
  259. package/dist/module/util/transaction.js.map +1 -0
  260. package/dist/module/wallet/Base.d.ts +8 -7
  261. package/dist/module/wallet/Base.d.ts.map +1 -0
  262. package/dist/module/wallet/Base.js +7 -7
  263. package/dist/module/wallet/Base.js.map +1 -1
  264. package/dist/module/wallet/Bcmr.d.ts +88 -0
  265. package/dist/module/wallet/Bcmr.d.ts.map +1 -0
  266. package/dist/module/wallet/Bcmr.js +281 -0
  267. package/dist/module/wallet/Bcmr.js.map +1 -0
  268. package/dist/module/wallet/Slp.d.ts +6 -5
  269. package/dist/module/wallet/Slp.d.ts.map +1 -0
  270. package/dist/module/wallet/Slp.js +15 -15
  271. package/dist/module/wallet/Slp.js.map +1 -1
  272. package/dist/module/wallet/Util.d.ts +3 -2
  273. package/dist/module/wallet/Util.d.ts.map +1 -0
  274. package/dist/module/wallet/Util.js +9 -14
  275. package/dist/module/wallet/Util.js.map +1 -1
  276. package/dist/module/wallet/Wif.d.ts +124 -20
  277. package/dist/module/wallet/Wif.d.ts.map +1 -0
  278. package/dist/module/wallet/Wif.js +406 -74
  279. package/dist/module/wallet/Wif.js.map +1 -1
  280. package/dist/module/wallet/bcmr-v1.schema.d.ts +623 -0
  281. package/dist/module/wallet/bcmr-v1.schema.d.ts.map +1 -0
  282. package/dist/module/wallet/bcmr-v1.schema.js +2 -0
  283. package/dist/module/wallet/bcmr-v1.schema.js.map +1 -0
  284. package/dist/module/wallet/createWallet.d.ts +3 -2
  285. package/dist/module/wallet/createWallet.d.ts.map +1 -0
  286. package/dist/module/wallet/createWallet.js +3 -3
  287. package/dist/module/wallet/createWallet.js.map +1 -1
  288. package/dist/module/wallet/enum.d.ts +1 -0
  289. package/dist/module/wallet/enum.d.ts.map +1 -0
  290. package/dist/module/wallet/interface.d.ts +10 -6
  291. package/dist/module/wallet/interface.d.ts.map +1 -0
  292. package/dist/module/wallet/model.d.ts +81 -5
  293. package/dist/module/wallet/model.d.ts.map +1 -0
  294. package/dist/module/wallet/model.js +102 -17
  295. package/dist/module/wallet/model.js.map +1 -1
  296. package/dist/module/webhook/Webhook.d.ts +3 -2
  297. package/dist/module/webhook/Webhook.d.ts.map +1 -0
  298. package/dist/module/webhook/Webhook.js +4 -1
  299. package/dist/module/webhook/Webhook.js.map +1 -1
  300. package/dist/module/webhook/WebhookBch.d.ts +4 -3
  301. package/dist/module/webhook/WebhookBch.d.ts.map +1 -0
  302. package/dist/module/webhook/WebhookBch.js +4 -4
  303. package/dist/module/webhook/WebhookBch.js.map +1 -1
  304. package/dist/module/webhook/WebhookSlp.d.ts +5 -4
  305. package/dist/module/webhook/WebhookSlp.d.ts.map +1 -0
  306. package/dist/module/webhook/WebhookSlp.js +4 -4
  307. package/dist/module/webhook/WebhookSlp.js.map +1 -1
  308. package/dist/module/webhook/WebhookWorker.d.ts +3 -2
  309. package/dist/module/webhook/WebhookWorker.d.ts.map +1 -0
  310. package/dist/module/webhook/WebhookWorker.js +1 -1
  311. package/dist/module/webhook/WebhookWorker.js.map +1 -1
  312. package/dist/module/webhook/index.d.ts +6 -5
  313. package/dist/module/webhook/index.d.ts.map +1 -0
  314. package/dist/module/webhook/index.js +5 -5
  315. package/dist/module/webhook/index.js.map +1 -1
  316. package/dist/module/webhook/interface.d.ts +1 -0
  317. package/dist/module/webhook/interface.d.ts.map +1 -0
  318. package/dist/tsconfig.tsbuildinfo +1 -1
  319. package/package.json +9 -9
  320. package/polyfill/{bip39.browser.js → bip39.browser.cjs} +1 -0
  321. package/polyfill/{util.js → util.cjs} +0 -0
  322. package/src/Wallet.test.headless.js +6 -6
  323. package/src/cli.ts +3 -3
  324. package/src/db/ExchangeRateProvider.ts +1 -1
  325. package/src/db/IndexedDBProvider.test.ts +0 -1
  326. package/src/db/IndexedDBProvider.ts +2 -2
  327. package/src/db/SqlProvider.ts +14 -12
  328. package/src/db/StorageProvider.ts +1 -1
  329. package/src/db/getStorageProvider.ts +20 -0
  330. package/src/db/index.ts +3 -3
  331. package/src/db/util.ts +1 -20
  332. package/src/history/electrumTransformer.ts +13 -14
  333. package/src/history/interface.ts +1 -1
  334. package/src/index.ts +29 -21
  335. package/src/interface.ts +15 -0
  336. package/src/message/index.ts +2 -2
  337. package/src/message/signed.test.ts +4 -4
  338. package/src/message/signed.ts +23 -6
  339. package/src/mine/index.ts +1 -1
  340. package/src/mine/mine.ts +3 -3
  341. package/src/network/Connection.ts +5 -5
  342. package/src/network/ElectrumNetworkProvider.ts +85 -20
  343. package/src/network/NetworkProvider.ts +1 -1
  344. package/src/network/configuration.test.ts +33 -8
  345. package/src/network/configuration.ts +33 -18
  346. package/src/network/constant.ts +9 -4
  347. package/src/network/default.ts +13 -10
  348. package/src/network/getRelayFeeCache.ts +3 -3
  349. package/src/network/index.ts +6 -2
  350. package/src/network/util.ts +1 -1
  351. package/src/qr/Qr.ts +3 -3
  352. package/src/rate/ExchangeRate.ts +14 -15
  353. package/src/slp/GsppProvider.test.ts +2 -2
  354. package/src/slp/GsppProvider.ts +11 -8
  355. package/src/slp/SlpDbProvider.test.ts +1 -1
  356. package/src/slp/SlpDbProvider.ts +12 -9
  357. package/src/slp/SlpLibAuth.test.ts +1 -1
  358. package/src/slp/SlpLibAuth.ts +52 -42
  359. package/src/slp/SlpProvider.ts +6 -1
  360. package/src/slp/index.ts +4 -4
  361. package/src/slp/interface.ts +1 -1
  362. package/src/test/axios.ts +47 -0
  363. package/src/test/expect.ts +27 -2
  364. package/src/transaction/Wif.ts +203 -77
  365. package/src/transaction/allocateFee.ts +32 -14
  366. package/src/util/amountInSatoshi.ts +4 -4
  367. package/src/util/asSendRequestObject.ts +42 -30
  368. package/src/util/balanceObjectFromSatoshi.ts +5 -5
  369. package/src/util/base64.ts +5 -24
  370. package/src/util/browserNotSupported.ts +1 -1
  371. package/src/util/checkWifNetwork.ts +1 -1
  372. package/src/util/convert.ts +2 -2
  373. package/src/util/deriveCashaddr.test.ts +43 -0
  374. package/src/util/deriveCashaddr.ts +123 -7
  375. package/src/util/deriveNetwork.ts +2 -2
  376. package/src/util/derivePublicKeyHash.test.ts +3 -0
  377. package/src/util/derivePublicKeyHash.ts +18 -5
  378. package/src/util/eventsource.ts +4 -2
  379. package/src/util/getAddrsByXpubKey.test.ts +5 -5
  380. package/src/util/getAddrsByXpubKey.ts +23 -28
  381. package/src/util/getUsdRate.ts +1 -1
  382. package/src/util/getXPubKey.ts +5 -7
  383. package/src/util/hash160.test.ts +2 -2
  384. package/src/util/hash160.ts +2 -4
  385. package/src/util/index.ts +26 -20
  386. package/src/util/randomBytes.ts +2 -3
  387. package/src/util/randomValues.ts +8 -8
  388. package/src/util/sanitizeAddress.ts +1 -1
  389. package/src/util/sanitizeUnit.ts +1 -1
  390. package/src/util/satoshiToAmount.ts +4 -4
  391. package/src/util/sumSendRequestAmounts.ts +10 -4
  392. package/src/util/sumUtxoValue.ts +19 -7
  393. package/src/util/transaction.ts +10 -0
  394. package/src/wallet/Base.ts +11 -11
  395. package/src/wallet/Bcmr.test.headless.js +353 -0
  396. package/src/wallet/Bcmr.test.ts +610 -0
  397. package/src/wallet/Bcmr.ts +390 -0
  398. package/src/wallet/Cashtokens.test.headless.js +467 -0
  399. package/src/wallet/Cashtokens.test.ts +475 -0
  400. package/src/wallet/Slp.test.headless.js +6 -8
  401. package/src/wallet/Slp.test.ts +2 -2
  402. package/src/wallet/Slp.ts +26 -22
  403. package/src/wallet/Util.ts +9 -20
  404. package/src/wallet/Wif.test.ts +20 -21
  405. package/src/wallet/Wif.ts +534 -99
  406. package/src/wallet/bcmr-v1.schema.ts +639 -0
  407. package/src/wallet/createWallet.test.ts +1 -0
  408. package/src/wallet/createWallet.ts +4 -4
  409. package/src/wallet/interface.ts +9 -6
  410. package/src/wallet/model.ts +190 -19
  411. package/src/webhook/Webhook.ts +7 -3
  412. package/src/webhook/WebhookBch.ts +7 -7
  413. package/src/webhook/WebhookSlp.test.ts +2 -2
  414. package/src/webhook/WebhookSlp.ts +6 -6
  415. package/src/webhook/WebhookWorker.ts +2 -2
  416. package/src/webhook/index.ts +5 -5
  417. package/tsconfig.browser.json +0 -3
  418. package/tsconfig.json +17 -5
  419. package/{webpack.config.js → webpack.config.cjs} +46 -14
  420. package/dist/main/chain.d.ts +0 -3
  421. package/dist/main/chain.js +0 -7
  422. package/dist/main/chain.js.map +0 -1
  423. package/dist/main/cli.d.ts +0 -1
  424. package/dist/main/cli.js +0 -35
  425. package/dist/main/cli.js.map +0 -1
  426. package/dist/main/constant.d.ts +0 -5
  427. package/dist/main/constant.js +0 -27
  428. package/dist/main/constant.js.map +0 -1
  429. package/dist/main/db/ExchangeRateProvider.d.ts +0 -11
  430. package/dist/main/db/ExchangeRateProvider.js +0 -47
  431. package/dist/main/db/ExchangeRateProvider.js.map +0 -1
  432. package/dist/main/db/IndexedDBProvider.d.ts +0 -15
  433. package/dist/main/db/IndexedDBProvider.js +0 -86
  434. package/dist/main/db/IndexedDBProvider.js.map +0 -1
  435. package/dist/main/db/SqlProvider.d.ts +0 -41
  436. package/dist/main/db/SqlProvider.js +0 -217
  437. package/dist/main/db/SqlProvider.js.map +0 -1
  438. package/dist/main/db/StorageProvider.d.ts +0 -52
  439. package/dist/main/db/StorageProvider.js +0 -3
  440. package/dist/main/db/StorageProvider.js.map +0 -1
  441. package/dist/main/db/index.d.ts +0 -3
  442. package/dist/main/db/index.js +0 -11
  443. package/dist/main/db/index.js.map +0 -1
  444. package/dist/main/db/interface.d.ts +0 -22
  445. package/dist/main/db/interface.js +0 -3
  446. package/dist/main/db/interface.js.map +0 -1
  447. package/dist/main/db/util.d.ts +0 -5
  448. package/dist/main/db/util.js +0 -53
  449. package/dist/main/db/util.js.map +0 -1
  450. package/dist/main/enum.d.ts +0 -33
  451. package/dist/main/enum.js +0 -39
  452. package/dist/main/enum.js.map +0 -1
  453. package/dist/main/history/electrumTransformer.d.ts +0 -4
  454. package/dist/main/history/electrumTransformer.js +0 -216
  455. package/dist/main/history/electrumTransformer.js.map +0 -1
  456. package/dist/main/history/interface.d.ts +0 -16
  457. package/dist/main/history/interface.js +0 -3
  458. package/dist/main/history/interface.js.map +0 -1
  459. package/dist/main/index.d.ts +0 -24
  460. package/dist/main/index.js +0 -62
  461. package/dist/main/index.js.map +0 -1
  462. package/dist/main/interface.d.ts +0 -31
  463. package/dist/main/interface.js +0 -12
  464. package/dist/main/interface.js.map +0 -1
  465. package/dist/main/message/index.d.ts +0 -2
  466. package/dist/main/message/index.js +0 -15
  467. package/dist/main/message/index.js.map +0 -1
  468. package/dist/main/message/interface.d.ts +0 -29
  469. package/dist/main/message/interface.js +0 -6
  470. package/dist/main/message/interface.js.map +0 -1
  471. package/dist/main/message/signed.d.ts +0 -33
  472. package/dist/main/message/signed.js +0 -141
  473. package/dist/main/message/signed.js.map +0 -1
  474. package/dist/main/mine/index.d.ts +0 -1
  475. package/dist/main/mine/index.js +0 -14
  476. package/dist/main/mine/index.js.map +0 -1
  477. package/dist/main/mine/mine.d.ts +0 -13
  478. package/dist/main/mine/mine.js +0 -37
  479. package/dist/main/mine/mine.js.map +0 -1
  480. package/dist/main/network/Connection.d.ts +0 -14
  481. package/dist/main/network/Connection.js +0 -71
  482. package/dist/main/network/Connection.js.map +0 -1
  483. package/dist/main/network/ElectrumNetworkProvider.d.ts +0 -49
  484. package/dist/main/network/ElectrumNetworkProvider.js +0 -338
  485. package/dist/main/network/ElectrumNetworkProvider.js.map +0 -1
  486. package/dist/main/network/NetworkProvider.d.ts +0 -107
  487. package/dist/main/network/NetworkProvider.js +0 -3
  488. package/dist/main/network/NetworkProvider.js.map +0 -1
  489. package/dist/main/network/configuration.d.ts +0 -12
  490. package/dist/main/network/configuration.js +0 -79
  491. package/dist/main/network/configuration.js.map +0 -1
  492. package/dist/main/network/constant.d.ts +0 -35
  493. package/dist/main/network/constant.js +0 -55
  494. package/dist/main/network/constant.js.map +0 -1
  495. package/dist/main/network/default.d.ts +0 -7
  496. package/dist/main/network/default.js +0 -107
  497. package/dist/main/network/default.js.map +0 -1
  498. package/dist/main/network/getRelayFeeCache.d.ts +0 -2
  499. package/dist/main/network/getRelayFeeCache.js +0 -27
  500. package/dist/main/network/getRelayFeeCache.js.map +0 -1
  501. package/dist/main/network/index.d.ts +0 -2
  502. package/dist/main/network/index.js +0 -10
  503. package/dist/main/network/index.js.map +0 -1
  504. package/dist/main/network/interface.d.ts +0 -60
  505. package/dist/main/network/interface.js +0 -3
  506. package/dist/main/network/interface.js.map +0 -1
  507. package/dist/main/network/util.d.ts +0 -2
  508. package/dist/main/network/util.js +0 -32
  509. package/dist/main/network/util.js.map +0 -1
  510. package/dist/main/qr/Qr.d.ts +0 -8
  511. package/dist/main/qr/Qr.js +0 -26
  512. package/dist/main/qr/Qr.js.map +0 -1
  513. package/dist/main/qr/interface.d.ts +0 -5
  514. package/dist/main/qr/interface.js +0 -3
  515. package/dist/main/qr/interface.js.map +0 -1
  516. package/dist/main/rate/ExchangeRate.d.ts +0 -19
  517. package/dist/main/rate/ExchangeRate.js +0 -147
  518. package/dist/main/rate/ExchangeRate.js.map +0 -1
  519. package/dist/main/slp/GsppProvider.d.ts +0 -54
  520. package/dist/main/slp/GsppProvider.js +0 -214
  521. package/dist/main/slp/GsppProvider.js.map +0 -1
  522. package/dist/main/slp/SlpDbProvider.d.ts +0 -51
  523. package/dist/main/slp/SlpDbProvider.js +0 -182
  524. package/dist/main/slp/SlpDbProvider.js.map +0 -1
  525. package/dist/main/slp/SlpDbTemplates.d.ts +0 -312
  526. package/dist/main/slp/SlpDbTemplates.js +0 -387
  527. package/dist/main/slp/SlpDbTemplates.js.map +0 -1
  528. package/dist/main/slp/SlpLibAuth.d.ts +0 -217
  529. package/dist/main/slp/SlpLibAuth.js +0 -452
  530. package/dist/main/slp/SlpLibAuth.js.map +0 -1
  531. package/dist/main/slp/SlpProvider.d.ts +0 -23
  532. package/dist/main/slp/SlpProvider.js +0 -39
  533. package/dist/main/slp/SlpProvider.js.map +0 -1
  534. package/dist/main/slp/index.d.ts +0 -5
  535. package/dist/main/slp/index.js +0 -24
  536. package/dist/main/slp/index.js.map +0 -1
  537. package/dist/main/slp/interface.d.ts +0 -113
  538. package/dist/main/slp/interface.js +0 -10
  539. package/dist/main/slp/interface.js.map +0 -1
  540. package/dist/main/test/expect.d.ts +0 -7
  541. package/dist/main/test/expect.js +0 -31
  542. package/dist/main/test/expect.js.map +0 -1
  543. package/dist/main/transaction/Wif.d.ts +0 -42
  544. package/dist/main/transaction/Wif.js +0 -214
  545. package/dist/main/transaction/Wif.js.map +0 -1
  546. package/dist/main/transaction/allocateFee.d.ts +0 -7
  547. package/dist/main/transaction/allocateFee.js +0 -118
  548. package/dist/main/transaction/allocateFee.js.map +0 -1
  549. package/dist/main/util/amountInSatoshi.d.ts +0 -9
  550. package/dist/main/util/amountInSatoshi.js +0 -38
  551. package/dist/main/util/amountInSatoshi.js.map +0 -1
  552. package/dist/main/util/asSendRequestObject.d.ts +0 -2
  553. package/dist/main/util/asSendRequestObject.js +0 -57
  554. package/dist/main/util/asSendRequestObject.js.map +0 -1
  555. package/dist/main/util/balanceObjectFromSatoshi.d.ts +0 -8
  556. package/dist/main/util/balanceObjectFromSatoshi.js +0 -62
  557. package/dist/main/util/balanceObjectFromSatoshi.js.map +0 -1
  558. package/dist/main/util/base64.d.ts +0 -2
  559. package/dist/main/util/base64.js +0 -36
  560. package/dist/main/util/base64.js.map +0 -1
  561. package/dist/main/util/bchaddr.d.ts +0 -1
  562. package/dist/main/util/bchaddr.js +0 -24
  563. package/dist/main/util/bchaddr.js.map +0 -1
  564. package/dist/main/util/browserNotSupported.d.ts +0 -1
  565. package/dist/main/util/browserNotSupported.js +0 -11
  566. package/dist/main/util/browserNotSupported.js.map +0 -1
  567. package/dist/main/util/checkForEmptySeed.d.ts +0 -2
  568. package/dist/main/util/checkForEmptySeed.js +0 -12
  569. package/dist/main/util/checkForEmptySeed.js.map +0 -1
  570. package/dist/main/util/checkWifNetwork.d.ts +0 -2
  571. package/dist/main/util/checkWifNetwork.js +0 -16
  572. package/dist/main/util/checkWifNetwork.js.map +0 -1
  573. package/dist/main/util/convert.d.ts +0 -15
  574. package/dist/main/util/convert.js +0 -24
  575. package/dist/main/util/convert.js.map +0 -1
  576. package/dist/main/util/delay.d.ts +0 -1
  577. package/dist/main/util/delay.js +0 -8
  578. package/dist/main/util/delay.js.map +0 -1
  579. package/dist/main/util/deriveCashaddr.d.ts +0 -2
  580. package/dist/main/util/deriveCashaddr.js +0 -13
  581. package/dist/main/util/deriveCashaddr.js.map +0 -1
  582. package/dist/main/util/deriveLockscript.d.ts +0 -8
  583. package/dist/main/util/deriveLockscript.js +0 -19
  584. package/dist/main/util/deriveLockscript.js.map +0 -1
  585. package/dist/main/util/deriveNetwork.d.ts +0 -1
  586. package/dist/main/util/deriveNetwork.js +0 -23
  587. package/dist/main/util/deriveNetwork.js.map +0 -1
  588. package/dist/main/util/derivePublicKeyHash.d.ts +0 -16
  589. package/dist/main/util/derivePublicKeyHash.js +0 -49
  590. package/dist/main/util/derivePublicKeyHash.js.map +0 -1
  591. package/dist/main/util/eventsource.d.ts +0 -2
  592. package/dist/main/util/eventsource.js +0 -12
  593. package/dist/main/util/eventsource.js.map +0 -1
  594. package/dist/main/util/floor.d.ts +0 -1
  595. package/dist/main/util/floor.js +0 -9
  596. package/dist/main/util/floor.js.map +0 -1
  597. package/dist/main/util/getAddrsByXpubKey.d.ts +0 -22
  598. package/dist/main/util/getAddrsByXpubKey.js +0 -79
  599. package/dist/main/util/getAddrsByXpubKey.js.map +0 -1
  600. package/dist/main/util/getRuntimePlatform.d.ts +0 -6
  601. package/dist/main/util/getRuntimePlatform.js +0 -34
  602. package/dist/main/util/getRuntimePlatform.js.map +0 -1
  603. package/dist/main/util/getUsdRate.d.ts +0 -1
  604. package/dist/main/util/getUsdRate.js +0 -9
  605. package/dist/main/util/getUsdRate.js.map +0 -1
  606. package/dist/main/util/getXPubKey.d.ts +0 -1
  607. package/dist/main/util/getXPubKey.js +0 -26
  608. package/dist/main/util/getXPubKey.js.map +0 -1
  609. package/dist/main/util/hash160.d.ts +0 -8
  610. package/dist/main/util/hash160.js +0 -18
  611. package/dist/main/util/hash160.js.map +0 -1
  612. package/dist/main/util/index.d.ts +0 -21
  613. package/dist/main/util/index.js +0 -72
  614. package/dist/main/util/index.js.map +0 -1
  615. package/dist/main/util/randomBytes.d.ts +0 -1
  616. package/dist/main/util/randomBytes.js +0 -18
  617. package/dist/main/util/randomBytes.js.map +0 -1
  618. package/dist/main/util/randomInt.d.ts +0 -1
  619. package/dist/main/util/randomInt.js +0 -9
  620. package/dist/main/util/randomInt.js.map +0 -1
  621. package/dist/main/util/randomValues.d.ts +0 -1
  622. package/dist/main/util/randomValues.js +0 -15
  623. package/dist/main/util/randomValues.js.map +0 -1
  624. package/dist/main/util/sanitizeAddress.d.ts +0 -1
  625. package/dist/main/util/sanitizeAddress.js +0 -15
  626. package/dist/main/util/sanitizeAddress.js.map +0 -1
  627. package/dist/main/util/sanitizeUnit.d.ts +0 -2
  628. package/dist/main/util/sanitizeUnit.js +0 -13
  629. package/dist/main/util/sanitizeUnit.js.map +0 -1
  630. package/dist/main/util/satoshiToAmount.d.ts +0 -9
  631. package/dist/main/util/satoshiToAmount.js +0 -41
  632. package/dist/main/util/satoshiToAmount.js.map +0 -1
  633. package/dist/main/util/sumSendRequestAmounts.d.ts +0 -2
  634. package/dist/main/util/sumSendRequestAmounts.js +0 -31
  635. package/dist/main/util/sumSendRequestAmounts.js.map +0 -1
  636. package/dist/main/util/sumUtxoValue.d.ts +0 -2
  637. package/dist/main/util/sumUtxoValue.js +0 -17
  638. package/dist/main/util/sumUtxoValue.js.map +0 -1
  639. package/dist/main/wallet/Base.d.ts +0 -202
  640. package/dist/main/wallet/Base.js +0 -438
  641. package/dist/main/wallet/Base.js.map +0 -1
  642. package/dist/main/wallet/Slp.d.ts +0 -430
  643. package/dist/main/wallet/Slp.js +0 -775
  644. package/dist/main/wallet/Slp.js.map +0 -1
  645. package/dist/main/wallet/Util.d.ts +0 -69
  646. package/dist/main/wallet/Util.js +0 -182
  647. package/dist/main/wallet/Util.js.map +0 -1
  648. package/dist/main/wallet/Wif.d.ts +0 -255
  649. package/dist/main/wallet/Wif.js +0 -1067
  650. package/dist/main/wallet/Wif.js.map +0 -1
  651. package/dist/main/wallet/createWallet.d.ts +0 -69
  652. package/dist/main/wallet/createWallet.js +0 -244
  653. package/dist/main/wallet/createWallet.js.map +0 -1
  654. package/dist/main/wallet/enum.d.ts +0 -16
  655. package/dist/main/wallet/enum.js +0 -22
  656. package/dist/main/wallet/enum.js.map +0 -1
  657. package/dist/main/wallet/interface.d.ts +0 -76
  658. package/dist/main/wallet/interface.js +0 -3
  659. package/dist/main/wallet/interface.js.map +0 -1
  660. package/dist/main/wallet/model.d.ts +0 -88
  661. package/dist/main/wallet/model.js +0 -129
  662. package/dist/main/wallet/model.js.map +0 -1
  663. package/dist/main/webhook/Webhook.d.ts +0 -40
  664. package/dist/main/webhook/Webhook.js +0 -82
  665. package/dist/main/webhook/Webhook.js.map +0 -1
  666. package/dist/main/webhook/WebhookBch.d.ts +0 -13
  667. package/dist/main/webhook/WebhookBch.js +0 -148
  668. package/dist/main/webhook/WebhookBch.js.map +0 -1
  669. package/dist/main/webhook/WebhookSlp.d.ts +0 -14
  670. package/dist/main/webhook/WebhookSlp.js +0 -107
  671. package/dist/main/webhook/WebhookSlp.js.map +0 -1
  672. package/dist/main/webhook/WebhookWorker.d.ts +0 -22
  673. package/dist/main/webhook/WebhookWorker.js +0 -100
  674. package/dist/main/webhook/WebhookWorker.js.map +0 -1
  675. package/dist/main/webhook/index.d.ts +0 -5
  676. package/dist/main/webhook/index.js +0 -23
  677. package/dist/main/webhook/index.js.map +0 -1
  678. package/dist/main/webhook/interface.d.ts +0 -8
  679. package/dist/main/webhook/interface.js +0 -3
  680. package/dist/main/webhook/interface.js.map +0 -1
  681. package/dist/mainnet-0.5.9.js +0 -2
  682. package/dist/mainnet-0.5.9.js.LICENSE.txt +0 -48
  683. package/dist/tsconfig.browser.tsbuildinfo +0 -1
  684. package/jest.config.js +0 -23
@@ -2,34 +2,41 @@
2
2
  import {
3
3
  authenticationTemplateP2pkhNonHd,
4
4
  authenticationTemplateToCompilerBCH,
5
- bigIntToBinUint64LEClamped,
6
5
  cashAddressToLockingBytecode,
7
6
  Compiler,
8
7
  encodeTransaction,
9
8
  generateTransaction,
10
- validateAuthenticationTemplate,
11
- TransactionContextCommon,
12
- AnyCompilationEnvironment,
13
- AuthenticationProgramStateBCH,
9
+ importAuthenticationTemplate,
10
+ AnyCompilerConfiguration,
11
+ AuthenticationProgramStateCommon,
12
+ CompilationContextBCH,
13
+ Output,
14
+ hexToBin,
15
+ binToHex,
14
16
  } from "@bitauth/libauth";
15
- import { UtxoI } from "../interface";
16
- import { allocateFee } from "./allocateFee";
17
+ import { NFTCapability, TokenI, UtxoI } from "../interface.js";
18
+ import { allocateFee } from "./allocateFee.js";
17
19
 
18
- import { DUST_UTXO_THRESHOLD } from "../constant";
19
- import { OpReturnData, SendRequest } from "../wallet/model";
20
- import { amountInSatoshi } from "../util/amountInSatoshi";
21
- import { sumSendRequestAmounts } from "../util/sumSendRequestAmounts";
22
- import { sumUtxoValue } from "../util/sumUtxoValue";
23
- import { FeePaidByEnum } from "../wallet/enum";
20
+ import { DUST_UTXO_THRESHOLD } from "../constant.js";
21
+ import {
22
+ OpReturnData,
23
+ SendRequest,
24
+ SendRequestType,
25
+ TokenSendRequest,
26
+ } from "../wallet/model.js";
27
+ import { amountInSatoshi } from "../util/amountInSatoshi.js";
28
+ import { sumSendRequestAmounts } from "../util/sumSendRequestAmounts.js";
29
+ import { sumUtxoValue } from "../util/sumUtxoValue.js";
30
+ import { FeePaidByEnum } from "../wallet/enum.js";
24
31
 
25
32
  // Build a transaction for a p2pkh transaction for a non HD wallet
26
33
  export async function buildP2pkhNonHdTransaction(
27
34
  inputs: UtxoI[],
28
- outputs: Array<SendRequest | OpReturnData>,
35
+ outputs: Array<SendRequest | TokenSendRequest | OpReturnData>,
29
36
  signingKey: Uint8Array,
30
37
  fee: number = 0,
31
38
  discardChange = false,
32
- slpOutputs: any[] = [],
39
+ slpOutputs: Output[] = [],
33
40
  feePaidBy: FeePaidByEnum = FeePaidByEnum.change,
34
41
  changeAddress: string = ""
35
42
  ) {
@@ -37,7 +44,7 @@ export async function buildP2pkhNonHdTransaction(
37
44
  throw new Error("Missing signing key when building transaction");
38
45
  }
39
46
 
40
- const template = validateAuthenticationTemplate(
47
+ const template = importAuthenticationTemplate(
41
48
  authenticationTemplateP2pkhNonHd
42
49
  );
43
50
  if (typeof template === "string") {
@@ -49,53 +56,52 @@ export async function buildP2pkhNonHdTransaction(
49
56
 
50
57
  const sendAmount = await sumSendRequestAmounts(outputs);
51
58
 
52
- try {
53
- const changeAmount = BigInt(inputAmount) - BigInt(sendAmount) - BigInt(fee);
59
+ const changeAmount = BigInt(inputAmount) - BigInt(sendAmount) - BigInt(fee);
54
60
 
55
- outputs = allocateFee(outputs, fee, feePaidBy, changeAmount);
61
+ outputs = allocateFee(outputs, fee, feePaidBy, changeAmount);
56
62
 
57
- let lockedOutputs = await prepareOutputs(outputs);
63
+ let lockedOutputs = await prepareOutputs(outputs, inputs);
58
64
 
59
- if (discardChange !== true) {
60
- if (changeAmount > DUST_UTXO_THRESHOLD) {
61
- let changeLockingBytecode;
62
- if (changeAddress) {
63
- changeLockingBytecode = cashAddressToLockingBytecode(changeAddress);
64
- } else {
65
- // Get the change locking bytecode
66
- changeLockingBytecode = compiler.generateBytecode("lock", {
65
+ if (discardChange !== true) {
66
+ if (changeAmount > DUST_UTXO_THRESHOLD) {
67
+ let changeLockingBytecode;
68
+ if (changeAddress) {
69
+ changeLockingBytecode = cashAddressToLockingBytecode(changeAddress);
70
+ } else {
71
+ // Get the change locking bytecode
72
+ changeLockingBytecode = compiler.generateBytecode({
73
+ scriptId: "lock",
74
+ data: {
67
75
  keys: { privateKeys: { key: signingKey } },
68
- });
69
- }
70
- if (typeof changeLockingBytecode === "string") {
71
- throw new Error(changeLockingBytecode);
72
- }
73
- lockedOutputs.push({
74
- lockingBytecode: changeLockingBytecode.bytecode,
75
- satoshis: bigIntToBinUint64LEClamped(BigInt(changeAmount)),
76
+ },
76
77
  });
77
78
  }
79
+ if (typeof changeLockingBytecode === "string") {
80
+ throw new Error(changeLockingBytecode);
81
+ }
82
+ lockedOutputs.push({
83
+ lockingBytecode: changeLockingBytecode.bytecode,
84
+ valueSatoshis: BigInt(changeAmount),
85
+ });
78
86
  }
79
-
80
- let signedInputs = prepareInputs(inputs, compiler, signingKey);
81
- const result = generateTransaction({
82
- inputs: signedInputs,
83
- locktime: 0,
84
- outputs: [...slpOutputs, ...lockedOutputs],
85
- version: 2,
86
- });
87
- return result;
88
- } catch (error: any) {
89
- throw Error(error.toString());
90
87
  }
88
+
89
+ let signedInputs = prepareInputs(inputs, compiler, signingKey);
90
+ const result = generateTransaction({
91
+ inputs: signedInputs,
92
+ locktime: 0,
93
+ outputs: [...slpOutputs, ...lockedOutputs],
94
+ version: 2,
95
+ });
96
+ return result;
91
97
  }
92
98
 
93
99
  export function prepareInputs(
94
100
  inputs: UtxoI[],
95
101
  compiler: Compiler<
96
- TransactionContextCommon,
97
- AnyCompilationEnvironment<TransactionContextCommon>,
98
- AuthenticationProgramStateBCH
102
+ CompilationContextBCH,
103
+ AnyCompilerConfiguration<CompilationContextBCH>,
104
+ AuthenticationProgramStateCommon
99
105
  >,
100
106
  signingKey: Uint8Array
101
107
  ) {
@@ -112,6 +118,18 @@ export function prepareInputs(
112
118
  if (!utxoOutpointTransactionHash || utxoIndex === undefined) {
113
119
  throw new Error("Missing unspent outpoint when building transaction");
114
120
  }
121
+
122
+ const libAuthToken = i.token && {
123
+ amount: BigInt(i.token.amount),
124
+ category: hexToBin(i.token.tokenId),
125
+ nft:
126
+ i.token.capability || i.token.commitment
127
+ ? {
128
+ capability: i.token.capability,
129
+ commitment: i.token.commitment && hexToBin(i.token.commitment!),
130
+ }
131
+ : undefined,
132
+ };
115
133
  let newInput = {
116
134
  outpointIndex: utxoIndex,
117
135
  outpointTransactionHash: utxoOutpointTransactionHash,
@@ -121,8 +139,9 @@ export function prepareInputs(
121
139
  data: {
122
140
  keys: { privateKeys: { key: signingKey } },
123
141
  },
124
- satoshis: bigIntToBinUint64LEClamped(BigInt(utxoTxnValue)),
142
+ valueSatoshis: BigInt(utxoTxnValue),
125
143
  script: "unlock",
144
+ token: libAuthToken,
126
145
  },
127
146
  };
128
147
  signedInputs.push(newInput);
@@ -138,37 +157,34 @@ export function prepareInputs(
138
157
  * @returns A promise to a list of unspent outputs
139
158
  */
140
159
  export async function prepareOutputs(
141
- outputs: Array<SendRequest | OpReturnData>
160
+ outputs: Array<SendRequest | TokenSendRequest | OpReturnData>,
161
+ inputs: UtxoI[]
142
162
  ) {
143
- let lockedOutputs: any[] = [];
163
+ let lockedOutputs: Output[] = [];
144
164
  for (const output of outputs) {
145
- if (output instanceof OpReturnData) {
146
- lockedOutputs.push(prepareOpReturnOutput(output));
165
+ if (output instanceof TokenSendRequest) {
166
+ lockedOutputs.push(prepareTokenOutputs(output, inputs));
147
167
  continue;
148
168
  }
149
169
 
150
- let outputLockingBytecode = cashAddressToLockingBytecode(output.cashaddr);
151
- if (
152
- !outputLockingBytecode.hasOwnProperty("bytecode") ||
153
- !outputLockingBytecode.hasOwnProperty("prefix")
154
- ) {
155
- throw new Error(outputLockingBytecode.toString());
170
+ if (output instanceof OpReturnData) {
171
+ lockedOutputs.push(prepareOpReturnOutput(output));
172
+ continue;
156
173
  }
157
174
 
158
- outputLockingBytecode = outputLockingBytecode as {
159
- bytecode: Uint8Array;
160
- prefix: string;
161
- };
175
+ const outputLockingBytecode = cashAddressToLockingBytecode(output.cashaddr);
176
+ if (typeof outputLockingBytecode === "string")
177
+ throw new Error(outputLockingBytecode);
162
178
 
163
- let sendAmount = await amountInSatoshi(output.value, output.unit);
179
+ const sendAmount = await amountInSatoshi(output.value, output.unit);
164
180
  if (sendAmount % 1 !== 0) {
165
181
  throw Error(
166
182
  `Cannot send ${sendAmount} satoshis, (fractional sats do not exist, yet), please use an integer number.`
167
183
  );
168
184
  }
169
- let lockedOutput = {
185
+ const lockedOutput: Output = {
170
186
  lockingBytecode: outputLockingBytecode.bytecode,
171
- satoshis: bigIntToBinUint64LEClamped(BigInt(sendAmount)),
187
+ valueSatoshis: BigInt(sendAmount),
172
188
  };
173
189
  lockedOutputs.push(lockedOutput);
174
190
  }
@@ -180,11 +196,80 @@ export async function prepareOutputs(
180
196
  *
181
197
  * @returns A promise to a list of unspent outputs
182
198
  */
183
- export function prepareOpReturnOutput(request: OpReturnData) {
199
+ export function prepareOpReturnOutput(request: OpReturnData): Output {
184
200
  return {
185
201
  lockingBytecode: request.buffer,
186
- satoshis: bigIntToBinUint64LEClamped(BigInt(0)),
202
+ valueSatoshis: BigInt(0),
203
+ };
204
+ }
205
+
206
+ /**
207
+ * prepareOpReturnOutput - create an output for token data
208
+ *
209
+ * @returns A libauth Output
210
+ */
211
+ export function prepareTokenOutputs(
212
+ request: TokenSendRequest,
213
+ inputs: UtxoI[]
214
+ ): Output {
215
+ const token: TokenI = request;
216
+ const isGenesis = !request.tokenId || (request as any)._isGenesis;
217
+ let satValue = 0;
218
+ if (isGenesis) {
219
+ const genesisInputs = inputs.filter((val) => val.vout === 0);
220
+ if (genesisInputs.length === 0) {
221
+ throw new Error(
222
+ "No suitable inputs with vout=0 available for new token genesis"
223
+ );
224
+ }
225
+ token.tokenId = genesisInputs[0].txid;
226
+ satValue = request.value || 1000;
227
+ (request as any)._isGenesis = true;
228
+ } else {
229
+ const tokenInputs = inputs.filter(
230
+ (val) => val.token?.tokenId === request.tokenId
231
+ );
232
+ if (!tokenInputs.length) {
233
+ throw new Error(`No token utxos available to send ${request.tokenId}`);
234
+ }
235
+ if (!token.capability && tokenInputs[0].token?.capability) {
236
+ token.capability = tokenInputs[0].token!.capability;
237
+ }
238
+ if (!token.commitment && tokenInputs[0].token?.commitment) {
239
+ token.commitment = tokenInputs[0].token!.commitment;
240
+ }
241
+
242
+ if (
243
+ token.capability === NFTCapability.none &&
244
+ token.commitment !== tokenInputs[0].token?.commitment
245
+ ) {
246
+ throw new Error("Can not change the commitment of an immutable token");
247
+ }
248
+
249
+ satValue = request.value || tokenInputs[0].satoshis;
250
+ }
251
+
252
+ let outputLockingBytecode = cashAddressToLockingBytecode(request.cashaddr);
253
+ if (typeof outputLockingBytecode === "string")
254
+ throw new Error(outputLockingBytecode);
255
+
256
+ const libAuthToken = {
257
+ amount: BigInt(token.amount),
258
+ category: hexToBin(token.tokenId),
259
+ nft:
260
+ token.capability || token.commitment
261
+ ? {
262
+ capability: token.capability,
263
+ commitment: token.commitment && hexToBin(token.commitment!),
264
+ }
265
+ : undefined,
187
266
  };
267
+
268
+ return {
269
+ lockingBytecode: outputLockingBytecode.bytecode,
270
+ valueSatoshis: BigInt(satValue),
271
+ token: libAuthToken,
272
+ } as Output;
188
273
  }
189
274
 
190
275
  /**
@@ -197,14 +282,55 @@ export function prepareOpReturnOutput(request: OpReturnData) {
197
282
  * @returns A promise to a list of unspent outputs
198
283
  */
199
284
  export async function getSuitableUtxos(
200
- unspentOutputs: UtxoI[],
285
+ inputs: UtxoI[],
201
286
  amountRequired: BigInt | undefined,
202
287
  bestHeight: number,
203
- feePaidBy: FeePaidByEnum
288
+ feePaidBy: FeePaidByEnum,
289
+ requests: SendRequestType[]
204
290
  ): Promise<UtxoI[]> {
205
291
  let suitableUtxos: UtxoI[] = [];
206
292
  let amountAvailable = BigInt(0);
207
- for (const u of unspentOutputs) {
293
+ const tokenAmountsRequired: any[] = [];
294
+ const tokenRequests = requests.filter(
295
+ (val) => val instanceof TokenSendRequest
296
+ ) as TokenSendRequest[];
297
+ const tokenIds = tokenRequests
298
+ .map((val) => val.tokenId)
299
+ .filter((value, index, array) => array.indexOf(value) === index);
300
+ for (let tokenId of tokenIds) {
301
+ const requiredAmount = tokenRequests
302
+ .map((val) => val.amount)
303
+ .reduce((prev, cur) => prev + cur, 0);
304
+ tokenAmountsRequired.push({ tokenId, requiredAmount });
305
+ }
306
+
307
+ let filteredInputs = inputs.slice(0);
308
+
309
+ // find suitable token inputs first
310
+ for (const { tokenId, requiredAmount } of tokenAmountsRequired) {
311
+ let tokenAmountAvailable = 0;
312
+ for (const input of inputs) {
313
+ if (input.token?.tokenId === tokenId) {
314
+ suitableUtxos.push(input);
315
+ const inputIndex = filteredInputs.indexOf(input);
316
+ filteredInputs = filteredInputs.filter(
317
+ (_, index) => inputIndex !== index
318
+ );
319
+ tokenAmountAvailable += input.token!.amount;
320
+ amountAvailable += BigInt(input.satoshis);
321
+ if (tokenAmountAvailable >= requiredAmount) {
322
+ break;
323
+ }
324
+ }
325
+ }
326
+ }
327
+
328
+ // find plain outputs
329
+ for (const u of filteredInputs) {
330
+ if (u.token) {
331
+ // continue;
332
+ }
333
+
208
334
  if (u.coinbase && u.height && bestHeight) {
209
335
  let age = bestHeight - u.height;
210
336
  if (age > 100) {
@@ -252,10 +378,10 @@ export async function getFeeAmount({
252
378
  feePaidBy,
253
379
  }: {
254
380
  utxos: UtxoI[];
255
- sendRequests: Array<SendRequest | OpReturnData>;
381
+ sendRequests: Array<SendRequest | TokenSendRequest | OpReturnData>;
256
382
  privateKey: Uint8Array;
257
383
  relayFeePerByteInSatoshi: number;
258
- slpOutputs: any[];
384
+ slpOutputs: Output[];
259
385
  feePaidBy: FeePaidByEnum;
260
386
  }) {
261
387
  // build transaction
@@ -282,11 +408,11 @@ export async function getFeeAmount({
282
408
  // Build encoded transaction
283
409
  export async function buildEncodedTransaction(
284
410
  fundingUtxos: UtxoI[],
285
- sendRequests: Array<SendRequest | OpReturnData>,
411
+ sendRequests: Array<SendRequest | TokenSendRequest | OpReturnData>,
286
412
  privateKey: Uint8Array,
287
413
  fee: number = 0,
288
414
  discardChange = false,
289
- slpOutputs: any[] = [],
415
+ slpOutputs: Output[] = [],
290
416
  feePaidBy: FeePaidByEnum = FeePaidByEnum.change,
291
417
  changeAddress: string = ""
292
418
  ) {
@@ -1,6 +1,10 @@
1
- import { OpReturnData, SendRequest } from "../wallet/model";
2
- import { FeePaidByEnum } from "../wallet/enum";
3
- import { DUST_UTXO_THRESHOLD } from "../constant";
1
+ import {
2
+ OpReturnData,
3
+ SendRequest,
4
+ TokenSendRequest,
5
+ } from "../wallet/model.js";
6
+ import { FeePaidByEnum } from "../wallet/enum.js";
7
+ import { DUST_UTXO_THRESHOLD } from "../constant.js";
4
8
 
5
9
  export function checkFeeForDust(value: number) {
6
10
  if (value < DUST_UTXO_THRESHOLD) {
@@ -20,12 +24,17 @@ export function checkSatsAvailable(
20
24
  }
21
25
  }
22
26
 
23
- export function checkForOpReturn(
24
- output: SendRequest | OpReturnData
27
+ export function checkForNonStandardSendRequest(
28
+ output: SendRequest | TokenSendRequest | OpReturnData
25
29
  ): SendRequest {
30
+ if (output instanceof TokenSendRequest) {
31
+ throw Error("Cannot specify fee to be paid by TokenSendRequest");
32
+ }
33
+
26
34
  if (output instanceof OpReturnData) {
27
35
  throw Error("Cannot specify fee to be paid by OpReturnData");
28
36
  }
37
+
29
38
  return output;
30
39
  }
31
40
 
@@ -40,7 +49,7 @@ function distributeFees(requests: Array<SendRequest>, fee: number) {
40
49
  fee = Number(fee);
41
50
  for (let r = 0; r < requests.length; r++) {
42
51
  if (fee > 0) {
43
- checkForOpReturn(requests[r]);
52
+ checkForNonStandardSendRequest(requests[r]);
44
53
  let perRequestFee = Math.floor(fee / (requests.length - r));
45
54
  perRequestFee += fee % (requests.length - r);
46
55
  if (requests[r].value - perRequestFee < DUST_UTXO_THRESHOLD) {
@@ -55,25 +64,34 @@ function distributeFees(requests: Array<SendRequest>, fee: number) {
55
64
  return requests.filter((r) => r.value >= DUST_UTXO_THRESHOLD);
56
65
  }
57
66
 
58
- function firstPays(requests: Array<SendRequest | OpReturnData>, fee: number) {
67
+ function firstPays(
68
+ requests: Array<SendRequest | TokenSendRequest | OpReturnData>,
69
+ fee: number
70
+ ) {
59
71
  let payer = requests.shift()!;
60
- payer = checkForOpReturn(payer);
72
+ payer = checkForNonStandardSendRequest(payer);
61
73
  payer.value = payer.value! - fee;
62
74
  checkFeeForDust(payer.value);
63
75
  requests.unshift(payer);
64
76
  return requests;
65
77
  }
66
- function lastPays(requests: Array<SendRequest | OpReturnData>, fee: number) {
78
+ function lastPays(
79
+ requests: Array<SendRequest | TokenSendRequest | OpReturnData>,
80
+ fee: number
81
+ ) {
67
82
  let payer = requests.pop()!;
68
- payer = checkForOpReturn(payer);
83
+ payer = checkForNonStandardSendRequest(payer);
69
84
  payer.value = payer.value! - fee;
70
85
  checkFeeForDust(payer.value);
71
86
  requests.push(payer);
72
87
  return requests;
73
88
  }
74
- function anyPays(requests: Array<SendRequest | OpReturnData>, fee: number) {
89
+ function anyPays(
90
+ requests: Array<SendRequest | TokenSendRequest | OpReturnData>,
91
+ fee: number
92
+ ) {
75
93
  for (let r of requests) {
76
- checkForOpReturn(r);
94
+ checkForNonStandardSendRequest(r);
77
95
  }
78
96
  requests = sortSendRequests(requests as Array<SendRequest>);
79
97
  requests = distributeFees(requests as Array<SendRequest>, fee);
@@ -81,7 +99,7 @@ function anyPays(requests: Array<SendRequest | OpReturnData>, fee: number) {
81
99
  }
82
100
 
83
101
  function changeThenFallback(
84
- requests: Array<SendRequest | OpReturnData>,
102
+ requests: Array<SendRequest | TokenSendRequest | OpReturnData>,
85
103
  fee: number,
86
104
  change: bigint,
87
105
  fallbackFn: Function
@@ -94,7 +112,7 @@ function changeThenFallback(
94
112
  }
95
113
 
96
114
  export function allocateFee(
97
- requests: Array<SendRequest | OpReturnData>,
115
+ requests: Array<SendRequest | TokenSendRequest | OpReturnData>,
98
116
  fee: number,
99
117
  feePaidBy: FeePaidByEnum,
100
118
  change: bigint
@@ -1,7 +1,7 @@
1
- import { bchParam } from "../chain";
2
- import { UnitEnum } from "../enum";
3
- import { ExchangeRate } from "../rate/ExchangeRate";
4
- import { sanitizeUnit } from "../util/sanitizeUnit";
1
+ import { bchParam } from "../chain.js";
2
+ import { UnitEnum } from "../enum.js";
3
+ import { ExchangeRate } from "../rate/ExchangeRate.js";
4
+ import { sanitizeUnit } from "../util/sanitizeUnit.js";
5
5
 
6
6
  /**
7
7
  * converts given value and unit into satoshi
@@ -1,51 +1,63 @@
1
1
  import { base64ToBin } from "@bitauth/libauth";
2
- import { UnitEnum } from "../enum";
3
- import { OpReturnData, SendRequest, SendRequestArray } from "../wallet/model";
2
+ import { UnitEnum } from "../enum.js";
3
+ import {
4
+ OpReturnData,
5
+ SendRequest,
6
+ SendRequestArray,
7
+ TokenSendRequest,
8
+ } from "../wallet/model.js";
4
9
 
5
10
  export function asSendRequestObject(
6
11
  requests:
7
12
  | SendRequest
13
+ | TokenSendRequest
8
14
  | OpReturnData
9
- | Array<SendRequest | OpReturnData>
15
+ | Array<SendRequest | TokenSendRequest | OpReturnData>
10
16
  | Array<SendRequestArray>
11
- ): Array<SendRequest | OpReturnData> {
12
- let resp: Array<SendRequest | OpReturnData> = [];
17
+ ): Array<SendRequest | TokenSendRequest | OpReturnData> {
18
+ let resp: Array<SendRequest | TokenSendRequest | OpReturnData> = [];
13
19
  if (Array.isArray(requests)) {
14
- requests.forEach((r: SendRequest | OpReturnData | SendRequestArray) => {
15
- // the SendRequestArray[] case
16
- if (Array.isArray(r)) {
17
- if (r[0] === "OP_RETURN") {
18
- // ['OP_RETURN', Buffer.new('MEMO\x10')],
19
- resp.push(OpReturnData.from(r[1] as string | Buffer));
20
- } else if (r[0] === "OP_RETURNB64") {
21
- resp.push(
22
- OpReturnData.fromBuffer(Buffer.from(base64ToBin(r[1] as string)))
23
- );
20
+ requests.forEach(
21
+ (r: SendRequest | TokenSendRequest | OpReturnData | SendRequestArray) => {
22
+ // the SendRequestArray[] case
23
+ if (Array.isArray(r)) {
24
+ if (r[0] === "OP_RETURN") {
25
+ // ['OP_RETURN', Buffer.new('MEMO\x10')],
26
+ resp.push(OpReturnData.from(r[1] as string | Buffer));
27
+ } else if (r[0] === "OP_RETURNB64") {
28
+ resp.push(
29
+ OpReturnData.fromBuffer(Buffer.from(base64ToBin(r[1] as string)))
30
+ );
31
+ } else {
32
+ // ['cashaddr', 120, 'sats'],
33
+ resp.push(
34
+ new SendRequest({
35
+ cashaddr: r[0] as string,
36
+ value: r[1] as number,
37
+ unit: r[2] as UnitEnum,
38
+ })
39
+ );
40
+ }
24
41
  } else {
25
- // ['cashaddr', 120, 'sats'],
26
- resp.push(
27
- new SendRequest({
28
- cashaddr: r[0] as string,
29
- value: r[1] as number,
30
- unit: r[2] as UnitEnum,
31
- })
32
- );
42
+ // SendRequest | TokenSendRequest | OpReturnRequest case
43
+ resp.push(convertToClass(r));
33
44
  }
34
- } else {
35
- // SendRequest | OpReturnRequest case
36
- resp.push(convertToClass(r));
37
45
  }
38
- });
46
+ );
39
47
  } else {
40
48
  // the SendRequest | OpReturnData object case
41
- resp.push(convertToClass(requests as SendRequest | OpReturnData));
49
+ resp.push(
50
+ convertToClass(requests as SendRequest | TokenSendRequest | OpReturnData)
51
+ );
42
52
  }
43
53
  return resp;
44
54
  }
45
55
 
46
- function convertToClass(object: SendRequest | OpReturnData) {
47
- if (object.hasOwnProperty("cashaddr")) {
56
+ function convertToClass(object: SendRequest | TokenSendRequest | OpReturnData) {
57
+ if (object.hasOwnProperty("unit")) {
48
58
  return new SendRequest(object as SendRequest);
59
+ } else if (object.hasOwnProperty("tokenId")) {
60
+ return new TokenSendRequest(object as TokenSendRequest);
49
61
  } else if (object.hasOwnProperty("buffer")) {
50
62
  return OpReturnData.fromBuffer((object as OpReturnData).buffer);
51
63
  }
@@ -1,8 +1,8 @@
1
- import { bchParam } from "../chain";
2
- import { UnitEnum } from "../enum";
3
- import { floor } from "./floor";
4
- import { ExchangeRate } from "../rate/ExchangeRate";
5
- import { sanitizeUnit } from "./sanitizeUnit";
1
+ import { bchParam } from "../chain.js";
2
+ import { UnitEnum } from "../enum.js";
3
+ import { floor } from "./floor.js";
4
+ import { ExchangeRate } from "../rate/ExchangeRate.js";
5
+ import { sanitizeUnit } from "./sanitizeUnit.js";
6
6
 
7
7
  export class BalanceResponse {
8
8
  bch?: number;
@@ -1,31 +1,12 @@
1
- import { getRuntimePlatform } from "./getRuntimePlatform";
1
+ import { base64ToBin, binToBase64, isBase64 } from "@bitauth/libauth";
2
2
 
3
3
  export function btoa(data: string) {
4
- if (getRuntimePlatform() !== "node") {
5
- return globalThis.btoa(data);
6
- } else {
7
- const btoa = (str: any) => {
8
- var buffer;
9
-
10
- if (str instanceof Buffer) {
11
- buffer = str;
12
- } else {
13
- buffer = Buffer.from(str.toString(), "binary");
14
- }
15
-
16
- return buffer.toString("base64");
17
- };
18
- return btoa(data);
19
- }
4
+ return binToBase64(new TextEncoder().encode(data));
20
5
  }
21
6
 
22
7
  export function atob(data: string) {
23
- if (getRuntimePlatform() !== "node") {
24
- return globalThis.atob(data);
25
- } else {
26
- const atob = (str: string) => {
27
- return Buffer.from(str, "base64").toString("binary");
28
- };
29
- return atob(data);
8
+ if (!isBase64(data)) {
9
+ throw new Error("Provided data is not a valid base64");
30
10
  }
11
+ return String.fromCharCode(...base64ToBin(data));
31
12
  }
@@ -1,4 +1,4 @@
1
- import { getRuntimePlatform } from "./getRuntimePlatform";
1
+ import { getRuntimePlatform } from "./getRuntimePlatform.js";
2
2
 
3
3
  export function browserNotSupported() {
4
4
  if (getRuntimePlatform() !== "node") {
@@ -1,4 +1,4 @@
1
- import { NetworkType } from "../enum";
1
+ import { NetworkType } from "../enum.js";
2
2
 
3
3
  export function checkWifNetwork(
4
4
  walletImportFormatString: string,
@@ -1,5 +1,5 @@
1
- import { amountInSatoshi } from "./amountInSatoshi";
2
- import { satoshiToAmount } from "./satoshiToAmount";
1
+ import { amountInSatoshi } from "./amountInSatoshi.js";
2
+ import { satoshiToAmount } from "./satoshiToAmount.js";
3
3
 
4
4
  /**
5
5
  * convert transforms unit of measurement for some monetary value