@bopen-io/wallet-toolbox 1.7.18
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/.claude/settings.local.json +10 -0
- package/.env.template +22 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
- package/.github/pull_request_template.md +22 -0
- package/.github/workflows/push.yaml +145 -0
- package/.prettierrc +10 -0
- package/CHANGELOG.md +280 -0
- package/CONTRIBUTING.md +89 -0
- package/README.md +43 -0
- package/docs/README.md +85 -0
- package/docs/client.md +19627 -0
- package/docs/monitor.md +953 -0
- package/docs/open-rpc/index.html +46 -0
- package/docs/services.md +6377 -0
- package/docs/setup.md +1268 -0
- package/docs/storage.md +5367 -0
- package/docs/wallet.md +19626 -0
- package/jest.config.ts +25 -0
- package/license.md +28 -0
- package/out/tsconfig.all.tsbuildinfo +1 -0
- package/package.json +63 -0
- package/src/CWIStyleWalletManager.ts +1999 -0
- package/src/Setup.ts +579 -0
- package/src/SetupClient.ts +322 -0
- package/src/SetupWallet.ts +108 -0
- package/src/SimpleWalletManager.ts +526 -0
- package/src/Wallet.ts +1169 -0
- package/src/WalletAuthenticationManager.ts +153 -0
- package/src/WalletLogger.ts +213 -0
- package/src/WalletPermissionsManager.ts +3660 -0
- package/src/WalletSettingsManager.ts +114 -0
- package/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.ts +675 -0
- package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
- package/src/__tests/WalletPermissionsManager.checks.test.ts +844 -0
- package/src/__tests/WalletPermissionsManager.encryption.test.ts +412 -0
- package/src/__tests/WalletPermissionsManager.fixtures.ts +307 -0
- package/src/__tests/WalletPermissionsManager.flows.test.ts +462 -0
- package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
- package/src/__tests/WalletPermissionsManager.pmodules.test.ts +798 -0
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +724 -0
- package/src/__tests/WalletPermissionsManager.tokens.test.ts +503 -0
- package/src/index.all.ts +27 -0
- package/src/index.client.ts +25 -0
- package/src/index.mobile.ts +21 -0
- package/src/index.ts +1 -0
- package/src/monitor/Monitor.ts +412 -0
- package/src/monitor/MonitorDaemon.ts +188 -0
- package/src/monitor/README.md +3 -0
- package/src/monitor/__test/MonitorDaemon.man.test.ts +45 -0
- package/src/monitor/tasks/TaskCheckForProofs.ts +243 -0
- package/src/monitor/tasks/TaskCheckNoSends.ts +73 -0
- package/src/monitor/tasks/TaskClock.ts +33 -0
- package/src/monitor/tasks/TaskFailAbandoned.ts +54 -0
- package/src/monitor/tasks/TaskMonitorCallHistory.ts +26 -0
- package/src/monitor/tasks/TaskNewHeader.ts +93 -0
- package/src/monitor/tasks/TaskPurge.ts +68 -0
- package/src/monitor/tasks/TaskReorg.ts +89 -0
- package/src/monitor/tasks/TaskReviewStatus.ts +48 -0
- package/src/monitor/tasks/TaskSendWaiting.ts +122 -0
- package/src/monitor/tasks/TaskSyncWhenIdle.ts +26 -0
- package/src/monitor/tasks/TaskUnFail.ts +151 -0
- package/src/monitor/tasks/WalletMonitorTask.ts +47 -0
- package/src/sdk/CertOpsWallet.ts +18 -0
- package/src/sdk/PrivilegedKeyManager.ts +372 -0
- package/src/sdk/README.md +13 -0
- package/src/sdk/WERR_errors.ts +234 -0
- package/src/sdk/WalletError.ts +170 -0
- package/src/sdk/WalletErrorFromJson.ts +80 -0
- package/src/sdk/WalletServices.interfaces.ts +700 -0
- package/src/sdk/WalletSigner.interfaces.ts +11 -0
- package/src/sdk/WalletStorage.interfaces.ts +606 -0
- package/src/sdk/__test/CertificateLifeCycle.test.ts +131 -0
- package/src/sdk/__test/PrivilegedKeyManager.test.ts +738 -0
- package/src/sdk/__test/WalletError.test.ts +318 -0
- package/src/sdk/__test/validationHelpers.test.ts +21 -0
- package/src/sdk/index.ts +10 -0
- package/src/sdk/types.ts +226 -0
- package/src/services/README.md +11 -0
- package/src/services/ServiceCollection.ts +248 -0
- package/src/services/Services.ts +603 -0
- package/src/services/__tests/ARC.man.test.ts +123 -0
- package/src/services/__tests/ARC.timeout.man.test.ts +79 -0
- package/src/services/__tests/ArcGorillaPool.man.test.ts +108 -0
- package/src/services/__tests/arcServices.test.ts +8 -0
- package/src/services/__tests/bitrails.test.ts +56 -0
- package/src/services/__tests/getMerklePath.test.ts +15 -0
- package/src/services/__tests/getRawTx.test.ts +13 -0
- package/src/services/__tests/postBeef.test.ts +104 -0
- package/src/services/__tests/verifyBeef.test.ts +50 -0
- package/src/services/chaintracker/BHServiceClient.ts +212 -0
- package/src/services/chaintracker/ChaintracksChainTracker.ts +71 -0
- package/src/services/chaintracker/__tests/ChaintracksChainTracker.test.ts +33 -0
- package/src/services/chaintracker/__tests/ChaintracksServiceClient.test.ts +29 -0
- package/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.ts +72 -0
- package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +83 -0
- package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +92 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +64 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts +189 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.ts +18 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFsApi.ts +58 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +386 -0
- package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +25 -0
- package/src/services/chaintracker/chaintracks/Chaintracks.ts +609 -0
- package/src/services/chaintracker/chaintracks/ChaintracksService.ts +199 -0
- package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +154 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +176 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +174 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.ts +18 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +113 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +81 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +86 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.ts +59 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +104 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +66 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +566 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.ts +219 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +54 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.ts +33 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +124 -0
- package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +92 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +104 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +382 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +574 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +438 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.ts +29 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +304 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageKnex.test.ts +45 -0
- package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +77 -0
- package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +192 -0
- package/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.ts +75 -0
- package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +62 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.ts +92 -0
- package/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.ts +111 -0
- package/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.ts +91 -0
- package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/createKnexChaintracks.ts +65 -0
- package/src/services/chaintracker/chaintracks/createNoDbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/index.all.ts +12 -0
- package/src/services/chaintracker/chaintracks/index.client.ts +4 -0
- package/src/services/chaintracker/chaintracks/index.mobile.ts +37 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +975 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataReader.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +336 -0
- package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +247 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts +69 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFs.ts +141 -0
- package/src/services/chaintracker/chaintracks/util/HeightRange.ts +153 -0
- package/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.ts +76 -0
- package/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.ts +304 -0
- package/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/__tests/HeightRange.test.ts +67 -0
- package/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.ts +49 -0
- package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +573 -0
- package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
- package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +432 -0
- package/src/services/chaintracker/index.all.ts +4 -0
- package/src/services/chaintracker/index.client.ts +4 -0
- package/src/services/chaintracker/index.mobile.ts +4 -0
- package/src/services/createDefaultWalletServicesOptions.ts +77 -0
- package/src/services/index.ts +1 -0
- package/src/services/processingErrors/arcSuccessError.json +76 -0
- package/src/services/providers/ARC.ts +350 -0
- package/src/services/providers/Bitails.ts +256 -0
- package/src/services/providers/SdkWhatsOnChain.ts +83 -0
- package/src/services/providers/WhatsOnChain.ts +883 -0
- package/src/services/providers/__tests/WhatsOnChain.test.ts +242 -0
- package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
- package/src/services/providers/exchangeRates.ts +265 -0
- package/src/services/providers/getBeefForTxid.ts +369 -0
- package/src/signer/README.md +5 -0
- package/src/signer/WalletSigner.ts +17 -0
- package/src/signer/methods/acquireDirectCertificate.ts +52 -0
- package/src/signer/methods/buildSignableTransaction.ts +183 -0
- package/src/signer/methods/completeSignedTransaction.ts +117 -0
- package/src/signer/methods/createAction.ts +172 -0
- package/src/signer/methods/internalizeAction.ts +106 -0
- package/src/signer/methods/proveCertificate.ts +43 -0
- package/src/signer/methods/signAction.ts +54 -0
- package/src/storage/README.md +14 -0
- package/src/storage/StorageIdb.ts +2304 -0
- package/src/storage/StorageKnex.ts +1425 -0
- package/src/storage/StorageProvider.ts +810 -0
- package/src/storage/StorageReader.ts +194 -0
- package/src/storage/StorageReaderWriter.ts +432 -0
- package/src/storage/StorageSyncReader.ts +34 -0
- package/src/storage/WalletStorageManager.ts +943 -0
- package/src/storage/__test/StorageIdb.test.ts +43 -0
- package/src/storage/__test/WalletStorageManager.test.ts +275 -0
- package/src/storage/__test/adminStats.man.test.ts +89 -0
- package/src/storage/__test/getBeefForTransaction.test.ts +385 -0
- package/src/storage/index.all.ts +11 -0
- package/src/storage/index.client.ts +7 -0
- package/src/storage/index.mobile.ts +6 -0
- package/src/storage/methods/ListActionsSpecOp.ts +70 -0
- package/src/storage/methods/ListOutputsSpecOp.ts +129 -0
- package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +1057 -0
- package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +20 -0
- package/src/storage/methods/__test/offsetKey.test.ts +274 -0
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +389 -0
- package/src/storage/methods/createAction.ts +947 -0
- package/src/storage/methods/generateChange.ts +556 -0
- package/src/storage/methods/getBeefForTransaction.ts +139 -0
- package/src/storage/methods/getSyncChunk.ts +293 -0
- package/src/storage/methods/internalizeAction.ts +562 -0
- package/src/storage/methods/listActionsIdb.ts +183 -0
- package/src/storage/methods/listActionsKnex.ts +226 -0
- package/src/storage/methods/listCertificates.ts +73 -0
- package/src/storage/methods/listOutputsIdb.ts +203 -0
- package/src/storage/methods/listOutputsKnex.ts +263 -0
- package/src/storage/methods/offsetKey.ts +89 -0
- package/src/storage/methods/processAction.ts +420 -0
- package/src/storage/methods/purgeData.ts +251 -0
- package/src/storage/methods/purgeDataIdb.ts +10 -0
- package/src/storage/methods/reviewStatus.ts +101 -0
- package/src/storage/methods/reviewStatusIdb.ts +43 -0
- package/src/storage/methods/utils.Buffer.ts +33 -0
- package/src/storage/methods/utils.ts +56 -0
- package/src/storage/remoting/StorageClient.ts +567 -0
- package/src/storage/remoting/StorageMobile.ts +544 -0
- package/src/storage/remoting/StorageServer.ts +291 -0
- package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
- package/src/storage/schema/KnexMigrations.ts +489 -0
- package/src/storage/schema/StorageIdbSchema.ts +150 -0
- package/src/storage/schema/entities/EntityBase.ts +210 -0
- package/src/storage/schema/entities/EntityCertificate.ts +188 -0
- package/src/storage/schema/entities/EntityCertificateField.ts +136 -0
- package/src/storage/schema/entities/EntityCommission.ts +148 -0
- package/src/storage/schema/entities/EntityOutput.ts +290 -0
- package/src/storage/schema/entities/EntityOutputBasket.ts +153 -0
- package/src/storage/schema/entities/EntityOutputTag.ts +121 -0
- package/src/storage/schema/entities/EntityOutputTagMap.ts +123 -0
- package/src/storage/schema/entities/EntityProvenTx.ts +319 -0
- package/src/storage/schema/entities/EntityProvenTxReq.ts +580 -0
- package/src/storage/schema/entities/EntitySyncState.ts +389 -0
- package/src/storage/schema/entities/EntityTransaction.ts +306 -0
- package/src/storage/schema/entities/EntityTxLabel.ts +121 -0
- package/src/storage/schema/entities/EntityTxLabelMap.ts +123 -0
- package/src/storage/schema/entities/EntityUser.ts +112 -0
- package/src/storage/schema/entities/MergeEntity.ts +73 -0
- package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +353 -0
- package/src/storage/schema/entities/__tests/CertificateTests.test.ts +354 -0
- package/src/storage/schema/entities/__tests/CommissionTests.test.ts +371 -0
- package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +278 -0
- package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +242 -0
- package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/OutputTests.test.ts +464 -0
- package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +340 -0
- package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +504 -0
- package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/TransactionTests.test.ts +604 -0
- package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +361 -0
- package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +198 -0
- package/src/storage/schema/entities/__tests/stampLogTests.test.ts +90 -0
- package/src/storage/schema/entities/__tests/usersTests.test.ts +340 -0
- package/src/storage/schema/entities/index.ts +16 -0
- package/src/storage/schema/tables/TableCertificate.ts +21 -0
- package/src/storage/schema/tables/TableCertificateField.ts +12 -0
- package/src/storage/schema/tables/TableCommission.ts +13 -0
- package/src/storage/schema/tables/TableMonitorEvent.ts +9 -0
- package/src/storage/schema/tables/TableOutput.ts +64 -0
- package/src/storage/schema/tables/TableOutputBasket.ts +12 -0
- package/src/storage/schema/tables/TableOutputTag.ts +10 -0
- package/src/storage/schema/tables/TableOutputTagMap.ts +9 -0
- package/src/storage/schema/tables/TableProvenTx.ts +14 -0
- package/src/storage/schema/tables/TableProvenTxReq.ts +65 -0
- package/src/storage/schema/tables/TableSettings.ts +17 -0
- package/src/storage/schema/tables/TableSyncState.ts +18 -0
- package/src/storage/schema/tables/TableTransaction.ts +54 -0
- package/src/storage/schema/tables/TableTxLabel.ts +10 -0
- package/src/storage/schema/tables/TableTxLabelMap.ts +9 -0
- package/src/storage/schema/tables/TableUser.ts +16 -0
- package/src/storage/schema/tables/index.ts +16 -0
- package/src/storage/sync/StorageMySQLDojoReader.ts +696 -0
- package/src/storage/sync/index.ts +1 -0
- package/src/utility/Format.ts +133 -0
- package/src/utility/README.md +3 -0
- package/src/utility/ReaderUint8Array.ts +187 -0
- package/src/utility/ScriptTemplateBRC29.ts +73 -0
- package/src/utility/__tests/utilityHelpers.noBuffer.test.ts +109 -0
- package/src/utility/aggregateResults.ts +68 -0
- package/src/utility/identityUtils.ts +159 -0
- package/src/utility/index.all.ts +7 -0
- package/src/utility/index.client.ts +7 -0
- package/src/utility/parseTxScriptOffsets.ts +29 -0
- package/src/utility/stampLog.ts +69 -0
- package/src/utility/tscProofToMerklePath.ts +48 -0
- package/src/utility/utilityHelpers.buffer.ts +34 -0
- package/src/utility/utilityHelpers.noBuffer.ts +60 -0
- package/src/utility/utilityHelpers.ts +275 -0
- package/src/wab-client/WABClient.ts +94 -0
- package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
- package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
- package/src/wab-client/auth-method-interactors/DevConsoleInteractor.ts +73 -0
- package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
- package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
- package/syncVersions.js +71 -0
- package/test/Wallet/StorageClient/storageClient.man.test.ts +75 -0
- package/test/Wallet/action/abortAction.test.ts +47 -0
- package/test/Wallet/action/createAction.test.ts +299 -0
- package/test/Wallet/action/createAction2.test.ts +1273 -0
- package/test/Wallet/action/createActionToGenerateBeefs.man.test.ts +293 -0
- package/test/Wallet/action/internalizeAction.a.test.ts +286 -0
- package/test/Wallet/action/internalizeAction.test.ts +682 -0
- package/test/Wallet/action/relinquishOutput.test.ts +37 -0
- package/test/Wallet/certificate/acquireCertificate.test.ts +298 -0
- package/test/Wallet/certificate/listCertificates.test.ts +346 -0
- package/test/Wallet/construct/Wallet.constructor.test.ts +57 -0
- package/test/Wallet/get/getHeaderForHeight.test.ts +82 -0
- package/test/Wallet/get/getHeight.test.ts +52 -0
- package/test/Wallet/get/getKnownTxids.test.ts +86 -0
- package/test/Wallet/get/getNetwork.test.ts +27 -0
- package/test/Wallet/get/getVersion.test.ts +27 -0
- package/test/Wallet/list/listActions.test.ts +279 -0
- package/test/Wallet/list/listActions2.test.ts +1381 -0
- package/test/Wallet/list/listCertificates.test.ts +118 -0
- package/test/Wallet/list/listOutputs.test.ts +447 -0
- package/test/Wallet/live/walletLive.man.test.ts +521 -0
- package/test/Wallet/local/localWallet.man.test.ts +93 -0
- package/test/Wallet/local/localWallet2.man.test.ts +277 -0
- package/test/Wallet/signAction/mountaintop.man.test.ts +130 -0
- package/test/Wallet/specOps/specOps.man.test.ts +220 -0
- package/test/Wallet/support/janitor.man.test.ts +40 -0
- package/test/Wallet/support/operations.man.test.ts +407 -0
- package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +347 -0
- package/test/Wallet/sync/Wallet.sync.test.ts +215 -0
- package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +203 -0
- package/test/Wallet/sync/setActive.test.ts +170 -0
- package/test/WalletClient/LocalKVStore.man.test.ts +114 -0
- package/test/WalletClient/WERR.man.test.ts +35 -0
- package/test/bsv-ts-sdk/LocalKVStore.test.ts +102 -0
- package/test/checkDB.ts +57 -0
- package/test/checkdb +0 -0
- package/test/examples/backup.man.test.ts +59 -0
- package/test/examples/pushdrop.test.ts +282 -0
- package/test/monitor/Monitor.test.ts +620 -0
- package/test/services/Services.test.ts +263 -0
- package/test/storage/KnexMigrations.test.ts +86 -0
- package/test/storage/StorageMySQLDojoReader.man.test.ts +60 -0
- package/test/storage/count.test.ts +177 -0
- package/test/storage/find.test.ts +195 -0
- package/test/storage/findLegacy.test.ts +67 -0
- package/test/storage/idb/allocateChange.test.ts +251 -0
- package/test/storage/idb/count.test.ts +158 -0
- package/test/storage/idb/find.test.ts +177 -0
- package/test/storage/idb/idbSpeed.test.ts +36 -0
- package/test/storage/idb/insert.test.ts +268 -0
- package/test/storage/idb/transactionAbort.test.ts +108 -0
- package/test/storage/idb/update.test.ts +999 -0
- package/test/storage/insert.test.ts +278 -0
- package/test/storage/update.test.ts +1021 -0
- package/test/storage/update2.test.ts +897 -0
- package/test/utils/TestUtilsWalletStorage.ts +2526 -0
- package/test/utils/localWalletMethods.ts +363 -0
- package/test/utils/removeFailedFromDatabase.sql +17 -0
- package/ts2md.json +44 -0
- package/tsconfig.all.json +31 -0
- package/tsconfig.client.json +29 -0
- package/tsconfig.json +17 -0
- package/tsconfig.mobile.json +28 -0
package/docs/monitor.md
ADDED
|
@@ -0,0 +1,953 @@
|
|
|
1
|
+
# MONITOR: BSV Wallet Toolbox API Documentation
|
|
2
|
+
|
|
3
|
+
The documentation is split into various pages, this page covers the [Monitor](#class-monitor) and related API.
|
|
4
|
+
|
|
5
|
+
To function properly, a wallet must be able to perform a number of house keeping tasks:
|
|
6
|
+
|
|
7
|
+
1. Ensure transactions are sent to the network without slowing application flow or when created while offline.
|
|
8
|
+
1. Obtain and merge proofs when transactions are mined.
|
|
9
|
+
1. Detect and propagate transactions that fail due to double-spend, reorgs, or other reasons.
|
|
10
|
+
|
|
11
|
+
These tasks are the responsibility of the [Monitor](#class-monitor) class.
|
|
12
|
+
|
|
13
|
+
[Return To Top](./README.md)
|
|
14
|
+
|
|
15
|
+
<!--#region ts2md-api-merged-here-->
|
|
16
|
+
### API
|
|
17
|
+
|
|
18
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
19
|
+
|
|
20
|
+
#### Interfaces
|
|
21
|
+
|
|
22
|
+
| |
|
|
23
|
+
| --- |
|
|
24
|
+
| [DeactivedHeader](#interface-deactivedheader) |
|
|
25
|
+
| [MonitorDaemonSetup](#interface-monitordaemonsetup) |
|
|
26
|
+
| [MonitorOptions](#interface-monitoroptions) |
|
|
27
|
+
| [TaskPurgeParams](#interface-taskpurgeparams) |
|
|
28
|
+
|
|
29
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
##### Interface: DeactivedHeader
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
export interface DeactivedHeader {
|
|
37
|
+
whenMsecs: number;
|
|
38
|
+
tries: number;
|
|
39
|
+
header: BlockHeader;
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
44
|
+
|
|
45
|
+
###### Property header
|
|
46
|
+
|
|
47
|
+
The deactivated block header.
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
header: BlockHeader
|
|
51
|
+
```
|
|
52
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
53
|
+
|
|
54
|
+
###### Property tries
|
|
55
|
+
|
|
56
|
+
Number of attempts made to process the header.
|
|
57
|
+
Supports returning deactivation notification to the queue if proof data is not yet available.
|
|
58
|
+
|
|
59
|
+
```ts
|
|
60
|
+
tries: number
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
###### Property whenMsecs
|
|
64
|
+
|
|
65
|
+
To control aging of notification before pursuing updated proof data.
|
|
66
|
+
|
|
67
|
+
```ts
|
|
68
|
+
whenMsecs: number
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
##### Interface: MonitorDaemonSetup
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
export interface MonitorDaemonSetup {
|
|
78
|
+
chain?: Chain;
|
|
79
|
+
sqliteFilename?: string;
|
|
80
|
+
mySQLConnection?: string;
|
|
81
|
+
knexConfig?: Knex.Config;
|
|
82
|
+
knex?: Knex<any, any[]>;
|
|
83
|
+
storageKnexOptions?: StorageKnexOptions;
|
|
84
|
+
storageProvider?: StorageProvider;
|
|
85
|
+
storageManager?: WalletStorageManager;
|
|
86
|
+
servicesOptions?: WalletServicesOptions;
|
|
87
|
+
services?: Services;
|
|
88
|
+
monitor?: Monitor;
|
|
89
|
+
chaintracks?: Chaintracks;
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [Monitor](./monitor.md#class-monitor), [Services](./services.md#class-services), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [WalletServicesOptions](./client.md#interface-walletservicesoptions), [WalletStorageManager](./storage.md#class-walletstoragemanager)
|
|
94
|
+
|
|
95
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
##### Interface: MonitorOptions
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
export interface MonitorOptions {
|
|
102
|
+
chain: Chain;
|
|
103
|
+
services: Services;
|
|
104
|
+
storage: MonitorStorage;
|
|
105
|
+
chaintracks: ChaintracksClientApi;
|
|
106
|
+
chaintracksWithEvents?: Chaintracks;
|
|
107
|
+
msecsWaitPerMerkleProofServiceReq: number;
|
|
108
|
+
taskRunWaitMsecs: number;
|
|
109
|
+
abandonedMsecs: number;
|
|
110
|
+
unprovenAttemptsLimitTest: number;
|
|
111
|
+
unprovenAttemptsLimitMain: number;
|
|
112
|
+
onTransactionBroadcasted?: (broadcastResult: ReviewActionResult) => Promise<void>;
|
|
113
|
+
onTransactionProven?: (txStatus: ProvenTransactionStatus) => Promise<void>;
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services)
|
|
118
|
+
|
|
119
|
+
###### Property msecsWaitPerMerkleProofServiceReq
|
|
120
|
+
|
|
121
|
+
How many msecs to wait after each getMerkleProof service request.
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
msecsWaitPerMerkleProofServiceReq: number
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
###### Property onTransactionBroadcasted
|
|
128
|
+
|
|
129
|
+
These are hooks for a wallet-toolbox client to get transaction updates.
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
onTransactionBroadcasted?: (broadcastResult: ReviewActionResult) => Promise<void>
|
|
133
|
+
```
|
|
134
|
+
See also: [ReviewActionResult](./client.md#interface-reviewactionresult)
|
|
135
|
+
|
|
136
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
##### Interface: TaskPurgeParams
|
|
140
|
+
|
|
141
|
+
The database stores a variety of data that may be considered transient.
|
|
142
|
+
|
|
143
|
+
At one extreme, the data that must be preserved:
|
|
144
|
+
- unspent outputs (UTXOs)
|
|
145
|
+
- in-use metadata (labels, baskets, tags...)
|
|
146
|
+
|
|
147
|
+
At the other extreme, everything can be preserved to fully log all transaction creation and processing actions.
|
|
148
|
+
|
|
149
|
+
The following purge actions are available to support sustained operation:
|
|
150
|
+
- Failed transactions, delete all associated data including:
|
|
151
|
+
+ Delete tag and label mapping records
|
|
152
|
+
+ Delete output records
|
|
153
|
+
+ Delete transaction records
|
|
154
|
+
+ Delete mapi_responses records
|
|
155
|
+
+ Delete proven_tx_reqs records
|
|
156
|
+
+ Delete commissions records
|
|
157
|
+
+ Update output records marked spentBy failed transactions
|
|
158
|
+
- Completed transactions, delete transient data including:
|
|
159
|
+
+ transactions table set truncatedExternalInputs = null
|
|
160
|
+
+ transactions table set beef = null
|
|
161
|
+
+ transactions table set rawTx = null
|
|
162
|
+
+ Delete mapi_responses records
|
|
163
|
+
+ proven_tx_reqs table delete records
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
export interface TaskPurgeParams extends PurgeParams {
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
See also: [PurgeParams](./client.md#interface-purgeparams)
|
|
171
|
+
|
|
172
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
#### Classes
|
|
176
|
+
|
|
177
|
+
| | |
|
|
178
|
+
| --- | --- |
|
|
179
|
+
| [Monitor](#class-monitor) | [TaskPurge](#class-taskpurge) |
|
|
180
|
+
| [MonitorDaemon](#class-monitordaemon) | [TaskReorg](#class-taskreorg) |
|
|
181
|
+
| [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReviewStatus](#class-taskreviewstatus) |
|
|
182
|
+
| [TaskCheckNoSends](#class-taskchecknosends) | [TaskSendWaiting](#class-tasksendwaiting) |
|
|
183
|
+
| [TaskClock](#class-taskclock) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
|
|
184
|
+
| [TaskFailAbandoned](#class-taskfailabandoned) | [TaskUnFail](#class-taskunfail) |
|
|
185
|
+
| [TaskMonitorCallHistory](#class-taskmonitorcallhistory) | [WalletMonitorTask](#class-walletmonitortask) |
|
|
186
|
+
| [TaskNewHeader](#class-tasknewheader) | |
|
|
187
|
+
|
|
188
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
##### Class: Monitor
|
|
193
|
+
|
|
194
|
+
Background task to make sure transactions are processed, transaction proofs are received and propagated,
|
|
195
|
+
and potentially that reorgs update proofs that were already received.
|
|
196
|
+
|
|
197
|
+
```ts
|
|
198
|
+
export class Monitor {
|
|
199
|
+
static createDefaultWalletMonitorOptions(chain: Chain, storage: MonitorStorage, services?: Services, chaintracks?: Chaintracks): MonitorOptions
|
|
200
|
+
options: MonitorOptions;
|
|
201
|
+
services: Services;
|
|
202
|
+
chain: Chain;
|
|
203
|
+
storage: MonitorStorage;
|
|
204
|
+
chaintracks: ChaintracksClientApi;
|
|
205
|
+
chaintracksWithEvents?: Chaintracks;
|
|
206
|
+
reorgSubscriptionPromise?: Promise<string>;
|
|
207
|
+
headersSubscriptionPromise?: Promise<string>;
|
|
208
|
+
onTransactionBroadcasted?: (broadcastResult: ReviewActionResult) => Promise<void>;
|
|
209
|
+
onTransactionProven?: (txStatus: ProvenTransactionStatus) => Promise<void>;
|
|
210
|
+
constructor(options: MonitorOptions)
|
|
211
|
+
async destroy(): Promise<void>
|
|
212
|
+
static readonly oneSecond = 1000;
|
|
213
|
+
static readonly oneMinute = 60 * Monitor.oneSecond;
|
|
214
|
+
static readonly oneHour = 60 * Monitor.oneMinute;
|
|
215
|
+
static readonly oneDay = 24 * Monitor.oneHour;
|
|
216
|
+
static readonly oneWeek = 7 * Monitor.oneDay;
|
|
217
|
+
_tasks: WalletMonitorTask[] = [];
|
|
218
|
+
_otherTasks: WalletMonitorTask[] = [];
|
|
219
|
+
_tasksRunning = false;
|
|
220
|
+
defaultPurgeParams: TaskPurgeParams = {
|
|
221
|
+
purgeSpent: false,
|
|
222
|
+
purgeCompleted: false,
|
|
223
|
+
purgeFailed: true,
|
|
224
|
+
purgeSpentAge: 2 * Monitor.oneWeek,
|
|
225
|
+
purgeCompletedAge: 2 * Monitor.oneWeek,
|
|
226
|
+
purgeFailedAge: 5 * Monitor.oneDay
|
|
227
|
+
};
|
|
228
|
+
addAllTasksToOther(): void
|
|
229
|
+
addDefaultTasks(): void
|
|
230
|
+
addMultiUserTasks(): void
|
|
231
|
+
addTask(task: WalletMonitorTask): void
|
|
232
|
+
removeTask(name: string): void
|
|
233
|
+
async runTask(name: string): Promise<string>
|
|
234
|
+
async runOnce(): Promise<void>
|
|
235
|
+
_runAsyncSetup: boolean = true;
|
|
236
|
+
_tasksRunningPromise?: PromiseLike<void>;
|
|
237
|
+
resolveCompletion: ((value: void | PromiseLike<void>) => void) | undefined = undefined;
|
|
238
|
+
async startTasks(): Promise<void>
|
|
239
|
+
async logEvent(event: string, details?: string): Promise<void>
|
|
240
|
+
stopTasks(): void
|
|
241
|
+
lastNewHeader: BlockHeader | undefined;
|
|
242
|
+
lastNewHeaderWhen: Date | undefined;
|
|
243
|
+
processNewBlockHeader(header: BlockHeader): void
|
|
244
|
+
callOnBroadcastedTransaction(broadcastResult: ReviewActionResult): void
|
|
245
|
+
callOnProvenTransaction(txStatus: ProvenTransactionStatus): void
|
|
246
|
+
deactivatedHeaders: DeactivedHeader[] = [];
|
|
247
|
+
processReorg(depth: number, oldTip: BlockHeader, newTip: BlockHeader, deactivatedHeaders?: BlockHeader[]): void
|
|
248
|
+
processHeader(header: BlockHeader): void
|
|
249
|
+
}
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
253
|
+
|
|
254
|
+
###### Property _otherTasks
|
|
255
|
+
|
|
256
|
+
_otherTasks can be run by runTask but not by scheduler.
|
|
257
|
+
|
|
258
|
+
```ts
|
|
259
|
+
_otherTasks: WalletMonitorTask[] = []
|
|
260
|
+
```
|
|
261
|
+
See also: [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
262
|
+
|
|
263
|
+
###### Property _tasks
|
|
264
|
+
|
|
265
|
+
_tasks are typically run by the scheduler but may also be run by runTask.
|
|
266
|
+
|
|
267
|
+
```ts
|
|
268
|
+
_tasks: WalletMonitorTask[] = []
|
|
269
|
+
```
|
|
270
|
+
See also: [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
271
|
+
|
|
272
|
+
###### Method addDefaultTasks
|
|
273
|
+
|
|
274
|
+
Default tasks with settings appropriate for a single user storage
|
|
275
|
+
possibly with sync'ing enabled
|
|
276
|
+
|
|
277
|
+
```ts
|
|
278
|
+
addDefaultTasks(): void
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
###### Method addMultiUserTasks
|
|
282
|
+
|
|
283
|
+
Tasks appropriate for multi-user storage
|
|
284
|
+
without sync'ing enabled.
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
addMultiUserTasks(): void
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
###### Method callOnBroadcastedTransaction
|
|
291
|
+
|
|
292
|
+
This is a function run from a TaskSendWaiting Monitor task.
|
|
293
|
+
|
|
294
|
+
This allows the user of wallet-toolbox to 'subscribe' for transaction broadcast updates.
|
|
295
|
+
|
|
296
|
+
```ts
|
|
297
|
+
callOnBroadcastedTransaction(broadcastResult: ReviewActionResult): void
|
|
298
|
+
```
|
|
299
|
+
See also: [ReviewActionResult](./client.md#interface-reviewactionresult)
|
|
300
|
+
|
|
301
|
+
###### Method callOnProvenTransaction
|
|
302
|
+
|
|
303
|
+
This is a function run from a TaskCheckForProofs Monitor task.
|
|
304
|
+
|
|
305
|
+
This allows the user of wallet-toolbox to 'subscribe' for transaction updates.
|
|
306
|
+
|
|
307
|
+
```ts
|
|
308
|
+
callOnProvenTransaction(txStatus: ProvenTransactionStatus): void
|
|
309
|
+
```
|
|
310
|
+
See also: [ProvenTransactionStatus](./client.md#interface-proventransactionstatus)
|
|
311
|
+
|
|
312
|
+
###### Method processHeader
|
|
313
|
+
|
|
314
|
+
Handler for new header events from Chaintracks.
|
|
315
|
+
|
|
316
|
+
To minimize reorg processing, new headers are aged before processing via TaskNewHeader.
|
|
317
|
+
Therefore this handler is intentionally a no-op.
|
|
318
|
+
|
|
319
|
+
```ts
|
|
320
|
+
processHeader(header: BlockHeader): void
|
|
321
|
+
```
|
|
322
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
323
|
+
|
|
324
|
+
###### Method processNewBlockHeader
|
|
325
|
+
|
|
326
|
+
Process new chain header event received from Chaintracks
|
|
327
|
+
|
|
328
|
+
Kicks processing 'unconfirmed' and 'unmined' request processing.
|
|
329
|
+
|
|
330
|
+
```ts
|
|
331
|
+
processNewBlockHeader(header: BlockHeader): void
|
|
332
|
+
```
|
|
333
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
334
|
+
|
|
335
|
+
###### Method processReorg
|
|
336
|
+
|
|
337
|
+
Process reorg event received from Chaintracks
|
|
338
|
+
|
|
339
|
+
Reorgs can move recent transactions to new blocks at new index positions.
|
|
340
|
+
Affected transaction proofs become invalid and must be updated.
|
|
341
|
+
|
|
342
|
+
It is possible for a transaction to become invalid.
|
|
343
|
+
|
|
344
|
+
Coinbase transactions always become invalid.
|
|
345
|
+
|
|
346
|
+
```ts
|
|
347
|
+
processReorg(depth: number, oldTip: BlockHeader, newTip: BlockHeader, deactivatedHeaders?: BlockHeader[]): void
|
|
348
|
+
```
|
|
349
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
350
|
+
|
|
351
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
##### Class: MonitorDaemon
|
|
355
|
+
|
|
356
|
+
```ts
|
|
357
|
+
export class MonitorDaemon {
|
|
358
|
+
setup?: MonitorDaemonSetup;
|
|
359
|
+
doneListening?: Promise<void>;
|
|
360
|
+
doneTasks?: Promise<void>;
|
|
361
|
+
stopDaemon: boolean = false;
|
|
362
|
+
constructor(public args: MonitorDaemonSetup, public noRunTasks?: boolean)
|
|
363
|
+
async createSetup(): Promise<void>
|
|
364
|
+
async start(): Promise<void>
|
|
365
|
+
async stop(): Promise<void>
|
|
366
|
+
async destroy(): Promise<void>
|
|
367
|
+
async runDaemon(): Promise<void>
|
|
368
|
+
}
|
|
369
|
+
```
|
|
370
|
+
|
|
371
|
+
See also: [MonitorDaemonSetup](./monitor.md#interface-monitordaemonsetup)
|
|
372
|
+
|
|
373
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
374
|
+
|
|
375
|
+
---
|
|
376
|
+
##### Class: TaskCheckForProofs
|
|
377
|
+
|
|
378
|
+
`TaskCheckForProofs` is a WalletMonitor task that retreives merkle proofs for
|
|
379
|
+
transactions.
|
|
380
|
+
|
|
381
|
+
It is normally triggered by the Chaintracks new block header event.
|
|
382
|
+
|
|
383
|
+
When a new block is found, cwi-external-services are used to obtain proofs for
|
|
384
|
+
any transactions that are currently in the 'unmined' or 'unknown' state.
|
|
385
|
+
|
|
386
|
+
If a proof is obtained and validated, a new ProvenTx record is created and
|
|
387
|
+
the original ProvenTxReq status is advanced to 'notifying'.
|
|
388
|
+
|
|
389
|
+
```ts
|
|
390
|
+
export class TaskCheckForProofs extends WalletMonitorTask {
|
|
391
|
+
static taskName = "CheckForProofs";
|
|
392
|
+
static checkNow = false;
|
|
393
|
+
constructor(monitor: Monitor, public triggerMsecs = 0)
|
|
394
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
395
|
+
run: boolean;
|
|
396
|
+
}
|
|
397
|
+
async runTask(): Promise<string>
|
|
398
|
+
}
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
402
|
+
|
|
403
|
+
###### Property checkNow
|
|
404
|
+
|
|
405
|
+
An external service such as the chaintracks new block header
|
|
406
|
+
listener can set this true to cause
|
|
407
|
+
|
|
408
|
+
```ts
|
|
409
|
+
static checkNow = false
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
###### Method trigger
|
|
413
|
+
|
|
414
|
+
Normally triggered by checkNow getting set by new block header found event from chaintracks
|
|
415
|
+
|
|
416
|
+
```ts
|
|
417
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
418
|
+
run: boolean;
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
##### Class: TaskCheckNoSends
|
|
426
|
+
|
|
427
|
+
`TaskCheckNoSends` is a WalletMonitor task that retreives merkle proofs for
|
|
428
|
+
'nosend' transactions that MAY have been shared externally.
|
|
429
|
+
|
|
430
|
+
Unlike intentionally processed transactions, 'nosend' transactions are fully valid
|
|
431
|
+
transactions which have not been processed by the wallet.
|
|
432
|
+
|
|
433
|
+
By default, this task runs once a day to check if any 'nosend' transaction has
|
|
434
|
+
managed to get mined by some external process.
|
|
435
|
+
|
|
436
|
+
If a proof is obtained and validated, a new ProvenTx record is created and
|
|
437
|
+
the original ProvenTxReq status is advanced to 'notifying'.
|
|
438
|
+
|
|
439
|
+
```ts
|
|
440
|
+
export class TaskCheckNoSends extends WalletMonitorTask {
|
|
441
|
+
static taskName = "CheckNoSends";
|
|
442
|
+
static checkNow = false;
|
|
443
|
+
constructor(monitor: Monitor, public triggerMsecs = Monitor.oneDay * 1)
|
|
444
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
445
|
+
run: boolean;
|
|
446
|
+
}
|
|
447
|
+
async runTask(): Promise<string>
|
|
448
|
+
}
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
452
|
+
|
|
453
|
+
###### Property checkNow
|
|
454
|
+
|
|
455
|
+
An external service such as the chaintracks new block header
|
|
456
|
+
listener can set this true to cause
|
|
457
|
+
|
|
458
|
+
```ts
|
|
459
|
+
static checkNow = false
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
###### Method trigger
|
|
463
|
+
|
|
464
|
+
Normally triggered by checkNow getting set by new block header found event from chaintracks
|
|
465
|
+
|
|
466
|
+
```ts
|
|
467
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
468
|
+
run: boolean;
|
|
469
|
+
}
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
473
|
+
|
|
474
|
+
---
|
|
475
|
+
##### Class: TaskClock
|
|
476
|
+
|
|
477
|
+
```ts
|
|
478
|
+
export class TaskClock extends WalletMonitorTask {
|
|
479
|
+
static taskName = "Clock";
|
|
480
|
+
nextMinute: number;
|
|
481
|
+
constructor(monitor: Monitor, public triggerMsecs = 1 * Monitor.oneSecond)
|
|
482
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
483
|
+
run: boolean;
|
|
484
|
+
}
|
|
485
|
+
async runTask(): Promise<string>
|
|
486
|
+
getNextMinute(): number
|
|
487
|
+
}
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
491
|
+
|
|
492
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
493
|
+
|
|
494
|
+
---
|
|
495
|
+
##### Class: TaskFailAbandoned
|
|
496
|
+
|
|
497
|
+
Handles transactions which do not have terminal status and have not been
|
|
498
|
+
updated for an extended time period.
|
|
499
|
+
|
|
500
|
+
Calls `updateTransactionStatus` to set `status` to `failed`.
|
|
501
|
+
This returns inputs to spendable status and verifies that any
|
|
502
|
+
outputs are not spendable.
|
|
503
|
+
|
|
504
|
+
```ts
|
|
505
|
+
export class TaskFailAbandoned extends WalletMonitorTask {
|
|
506
|
+
static taskName = "FailAbandoned";
|
|
507
|
+
constructor(monitor: Monitor, public triggerMsecs = 1000 * 60 * 5)
|
|
508
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
509
|
+
run: boolean;
|
|
510
|
+
}
|
|
511
|
+
async runTask(): Promise<string>
|
|
512
|
+
}
|
|
513
|
+
```
|
|
514
|
+
|
|
515
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
516
|
+
|
|
517
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
##### Class: TaskMonitorCallHistory
|
|
521
|
+
|
|
522
|
+
```ts
|
|
523
|
+
export class TaskMonitorCallHistory extends WalletMonitorTask {
|
|
524
|
+
static taskName = "MonitorCallHistory";
|
|
525
|
+
constructor(monitor: Monitor, public triggerMsecs = Monitor.oneMinute * 12)
|
|
526
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
527
|
+
run: boolean;
|
|
528
|
+
}
|
|
529
|
+
async runTask(): Promise<string>
|
|
530
|
+
}
|
|
531
|
+
```
|
|
532
|
+
|
|
533
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
534
|
+
|
|
535
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
##### Class: TaskNewHeader
|
|
539
|
+
|
|
540
|
+
This task polls for new block headers performing two essential functions:
|
|
541
|
+
1. The arrival of a new block is the right time to check for proofs for recently broadcast transactions.
|
|
542
|
+
2. The height of the block is used to limit which proofs are accepted with the aim of avoiding re-orged proofs.
|
|
543
|
+
|
|
544
|
+
The most common new block orphan is one which is almost immediately orphaned.
|
|
545
|
+
Waiting a minute before pursuing proof requests avoids almost all the re-org work that could be done.
|
|
546
|
+
Thus this task queues new headers for one cycle.
|
|
547
|
+
If a new header arrives during that cycle, it replaces the queued header and delays again.
|
|
548
|
+
Only when there is an elapsed cycle without a new header does proof solicitation get triggered,
|
|
549
|
+
with that header height as the limit for which proofs are accepted.
|
|
550
|
+
|
|
551
|
+
```ts
|
|
552
|
+
export class TaskNewHeader extends WalletMonitorTask {
|
|
553
|
+
static taskName = "NewHeader";
|
|
554
|
+
header?: BlockHeader;
|
|
555
|
+
queuedHeader?: BlockHeader;
|
|
556
|
+
queuedHeaderWhen?: Date;
|
|
557
|
+
constructor(monitor: Monitor, public triggerMsecs = 1 * Monitor.oneMinute)
|
|
558
|
+
async getHeader(): Promise<BlockHeader>
|
|
559
|
+
override async asyncSetup(): Promise<void>
|
|
560
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
561
|
+
run: boolean;
|
|
562
|
+
}
|
|
563
|
+
async runTask(): Promise<string>
|
|
564
|
+
}
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
See also: [BlockHeader](./client.md#interface-blockheader), [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
568
|
+
|
|
569
|
+
###### Property header
|
|
570
|
+
|
|
571
|
+
This is always the most recent chain tip header returned from the chaintracker.
|
|
572
|
+
|
|
573
|
+
```ts
|
|
574
|
+
header?: BlockHeader
|
|
575
|
+
```
|
|
576
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
577
|
+
|
|
578
|
+
###### Property queuedHeader
|
|
579
|
+
|
|
580
|
+
Tracks the value of `header` except that it is set to undefined
|
|
581
|
+
when a cycle without a new header occurs and `processNewBlockHeader` is called.
|
|
582
|
+
|
|
583
|
+
```ts
|
|
584
|
+
queuedHeader?: BlockHeader
|
|
585
|
+
```
|
|
586
|
+
See also: [BlockHeader](./client.md#interface-blockheader)
|
|
587
|
+
|
|
588
|
+
###### Method asyncSetup
|
|
589
|
+
|
|
590
|
+
TODO: This is a temporary incomplete solution for which a full chaintracker
|
|
591
|
+
with new header and reorg event notification is required.
|
|
592
|
+
|
|
593
|
+
New header events drive retrieving merklePaths for newly mined transactions.
|
|
594
|
+
This implementation performs this function.
|
|
595
|
+
|
|
596
|
+
Reorg events are needed to know when previously retrieved mekrlePaths need to be
|
|
597
|
+
updated in the proven_txs table (and ideally notifications delivered to users).
|
|
598
|
+
Note that in-general, a reorg only shifts where in the block a transaction is mined,
|
|
599
|
+
and sometimes which block. In the case of coinbase transactions, a transaction may
|
|
600
|
+
also fail after a reorg.
|
|
601
|
+
|
|
602
|
+
```ts
|
|
603
|
+
override async asyncSetup(): Promise<void>
|
|
604
|
+
```
|
|
605
|
+
|
|
606
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
607
|
+
|
|
608
|
+
---
|
|
609
|
+
##### Class: TaskPurge
|
|
610
|
+
|
|
611
|
+
```ts
|
|
612
|
+
export class TaskPurge extends WalletMonitorTask {
|
|
613
|
+
static taskName = "Purge";
|
|
614
|
+
static checkNow = false;
|
|
615
|
+
constructor(monitor: Monitor, public params: TaskPurgeParams, public triggerMsecs = 0)
|
|
616
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
617
|
+
run: boolean;
|
|
618
|
+
}
|
|
619
|
+
async runTask(): Promise<string>
|
|
620
|
+
}
|
|
621
|
+
```
|
|
622
|
+
|
|
623
|
+
See also: [Monitor](./monitor.md#class-monitor), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
624
|
+
|
|
625
|
+
###### Property checkNow
|
|
626
|
+
|
|
627
|
+
Set to true to trigger running this task
|
|
628
|
+
|
|
629
|
+
```ts
|
|
630
|
+
static checkNow = false
|
|
631
|
+
```
|
|
632
|
+
|
|
633
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
634
|
+
|
|
635
|
+
---
|
|
636
|
+
##### Class: TaskReorg
|
|
637
|
+
|
|
638
|
+
Check the `monitor.deactivatedHeaders` for any headers that have been deactivated.
|
|
639
|
+
|
|
640
|
+
When headers are found, review matching ProvenTx records and update proof data as appropriate.
|
|
641
|
+
|
|
642
|
+
New deactivated headers are pushed onto the `deactivatedHeaders` array.
|
|
643
|
+
They must be shifted out as they are processed.
|
|
644
|
+
|
|
645
|
+
The current implementation ages deactivation notifications by 10 minutes with each retry.
|
|
646
|
+
If a successful proof update confirms original proof data after 3 retries, the original is retained.
|
|
647
|
+
|
|
648
|
+
In normal operation there should rarely be any work for this task to perform.
|
|
649
|
+
The most common result is that there are no matching proven_txs records because
|
|
650
|
+
generating new proven_txs records intentionally lags new block generation to
|
|
651
|
+
minimize this disruption.
|
|
652
|
+
|
|
653
|
+
It is very disruptive to update a proven_txs record because:
|
|
654
|
+
- Sync'ed storage is impacted.
|
|
655
|
+
- Generated beefs are impacted.
|
|
656
|
+
- Updated proof data may be unavailable at the time a reorg is first reported.
|
|
657
|
+
|
|
658
|
+
Proper reorg handling also requires repairing invalid beefs for new transactions when
|
|
659
|
+
createAction fails to verify a generated beef against the chaintracker.
|
|
660
|
+
|
|
661
|
+
```ts
|
|
662
|
+
export class TaskReorg extends WalletMonitorTask {
|
|
663
|
+
static taskName = "Reorg";
|
|
664
|
+
process: DeactivedHeader[] = [];
|
|
665
|
+
constructor(monitor: Monitor, public agedMsecs = Monitor.oneMinute * 10, public maxRetries = 3)
|
|
666
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
667
|
+
run: boolean;
|
|
668
|
+
}
|
|
669
|
+
async runTask(): Promise<string>
|
|
670
|
+
}
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
See also: [DeactivedHeader](./monitor.md#interface-deactivedheader), [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
674
|
+
|
|
675
|
+
###### Method trigger
|
|
676
|
+
|
|
677
|
+
Shift aged deactivated headers onto `process` array.
|
|
678
|
+
|
|
679
|
+
```ts
|
|
680
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
681
|
+
run: boolean;
|
|
682
|
+
}
|
|
683
|
+
```
|
|
684
|
+
|
|
685
|
+
Returns
|
|
686
|
+
|
|
687
|
+
`run` true iff there are aged deactivated headers to process.
|
|
688
|
+
|
|
689
|
+
Argument Details
|
|
690
|
+
|
|
691
|
+
+ **nowMsecsSinceEpoch**
|
|
692
|
+
+ current time in milliseconds since epoch.
|
|
693
|
+
|
|
694
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
695
|
+
|
|
696
|
+
---
|
|
697
|
+
##### Class: TaskReviewStatus
|
|
698
|
+
|
|
699
|
+
Notify Transaction records of changes in ProvenTxReq records they may have missed.
|
|
700
|
+
|
|
701
|
+
The `notified` property flags reqs that do not need to be checked.
|
|
702
|
+
|
|
703
|
+
Looks for aged Transactions with provenTxId with status != 'completed', sets status to 'completed'.
|
|
704
|
+
|
|
705
|
+
Looks for reqs with 'invalid' status that have corresonding transactions with status other than 'failed'.
|
|
706
|
+
|
|
707
|
+
```ts
|
|
708
|
+
export class TaskReviewStatus extends WalletMonitorTask {
|
|
709
|
+
static taskName = "ReviewStatus";
|
|
710
|
+
static checkNow = false;
|
|
711
|
+
constructor(monitor: Monitor, public triggerMsecs = 1000 * 60 * 15, public agedMsecs = 1000 * 60 * 5)
|
|
712
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
713
|
+
run: boolean;
|
|
714
|
+
}
|
|
715
|
+
async runTask(): Promise<string>
|
|
716
|
+
}
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
720
|
+
|
|
721
|
+
###### Property checkNow
|
|
722
|
+
|
|
723
|
+
Set to true to trigger running this task
|
|
724
|
+
|
|
725
|
+
```ts
|
|
726
|
+
static checkNow = false
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
730
|
+
|
|
731
|
+
---
|
|
732
|
+
##### Class: TaskSendWaiting
|
|
733
|
+
|
|
734
|
+
```ts
|
|
735
|
+
export class TaskSendWaiting extends WalletMonitorTask {
|
|
736
|
+
static taskName = "SendWaiting";
|
|
737
|
+
lastSendingRunMsecsSinceEpoch: number | undefined;
|
|
738
|
+
includeSending: boolean = true;
|
|
739
|
+
constructor(monitor: Monitor, public triggerMsecs = Monitor.oneSecond * 8, public agedMsecs = Monitor.oneSecond * 7, public sendingMsecs = Monitor.oneMinute * 5)
|
|
740
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
741
|
+
run: boolean;
|
|
742
|
+
}
|
|
743
|
+
async runTask(): Promise<string>
|
|
744
|
+
async processUnsent(reqApis: TableProvenTxReq[], indent = 0): Promise<string>
|
|
745
|
+
}
|
|
746
|
+
```
|
|
747
|
+
|
|
748
|
+
See also: [Monitor](./monitor.md#class-monitor), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
749
|
+
|
|
750
|
+
###### Method processUnsent
|
|
751
|
+
|
|
752
|
+
Process an array of 'unsent' status table.ProvenTxReq
|
|
753
|
+
|
|
754
|
+
Send rawTx to transaction processor(s), requesting proof callbacks when possible.
|
|
755
|
+
|
|
756
|
+
Set status 'invalid' if req is invalid.
|
|
757
|
+
|
|
758
|
+
Set status to 'callback' on successful network submission with callback service.
|
|
759
|
+
|
|
760
|
+
Set status to 'unmined' on successful network submission without callback service.
|
|
761
|
+
|
|
762
|
+
Add mapi responses to database table if received.
|
|
763
|
+
|
|
764
|
+
Increments attempts if sending was attempted.
|
|
765
|
+
|
|
766
|
+
```ts
|
|
767
|
+
async processUnsent(reqApis: TableProvenTxReq[], indent = 0): Promise<string>
|
|
768
|
+
```
|
|
769
|
+
See also: [TableProvenTxReq](./storage.md#interface-tableproventxreq)
|
|
770
|
+
|
|
771
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
772
|
+
|
|
773
|
+
---
|
|
774
|
+
##### Class: TaskSyncWhenIdle
|
|
775
|
+
|
|
776
|
+
```ts
|
|
777
|
+
export class TaskSyncWhenIdle extends WalletMonitorTask {
|
|
778
|
+
static taskName = "SyncWhenIdle";
|
|
779
|
+
constructor(monitor: Monitor, public triggerMsecs = 1000 * 60 * 1)
|
|
780
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
781
|
+
run: boolean;
|
|
782
|
+
}
|
|
783
|
+
async runTask(): Promise<string>
|
|
784
|
+
}
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
788
|
+
|
|
789
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
790
|
+
|
|
791
|
+
---
|
|
792
|
+
##### Class: TaskUnFail
|
|
793
|
+
|
|
794
|
+
Setting provenTxReq status to 'unfail' when 'invalid' will attempt to find a merklePath, and if successful:
|
|
795
|
+
|
|
796
|
+
1. set the req status to 'unmined'
|
|
797
|
+
2. set the referenced txs to 'unproven'
|
|
798
|
+
3. determine if any inputs match user's existing outputs and if so update spentBy and spendable of those outputs.
|
|
799
|
+
4. set the txs outputs to spendable
|
|
800
|
+
|
|
801
|
+
If it fails (to find a merklePath), returns the req status to 'invalid'.
|
|
802
|
+
|
|
803
|
+
```ts
|
|
804
|
+
export class TaskUnFail extends WalletMonitorTask {
|
|
805
|
+
static taskName = "UnFail";
|
|
806
|
+
static checkNow = false;
|
|
807
|
+
constructor(monitor: Monitor, public triggerMsecs = Monitor.oneMinute * 10)
|
|
808
|
+
trigger(nowMsecsSinceEpoch: number): {
|
|
809
|
+
run: boolean;
|
|
810
|
+
}
|
|
811
|
+
async runTask(): Promise<string>
|
|
812
|
+
async unfail(reqs: TableProvenTxReq[], indent = 0): Promise<{
|
|
813
|
+
log: string;
|
|
814
|
+
}>
|
|
815
|
+
async unfailReq(req: EntityProvenTxReq, indent: number): Promise<string>
|
|
816
|
+
}
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
See also: [EntityProvenTxReq](./storage.md#class-entityproventxreq), [Monitor](./monitor.md#class-monitor), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
820
|
+
|
|
821
|
+
###### Property checkNow
|
|
822
|
+
|
|
823
|
+
Set to true to trigger running this task
|
|
824
|
+
|
|
825
|
+
```ts
|
|
826
|
+
static checkNow = false
|
|
827
|
+
```
|
|
828
|
+
|
|
829
|
+
###### Method unfailReq
|
|
830
|
+
|
|
831
|
+
2. set the referenced txs to 'unproven'
|
|
832
|
+
3. determine if any inputs match user's existing outputs and if so update spentBy and spendable of those outputs.
|
|
833
|
+
4. set the txs outputs to spendable
|
|
834
|
+
|
|
835
|
+
```ts
|
|
836
|
+
async unfailReq(req: EntityProvenTxReq, indent: number): Promise<string>
|
|
837
|
+
```
|
|
838
|
+
See also: [EntityProvenTxReq](./storage.md#class-entityproventxreq)
|
|
839
|
+
|
|
840
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
841
|
+
|
|
842
|
+
---
|
|
843
|
+
##### Class: WalletMonitorTask
|
|
844
|
+
|
|
845
|
+
A monitor task performs some periodic or state triggered maintenance function
|
|
846
|
+
on the data managed by a wallet (Bitcoin UTXO manager, aka wallet)
|
|
847
|
+
|
|
848
|
+
The monitor maintains a collection of tasks.
|
|
849
|
+
|
|
850
|
+
It runs each task's non-asynchronous trigger to determine if the runTask method needs to run.
|
|
851
|
+
|
|
852
|
+
Tasks that need to be run are run consecutively by awaiting their async runTask override method.
|
|
853
|
+
|
|
854
|
+
The monitor then waits a fixed interval before repeating...
|
|
855
|
+
|
|
856
|
+
Tasks may use the monitor_events table to persist their execution history.
|
|
857
|
+
This is done by accessing the wathman.storage object.
|
|
858
|
+
|
|
859
|
+
```ts
|
|
860
|
+
export abstract class WalletMonitorTask {
|
|
861
|
+
lastRunMsecsSinceEpoch = 0;
|
|
862
|
+
storage: MonitorStorage;
|
|
863
|
+
constructor(public monitor: Monitor, public name: string)
|
|
864
|
+
async asyncSetup(): Promise<void>
|
|
865
|
+
abstract trigger(nowMsecsSinceEpoch: number): {
|
|
866
|
+
run: boolean;
|
|
867
|
+
};
|
|
868
|
+
abstract runTask(): Promise<string>;
|
|
869
|
+
}
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
See also: [Monitor](./monitor.md#class-monitor), [MonitorStorage](./monitor.md#type-monitorstorage)
|
|
873
|
+
|
|
874
|
+
###### Property lastRunMsecsSinceEpoch
|
|
875
|
+
|
|
876
|
+
Set by monitor each time runTask completes
|
|
877
|
+
|
|
878
|
+
```ts
|
|
879
|
+
lastRunMsecsSinceEpoch = 0
|
|
880
|
+
```
|
|
881
|
+
|
|
882
|
+
###### Method asyncSetup
|
|
883
|
+
|
|
884
|
+
Override to handle async task setup configuration.
|
|
885
|
+
|
|
886
|
+
Called before first call to `trigger`
|
|
887
|
+
|
|
888
|
+
```ts
|
|
889
|
+
async asyncSetup(): Promise<void>
|
|
890
|
+
```
|
|
891
|
+
|
|
892
|
+
###### Method trigger
|
|
893
|
+
|
|
894
|
+
Return true if `runTask` needs to be called now.
|
|
895
|
+
|
|
896
|
+
```ts
|
|
897
|
+
abstract trigger(nowMsecsSinceEpoch: number): {
|
|
898
|
+
run: boolean;
|
|
899
|
+
}
|
|
900
|
+
```
|
|
901
|
+
|
|
902
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
903
|
+
|
|
904
|
+
---
|
|
905
|
+
#### Functions
|
|
906
|
+
|
|
907
|
+
##### Function: getProofs
|
|
908
|
+
|
|
909
|
+
Process an array of table.ProvenTxReq (typically with status 'unmined' or 'unknown')
|
|
910
|
+
|
|
911
|
+
If req is invalid, set status 'invalid'
|
|
912
|
+
|
|
913
|
+
Verify the requests are valid, lookup proofs or updated transaction status using the array of getProofServices,
|
|
914
|
+
|
|
915
|
+
When proofs are found, create new ProvenTxApi records and transition the requests' status to 'unconfirmed' or 'notifying',
|
|
916
|
+
depending on chaintracks succeeding on proof verification.
|
|
917
|
+
|
|
918
|
+
Increments attempts if proofs where requested.
|
|
919
|
+
|
|
920
|
+
```ts
|
|
921
|
+
export async function getProofs(task: WalletMonitorTask, reqs: TableProvenTxReq[], indent = 0, countsAsAttempt = false, ignoreStatus = false, maxAcceptableHeight: number): Promise<{
|
|
922
|
+
proven: TableProvenTxReq[];
|
|
923
|
+
invalid: TableProvenTxReq[];
|
|
924
|
+
log: string;
|
|
925
|
+
}>
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
See also: [TableProvenTxReq](./storage.md#interface-tableproventxreq), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
|
|
929
|
+
|
|
930
|
+
Returns
|
|
931
|
+
|
|
932
|
+
reqs partitioned by status
|
|
933
|
+
|
|
934
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
935
|
+
|
|
936
|
+
---
|
|
937
|
+
#### Types
|
|
938
|
+
|
|
939
|
+
##### Type: MonitorStorage
|
|
940
|
+
|
|
941
|
+
```ts
|
|
942
|
+
export type MonitorStorage = WalletStorageManager
|
|
943
|
+
```
|
|
944
|
+
|
|
945
|
+
See also: [WalletStorageManager](./storage.md#class-walletstoragemanager)
|
|
946
|
+
|
|
947
|
+
Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
|
|
948
|
+
|
|
949
|
+
---
|
|
950
|
+
#### Variables
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
<!--#endregion ts2md-api-merged-here-->
|