@bsv/wallet-toolbox 1.6.3 → 1.6.5

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 (266) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/docs/client.md +402 -313
  3. package/docs/monitor.md +4 -4
  4. package/docs/services.md +118 -133
  5. package/docs/wallet.md +402 -313
  6. package/mobile/out/src/monitor/Monitor.d.ts +3 -3
  7. package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
  8. package/mobile/out/src/monitor/Monitor.js.map +1 -1
  9. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
  10. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  11. package/mobile/out/src/services/Services.js +1 -1
  12. package/mobile/out/src/services/Services.js.map +1 -1
  13. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
  14. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  15. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  16. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
  17. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
  18. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
  19. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
  20. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
  21. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
  22. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
  23. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
  24. package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
  25. package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
  26. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
  27. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  28. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
  29. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  30. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
  31. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  32. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
  33. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  34. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
  35. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  36. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  37. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
  38. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  39. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
  40. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  41. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
  42. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  43. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
  44. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  45. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
  46. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  47. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
  48. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  49. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
  50. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  51. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
  52. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  53. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
  54. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  55. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
  56. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  57. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
  58. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  59. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
  60. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  61. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  62. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  63. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  64. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  65. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
  66. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  67. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
  68. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  69. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
  70. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  71. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  72. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
  73. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  74. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
  75. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  76. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  77. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
  78. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  79. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
  80. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
  81. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  82. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
  83. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  84. package/mobile/out/src/services/createDefaultWalletServicesOptions.js +19 -17
  85. package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  86. package/mobile/package-lock.json +2 -2
  87. package/mobile/package.json +1 -1
  88. package/out/src/monitor/Monitor.d.ts +3 -3
  89. package/out/src/monitor/Monitor.d.ts.map +1 -1
  90. package/out/src/monitor/Monitor.js.map +1 -1
  91. package/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
  92. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  93. package/out/src/services/Services.js +1 -1
  94. package/out/src/services/Services.js.map +1 -1
  95. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
  96. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  97. package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  98. package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
  99. package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
  100. package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
  101. package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
  102. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
  103. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
  104. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
  105. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
  106. package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
  107. package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
  108. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
  109. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  110. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
  111. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  112. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
  113. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  114. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
  115. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  116. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
  117. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  118. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  119. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
  120. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  121. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
  122. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +1 -1
  123. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
  124. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
  125. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  126. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
  127. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  128. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
  129. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  130. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
  131. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +3 -3
  132. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
  133. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
  134. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  135. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
  136. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  137. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js +1 -1
  138. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js.map +1 -1
  139. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +1 -1
  140. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +1 -1
  141. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
  142. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  143. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
  144. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  145. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
  146. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +4 -3
  147. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
  148. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
  149. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  150. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
  151. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  152. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +91 -0
  153. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -0
  154. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +448 -0
  155. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -0
  156. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +3 -29
  157. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
  158. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +61 -137
  159. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
  160. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
  161. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  162. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
  163. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  164. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts +2 -0
  165. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts.map +1 -0
  166. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js +81 -0
  167. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js.map +1 -0
  168. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js +12 -1
  169. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js.map +1 -1
  170. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts +2 -0
  171. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts.map +1 -0
  172. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js +50 -0
  173. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js.map +1 -0
  174. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +12 -0
  175. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -0
  176. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +83 -0
  177. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -0
  178. package/out/src/services/chaintracker/chaintracks/index.all.d.ts +3 -0
  179. package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
  180. package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
  181. package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
  182. package/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  183. package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  184. package/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  185. package/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  186. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
  187. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  188. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
  189. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  190. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
  191. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  192. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  193. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
  194. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  195. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
  196. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  197. package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  198. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
  199. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  200. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
  201. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
  202. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  203. package/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
  204. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  205. package/out/src/services/createDefaultWalletServicesOptions.js +19 -17
  206. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  207. package/out/src/services/providers/__tests/exchangeRates.test.d.ts +2 -0
  208. package/out/src/services/providers/__tests/exchangeRates.test.d.ts.map +1 -0
  209. package/out/src/services/providers/__tests/exchangeRates.test.js +19 -0
  210. package/out/src/services/providers/__tests/exchangeRates.test.js.map +1 -0
  211. package/out/test/Wallet/support/operations.man.test.js +1 -1
  212. package/out/test/Wallet/support/operations.man.test.js.map +1 -1
  213. package/out/tsconfig.all.tsbuildinfo +1 -1
  214. package/package.json +1 -1
  215. package/src/monitor/Monitor.ts +3 -3
  216. package/src/sdk/WalletServices.interfaces.ts +88 -1
  217. package/src/services/Services.ts +1 -1
  218. package/src/services/chaintracker/ChaintracksChainTracker.ts +3 -2
  219. package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +1 -7
  220. package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +1 -1
  221. package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +2 -2
  222. package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +39 -14
  223. package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +1 -1
  224. package/src/services/chaintracker/chaintracks/Chaintracks.ts +16 -11
  225. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +4 -5
  226. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +1 -1
  227. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +2 -3
  228. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +1 -0
  229. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +3 -1
  230. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +1 -1
  231. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +10 -3
  232. package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +6 -4
  233. package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +1 -1
  234. package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +1 -1
  235. package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +2 -1
  236. package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +4 -3
  237. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +60 -11
  238. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +557 -0
  239. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +80 -179
  240. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +63 -133
  241. package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
  242. package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +14 -1
  243. package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +61 -0
  244. package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +111 -0
  245. package/src/services/chaintracker/chaintracks/index.all.ts +4 -0
  246. package/src/services/chaintracker/chaintracks/index.client.ts +0 -3
  247. package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +20 -11
  248. package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +1 -1
  249. package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +3 -3
  250. package/src/services/chaintracker/chaintracks/util/HeightRange.ts +4 -1
  251. package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +26 -11
  252. package/src/services/createDefaultWalletServicesOptions.ts +25 -18
  253. package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
  254. package/test/Wallet/support/operations.man.test.ts +1 -1
  255. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +0 -30
  256. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +0 -1
  257. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js +0 -149
  258. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +0 -1
  259. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts +0 -23
  260. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +0 -1
  261. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +0 -57
  262. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +0 -1
  263. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts +0 -16
  264. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +0 -1
  265. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +0 -53
  266. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +0 -1
