@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.
- 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/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/index.client.d.ts +0 -3
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
- 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/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.all.d.ts +3 -0
- package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
- package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
- package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
- 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/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/createIdbChaintracks.test.ts +61 -0
- package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +111 -0
- package/src/services/chaintracker/chaintracks/index.all.ts +4 -0
- package/src/services/chaintracker/chaintracks/index.client.ts +0 -3
- 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/test/Wallet/support/operations.man.test.ts +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +0 -30
- package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +0 -1
- package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js +0 -149
- package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +0 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts +0 -23
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +0 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +0 -57
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +0 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts +0 -16
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +0 -1
- package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +0 -53
- 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<
|
|
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)
|
|
@@ -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'
|