@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
|
@@ -4,7 +4,13 @@ import { InsertHeaderResult, ChaintracksStorageBaseOptions } from '../Api/Chaint
|
|
|
4
4
|
import { ChaintracksStorageBase } from './ChaintracksStorageBase'
|
|
5
5
|
import { LiveBlockHeader } from '../Api/BlockHeaderApi'
|
|
6
6
|
import { BlockHeader } from '../../../../sdk/WalletServices.interfaces'
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
addWork,
|
|
9
|
+
convertBitsToWork,
|
|
10
|
+
isMoreWork,
|
|
11
|
+
serializeBaseBlockHeader,
|
|
12
|
+
serializeBaseBlockHeaders
|
|
13
|
+
} from '../util/blockHeaderUtilities'
|
|
8
14
|
import { verifyOneOrNone } from '../../../../utility/utilityHelpers'
|
|
9
15
|
import { DBType } from '../../../../storage/StorageReader'
|
|
10
16
|
import { BulkHeaderFileInfo } from '../util/BulkHeaderFile'
|
|
@@ -15,6 +21,8 @@ import { ChaintracksStorageBulkFileApi } from '../Api/ChaintracksStorageApi'
|
|
|
15
21
|
import { Chain } from '../../../../sdk/types'
|
|
16
22
|
import { WERR_INVALID_OPERATION, WERR_INVALID_PARAMETER } from '../../../../sdk/WERR_errors'
|
|
17
23
|
import { determineDBType } from '../../../../storage/schema/KnexMigrations'
|
|
24
|
+
import { BulkFileDataReader } from '../index.client'
|
|
25
|
+
import { asArray } from '../../../../utility/utilityHelpers.noBuffer'
|
|
18
26
|
|
|
19
27
|
export interface ChaintracksStorageKnexOptions extends ChaintracksStorageBaseOptions {
|
|
20
28
|
/**
|
|
@@ -23,24 +31,6 @@ export interface ChaintracksStorageKnexOptions extends ChaintracksStorageBaseOpt
|
|
|
23
31
|
* Knex.js database interface initialized with valid connection configuration.
|
|
24
32
|
*/
|
|
25
33
|
knex: Knex | undefined
|
|
26
|
-
/**
|
|
27
|
-
* Required.
|
|
28
|
-
*
|
|
29
|
-
* The table name for live block headers.
|
|
30
|
-
*/
|
|
31
|
-
headerTableName: string
|
|
32
|
-
/**
|
|
33
|
-
* Required.
|
|
34
|
-
*
|
|
35
|
-
* The table name for the block header hash to height index.
|
|
36
|
-
*/
|
|
37
|
-
bulkBlockHashTableName: string
|
|
38
|
-
/**
|
|
39
|
-
* Required.
|
|
40
|
-
*
|
|
41
|
-
* The table name for the block header merkleRoot to height index.
|
|
42
|
-
*/
|
|
43
|
-
bulkMerkleRootTableName: string
|
|
44
34
|
}
|
|
45
35
|
|
|
46
36
|
/**
|
|
@@ -51,28 +41,20 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
51
41
|
static createStorageKnexOptions(chain: Chain, knex?: Knex): ChaintracksStorageKnexOptions {
|
|
52
42
|
const options: ChaintracksStorageKnexOptions = {
|
|
53
43
|
...ChaintracksStorageBase.createStorageBaseOptions(chain),
|
|
54
|
-
knex
|
|
55
|
-
headerTableName: `live_headers`,
|
|
56
|
-
bulkBlockHashTableName: `bulk_hash`,
|
|
57
|
-
bulkMerkleRootTableName: `bulk_merkle`
|
|
44
|
+
knex
|
|
58
45
|
}
|
|
59
46
|
return options
|
|
60
47
|
}
|
|
61
48
|
|
|
62
49
|
knex: Knex
|
|
63
50
|
_dbtype?: DBType
|
|
64
|
-
headerTableName: string
|
|
65
51
|
bulkFilesTableName: string = 'bulk_files'
|
|
66
|
-
|
|
67
|
-
bulkMerkleRootTableName: string
|
|
52
|
+
headerTableName: string = `live_headers`
|
|
68
53
|
|
|
69
54
|
constructor(options: ChaintracksStorageKnexOptions) {
|
|
70
55
|
super(options)
|
|
71
56
|
if (!options.knex) throw new Error('The knex options property is required.')
|
|
72
57
|
this.knex = options.knex
|
|
73
|
-
this.headerTableName = options.headerTableName
|
|
74
|
-
this.bulkBlockHashTableName = options.bulkBlockHashTableName
|
|
75
|
-
this.bulkMerkleRootTableName = options.bulkMerkleRootTableName
|
|
76
58
|
}
|
|
77
59
|
|
|
78
60
|
get dbtype(): DBType {
|
|
@@ -98,7 +80,7 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
98
80
|
this._dbtype = await determineDBType(this.knex)
|
|
99
81
|
await super.makeAvailable()
|
|
100
82
|
// Connect the bulk data file manager to the table provided by this storage class.
|
|
101
|
-
await this.bulkManager.setStorage(this)
|
|
83
|
+
await this.bulkManager.setStorage(this, this.log)
|
|
102
84
|
}
|
|
103
85
|
}
|
|
104
86
|
|
|
@@ -133,26 +115,26 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
133
115
|
await this.knex.destroy()
|
|
134
116
|
}
|
|
135
117
|
|
|
136
|
-
async findLiveHeightRange(): Promise<
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
118
|
+
override async findLiveHeightRange(): Promise<HeightRange> {
|
|
119
|
+
return new HeightRange(
|
|
120
|
+
((await this.knex(this.headerTableName).where({ isActive: true }).min('height as v')).pop()?.v as number) || 0,
|
|
121
|
+
((await this.knex(this.headerTableName).where({ isActive: true }).max('height as v')).pop()?.v as number) || -1
|
|
122
|
+
)
|
|
141
123
|
}
|
|
142
124
|
|
|
143
|
-
async findLiveHeaderForHeaderId(headerId: number): Promise<LiveBlockHeader> {
|
|
125
|
+
override async findLiveHeaderForHeaderId(headerId: number): Promise<LiveBlockHeader> {
|
|
144
126
|
const [header] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ headerId: headerId })
|
|
145
127
|
if (!header) throw new Error(`HeaderId ${headerId} not found in live header database.`)
|
|
146
128
|
return header
|
|
147
129
|
}
|
|
148
130
|
|
|
149
|
-
async findChainTipHeader(): Promise<LiveBlockHeader> {
|
|
131
|
+
override async findChainTipHeader(): Promise<LiveBlockHeader> {
|
|
150
132
|
const [tip] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ isActive: true, isChainTip: true })
|
|
151
133
|
if (!tip) throw new Error('Database contains no active chain tip header.')
|
|
152
134
|
return tip
|
|
153
135
|
}
|
|
154
136
|
|
|
155
|
-
async findChainTipHeaderOrUndefined(): Promise<LiveBlockHeader | undefined> {
|
|
137
|
+
override async findChainTipHeaderOrUndefined(): Promise<LiveBlockHeader | undefined> {
|
|
156
138
|
const [tip] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ isActive: true, isChainTip: true })
|
|
157
139
|
return tip
|
|
158
140
|
}
|
|
@@ -240,17 +222,19 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
240
222
|
async insertHeader(header: BlockHeader): Promise<InsertHeaderResult> {
|
|
241
223
|
const table = this.headerTableName
|
|
242
224
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
225
|
+
const r: InsertHeaderResult = {
|
|
226
|
+
added: false,
|
|
227
|
+
dupe: false,
|
|
228
|
+
noPrev: false,
|
|
229
|
+
badPrev: false,
|
|
230
|
+
noActiveAncestor: false,
|
|
231
|
+
isActiveTip: false,
|
|
232
|
+
reorgDepth: 0,
|
|
233
|
+
priorTip: undefined,
|
|
234
|
+
noTip: false
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
await this.knex.transaction(async trx => {
|
|
254
238
|
/*
|
|
255
239
|
We ensure the header does not already exist. This needs to be done
|
|
256
240
|
inside the transaction to avoid inserting multiple headers. If an
|
|
@@ -258,8 +242,8 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
258
242
|
*/
|
|
259
243
|
const [dupeCheck] = await trx(table).where({ hash: header.hash }).count()
|
|
260
244
|
if (dupeCheck['count(*)']) {
|
|
261
|
-
dupe = true
|
|
262
|
-
return
|
|
245
|
+
r.dupe = true
|
|
246
|
+
return
|
|
263
247
|
}
|
|
264
248
|
|
|
265
249
|
// This is the existing previous header to the one being inserted...
|
|
@@ -267,61 +251,69 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
267
251
|
|
|
268
252
|
if (!oneBack) {
|
|
269
253
|
// Check if this is first live header...
|
|
270
|
-
const
|
|
271
|
-
const count = Number(
|
|
254
|
+
const cr = await trx(table).count()
|
|
255
|
+
const count = Number(cr[0]['count(*)'])
|
|
272
256
|
if (count === 0) {
|
|
257
|
+
// If this is the first live header, the last bulk header (if there is one) is the previous header.
|
|
273
258
|
const lbf = await this.bulkManager.getLastFile()
|
|
274
259
|
if (!lbf) throw new WERR_INVALID_OPERATION('bulk headers must exist before first live header can be added')
|
|
275
260
|
if (header.previousHash === lbf.lastHash && header.height === lbf.firstHeight + lbf.count) {
|
|
261
|
+
// Valid first live header. Add it.
|
|
276
262
|
const chainWork = addWork(lbf.lastChainWork, convertBitsToWork(header.bits))
|
|
263
|
+
r.isActiveTip = true
|
|
277
264
|
const newHeader = {
|
|
278
265
|
...header,
|
|
279
266
|
previousHeaderId: null,
|
|
280
267
|
chainWork,
|
|
281
|
-
isChainTip:
|
|
282
|
-
isActive:
|
|
268
|
+
isChainTip: r.isActiveTip,
|
|
269
|
+
isActive: r.isActiveTip
|
|
283
270
|
}
|
|
271
|
+
// Success
|
|
284
272
|
await trx<LiveBlockHeader>(table).insert(newHeader)
|
|
285
|
-
|
|
273
|
+
r.added = true
|
|
274
|
+
return
|
|
286
275
|
}
|
|
287
276
|
}
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
|
|
291
|
-
|
|
277
|
+
// Failure without a oneBack
|
|
278
|
+
// First live header that does not follow last bulk header or
|
|
279
|
+
// Not the first live header and live headers doesn't include a previousHash header.
|
|
280
|
+
r.noPrev = true
|
|
281
|
+
return
|
|
292
282
|
}
|
|
283
|
+
|
|
284
|
+
// This header's previousHash matches an existing live header's hash, if height isn't +1, reject it.
|
|
293
285
|
if (oneBack.height + 1 != header.height) {
|
|
294
|
-
badPrev = true
|
|
295
|
-
return
|
|
286
|
+
r.badPrev = true
|
|
287
|
+
return
|
|
296
288
|
}
|
|
297
289
|
|
|
298
|
-
const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
|
|
299
|
-
|
|
300
|
-
let tip: LiveBlockHeader | undefined
|
|
301
290
|
if (oneBack.isActive && oneBack.isChainTip) {
|
|
302
|
-
|
|
291
|
+
r.priorTip = oneBack
|
|
303
292
|
} else {
|
|
304
|
-
;[
|
|
293
|
+
;[r.priorTip] = await trx<LiveBlockHeader>(table).where({ isActive: true, isChainTip: true })
|
|
305
294
|
}
|
|
306
295
|
|
|
307
|
-
if (!
|
|
308
|
-
|
|
309
|
-
|
|
296
|
+
if (!r.priorTip) {
|
|
297
|
+
// No active chain tip found. This is a logic error in state of live headers.
|
|
298
|
+
r.noTip = true
|
|
299
|
+
return
|
|
310
300
|
}
|
|
311
301
|
|
|
312
|
-
|
|
302
|
+
// We have an acceptable new live header...and live headers has an active chain tip.
|
|
313
303
|
|
|
314
|
-
|
|
304
|
+
const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
|
|
305
|
+
|
|
306
|
+
r.isActiveTip = isMoreWork(chainWork, r.priorTip.chainWork)
|
|
315
307
|
|
|
316
308
|
const newHeader = {
|
|
317
309
|
...header,
|
|
318
310
|
previousHeaderId: oneBack.headerId,
|
|
319
311
|
chainWork,
|
|
320
|
-
isChainTip:
|
|
321
|
-
isActive:
|
|
312
|
+
isChainTip: r.isActiveTip,
|
|
313
|
+
isActive: r.isActiveTip
|
|
322
314
|
}
|
|
323
315
|
|
|
324
|
-
if (
|
|
316
|
+
if (r.isActiveTip) {
|
|
325
317
|
// Find newHeader's first active ancestor
|
|
326
318
|
let activeAncestor = oneBack
|
|
327
319
|
while (!activeAncestor.isActive) {
|
|
@@ -329,15 +321,16 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
329
321
|
headerId: activeAncestor.previousHeaderId || -1
|
|
330
322
|
})
|
|
331
323
|
if (!previousHeader) {
|
|
332
|
-
|
|
333
|
-
|
|
324
|
+
// live headers doesn't contain an active ancestor. This is a live header's logic error.
|
|
325
|
+
r.noActiveAncestor = true
|
|
326
|
+
return
|
|
334
327
|
}
|
|
335
328
|
activeAncestor = previousHeader
|
|
336
329
|
}
|
|
337
330
|
|
|
338
331
|
if (!(oneBack.isActive && oneBack.isChainTip))
|
|
339
332
|
// If this is the new active chain tip, and oneBack was not, this is a reorg.
|
|
340
|
-
reorgDepth = Math.min(priorTip.height, header.height) - activeAncestor.height
|
|
333
|
+
r.reorgDepth = Math.min(r.priorTip.height, header.height) - activeAncestor.height
|
|
341
334
|
|
|
342
335
|
if (activeAncestor.headerId !== oneBack.headerId) {
|
|
343
336
|
// Deactivate headers from the current active chain tip up to but excluding our activeAncestor:
|
|
@@ -367,27 +360,17 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
367
360
|
}
|
|
368
361
|
|
|
369
362
|
if (oneBack.isChainTip) {
|
|
363
|
+
// Deactivate the old chain tip
|
|
370
364
|
await trx<LiveBlockHeader>(table).where({ headerId: oneBack.headerId }).update({ isChainTip: false })
|
|
371
365
|
}
|
|
372
366
|
|
|
373
367
|
await trx<LiveBlockHeader>(table).insert(newHeader)
|
|
374
|
-
|
|
375
|
-
return true
|
|
368
|
+
r.added = true
|
|
376
369
|
})
|
|
377
370
|
|
|
378
|
-
if (
|
|
379
|
-
|
|
380
|
-
return
|
|
381
|
-
added: ok,
|
|
382
|
-
dupe,
|
|
383
|
-
isActiveTip: setActiveChainTip,
|
|
384
|
-
reorgDepth,
|
|
385
|
-
priorTip,
|
|
386
|
-
noPrev,
|
|
387
|
-
badPrev,
|
|
388
|
-
noActiveAncestor,
|
|
389
|
-
noTip
|
|
390
|
-
}
|
|
371
|
+
if (r.added && r.isActiveTip) this.pruneLiveBlockHeaders(header.height)
|
|
372
|
+
|
|
373
|
+
return r
|
|
391
374
|
}
|
|
392
375
|
|
|
393
376
|
async findMaxHeaderId(): Promise<number> {
|
|
@@ -396,52 +379,6 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
396
379
|
//return resultrow?.maxHeaderId || 0
|
|
397
380
|
}
|
|
398
381
|
|
|
399
|
-
async getLiveHeightRange(): Promise<HeightRange> {
|
|
400
|
-
return new HeightRange(
|
|
401
|
-
((await this.knex(this.headerTableName).where({ isActive: true }).min('height as v')).pop()?.v as number) || 0,
|
|
402
|
-
((await this.knex(this.headerTableName).where({ isActive: true }).max('height as v')).pop()?.v as number) || -1
|
|
403
|
-
)
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
async appendToIndexTable(table: string, index: string, buffers: string[], minHeight: number): Promise<void> {
|
|
407
|
-
const newRows: { height: number }[] = []
|
|
408
|
-
for (let i = 0; i < buffers.length; i++) {
|
|
409
|
-
const row = { height: minHeight + i }
|
|
410
|
-
row[index] = buffers[i]
|
|
411
|
-
newRows.push(row)
|
|
412
|
-
}
|
|
413
|
-
try {
|
|
414
|
-
await this.knex.batchInsert(table, newRows, newRows.length)
|
|
415
|
-
return
|
|
416
|
-
} catch (err: unknown) {
|
|
417
|
-
if ((err as { code: string })?.code !== 'ER_DUP_ENTRY') throw err
|
|
418
|
-
}
|
|
419
|
-
|
|
420
|
-
// If the batchInsert failed, we may be recovering from an earlier failure. Try inserting one at a time and ignore duplicate hash values.
|
|
421
|
-
for (let i = 0; i < newRows.length; i++) {
|
|
422
|
-
await this.knex(this.bulkBlockHashTableName).insert(newRows[i]).onConflict(index).ignore()
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
async appendToIndexTableChunked(
|
|
427
|
-
table: string,
|
|
428
|
-
index: string,
|
|
429
|
-
buffers: string[],
|
|
430
|
-
minHeight: number,
|
|
431
|
-
chunkSize: number
|
|
432
|
-
): Promise<void> {
|
|
433
|
-
let remaining = buffers.length
|
|
434
|
-
while (remaining > 0) {
|
|
435
|
-
const size = Math.min(remaining, chunkSize)
|
|
436
|
-
const chunk = buffers.slice(0, size)
|
|
437
|
-
buffers = buffers.slice(size)
|
|
438
|
-
await this.appendToIndexTable(table, index, chunk, minHeight)
|
|
439
|
-
console.log(`Appended ${size} index records to ${index} table`)
|
|
440
|
-
remaining -= size
|
|
441
|
-
minHeight += size
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
|
|
445
382
|
override async deleteLiveBlockHeaders(): Promise<void> {
|
|
446
383
|
const table = this.headerTableName
|
|
447
384
|
await this.knex.transaction(async trx => {
|
|
@@ -480,49 +417,13 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
|
|
|
480
417
|
})
|
|
481
418
|
}
|
|
482
419
|
|
|
483
|
-
async
|
|
484
|
-
if (count <= 0) return []
|
|
485
|
-
|
|
420
|
+
async getLiveHeaders(range: HeightRange): Promise<LiveBlockHeader[]> {
|
|
486
421
|
const headers = await this.knex<LiveBlockHeader>(this.headerTableName)
|
|
487
422
|
.where({ isActive: true })
|
|
488
|
-
.andWhere('height', '>=',
|
|
489
|
-
.andWhere('height', '
|
|
490
|
-
.limit(count)
|
|
423
|
+
.andWhere('height', '>=', range.minHeight)
|
|
424
|
+
.andWhere('height', '<=', range.maxHeight)
|
|
491
425
|
.orderBy('height')
|
|
492
|
-
|
|
493
|
-
const bufs: Uint8Array[] = []
|
|
494
|
-
|
|
495
|
-
if (headers.length === 0 || headers[0].height > height) {
|
|
496
|
-
// Some or all headers requested are in bulk storage...
|
|
497
|
-
// There may be some overlap between bulk and live, headers are only
|
|
498
|
-
// deleted from live after they have been added to bulk.
|
|
499
|
-
// Only get what is needed.
|
|
500
|
-
const bulkCount = headers.length === 0 ? count : headers[0].height - height
|
|
501
|
-
const range = new HeightRange(height, height + bulkCount - 1)
|
|
502
|
-
const reader = await BulkFilesReaderStorage.fromStorage(this, new ChaintracksFetch(), range, bulkCount * 80)
|
|
503
|
-
const bulkData = await reader.read()
|
|
504
|
-
if (bulkData) bufs.push(bulkData)
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
if (headers.length > 0) {
|
|
508
|
-
// Some or all headers requested were in live storage...
|
|
509
|
-
let buf = new Uint8Array(headers.length * 80)
|
|
510
|
-
for (let i = 0; i < headers.length; i++) {
|
|
511
|
-
const h = headers[i]
|
|
512
|
-
const ha = serializeBaseBlockHeader(h)
|
|
513
|
-
buf.set(ha, i * 80)
|
|
514
|
-
}
|
|
515
|
-
bufs.push(buf)
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
const r = [bufs.length * 80]
|
|
519
|
-
let i = 0
|
|
520
|
-
for (const bh of bufs) {
|
|
521
|
-
for (const b of bh) {
|
|
522
|
-
r[i++] = b
|
|
523
|
-
}
|
|
524
|
-
}
|
|
525
|
-
return r
|
|
426
|
+
return headers
|
|
526
427
|
}
|
|
527
428
|
|
|
528
429
|
concatSerializedHeaders(bufs: number[][]): number[] {
|