@bsv/wallet-toolbox 1.6.4 → 1.6.6
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.
- package/CHANGELOG.md +10 -0
- package/docs/client.md +402 -313
- package/docs/monitor.md +4 -4
- package/docs/services.md +118 -133
- package/docs/wallet.md +402 -313
- package/mobile/out/src/monitor/Monitor.d.ts +3 -3
- package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
- package/mobile/out/src/monitor/Monitor.js.map +1 -1
- package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
- package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/mobile/out/src/services/Services.js +1 -1
- package/mobile/out/src/services/Services.js.map +1 -1
- package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
- package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
- package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
- package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
- package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
- package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +91 -0
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +448 -0
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
- package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +12 -0
- package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +83 -0
- package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts +2 -0
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +2 -0
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
- package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
- package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js +19 -17
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/mobile/package-lock.json +2 -2
- package/mobile/package.json +1 -1
- package/out/src/monitor/Monitor.d.ts +3 -3
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/services/Services.js +1 -1
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
- package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +4 -3
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +91 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +448 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +3 -29
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +61 -137
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js +81 -0
- package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js +12 -1
- package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js +50 -0
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +12 -0
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +83 -0
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/index.client.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.client.js +2 -0
- package/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +19 -17
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/services/providers/__tests/exchangeRates.test.d.ts +2 -0
- package/out/src/services/providers/__tests/exchangeRates.test.d.ts.map +1 -0
- package/out/src/services/providers/__tests/exchangeRates.test.js +19 -0
- package/out/src/services/providers/__tests/exchangeRates.test.js.map +1 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +4 -0
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/test/Wallet/support/operations.man.test.js +1 -1
- package/out/test/Wallet/support/operations.man.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/monitor/Monitor.ts +3 -3
- package/src/sdk/WalletServices.interfaces.ts +88 -1
- package/src/services/Services.ts +1 -1
- package/src/services/chaintracker/ChaintracksChainTracker.ts +3 -2
- package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +1 -7
- package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +1 -1
- package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +2 -2
- package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +39 -14
- package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +1 -1
- package/src/services/chaintracker/chaintracks/Chaintracks.ts +16 -11
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +4 -5
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +1 -1
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +2 -3
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +1 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +3 -1
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +1 -1
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +10 -3
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +6 -4
- package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +1 -1
- package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +1 -1
- package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +2 -1
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +4 -3
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +60 -11
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +557 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +80 -179
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +63 -133
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
- package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +14 -1
- package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +1 -1
- package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +61 -0
- package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +111 -0
- package/src/services/chaintracker/chaintracks/index.client.ts +2 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +20 -11
- package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +1 -1
- package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +3 -3
- package/src/services/chaintracker/chaintracks/util/HeightRange.ts +4 -1
- package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +26 -11
- package/src/services/createDefaultWalletServicesOptions.ts +25 -18
- package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
- package/src/storage/remoting/StorageServer.ts +5 -0
- package/test/Wallet/support/operations.man.test.ts +1 -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<
|
|
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
|
|
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
|
|
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
|
|
171
|
-
if (
|
|
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 >=
|
|
163
|
+
.filter(h => h.isActive && h.height >= range.minHeight && h.height <= range.maxHeight)
|
|
176
164
|
.sort((a, b) => a.height - b.height)
|
|
177
|
-
|
|
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
|
|
168
|
+
override async insertHeader(header: BlockHeader): Promise<InsertHeaderResult> {
|
|
211
169
|
const data = await this.getData()
|
|
212
170
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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:
|
|
247
|
-
isActive:
|
|
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
|
-
|
|
253
|
-
|
|
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
|
-
|
|
278
|
-
|
|
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
|
|
227
|
+
r.badPrev = true
|
|
228
|
+
return r
|
|
284
229
|
}
|
|
285
230
|
|
|
286
|
-
|
|
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 (!
|
|
293
|
-
|
|
294
|
-
|
|
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
|
-
|
|
298
|
-
|
|
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
|
|
251
|
+
previousHeaderId: oneBack.headerId,
|
|
304
252
|
chainWork,
|
|
305
|
-
isChainTip:
|
|
306
|
-
isActive:
|
|
253
|
+
isChainTip: r.isActiveTip,
|
|
254
|
+
isActive: r.isActiveTip
|
|
307
255
|
}
|
|
308
256
|
|
|
309
|
-
if (
|
|
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
|
|
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
|
-
|
|
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
|
|
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)
|
|
@@ -21,7 +21,7 @@ clientClass = 'Chaintracks'
|
|
|
21
21
|
//clientClass = "ChaintracksServiceClient"
|
|
22
22
|
const includeLocalServiceClient = true
|
|
23
23
|
const includeLocalServiceChaintracks = true
|
|
24
|
-
const includeNpmRegistryClient =
|
|
24
|
+
const includeNpmRegistryClient = false
|
|
25
25
|
const includeGcrTestClient = true
|
|
26
26
|
|
|
27
27
|
describe(`ChaintracksClientApi tests`, () => {
|
|
@@ -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
|
+
}
|
|
@@ -24,8 +24,10 @@ export * from './Ingest/WhatsOnChainServices'
|
|
|
24
24
|
export * from './Storage/BulkStorageBase'
|
|
25
25
|
export * from './Storage/ChaintracksStorageBase'
|
|
26
26
|
export * from './Storage/ChaintracksStorageNoDb'
|
|
27
|
+
export * from './Storage/ChaintracksStorageIdb'
|
|
27
28
|
|
|
28
29
|
export * from './createDefaultNoDbChaintracksOptions'
|
|
30
|
+
export * from './createIdbChaintracks'
|
|
29
31
|
|
|
30
32
|
export * from './util/BulkFilesReader'
|
|
31
33
|
export * from './util/HeightRange'
|