@@ -6,7 +6,7 @@ import { HeightRange } from '../util/HeightRange'
6
6
  import { BulkFilesReaderStorage } from '../util/BulkFilesReader'
7
7
  import { ChaintracksFetch } from '../util/ChaintracksFetch'
8
8
  import { Chain } from '../../../../sdk/types'
9
- import { WERR_INVALID_PARAMETER } from '../../../../sdk/WERR_errors'
9
+ import { WERR_INVALID_OPERATION, WERR_INVALID_PARAMETER } from '../../../../sdk/WERR_errors'
10
10
  import { BlockHeader } from '../../../../sdk/WalletServices.interfaces'
11
11
 
12
12
  interface ChaintracksNoDbData {
@@ -132,15 +132,15 @@ export class ChaintracksStorageNoDb extends ChaintracksStorageBase {
132
132
  return Array.from(data.liveHeaders.values()).find(h => h.merkleRoot === merkleRoot) || null
133
133
  }
134
134
 
135
- override async findLiveHeightRange(): Promise<{ minHeight: number; maxHeight: number }> {
135
+ override async findLiveHeightRange(): Promise<HeightRange> {
136
136
  const data = await this.getData()
137
137
  const activeHeaders = Array.from(data.liveHeaders.values()).filter(h => h.isActive)
138
138
  if (activeHeaders.length === 0) {
139
- return { minHeight: 0, maxHeight: -1 }
139
+ return HeightRange.empty
140
140
  }
141
141
  const minHeight = Math.min(...activeHeaders.map(h => h.height))
142
142
  const maxHeight = Math.max(...activeHeaders.map(h => h.height))
143
- return { minHeight, maxHeight }
143
+ return new HeightRange(minHeight, maxHeight)
144
144
  }
145
145
 
146
146
  override async findMaxHeaderId(): Promise<number> {
@@ -148,17 +148,6 @@ export class ChaintracksStorageNoDb extends ChaintracksStorageBase {
148
148
  return data.maxHeaderId
149
149
  }
150
150
 
151
- override async getLiveHeightRange(): Promise<HeightRange> {
152
- const data = await this.getData()
153
- const activeHeaders = Array.from(data.liveHeaders.values()).filter(h => h.isActive)
154
- if (activeHeaders.length === 0) {
155
- return new HeightRange(0, -1)
156
- }
157
- const minHeight = Math.min(...activeHeaders.map(h => h.height))
158
- const maxHeight = Math.max(...activeHeaders.map(h => h.height))
159
- return new HeightRange(minHeight, maxHeight)
160
- }
161
-
162
151
  override async liveHeadersForBulk(count: number): Promise<LiveBlockHeader[]> {
163
152
  const data = await this.getData()
164
153
  return Array.from(data.liveHeaders.values())
@@ -167,168 +156,117 @@ export class ChaintracksStorageNoDb extends ChaintracksStorageBase {
167
156
  .slice(0, count)
168
157
  }
169
158
 
170
- override async getHeaders(height: number, count: number): Promise<number[]> {
171
- if (count <= 0) return []
172
-
159
+ override async getLiveHeaders(range: HeightRange): Promise<LiveBlockHeader[]> {
160
+ if (range.isEmpty) return []
173
161
  const data = await this.getData()
174
162
  const headers = Array.from(data.liveHeaders.values())
175
- .filter(h => h.isActive && h.height >= height && h.height < height + count)
163
+ .filter(h => h.isActive && h.height >= range.minHeight && h.height <= range.maxHeight)
176
164
  .sort((a, b) => a.height - b.height)
177
- .slice(0, count)
178
-
179
- const bufs: Uint8Array[] = []
180
-
181
- if (headers.length === 0 || headers[0].height > height) {
182
- const bulkCount = headers.length === 0 ? count : headers[0].height - height
183
- const range = new HeightRange(height, height + bulkCount - 1)
184
- const reader = await BulkFilesReaderStorage.fromStorage(this, new ChaintracksFetch(), range, bulkCount * 80)
185
- const bulkData = await reader.read()
186
- if (bulkData) {
187
- bufs.push(bulkData)
188
- }
189
- }
190
-
191
- if (headers.length > 0) {
192
- let buf = new Uint8Array(headers.length * 80)
193
- for (let i = 0; i < headers.length; i++) {
194
- const h = headers[i]
195
- const ha = serializeBaseBlockHeader(h)
196
- buf.set(ha, i * 80)
197
- }
198
- bufs.push(buf)
199
- }
200
-
201
- const r: number[] = []
202
- for (const bh of bufs) {
203
- for (const b of bh) {
204
- r.push(b)
205
- }
206
- }
207
- return r
165
+ return headers
208
166
  }
209
167
 
210
- override async insertHeader(header: BlockHeader, prev?: LiveBlockHeader): Promise<InsertHeaderResult> {
168
+ override async insertHeader(header: BlockHeader): Promise<InsertHeaderResult> {
211
169
  const data = await this.getData()
212
170
 
213
- let ok = true
214
- let dupe = false
215
- let noPrev = false
216
- let badPrev = false
217
- let noActiveAncestor = false
218
- let noTip = false
219
- let setActiveChainTip = false
220
- let reorgDepth = 0
221
- let priorTip: LiveBlockHeader | undefined
171
+ const r: InsertHeaderResult = {
172
+ added: false,
173
+ dupe: false,
174
+ noPrev: false,
175
+ badPrev: false,
176
+ noActiveAncestor: false,
177
+ isActiveTip: false,
178
+ reorgDepth: 0,
179
+ priorTip: undefined,
180
+ noTip: false
181
+ }
222
182
 
223
183
  // Check for duplicate
224
184
  if (data.hashToHeaderId.has(header.hash)) {
225
- dupe = true
226
- return { added: false, dupe, isActiveTip: false, reorgDepth, priorTip, noPrev, badPrev, noActiveAncestor, noTip }
185
+ r.dupe = true
186
+ return r
227
187
  }
228
188
 
229
189
  // Find previous header
230
190
  let oneBack = Array.from(data.liveHeaders.values()).find(h => h.hash === header.previousHash)
231
- if (!oneBack && prev && prev.hash === header.previousHash && prev.height + 1 === header.height) {
232
- oneBack = prev
233
- }
234
191
 
235
192
  if (!oneBack) {
236
193
  // Check if this is first live header
237
- if (data.liveHeaders.size === 0) {
194
+ const count = data.liveHeaders.size
195
+ if (count === 0) {
196
+ // If this is the first live header, the last bulk header (if there is one) is the previous header.
238
197
  const lbf = await this.bulkManager.getLastFile()
239
- if (lbf && header.previousHash === lbf.lastHash && header.height === lbf.firstHeight + lbf.count) {
198
+ if (!lbf) throw new WERR_INVALID_OPERATION('bulk headers must exist before first live header can be added')
199
+ if (header.previousHash === lbf.lastHash && header.height === lbf.firstHeight + lbf.count) {
200
+ // Valid first live header. Add it.
240
201
  const chainWork = addWork(lbf.lastChainWork, convertBitsToWork(header.bits))
202
+ r.isActiveTip = true
241
203
  const newHeader = {
242
204
  ...header,
243
205
  headerId: ++data.maxHeaderId,
244
206
  previousHeaderId: null,
245
207
  chainWork,
246
- isChainTip: true,
247
- isActive: true
208
+ isChainTip: r.isActiveTip,
209
+ isActive: r.isActiveTip
248
210
  }
249
211
  data.liveHeaders.set(newHeader.headerId, newHeader)
250
212
  data.hashToHeaderId.set(header.hash, newHeader.headerId)
251
213
  data.tipHeaderId = newHeader.headerId
252
- return {
253
- added: true,
254
- dupe,
255
- isActiveTip: true,
256
- reorgDepth,
257
- priorTip,
258
- noPrev,
259
- badPrev,
260
- noActiveAncestor,
261
- noTip
262
- }
263
- }
264
- noPrev = true
265
- return {
266
- added: false,
267
- dupe,
268
- isActiveTip: false,
269
- reorgDepth,
270
- priorTip,
271
- noPrev,
272
- badPrev,
273
- noActiveAncestor,
274
- noTip
214
+ r.added = true
215
+ return r
275
216
  }
276
217
  }
277
- noPrev = true
278
- return { added: false, dupe, isActiveTip: false, reorgDepth, priorTip, noPrev, badPrev, noActiveAncestor, noTip }
218
+ // Failure without a oneBack
219
+ // First live header that does not follow last bulk header or
220
+ // Not the first live header and live headers doesn't include a previousHash header.
221
+ r.noPrev = true
222
+ return r
279
223
  }
280
224
 
225
+ // This header's previousHash matches an existing live header's hash, if height isn't +1, reject it.
281
226
  if (oneBack.height + 1 !== header.height) {
282
- badPrev = true
283
- return { added: false, dupe, isActiveTip: false, reorgDepth, priorTip, noPrev, badPrev, noActiveAncestor, noTip }
227
+ r.badPrev = true
228
+ return r
284
229
  }
285
230
 
286
- const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
287
- let tip =
231
+ r.priorTip =
288
232
  oneBack.isActive && oneBack.isChainTip
289
233
  ? oneBack
290
234
  : Array.from(data.liveHeaders.values()).find(h => h.isActive && h.isChainTip)
291
235
 
292
- if (!tip) {
293
- noTip = true
294
- return { added: false, dupe, isActiveTip: false, reorgDepth, priorTip, noPrev, badPrev, noActiveAncestor, noTip }
236
+ if (!r.priorTip) {
237
+ // No active chain tip found. This is a logic error in state of live headers.
238
+ r.noTip = true
239
+ return r
295
240
  }
296
241
 
297
- priorTip = tip
298
- setActiveChainTip = isMoreWork(chainWork, tip.chainWork)
242
+ // We have an acceptable new live header...and live headers has an active chain tip.
243
+
244
+ const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
245
+
246
+ r.isActiveTip = isMoreWork(chainWork, r.priorTip.chainWork)
299
247
 
300
248
  const newHeader = {
301
249
  ...header,
302
250
  headerId: ++data.maxHeaderId,
303
- previousHeaderId: oneBack === prev ? null : oneBack.headerId,
251
+ previousHeaderId: oneBack.headerId,
304
252
  chainWork,
305
- isChainTip: setActiveChainTip,
306
- isActive: setActiveChainTip
253
+ isChainTip: r.isActiveTip,
254
+ isActive: r.isActiveTip
307
255
  }
308
256
 
309
- if (setActiveChainTip) {
257
+ if (r.isActiveTip) {
310
258
  let activeAncestor = oneBack
311
259
  while (!activeAncestor.isActive) {
312
260
  const previousHeader = data.liveHeaders.get(activeAncestor.previousHeaderId!)
313
261
  if (!previousHeader) {
314
- noActiveAncestor = true
315
- return {
316
- added: false,
317
- dupe,
318
- isActiveTip: false,
319
- reorgDepth,
320
- priorTip,
321
- noPrev,
322
- badPrev,
323
- noActiveAncestor,
324
- noTip
325
- }
262
+ r.noActiveAncestor = true
263
+ return r
326
264
  }
327
265
  activeAncestor = previousHeader
328
266
  }
329
267
 
330
268
  if (!(oneBack.isActive && oneBack.isChainTip)) {
331
- reorgDepth = Math.min(priorTip.height, header.height) - activeAncestor.height
269
+ r.reorgDepth = Math.min(r.priorTip.height, header.height) - activeAncestor.height
332
270
  }
333
271
 
334
272
  if (activeAncestor.headerId !== oneBack.headerId) {
@@ -346,27 +284,19 @@ export class ChaintracksStorageNoDb extends ChaintracksStorageBase {
346
284
  }
347
285
  }
348
286
 
349
- if (oneBack.isChainTip && oneBack !== prev) {
287
+ if (oneBack.isChainTip) {
350
288
  data.liveHeaders.set(oneBack.headerId, { ...oneBack, isChainTip: false })
351
289
  }
352
290
 
353
291
  data.liveHeaders.set(newHeader.headerId, newHeader)
354
292
  data.hashToHeaderId.set(newHeader.hash, newHeader.headerId)
355
- if (setActiveChainTip) {
293
+ r.added = true
294
+
295
+ if (r.added && r.isActiveTip) {
356
296
  data.tipHeaderId = newHeader.headerId
357
297
  this.pruneLiveBlockHeaders(newHeader.height)
358
298
  }
359
299
 
360
- return {
361
- added: ok,
362
- dupe,
363
- isActiveTip: setActiveChainTip,
364
- reorgDepth,
365
- priorTip,
366
- noPrev,
367
- badPrev,
368
- noActiveAncestor,
369
- noTip
370
- }
300
+ return r
371
301
  }
372
302
  }
@@ -0,0 +1,102 @@
1
+ import 'fake-indexeddb/auto'
2
+ import { ChaintracksFs } from '../../util/ChaintracksFs'
3
+ import { Chain } from '../../../../../sdk'
4
+ import { ChaintracksStorageKnex } from '../ChaintracksStorageKnex'
5
+ import { deserializeBaseBlockHeader, genesisHeader } from '../../util/blockHeaderUtilities'
6
+ import { ChaintracksStorageIdb, ChaintracksStorageIdbOptions } from '../ChaintracksStorageIdb'
7
+ import { ChaintracksStorageBase } from '../ChaintracksStorageBase'
8
+ import { LiveBlockHeader } from '../../Api/BlockHeaderApi'
9
+
10
+ describe('ChaintracksStorageIdb tests', () => {
11
+ jest.setTimeout(99999999)
12
+
13
+ test('0', async () => {
14
+ const options: ChaintracksStorageIdbOptions = ChaintracksStorageBase.createStorageBaseOptions('main')
15
+ const storage = new ChaintracksStorageIdb(options)
16
+ const r = await storage.migrateLatest()
17
+ const db = storage.db!
18
+ expect(db).toBeTruthy()
19
+
20
+ const tip = await storage.findChainTipHeaderOrUndefined()
21
+ expect(tip).toBeUndefined()
22
+
23
+ const ranges = await storage.getAvailableHeightRanges()
24
+
25
+ const lh: LiveBlockHeader = {
26
+ headerId: 0,
27
+ chainWork: '00'.repeat(32),
28
+ isChainTip: false,
29
+ isActive: true,
30
+ previousHeaderId: null,
31
+ height: ranges.bulk.maxHeight + 1,
32
+ hash: '1111',
33
+ version: 0,
34
+ previousHash: '01'.repeat(32),
35
+ merkleRoot: '11'.repeat(32),
36
+ time: 0,
37
+ bits: 0,
38
+ nonce: 0
39
+ }
40
+ await storage.insertLiveHeader(lh)
41
+ lh.previousHeaderId = lh.headerId
42
+ lh.hash = '2222'
43
+ lh.merkleRoot = '22'.repeat(32)
44
+ lh.height++
45
+ await storage.insertLiveHeader(lh)
46
+ lh.previousHeaderId = lh.headerId
47
+ lh.hash = '3333'
48
+ lh.merkleRoot = '33'.repeat(32)
49
+ lh.height++
50
+ await storage.insertLiveHeader(lh)
51
+ lh.previousHeaderId = lh.headerId
52
+ lh.hash = '4444'
53
+ lh.height++
54
+ await storage.insertLiveHeader(lh)
55
+ lh.previousHeaderId = lh.headerId
56
+ lh.hash = '5555'
57
+ lh.height++
58
+ lh.isChainTip = true
59
+ await storage.insertLiveHeader(lh)
60
+
61
+ const h1 = await storage.findLiveHeaderForBlockHash('1111')
62
+ expect(h1!.headerId).toBe(1)
63
+
64
+ const h2 = await storage.findLiveHeaderForMerkleRoot('22'.repeat(32))
65
+ expect(h2!.headerId).toBe(2)
66
+
67
+ const h3 = await storage.findLiveHeaderForHeaderId(3)
68
+ expect(h3!.headerId).toBe(3)
69
+
70
+ const h4 = await storage.findLiveHeaderForHeight(4 + ranges.bulk.maxHeight)
71
+ expect(h4!.headerId).toBe(4)
72
+
73
+ const h5 = await storage.findChainTipHeader()
74
+ expect(h5.headerId).toBe(5)
75
+
76
+ const range = await storage.findLiveHeightRange()
77
+ expect(range).toEqual({ minHeight: 1 + ranges.bulk.maxHeight, maxHeight: 5 + ranges.bulk.maxHeight })
78
+
79
+ const maxId = await storage.findMaxHeaderId()
80
+ expect(maxId).toBe(5)
81
+
82
+ const hfbs = await storage.liveHeadersForBulk(3)
83
+ expect(hfbs.length).toBe(3)
84
+
85
+ const lhs = await storage.getHeaders(0, 10)
86
+ expect(lhs.length).toBe(10)
87
+
88
+ const lhs2 = await storage.getHeaders(0 + ranges.bulk.maxHeight + 1, 10)
89
+ expect(lhs2.length).toBe(5)
90
+
91
+ const lhs3 = await storage.getHeaders(0 + ranges.bulk.maxHeight - 2, 10)
92
+ expect(lhs3.length).toBe(8)
93
+
94
+ const data = await storage.getHeadersUint8Array(0, 10)
95
+ expect(data.length).toBe(10 * 80)
96
+
97
+ const deleteCount = await storage.deleteOlderLiveBlockHeaders(3 + ranges.bulk.maxHeight)
98
+ expect(deleteCount).toBe(3)
99
+
100
+ await storage.deleteLiveBlockHeaders()
101
+ })
102
+ })
@@ -3,6 +3,7 @@ import { Chaintracks } from '../Chaintracks'
3
3
  import { wait } from '../../../../utility/utilityHelpers'
4
4
  import { Chain } from '../../../../sdk'
5
5
  import { createNoDbChaintracksOptions } from '../createDefaultNoDbChaintracksOptions'
6
+ import { ChaintracksFs } from '../util/ChaintracksFs'
6
7
 
7
8
  const rootFolder = './src/services/chaintracker/chaintracks/__tests/data'
8
9
 
@@ -30,7 +31,15 @@ describe('Chaintracks tests', () => {
30
31
  await NoDbBody('test')
31
32
  })
32
33
 
33
- async function NoDbBody(chain: Chain) {
34
+ test.skip('3 NoDb export mainnet', async () => {
35
+ await NoDbBody('main', true)
36
+ })
37
+
38
+ test.skip('4 NoDb export testnet', async () => {
39
+ await NoDbBody('test', true)
40
+ })
41
+
42
+ async function NoDbBody(chain: Chain, exportHeaders?: boolean) {
34
43
  const o = createNoDbChaintracksOptions(chain)
35
44
  const c = new Chaintracks(o)
36
45
  await c.makeAvailable()
@@ -39,6 +48,10 @@ describe('Chaintracks tests', () => {
39
48
  console.log(`Header received: ${header.height} ${header.hash}`)
40
49
  })
41
50
 
51
+ if (exportHeaders) {
52
+ const rootFolder = './src/services/chaintracker/chaintracks/__tests/data/export'
53
+ await c.exportBulkHeaders(rootFolder, ChaintracksFs, `https://cdn.projectbabbage.com/blockheaders`, 100000)
54
+ }
42
55
  //let done = false
43
56
  //for (; !done; ) {
44
57
  await wait(1000)
@@ -0,0 +1,61 @@
1
+ import { _tu } from '../../../../../test/utils/TestUtilsWalletStorage'
2
+ import { wait } from '../../../../utility/utilityHelpers'
3
+ import { createdIdbChaintracks } from '../createIdbChaintracks'
4
+ import { BulkFileDataManager } from '../util/BulkFileDataManager'
5
+ import { BulkHeaderFileInfo } from '../util/BulkHeaderFile'
6
+ import { HeaderListener } from '../Api/ChaintracksClientApi'
7
+ import { Chain } from '../../../../sdk/types'
8
+ import { BlockHeader } from '../Api/BlockHeaderApi'
9
+
10
+ import 'fake-indexeddb/auto'
11
+
12
+ describe('createIdbChaintracks tests', () => {
13
+ jest.setTimeout(99999999)
14
+
15
+ test('0', async () => {
16
+ const target: Chain = 'main'
17
+ if (_tu.noEnv(target)) return
18
+ const env = _tu.getEnv(target)
19
+ const { chain, chaintracks, storage } = await createdIdbChaintracks(env.chain, env.whatsonchainApiKey)
20
+ const headerListener: HeaderListener = (header: BlockHeader) => {
21
+ console.log(`headerListener: height: ${header.height} hash: ${header.hash} ${new Date().toISOString()}`)
22
+ }
23
+ chaintracks.subscribeHeaders(headerListener)
24
+ expect(countDatas(storage.bulkManager)).toBeLessThanOrEqual(3)
25
+
26
+ const tipHash = await chaintracks.findChainTipHash()
27
+ const tip = await chaintracks.findChainTipHeader()
28
+ chaintracks.log(`tip: height: ${tip.height} hash: ${tip.hash}`)
29
+ expect(tip.hash).toBe(tipHash)
30
+
31
+ const forHash = await chaintracks.findHeaderForBlockHash(tip.hash)
32
+ expect(forHash?.hash).toBe(tip.hash)
33
+
34
+ const forHashLive = await chaintracks.findLiveHeaderForBlockHash(tip.hash)
35
+ expect(forHashLive?.hash).toBe(tip.hash)
36
+
37
+ const chainwork = await chaintracks.findChainWorkForBlockHash(tip.hash)
38
+ expect(forHashLive?.chainWork).toBe(chainwork)
39
+
40
+ const forHeight = await chaintracks.findHeaderForHeight(tip.height)
41
+ expect(forHeight?.hash).toBe(tip.hash)
42
+
43
+ const listening = await chaintracks.isListening()
44
+ expect(listening).toBe(true)
45
+
46
+ // console.log('validating...')
47
+ // const validated = await chaintracks.validate()
48
+ // expect(validated).toBe(true)
49
+ // console.log('validated')
50
+
51
+ for (;;) await wait(120000)
52
+ })
53
+ })
54
+
55
+ function countDatas(manager: BulkFileDataManager): number {
56
+ let count = 0
57
+ for (const file of manager['bfds'] as BulkHeaderFileInfo[]) {
58
+ if (file.data) count += 1
59
+ }
60
+ return count
61
+ }
@@ -0,0 +1,111 @@
1
+ import { Chain } from '../../../sdk'
2
+ import { ChaintracksOptions } from './Api/ChaintracksApi'
3
+ import { Chaintracks } from './Chaintracks'
4
+ import { BulkIngestorCDNBabbage } from './Ingest/BulkIngestorCDNBabbage'
5
+ import { ChaintracksFetch } from './util/ChaintracksFetch'
6
+ import { LiveIngestorWhatsOnChainOptions, LiveIngestorWhatsOnChainPoll } from './Ingest/LiveIngestorWhatsOnChainPoll'
7
+ import { BulkIngestorWhatsOnChainCdn, BulkIngestorWhatsOnChainOptions } from './Ingest/BulkIngestorWhatsOnChainCdn'
8
+ import { ChaintracksFetchApi } from './Api/ChaintracksFetchApi'
9
+ import { ChaintracksStorageIdb, ChaintracksStorageIdbOptions } from './Storage/ChaintracksStorageIdb'
10
+ import { BulkFileDataManager, BulkFileDataManagerOptions } from './util/BulkFileDataManager'
11
+ import { BulkIngestorCDNOptions, WhatsOnChainServicesOptions } from './index.client'
12
+
13
+ export async function createdIdbChaintracks(
14
+ chain: Chain,
15
+ whatsonchainApiKey: string,
16
+ maxPerFile: number = 100000,
17
+ maxRetained: number = 2,
18
+ fetch?: ChaintracksFetchApi,
19
+ cdnUrl: string = 'https://cdn.projectbabbage.com/blockheaders/',
20
+ liveHeightThreshold: number = 2000,
21
+ reorgHeightThreshold: number = 400,
22
+ bulkMigrationChunkSize: number = 500,
23
+ batchInsertLimit: number = 400,
24
+ addLiveRecursionLimit: number = 36
25
+ ): Promise<{
26
+ chain: Chain
27
+ maxPerFile: number
28
+ fetch: ChaintracksFetchApi
29
+ storage: ChaintracksStorageIdb
30
+ chaintracks: Chaintracks
31
+ }> {
32
+ try {
33
+ fetch ||= new ChaintracksFetch()
34
+
35
+ const bfo: BulkFileDataManagerOptions = {
36
+ chain,
37
+ fetch,
38
+ maxPerFile,
39
+ maxRetained,
40
+ fromKnownSourceUrl: cdnUrl
41
+ }
42
+ const bulkFileDataManager = new BulkFileDataManager(bfo)
43
+
44
+ const so: ChaintracksStorageIdbOptions = {
45
+ chain,
46
+ bulkFileDataManager,
47
+ liveHeightThreshold,
48
+ reorgHeightThreshold,
49
+ bulkMigrationChunkSize,
50
+ batchInsertLimit
51
+ }
52
+ const storage = new ChaintracksStorageIdb(so)
53
+
54
+ const co: ChaintracksOptions = {
55
+ chain,
56
+ storage,
57
+ bulkIngestors: [],
58
+ liveIngestors: [],
59
+ addLiveRecursionLimit,
60
+ logging: (...args) => console.log(new Date().toISOString(), ...args),
61
+ readonly: false
62
+ }
63
+
64
+ const jsonResource = `${chain}NetBlockHeaders.json`
65
+
66
+ const bulkCdnOptions: BulkIngestorCDNOptions = {
67
+ chain,
68
+ jsonResource,
69
+ fetch,
70
+ cdnUrl,
71
+ maxPerFile
72
+ }
73
+ co.bulkIngestors.push(new BulkIngestorCDNBabbage(bulkCdnOptions))
74
+
75
+ const wocOptions: WhatsOnChainServicesOptions = {
76
+ chain,
77
+ apiKey: whatsonchainApiKey,
78
+ timeout: 30000,
79
+ userAgent: 'BabbageWhatsOnChainServices',
80
+ enableCache: true,
81
+ chainInfoMsecs: 5000
82
+ }
83
+
84
+ const bulkOptions: BulkIngestorWhatsOnChainOptions = {
85
+ ...wocOptions,
86
+ jsonResource,
87
+ idleWait: 5000
88
+ }
89
+ co.bulkIngestors.push(new BulkIngestorWhatsOnChainCdn(bulkOptions))
90
+
91
+ const liveOptions: LiveIngestorWhatsOnChainOptions = {
92
+ ...wocOptions,
93
+ idleWait: 100000
94
+ }
95
+ co.liveIngestors.push(new LiveIngestorWhatsOnChainPoll(liveOptions))
96
+
97
+ const chaintracks = new Chaintracks(co)
98
+ await chaintracks.makeAvailable()
99
+
100
+ return {
101
+ chain,
102
+ fetch,
103
+ maxPerFile,
104
+ storage,
105
+ chaintracks
106
+ }
107
+ } catch (error) {
108
+ console.error('Error setting up Chaintracks with Idb Storage:', error)
109
+ throw error
110
+ }
111
+ }
@@ -5,3 +5,7 @@ export * from './Storage/ChaintracksStorageKnex'
5
5
  export * from './Storage/ChaintracksStorageMemory'
6
6
 
7
7
  export * from './createDefaultKnexChaintracksOptions'
8
+
9
+ export * from './ChaintracksService'
10
+ export * from './Ingest/BulkIngestorWhatsOnChainWs'
11
+ export * from './Ingest/LiveIngestorWhatsOnChainWs'
@@ -10,7 +10,6 @@ export * from './Api/LiveIngestorApi'
10
10
  export * from './Api/BlockHeaderApi'
11
11
 
12
12
  export * from './Chaintracks'
13
- export * from './ChaintracksService'
14
13
  export * from './ChaintracksServiceClient'
15
14
 
16
15
  export * from './Ingest/BulkIngestorBase'
@@ -19,9 +18,7 @@ export * from './Ingest/LiveIngestorBase'
19
18
  export * from './Ingest/BulkIngestorCDN'
20
19
  export * from './Ingest/BulkIngestorCDNBabbage'
21
20
  export * from './Ingest/BulkIngestorWhatsOnChainCdn'
22
- export * from './Ingest/BulkIngestorWhatsOnChainWs'
23
21
  export * from './Ingest/LiveIngestorWhatsOnChainPoll'
24
- export * from './Ingest/LiveIngestorWhatsOnChainWs'
25
22
  export * from './Ingest/WhatsOnChainServices'
26
23
 
27
24
  export * from './Storage/BulkStorageBase'