@bsv/wallet-toolbox-client 2.1.24 → 3.0.0-alpha.0
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/out/src/CWIStyleWalletManager.d.ts +33 -7
- package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
- package/out/src/CWIStyleWalletManager.js +281 -313
- package/out/src/CWIStyleWalletManager.js.map +1 -1
- package/out/src/SetupClient.d.ts +6 -6
- package/out/src/SetupClient.d.ts.map +1 -1
- package/out/src/SetupClient.js +5 -5
- package/out/src/SetupClient.js.map +1 -1
- package/out/src/SetupWallet.d.ts.map +1 -1
- package/out/src/SimpleWalletManager.d.ts +12 -2
- package/out/src/SimpleWalletManager.d.ts.map +1 -1
- package/out/src/SimpleWalletManager.js +46 -30
- package/out/src/SimpleWalletManager.js.map +1 -1
- package/out/src/Wallet.d.ts +1 -1
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +102 -100
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts +1 -1
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
- package/out/src/WalletAuthenticationManager.js +3 -3
- package/out/src/WalletAuthenticationManager.js.map +1 -1
- package/out/src/WalletLogger.d.ts.map +1 -1
- package/out/src/WalletLogger.js +16 -8
- package/out/src/WalletLogger.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +89 -18
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +656 -870
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/WalletSettingsManager.d.ts +2 -2
- package/out/src/WalletSettingsManager.d.ts.map +1 -1
- package/out/src/WalletSettingsManager.js.map +1 -1
- package/out/src/fundWalletP2PKH.d.ts +2 -2
- package/out/src/fundWalletP2PKH.d.ts.map +1 -1
- package/out/src/fundWalletP2PKH.js +11 -10
- package/out/src/fundWalletP2PKH.js.map +1 -1
- package/out/src/mockchain/MockChainMigrations.d.ts +3 -3
- package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -1
- package/out/src/mockchain/MockChainMigrations.js.map +1 -1
- package/out/src/mockchain/MockChainStorage.d.ts.map +1 -1
- package/out/src/mockchain/MockChainStorage.js +5 -5
- package/out/src/mockchain/MockChainStorage.js.map +1 -1
- package/out/src/mockchain/MockChainTracker.d.ts.map +1 -1
- package/out/src/mockchain/MockChainTracker.js +10 -10
- package/out/src/mockchain/MockChainTracker.js.map +1 -1
- package/out/src/mockchain/MockMiner.d.ts.map +1 -1
- package/out/src/mockchain/MockMiner.js +3 -3
- package/out/src/mockchain/MockMiner.js.map +1 -1
- package/out/src/mockchain/MockServices.d.ts +9 -0
- package/out/src/mockchain/MockServices.d.ts.map +1 -1
- package/out/src/mockchain/MockServices.js +195 -238
- package/out/src/mockchain/MockServices.js.map +1 -1
- package/out/src/mockchain/merkleTree.d.ts.map +1 -1
- package/out/src/mockchain/merkleTree.js +21 -12
- package/out/src/mockchain/merkleTree.js.map +1 -1
- package/out/src/monitor/LeasedMonitorTask.d.ts +43 -0
- package/out/src/monitor/LeasedMonitorTask.d.ts.map +1 -0
- package/out/src/monitor/LeasedMonitorTask.js +89 -0
- package/out/src/monitor/LeasedMonitorTask.js.map +1 -0
- package/out/src/monitor/Monitor.d.ts +24 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +63 -75
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/V7LeasedTask.d.ts +43 -0
- package/out/src/monitor/V7LeasedTask.d.ts.map +1 -0
- package/out/src/monitor/V7LeasedTask.js +89 -0
- package/out/src/monitor/V7LeasedTask.js.map +1 -0
- package/out/src/monitor/tasks/TaskArcSSE.d.ts +2 -2
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.js +10 -23
- package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +4 -2
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.js +83 -16
- package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.d.ts +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.js +1 -2
- package/out/src/monitor/tasks/TaskCheckNoSends.js.map +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskClock.js +0 -1
- package/out/src/monitor/tasks/TaskClock.js.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.d.ts +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.js +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.js.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.d.ts +2 -2
- package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.js +7 -5
- package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.js +2 -2
- package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +10 -10
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js +2 -2
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.js +4 -5
- package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.d.ts +1 -1
- package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.js +13 -15
- package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
- package/out/src/monitor/tasks/WalletMonitorTask.d.ts.map +1 -1
- package/out/src/monitor/tasks/WalletMonitorTask.js +3 -1
- package/out/src/monitor/tasks/WalletMonitorTask.js.map +1 -1
- package/out/src/sdk/CertOpsWallet.d.ts +3 -3
- package/out/src/sdk/CertOpsWallet.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.d.ts +3 -3
- package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.js +26 -21
- package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js +5 -5
- package/out/src/sdk/WERR_errors.js.map +1 -1
- package/out/src/sdk/WalletError.d.ts +1 -1
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +10 -3
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.js +1 -3
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +19 -19
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +59 -59
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/types.d.ts +36 -4
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +53 -4
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/services/ServiceCollection.d.ts +6 -6
- package/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.js +3 -4
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts +5 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +174 -182
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.js +7 -7
- package/out/src/services/chaintracker/BHServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js +5 -5
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts +5 -3
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +20 -10
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +228 -221
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +9 -10
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts +1 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.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 +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.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 +6 -39
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js +8 -6
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +9 -16
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +34 -22
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +31 -30
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +11 -10
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +6 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +247 -227
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js +8 -7
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js +35 -25
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +5 -5
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +13 -11
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +0 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.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 +21 -13
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +28 -24
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.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 +9 -10
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +3 -3
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/services/providers/ARC.d.ts.map +1 -1
- package/out/src/services/providers/ARC.js +7 -14
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +1 -1
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/services/providers/Bitails.d.ts.map +1 -1
- package/out/src/services/providers/Bitails.js +17 -17
- package/out/src/services/providers/Bitails.js.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
- package/out/src/services/providers/WhatsOnChain.d.ts +2 -0
- package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +109 -233
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/exchangeRates.d.ts.map +1 -1
- package/out/src/services/providers/exchangeRates.js +3 -3
- package/out/src/services/providers/exchangeRates.js.map +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
- package/out/src/services/providers/getBeefForTxid.js.map +1 -1
- package/out/src/services/providers/whatsOnChainHelpers.d.ts +68 -0
- package/out/src/services/providers/whatsOnChainHelpers.d.ts.map +1 -0
- package/out/src/services/providers/whatsOnChainHelpers.js +147 -0
- package/out/src/services/providers/whatsOnChainHelpers.js.map +1 -0
- package/out/src/signer/WalletSigner.d.ts.map +1 -1
- package/out/src/signer/WalletSigner.js.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.js +21 -13
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/completeSignedTransaction.js +20 -21
- package/out/src/signer/methods/completeSignedTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +8 -7
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js +8 -6
- package/out/src/signer/methods/internalizeAction.js.map +1 -1
- package/out/src/signer/methods/proveCertificate.js +1 -1
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +8 -10
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +16 -1
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +544 -1224
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +124 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +316 -186
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js +8 -7
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +32 -32
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
- package/out/src/storage/StorageSyncReader.js +3 -3
- package/out/src/storage/StorageSyncReader.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +3 -0
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +83 -73
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/idbHelpers.d.ts +47 -0
- package/out/src/storage/idbHelpers.d.ts.map +1 -0
- package/out/src/storage/idbHelpers.js +417 -0
- package/out/src/storage/idbHelpers.js.map +1 -0
- package/out/src/storage/methods/ListActionsSpecOp.d.ts +6 -1
- package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.js +28 -2
- package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +8 -11
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +83 -0
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +338 -63
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +251 -274
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +99 -80
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.js +15 -13
- package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
- package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -1
- package/out/src/storage/methods/getSyncChunk.js +4 -3
- package/out/src/storage/methods/getSyncChunk.js.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +213 -56
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +85 -110
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listCertificates.d.ts +1 -1
- package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/out/src/storage/methods/listCertificates.js +7 -7
- package/out/src/storage/methods/listCertificates.js.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.js +24 -27
- package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/out/src/storage/methods/offsetKey.d.ts +1 -1
- package/out/src/storage/methods/offsetKey.d.ts.map +1 -1
- package/out/src/storage/methods/offsetKey.js +3 -5
- package/out/src/storage/methods/offsetKey.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts +0 -11
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +168 -93
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/methods/purgeDataIdb.d.ts.map +1 -1
- package/out/src/storage/methods/purgeDataIdb.js +1 -1
- package/out/src/storage/methods/purgeDataIdb.js.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.js.map +1 -1
- package/out/src/storage/methods/utils.d.ts.map +1 -1
- package/out/src/storage/methods/utils.js +7 -1
- package/out/src/storage/methods/utils.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts +4 -270
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +16 -423
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +289 -0
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -0
- package/out/src/storage/remoting/StorageClientBase.js +375 -0
- package/out/src/storage/remoting/StorageClientBase.js.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts +29 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.js +91 -0
- package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -0
- package/out/src/storage/schema/StorageIdbSchema.d.ts +43 -2
- package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificate.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificate.js +5 -4
- package/out/src/storage/schema/entities/EntityCertificate.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificateField.js +5 -7
- package/out/src/storage/schema/entities/EntityCertificateField.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCommission.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCommission.js +6 -8
- package/out/src/storage/schema/entities/EntityCommission.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.js +21 -24
- package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.js +6 -6
- package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTag.js +2 -2
- package/out/src/storage/schema/entities/EntityOutputTag.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTagMap.js +4 -6
- package/out/src/storage/schema/entities/EntityOutputTagMap.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts +3 -3
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.js +22 -23
- package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts +9 -0
- package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.js +116 -68
- package/out/src/storage/schema/entities/EntityProvenTxReq.js.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js +19 -18
- package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.js +25 -26
- package/out/src/storage/schema/entities/EntityTransaction.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabel.js +2 -2
- package/out/src/storage/schema/entities/EntityTxLabel.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabelMap.js +4 -6
- package/out/src/storage/schema/entities/EntityTxLabelMap.js.map +1 -1
- package/out/src/storage/schema/entities/EntityUser.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityUser.js +3 -3
- package/out/src/storage/schema/entities/EntityUser.js.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.js +6 -6
- package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
- package/out/src/storage/schema/monitorLease.d.ts +57 -0
- package/out/src/storage/schema/monitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/monitorLease.js +101 -0
- package/out/src/storage/schema/monitorLease.js.map +1 -0
- package/out/src/storage/schema/processingFsm.d.ts +27 -0
- package/out/src/storage/schema/processingFsm.d.ts.map +1 -0
- package/out/src/storage/schema/processingFsm.js +132 -0
- package/out/src/storage/schema/processingFsm.js.map +1 -0
- package/out/src/storage/schema/tables/TableAction.d.ts +38 -0
- package/out/src/storage/schema/tables/TableAction.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableAction.js +3 -0
- package/out/src/storage/schema/tables/TableAction.js.map +1 -0
- package/out/src/storage/schema/tables/TableCertificate.d.ts +2 -1
- package/out/src/storage/schema/tables/TableCertificate.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableChainTip.d.ts +17 -0
- package/out/src/storage/schema/tables/TableChainTip.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableChainTip.js +3 -0
- package/out/src/storage/schema/tables/TableChainTip.js.map +1 -0
- package/out/src/storage/schema/tables/TableCommission.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCommission.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableMonitorLease.d.ts +23 -0
- package/out/src/storage/schema/tables/TableMonitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableMonitorLease.js +3 -0
- package/out/src/storage/schema/tables/TableMonitorLease.js.map +1 -0
- package/out/src/storage/schema/tables/TableOutput.d.ts +10 -2
- package/out/src/storage/schema/tables/TableOutput.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutput.js +1 -1
- package/out/src/storage/schema/tables/TableOutput.js.map +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts +24 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransactionNew.d.ts +50 -0
- package/out/src/storage/schema/tables/TableTransactionNew.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionNew.js +3 -0
- package/out/src/storage/schema/tables/TableTransactionNew.js.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionV7.d.ts +50 -0
- package/out/src/storage/schema/tables/TableTransactionV7.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionV7.js +3 -0
- package/out/src/storage/schema/tables/TableTransactionV7.js.map +1 -0
- package/out/src/storage/schema/tables/TableTxAudit.d.ts +26 -0
- package/out/src/storage/schema/tables/TableTxAudit.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTxAudit.js +3 -0
- package/out/src/storage/schema/tables/TableTxAudit.js.map +1 -0
- package/out/src/storage/schema/tables/TableTxLabel.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts.map +1 -1
- package/out/src/storage/schema/tables/index.d.ts +5 -0
- package/out/src/storage/schema/tables/index.d.ts.map +1 -1
- package/out/src/storage/schema/tables/index.js +5 -0
- package/out/src/storage/schema/tables/index.js.map +1 -1
- package/out/src/storage/schema/transactionCrud.d.ts +41 -0
- package/out/src/storage/schema/transactionCrud.d.ts.map +1 -0
- package/out/src/storage/schema/transactionCrud.js +205 -0
- package/out/src/storage/schema/transactionCrud.js.map +1 -0
- package/out/src/storage/schema/transactionService.d.ts +315 -0
- package/out/src/storage/schema/transactionService.d.ts.map +1 -0
- package/out/src/storage/schema/transactionService.js +783 -0
- package/out/src/storage/schema/transactionService.js.map +1 -0
- package/out/src/storage/schema/txAudit.d.ts +33 -0
- package/out/src/storage/schema/txAudit.d.ts.map +1 -0
- package/out/src/storage/schema/txAudit.js +64 -0
- package/out/src/storage/schema/txAudit.js.map +1 -0
- package/out/src/storage/schema/v7Crud.d.ts +41 -0
- package/out/src/storage/schema/v7Crud.d.ts.map +1 -0
- package/out/src/storage/schema/v7Crud.js +205 -0
- package/out/src/storage/schema/v7Crud.js.map +1 -0
- package/out/src/storage/schema/v7Fsm.d.ts +27 -0
- package/out/src/storage/schema/v7Fsm.d.ts.map +1 -0
- package/out/src/storage/schema/v7Fsm.js +124 -0
- package/out/src/storage/schema/v7Fsm.js.map +1 -0
- package/out/src/storage/schema/v7MonitorLease.d.ts +57 -0
- package/out/src/storage/schema/v7MonitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/v7MonitorLease.js +101 -0
- package/out/src/storage/schema/v7MonitorLease.js.map +1 -0
- package/out/src/storage/schema/v7Service.d.ts +305 -0
- package/out/src/storage/schema/v7Service.d.ts.map +1 -0
- package/out/src/storage/schema/v7Service.js +757 -0
- package/out/src/storage/schema/v7Service.js.map +1 -0
- package/out/src/storage/schema/v7TxAudit.d.ts +33 -0
- package/out/src/storage/schema/v7TxAudit.d.ts.map +1 -0
- package/out/src/storage/schema/v7TxAudit.js +64 -0
- package/out/src/storage/schema/v7TxAudit.js.map +1 -0
- package/out/src/storage/storageProviderHelpers.d.ts +34 -0
- package/out/src/storage/storageProviderHelpers.d.ts.map +1 -0
- package/out/src/storage/storageProviderHelpers.js +100 -0
- package/out/src/storage/storageProviderHelpers.js.map +1 -0
- package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.js +2 -1
- package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
- package/out/src/utility/aggregateResults.d.ts +1 -1
- package/out/src/utility/aggregateResults.d.ts.map +1 -1
- package/out/src/utility/aggregateResults.js +2 -2
- package/out/src/utility/aggregateResults.js.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.d.ts +2 -2
- package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.js +16 -9
- package/out/src/utility/brc114ActionTimeLabels.js.map +1 -1
- package/out/src/utility/identityUtils.js +1 -1
- package/out/src/utility/identityUtils.js.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.d.ts +4 -4
- package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.js.map +1 -1
- package/out/src/utility/stampLog.d.ts.map +1 -1
- package/out/src/utility/stampLog.js +7 -5
- package/out/src/utility/stampLog.js.map +1 -1
- package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
- package/out/src/utility/tscProofToMerklePath.js +1 -1
- package/out/src/utility/tscProofToMerklePath.js.map +1 -1
- package/out/src/utility/utilityHelpers.d.ts +1 -2
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +10 -10
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.d.ts +7 -3
- package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.js +3 -3
- package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -1
- package/out/src/wab-client/WABClient.d.ts +1 -1
- package/out/src/wab-client/WABClient.d.ts.map +1 -1
- package/out/src/wab-client/WABClient.js +12 -12
- package/out/src/wab-client/WABClient.js.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +3 -3
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
- package/package.json +7 -6
|
@@ -9,6 +9,88 @@ import * as sdk from '../../sdk';
|
|
|
9
9
|
* @param reqs
|
|
10
10
|
*/
|
|
11
11
|
export declare function attemptToPostReqsToNetwork(storage: StorageProvider, reqs: EntityProvenTxReq[], trx?: sdk.TrxToken, logger?: WalletLoggerInterface): Promise<PostReqsToNetworkResult>;
|
|
12
|
+
/**
|
|
13
|
+
* For each txid in submitted `txids`:
|
|
14
|
+
*
|
|
15
|
+
* Based on its aggregate status, and whether broadcast happening in background (isDelayed) or immediately (!isDelayed),
|
|
16
|
+
* and iff current req.status is not 'unproven' or 'completed':
|
|
17
|
+
*
|
|
18
|
+
* 'success':
|
|
19
|
+
* req.status => 'unmined', tx.status => 'unproven'
|
|
20
|
+
* 'doubleSpend':
|
|
21
|
+
* req.status => 'doubleSpend', tx.status => 'failed'
|
|
22
|
+
* 'invalidTx':
|
|
23
|
+
* req.status => 'invalid', tx.status => 'failed'
|
|
24
|
+
* 'serviceError':
|
|
25
|
+
* increment req.attempts
|
|
26
|
+
*
|
|
27
|
+
* @param txids
|
|
28
|
+
* @param apbrs
|
|
29
|
+
* @param storage
|
|
30
|
+
* @param services if valid, doubleSpend results will be verified (but only if not within a trx. e.g. trx must be undefined)
|
|
31
|
+
* @param trx
|
|
32
|
+
*/
|
|
33
|
+
export declare function updateReqsFromAggregateResults(txids: string[], r: PostReqsToNetworkResult, apbrs: Record<string, AggregatePostBeefTxResult>, storage: StorageProvider, services?: sdk.WalletServices, trx?: sdk.TrxToken, logger?: WalletLoggerInterface): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* After any failed broadcast (doubleSpend, invalidTx, etc.), query each
|
|
36
|
+
* consumed-input outpoint of the failed transaction against on-chain
|
|
37
|
+
* UTXO state. For inputs the chain authoritatively confirms are spent
|
|
38
|
+
* (i.e. NOT a UTXO), update the corresponding wallet basket entry to
|
|
39
|
+
* spendable=false.
|
|
40
|
+
*
|
|
41
|
+
* Background: `updateTransactionStatus(failed)` optimistically restores
|
|
42
|
+
* all consumed-input outputs to spendable=true so the user can retry
|
|
43
|
+
* with the same inputs. For some failures (genuine doubleSpend, or any
|
|
44
|
+
* 'missing-inputs' outcome where the input has been spent on chain by
|
|
45
|
+
* a different transaction), restoration is incorrect — the input is
|
|
46
|
+
* gone and restoring it produces an infinite missing-inputs loop on
|
|
47
|
+
* the next createAction → broadcast cycle. Apps cannot evict from the
|
|
48
|
+
* default basket on app-isolated wallets (admin-only policy), so this
|
|
49
|
+
* self-heal must run inside the wallet.
|
|
50
|
+
*
|
|
51
|
+
* Different broadcasters classify the same on-chain reality differently
|
|
52
|
+
* (ARC → doubleSpend, WhatsOnChain/Bitails → invalidTx via
|
|
53
|
+
* 'missing-inputs'); this helper is broadcaster-agnostic because its
|
|
54
|
+
* decision is based on services.isUtxo, not the aggregate failure
|
|
55
|
+
* classification.
|
|
56
|
+
*
|
|
57
|
+
* Pre-broadcast races where concurrent createActions reach the same
|
|
58
|
+
* UTXO across separate app processes are out of scope; see PR
|
|
59
|
+
* description.
|
|
60
|
+
*
|
|
61
|
+
* Conservatively scoped:
|
|
62
|
+
* - Only inputs found in the failing user's basket are touched.
|
|
63
|
+
* - Inputs whose on-chain UTXO status cannot be determined (service
|
|
64
|
+
* error / inconclusive) are left spendable=true. Eviction is opt-in
|
|
65
|
+
* based on positive evidence of stale state.
|
|
66
|
+
* - Inputs the chain confirms are still UTXOs (e.g. a competing tx
|
|
67
|
+
* itself failed, or a malformed/fee failure where inputs are intact)
|
|
68
|
+
* are left spendable=true — preserving the existing transient-retry
|
|
69
|
+
* semantics callers depend on.
|
|
70
|
+
*
|
|
71
|
+
* Returns counts for instrumentation and the set of stale outpoints
|
|
72
|
+
* that were actually evicted (added to history note for diagnostics).
|
|
73
|
+
*/
|
|
74
|
+
export declare function markStaleInputsAsSpent(ar: AggregatePostBeefTxResult, storage: StorageProvider, services: sdk.WalletServices, trx?: sdk.TrxToken, logger?: WalletLoggerInterface): Promise<{
|
|
75
|
+
checked: number;
|
|
76
|
+
staleConfirmed: number;
|
|
77
|
+
staleOutpoints: string[];
|
|
78
|
+
}>;
|
|
79
|
+
type AggregateStatus = 'success' | 'doubleSpend' | 'invalidTx' | 'serviceError';
|
|
80
|
+
export interface AggregatePostBeefTxResult {
|
|
81
|
+
txid: string;
|
|
82
|
+
txidResults: sdk.PostTxResultForTxid[];
|
|
83
|
+
status: AggregateStatus;
|
|
84
|
+
vreq: PostReqsToNetworkDetails;
|
|
85
|
+
successCount: number;
|
|
86
|
+
doubleSpendCount: number;
|
|
87
|
+
statusErrorCount: number;
|
|
88
|
+
serviceErrorCount: number;
|
|
89
|
+
/**
|
|
90
|
+
* Any competing double spend txids reported for this txid
|
|
91
|
+
*/
|
|
92
|
+
competingTxs: string[];
|
|
93
|
+
}
|
|
12
94
|
/**
|
|
13
95
|
* Indicates status of a new Action following a `createAction` or `signAction` in immediate mode:
|
|
14
96
|
* When `acceptDelayedBroadcast` is falses.
|
|
@@ -38,4 +120,5 @@ export interface PostReqsToNetworkResult {
|
|
|
38
120
|
details: PostReqsToNetworkDetails[];
|
|
39
121
|
log: string;
|
|
40
122
|
}
|
|
123
|
+
export {};
|
|
41
124
|
//# sourceMappingURL=attemptToPostReqsToNetwork.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attemptToPostReqsToNetwork.d.ts","sourceRoot":"","sources":["../../../../../src/storage/methods/attemptToPostReqsToNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"attemptToPostReqsToNetwork.d.ts","sourceRoot":"","sources":["../../../../../src/storage/methods/attemptToPostReqsToNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,KAAK,GAAG,MAAM,WAAW,CAAA;AAmDhC;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,eAAe,EACxB,IAAI,EAAE,iBAAiB,EAAE,EACzB,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAClB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,uBAAuB,CAAC,CAoBlC;AAyLD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,MAAM,EAAE,EACf,CAAC,EAAE,uBAAuB,EAC1B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,EAChD,OAAO,EAAE,eAAe,EACxB,QAAQ,CAAC,EAAE,GAAG,CAAC,cAAc,EAC7B,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAClB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA+Jf;AAgFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,wBAAsB,sBAAsB,CAC1C,EAAE,EAAE,yBAAyB,EAC7B,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,GAAG,CAAC,cAAc,EAC5B,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAClB,MAAM,CAAC,EAAE,qBAAqB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAsGhF;AAED,KAAK,eAAe,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,CAAA;AAE/E,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,GAAG,CAAC,mBAAmB,EAAE,CAAA;IACtC,MAAM,EAAE,eAAe,CAAA;IACvB,IAAI,EAAE,wBAAwB,CAAA;IAC9B,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB;;OAEG;IACH,YAAY,EAAE,MAAM,EAAE,CAAA;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,8BAA8B,GACtC,SAAS,GACT,aAAa,GACb,SAAS,GACT,SAAS,GACT,cAAc,GACd,WAAW,CAAA;AAEf,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,iBAAiB,CAAA;IACtB,MAAM,EAAE,8BAA8B,CAAA;IACtC;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAA;IAC3B,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,wBAAwB,EAAE,CAAA;IACnC,GAAG,EAAE,MAAM,CAAA;CACZ"}
|
|
@@ -34,9 +34,51 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.attemptToPostReqsToNetwork = attemptToPostReqsToNetwork;
|
|
37
|
+
exports.updateReqsFromAggregateResults = updateReqsFromAggregateResults;
|
|
38
|
+
exports.markStaleInputsAsSpent = markStaleInputsAsSpent;
|
|
37
39
|
const sdk_1 = require("@bsv/sdk");
|
|
38
40
|
const sdk = __importStar(require("../../sdk"));
|
|
39
41
|
const utilityHelpers_1 = require("../../utility/utilityHelpers");
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// new-schema wiring helpers
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
/**
|
|
46
|
+
* Resolve the new-schema `transactionId` for a given txid.
|
|
47
|
+
*
|
|
48
|
+
* Returns `undefined` when:
|
|
49
|
+
* - `service` is undefined (pre-cutover / IDB path)
|
|
50
|
+
* - The txid is not yet in the new `transactions` table (bridge period)
|
|
51
|
+
* - Any unexpected error (we swallow and return undefined to avoid
|
|
52
|
+
* disrupting the legacy broadcast path)
|
|
53
|
+
*/
|
|
54
|
+
async function resolveTransactionId(service, txid) {
|
|
55
|
+
if (service == null)
|
|
56
|
+
return undefined;
|
|
57
|
+
try {
|
|
58
|
+
const row = await service.findByTxid(txid);
|
|
59
|
+
return row === null || row === void 0 ? void 0 : row.transactionId;
|
|
60
|
+
}
|
|
61
|
+
catch (_a) {
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Map the aggregate broadcast outcome to the new-schema `ProcessingStatus` to record.
|
|
67
|
+
*
|
|
68
|
+
* Mapping:
|
|
69
|
+
* success → 'sent' (broadcast accepted; waiting for on-chain proof)
|
|
70
|
+
* doubleSpend → 'doubleSpend' (terminal)
|
|
71
|
+
* invalidTx → 'invalid' (terminal)
|
|
72
|
+
* serviceError → 'sending' (retry; attempts counter also incremented)
|
|
73
|
+
*/
|
|
74
|
+
function aggregateStatusToProcessing(status) {
|
|
75
|
+
switch (status) {
|
|
76
|
+
case 'success': return 'sent';
|
|
77
|
+
case 'doubleSpend': return 'doubleSpend';
|
|
78
|
+
case 'invalidTx': return 'invalid';
|
|
79
|
+
case 'serviceError': return 'sending';
|
|
80
|
+
}
|
|
81
|
+
}
|
|
40
82
|
/**
|
|
41
83
|
* Attempt to post one or more `ProvenTxReq` with status 'unsent'
|
|
42
84
|
* to the bitcoin network.
|
|
@@ -46,7 +88,7 @@ const utilityHelpers_1 = require("../../utility/utilityHelpers");
|
|
|
46
88
|
async function attemptToPostReqsToNetwork(storage, reqs, trx, logger) {
|
|
47
89
|
// initialize results, validate reqs ready to post, txids are of the transactions in the beef that we care about.
|
|
48
90
|
const { r, vreqs, txids } = await validateReqsAndMergeBeefs(storage, reqs, trx);
|
|
49
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
91
|
+
logger === null || logger === void 0 ? void 0 : logger.log('validated request and merged beefs');
|
|
50
92
|
const services = storage.getServices();
|
|
51
93
|
const pbrs = await services.postBeef(r.beef, txids, logger);
|
|
52
94
|
// post beef results (pbrs) is an array by service provider
|
|
@@ -64,56 +106,116 @@ async function validateReqsAndMergeBeefs(storage, reqs, trx) {
|
|
|
64
106
|
log: ''
|
|
65
107
|
};
|
|
66
108
|
const vreqs = [];
|
|
109
|
+
// the transaction service — undefined on pre-cutover / IDB paths; all transaction-service calls are gated.
|
|
110
|
+
const txSvc = storage.getTransactionService();
|
|
67
111
|
for (const req of reqs) {
|
|
112
|
+
// Resolve the new transactionId for this req (by txid). Cached per req so
|
|
113
|
+
// subsequent transaction-service calls within the same loop body reuse it.
|
|
114
|
+
const newTxId = await resolveTransactionId(txSvc, req.txid);
|
|
68
115
|
try {
|
|
69
116
|
const noRawTx = !req.rawTx;
|
|
70
|
-
const noTxIds =
|
|
71
|
-
const noInputBEEF =
|
|
117
|
+
const noTxIds = (req.notify.transactionIds == null) || req.notify.transactionIds.length < 1;
|
|
118
|
+
const noInputBEEF = req.inputBEEF == null;
|
|
72
119
|
if (noRawTx || noTxIds || noInputBEEF) {
|
|
73
120
|
// This should have happened earlier...
|
|
74
|
-
|
|
121
|
+
const note = { when: new Date().toISOString(), what: 'validateReqFailed', noRawTx, noTxIds, noInputBEEF };
|
|
122
|
+
req.addHistoryNote(note);
|
|
75
123
|
req.status = 'invalid';
|
|
76
124
|
await req.updateStorageDynamicProperties(storage, trx);
|
|
77
125
|
r.details.push({ txid: req.txid, req, status: 'invalid' });
|
|
126
|
+
// new-schema additive: record history note + transition to invalid
|
|
127
|
+
if (newTxId != null) {
|
|
128
|
+
await txSvc.recordHistoryNote(newTxId, note);
|
|
129
|
+
await txSvc.recordBroadcastResult({
|
|
130
|
+
transactionId: newTxId,
|
|
131
|
+
txid: req.txid,
|
|
132
|
+
status: 'invalid',
|
|
133
|
+
provider: 'validateReqsAndMergeBeefs',
|
|
134
|
+
details: { reason: 'validateReqFailed' }
|
|
135
|
+
});
|
|
136
|
+
}
|
|
78
137
|
}
|
|
79
138
|
else {
|
|
80
139
|
const vreq = { txid: req.txid, req, status: 'unknown' };
|
|
81
140
|
await storage.mergeReqToBeefToShareExternally(req.api, r.beef, [], trx);
|
|
141
|
+
// new-schema additive: also merge raw tx / proof bytes from new transactions table into the
|
|
142
|
+
// shared beef so post-cutover callers get the same merged payload.
|
|
143
|
+
if (newTxId != null) {
|
|
144
|
+
await txSvc.mergeBeefForTxids(r.beef, [req.txid]);
|
|
145
|
+
}
|
|
82
146
|
vreqs.push(vreq);
|
|
83
147
|
r.details.push(vreq);
|
|
84
148
|
}
|
|
85
149
|
}
|
|
86
|
-
catch (
|
|
87
|
-
const { code, message } = sdk.WalletError.fromUnknown(
|
|
88
|
-
|
|
150
|
+
catch (error_) {
|
|
151
|
+
const { code, message } = sdk.WalletError.fromUnknown(error_);
|
|
152
|
+
const errNote = { when: new Date().toISOString(), what: 'validateReqError', txid: req.txid, code, message };
|
|
153
|
+
req.addHistoryNote(errNote);
|
|
89
154
|
req.attempts++;
|
|
90
155
|
if (req.attempts > 6 || message.startsWith('The txid parameter must be known to storage')) {
|
|
91
156
|
req.status = 'invalid';
|
|
92
157
|
r.details.push({ txid: req.txid, req, status: 'invalid' });
|
|
93
158
|
}
|
|
94
159
|
await req.updateStorageDynamicProperties(storage, trx);
|
|
160
|
+
// new-schema additive: record history note + increment attempts
|
|
161
|
+
if (newTxId != null) {
|
|
162
|
+
await txSvc.recordHistoryNote(newTxId, errNote);
|
|
163
|
+
await txSvc.incrementAttempts(newTxId);
|
|
164
|
+
}
|
|
95
165
|
}
|
|
96
166
|
}
|
|
97
167
|
return { r, vreqs, txids: vreqs.map(r => r.txid) };
|
|
98
168
|
}
|
|
99
169
|
async function transferNotesToReqHistories(txids, vreqs, pbrs, storage, trx) {
|
|
170
|
+
// the transaction service — gated; undefined means legacy-only path.
|
|
171
|
+
const txSvc = storage.getTransactionService();
|
|
100
172
|
for (const txid of txids) {
|
|
101
173
|
const vreq = vreqs.find(r => r.txid === txid);
|
|
102
|
-
if (
|
|
174
|
+
if (vreq == null)
|
|
103
175
|
throw new sdk.WERR_INTERNAL();
|
|
176
|
+
// Resolve new transactionId once per txid (cheap SELECT by txid).
|
|
177
|
+
const newTxId = await resolveTransactionId(txSvc, txid);
|
|
104
178
|
const notes = [];
|
|
105
179
|
for (const pbr of pbrs) {
|
|
106
180
|
notes.push(...(pbr.notes || []));
|
|
107
181
|
const r = pbr.txidResults.find(tr => tr.txid === txid);
|
|
108
|
-
if (r)
|
|
182
|
+
if (r != null)
|
|
109
183
|
notes.push(...(r.notes || []));
|
|
110
184
|
}
|
|
111
185
|
for (const n of notes) {
|
|
112
186
|
vreq.req.addHistoryNote(n);
|
|
187
|
+
// new-schema additive: mirror each provider note into tx_audit.
|
|
188
|
+
if (newTxId != null) {
|
|
189
|
+
await txSvc.recordHistoryNote(newTxId, n);
|
|
190
|
+
}
|
|
113
191
|
}
|
|
114
192
|
await vreq.req.updateStorageDynamicProperties(storage, trx);
|
|
115
193
|
}
|
|
116
194
|
}
|
|
195
|
+
function tallyTxidResults(ar, pbrs) {
|
|
196
|
+
for (const pbr of pbrs) {
|
|
197
|
+
const tr = pbr.txidResults.find(tr => tr.txid === ar.txid);
|
|
198
|
+
if (tr == null)
|
|
199
|
+
continue;
|
|
200
|
+
ar.txidResults.push(tr);
|
|
201
|
+
if (tr.status === 'success') {
|
|
202
|
+
ar.successCount++;
|
|
203
|
+
}
|
|
204
|
+
else if (tr.doubleSpend) {
|
|
205
|
+
ar.doubleSpendCount++;
|
|
206
|
+
if (tr.competingTxs != null)
|
|
207
|
+
ar.competingTxs = [...tr.competingTxs];
|
|
208
|
+
}
|
|
209
|
+
else if (tr.serviceError) {
|
|
210
|
+
ar.serviceErrorCount++;
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
ar.statusErrorCount++;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
if (ar.competingTxs.length > 1)
|
|
217
|
+
ar.competingTxs = [...new Set(ar.competingTxs)];
|
|
218
|
+
}
|
|
117
219
|
/**
|
|
118
220
|
* For each txid, decide on the aggregate success or failure of attempting to broadcast it to the bitcoin processing network.
|
|
119
221
|
*
|
|
@@ -145,26 +247,7 @@ function aggregatePostBeefResultsByTxid(txids, vreqs, pbrs) {
|
|
|
145
247
|
competingTxs: []
|
|
146
248
|
};
|
|
147
249
|
r[txid] = ar;
|
|
148
|
-
|
|
149
|
-
const tr = pbr.txidResults.find(tr => tr.txid === txid);
|
|
150
|
-
if (tr) {
|
|
151
|
-
ar.txidResults.push(tr);
|
|
152
|
-
if (tr.status === 'success')
|
|
153
|
-
ar.successCount++;
|
|
154
|
-
else if (tr.doubleSpend) {
|
|
155
|
-
ar.doubleSpendCount++;
|
|
156
|
-
if (tr.competingTxs) {
|
|
157
|
-
ar.competingTxs = [...tr.competingTxs];
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else if (tr.serviceError)
|
|
161
|
-
ar.serviceErrorCount++;
|
|
162
|
-
else
|
|
163
|
-
ar.statusErrorCount++;
|
|
164
|
-
}
|
|
165
|
-
if (ar.competingTxs.length > 1)
|
|
166
|
-
ar.competingTxs = [...new Set(ar.competingTxs)]; // Remove duplicates
|
|
167
|
-
}
|
|
250
|
+
tallyTxidResults(ar, pbrs);
|
|
168
251
|
if (ar.successCount > 0 && ar.doubleSpendCount === 0)
|
|
169
252
|
ar.status = 'success';
|
|
170
253
|
else if (ar.doubleSpendCount > 0)
|
|
@@ -199,10 +282,14 @@ function aggregatePostBeefResultsByTxid(txids, vreqs, pbrs) {
|
|
|
199
282
|
*/
|
|
200
283
|
async function updateReqsFromAggregateResults(txids, r, apbrs, storage, services, trx, logger) {
|
|
201
284
|
logger === null || logger === void 0 ? void 0 : logger.group('update storage from aggregate results');
|
|
285
|
+
// the transaction service — undefined on pre-cutover / IDB paths; all transaction-service calls are gated.
|
|
286
|
+
const txSvc = storage.getTransactionService();
|
|
202
287
|
for (const txid of txids) {
|
|
203
288
|
const ar = apbrs[txid];
|
|
204
289
|
const req = ar.vreq.req;
|
|
205
290
|
await req.refreshFromStorage(storage, trx);
|
|
291
|
+
// Resolve new transactionId once per txid for this iteration.
|
|
292
|
+
const newTxId = await resolveTransactionId(txSvc, txid);
|
|
206
293
|
const { successCount, doubleSpendCount, statusErrorCount, serviceErrorCount } = ar;
|
|
207
294
|
const note = {
|
|
208
295
|
when: new Date().toISOString(),
|
|
@@ -215,17 +302,21 @@ async function updateReqsFromAggregateResults(txids, r, apbrs, storage, services
|
|
|
215
302
|
statusErrorCount,
|
|
216
303
|
serviceErrorCount
|
|
217
304
|
};
|
|
218
|
-
if (['completed', 'unmined'].
|
|
219
|
-
|
|
305
|
+
if (['completed', 'unmined'].includes(req.status))
|
|
306
|
+
// However it happened, don't degrade status if it is somehow already beyond broadcast stage
|
|
307
|
+
{
|
|
220
308
|
continue;
|
|
221
|
-
|
|
309
|
+
}
|
|
310
|
+
if (ar.status === 'doubleSpend' && (services != null) && (trx == null))
|
|
222
311
|
await confirmDoubleSpend(ar, r.beef, storage, services, logger);
|
|
223
|
-
let newReqStatus
|
|
224
|
-
let newTxStatus
|
|
312
|
+
let newReqStatus;
|
|
313
|
+
let newTxStatus;
|
|
225
314
|
switch (ar.status) {
|
|
226
315
|
case 'success':
|
|
227
316
|
newReqStatus = 'unmined';
|
|
228
317
|
newTxStatus = 'unproven';
|
|
318
|
+
// Mark as broadcast so proof-timeout resets to rebroadcast rather than invalid
|
|
319
|
+
req.wasBroadcast = true;
|
|
229
320
|
break;
|
|
230
321
|
case 'doubleSpend':
|
|
231
322
|
newReqStatus = 'doubleSpend';
|
|
@@ -250,13 +341,84 @@ async function updateReqsFromAggregateResults(txids, r, apbrs, storage, services
|
|
|
250
341
|
req.status = newReqStatus;
|
|
251
342
|
req.addHistoryNote(note);
|
|
252
343
|
await req.updateStorageDynamicProperties(storage, trx);
|
|
344
|
+
// new-schema additive: record aggregateResults history note, then record the
|
|
345
|
+
// broadcast outcome (transitions processing state + sets wasBroadcast).
|
|
346
|
+
if (newTxId != null) {
|
|
347
|
+
await txSvc.recordHistoryNote(newTxId, note);
|
|
348
|
+
const processingStatus = aggregateStatusToProcessing(ar.status);
|
|
349
|
+
if (ar.status === 'serviceError') {
|
|
350
|
+
// serviceError: increment attempts in new-schema and leave processing in 'sending'.
|
|
351
|
+
await txSvc.incrementAttempts(newTxId);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
// success / doubleSpend / invalidTx: record broadcast result with final status.
|
|
355
|
+
await txSvc.recordBroadcastResult({
|
|
356
|
+
transactionId: newTxId,
|
|
357
|
+
txid,
|
|
358
|
+
status: processingStatus,
|
|
359
|
+
provider: 'aggregatePostBeef',
|
|
360
|
+
wasBroadcast: ar.status === 'success',
|
|
361
|
+
details: {
|
|
362
|
+
aggStatus: ar.status,
|
|
363
|
+
successCount,
|
|
364
|
+
doubleSpendCount,
|
|
365
|
+
statusErrorCount,
|
|
366
|
+
serviceErrorCount
|
|
367
|
+
}
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
253
371
|
if (newTxStatus) {
|
|
254
372
|
const ids = req.notify.transactionIds;
|
|
255
|
-
if (ids) {
|
|
373
|
+
if (ids != null) {
|
|
256
374
|
// Also set generated outputs to spendable false and consumed input outputs to spendable true (and clears their spentBy).
|
|
257
375
|
await storage.updateTransactionsStatus(ids, newTxStatus, trx);
|
|
258
376
|
}
|
|
259
377
|
}
|
|
378
|
+
// For ANY failed-broadcast result (doubleSpend, invalidTx,
|
|
379
|
+
// serviceError-resolved-to-failure), override the optimistic
|
|
380
|
+
// "restore inputs spendable" behavior of updateTransactionStatus
|
|
381
|
+
// for inputs that on-chain state confirms are actually spent.
|
|
382
|
+
// Without this, the wallet picks the same stale UTXO on the next
|
|
383
|
+
// createAction — an infinite missing-inputs loop. Apps cannot
|
|
384
|
+
// self-heal because the default basket is admin-only on
|
|
385
|
+
// app-isolated wallets (e.g. metanet-desktop).
|
|
386
|
+
//
|
|
387
|
+
// Why broaden beyond doubleSpend (Codex review 51331f6e035a7ed0):
|
|
388
|
+
// different broadcasters classify the same on-chain reality
|
|
389
|
+
// differently. ARC reports SEEN_IN_ORPHAN_MEMPOOL → doubleSpend.
|
|
390
|
+
// WoC + Bitails report 'Missing inputs' / 'missing-inputs' →
|
|
391
|
+
// invalidTx. Both mean the same root cause (referenced UTXO is
|
|
392
|
+
// gone). The helper is conservatively opt-in on positive
|
|
393
|
+
// isUtxo===false evidence: malformed/fee/script failures whose
|
|
394
|
+
// inputs are still UTXOs are LEFT spendable=true, preserving
|
|
395
|
+
// the existing transient-retry semantics. So broadening is safe.
|
|
396
|
+
//
|
|
397
|
+
// Gate: services available + not in a nested transaction (chain
|
|
398
|
+
// queries are async I/O — same gate as confirmDoubleSpend).
|
|
399
|
+
if (newTxStatus === 'failed' &&
|
|
400
|
+
services != null &&
|
|
401
|
+
trx == null) {
|
|
402
|
+
const stale = await markStaleInputsAsSpent(ar, storage, services, trx, logger);
|
|
403
|
+
if (stale.checked > 0) {
|
|
404
|
+
const staleNote = {
|
|
405
|
+
when: new Date().toISOString(),
|
|
406
|
+
what: 'markStaleInputsAsSpent',
|
|
407
|
+
aggStatus: ar.status,
|
|
408
|
+
checked: stale.checked,
|
|
409
|
+
confirmed: stale.staleConfirmed,
|
|
410
|
+
...(stale.staleOutpoints.length > 0
|
|
411
|
+
? { outpoints: stale.staleOutpoints.join(',') }
|
|
412
|
+
: {})
|
|
413
|
+
};
|
|
414
|
+
req.addHistoryNote(staleNote);
|
|
415
|
+
await req.updateStorageDynamicProperties(storage, trx);
|
|
416
|
+
// new-schema additive: mirror stale-inputs note into tx_audit.
|
|
417
|
+
if (newTxId != null) {
|
|
418
|
+
await txSvc.recordHistoryNote(newTxId, staleNote);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
}
|
|
260
422
|
// Transfer critical results to details going back to the user
|
|
261
423
|
const details = r.details.find(d => d.txid === txid);
|
|
262
424
|
details.status = ar.status;
|
|
@@ -265,6 +427,33 @@ async function updateReqsFromAggregateResults(txids, r, apbrs, storage, services
|
|
|
265
427
|
}
|
|
266
428
|
logger === null || logger === void 0 ? void 0 : logger.group('update storage from aggregate results');
|
|
267
429
|
}
|
|
430
|
+
async function gatherCompetingTxids(ar, beef, services, note, logger) {
|
|
431
|
+
var _a;
|
|
432
|
+
const req = ar.vreq.req;
|
|
433
|
+
const tx = sdk_1.Transaction.fromBinary(req.rawTx);
|
|
434
|
+
const competingTxids = new Set(ar.competingTxs);
|
|
435
|
+
for (const input of tx.inputs) {
|
|
436
|
+
const sourceTx = (_a = beef.findTxid(input.sourceTXID)) === null || _a === void 0 ? void 0 : _a.tx;
|
|
437
|
+
if (sourceTx == null) {
|
|
438
|
+
let s = note.missingSourceTx || '';
|
|
439
|
+
s += input.sourceTXID + ' ';
|
|
440
|
+
note.missingSourceTx = s;
|
|
441
|
+
continue;
|
|
442
|
+
}
|
|
443
|
+
const lockingScript = sourceTx.outputs[input.sourceOutputIndex].lockingScript.toHex();
|
|
444
|
+
const hash = services.hashOutputScript(lockingScript);
|
|
445
|
+
const shhrs = await services.getScriptHashHistory(hash, undefined, logger);
|
|
446
|
+
if (shhrs.status === 'success') {
|
|
447
|
+
for (const h of shhrs.history) {
|
|
448
|
+
// Neither the source of the input nor the current transaction are competition.
|
|
449
|
+
if (h.txid !== input.sourceTXID && h.txid !== ar.txid)
|
|
450
|
+
competingTxids.add(h.txid);
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
ar.competingTxs = [...competingTxids].slice(-24); // keep at most 24, if they were sorted by time, keep newest
|
|
455
|
+
note.competingTxs = ar.competingTxs.join(',');
|
|
456
|
+
}
|
|
268
457
|
/**
|
|
269
458
|
* Requires ar.status === 'doubleSpend'
|
|
270
459
|
*
|
|
@@ -277,19 +466,20 @@ async function updateReqsFromAggregateResults(txids, r, apbrs, storage, services
|
|
|
277
466
|
* @param services
|
|
278
467
|
*/
|
|
279
468
|
async function confirmDoubleSpend(ar, beef, storage, services, logger) {
|
|
280
|
-
var _a
|
|
469
|
+
var _a;
|
|
281
470
|
const req = ar.vreq.req;
|
|
282
471
|
const note = { when: new Date().toISOString(), what: 'confirmDoubleSpend' };
|
|
283
472
|
let known = false;
|
|
284
473
|
for (let retry = 0; retry < 3; retry++) {
|
|
285
474
|
const gsr = await services.getStatusForTxids([req.txid]);
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
475
|
+
const errCode = gsr.error != null ? gsr.error.code : '';
|
|
476
|
+
note[`getStatus${retry}`] = `${gsr.status}${errCode},${(_a = gsr.results[0]) === null || _a === void 0 ? void 0 : _a.status}`;
|
|
477
|
+
if (gsr.status !== 'success' || gsr.results[0].status === 'unknown') {
|
|
478
|
+
await (0, utilityHelpers_1.wait)(1000);
|
|
290
479
|
}
|
|
291
480
|
else {
|
|
292
|
-
|
|
481
|
+
known = true;
|
|
482
|
+
break;
|
|
293
483
|
}
|
|
294
484
|
}
|
|
295
485
|
if (known) {
|
|
@@ -299,31 +489,116 @@ async function confirmDoubleSpend(ar, beef, storage, services, logger) {
|
|
|
299
489
|
}
|
|
300
490
|
else {
|
|
301
491
|
// Confirmed double spend, get txids of possible competing transactions.
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
492
|
+
await gatherCompetingTxids(ar, beef, services, note, logger);
|
|
493
|
+
}
|
|
494
|
+
req.addHistoryNote(note);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* After any failed broadcast (doubleSpend, invalidTx, etc.), query each
|
|
498
|
+
* consumed-input outpoint of the failed transaction against on-chain
|
|
499
|
+
* UTXO state. For inputs the chain authoritatively confirms are spent
|
|
500
|
+
* (i.e. NOT a UTXO), update the corresponding wallet basket entry to
|
|
501
|
+
* spendable=false.
|
|
502
|
+
*
|
|
503
|
+
* Background: `updateTransactionStatus(failed)` optimistically restores
|
|
504
|
+
* all consumed-input outputs to spendable=true so the user can retry
|
|
505
|
+
* with the same inputs. For some failures (genuine doubleSpend, or any
|
|
506
|
+
* 'missing-inputs' outcome where the input has been spent on chain by
|
|
507
|
+
* a different transaction), restoration is incorrect — the input is
|
|
508
|
+
* gone and restoring it produces an infinite missing-inputs loop on
|
|
509
|
+
* the next createAction → broadcast cycle. Apps cannot evict from the
|
|
510
|
+
* default basket on app-isolated wallets (admin-only policy), so this
|
|
511
|
+
* self-heal must run inside the wallet.
|
|
512
|
+
*
|
|
513
|
+
* Different broadcasters classify the same on-chain reality differently
|
|
514
|
+
* (ARC → doubleSpend, WhatsOnChain/Bitails → invalidTx via
|
|
515
|
+
* 'missing-inputs'); this helper is broadcaster-agnostic because its
|
|
516
|
+
* decision is based on services.isUtxo, not the aggregate failure
|
|
517
|
+
* classification.
|
|
518
|
+
*
|
|
519
|
+
* Pre-broadcast races where concurrent createActions reach the same
|
|
520
|
+
* UTXO across separate app processes are out of scope; see PR
|
|
521
|
+
* description.
|
|
522
|
+
*
|
|
523
|
+
* Conservatively scoped:
|
|
524
|
+
* - Only inputs found in the failing user's basket are touched.
|
|
525
|
+
* - Inputs whose on-chain UTXO status cannot be determined (service
|
|
526
|
+
* error / inconclusive) are left spendable=true. Eviction is opt-in
|
|
527
|
+
* based on positive evidence of stale state.
|
|
528
|
+
* - Inputs the chain confirms are still UTXOs (e.g. a competing tx
|
|
529
|
+
* itself failed, or a malformed/fee failure where inputs are intact)
|
|
530
|
+
* are left spendable=true — preserving the existing transient-retry
|
|
531
|
+
* semantics callers depend on.
|
|
532
|
+
*
|
|
533
|
+
* Returns counts for instrumentation and the set of stale outpoints
|
|
534
|
+
* that were actually evicted (added to history note for diagnostics).
|
|
535
|
+
*/
|
|
536
|
+
async function markStaleInputsAsSpent(ar, storage, services, trx, logger) {
|
|
537
|
+
const result = { checked: 0, staleConfirmed: 0, staleOutpoints: [] };
|
|
538
|
+
const req = ar.vreq.req;
|
|
539
|
+
// Resolve the user owning the failing tx so we only touch THIS user's
|
|
540
|
+
// basket entries. Multiple txids share a userId; first is sufficient.
|
|
541
|
+
const txIds = req.notify.transactionIds;
|
|
542
|
+
if (txIds == null || txIds.length === 0)
|
|
543
|
+
return result;
|
|
544
|
+
const txRecord = (await storage.findTransactions({
|
|
545
|
+
partial: { transactionId: txIds[0] },
|
|
546
|
+
noRawTx: true,
|
|
547
|
+
trx
|
|
548
|
+
}))[0];
|
|
549
|
+
if (txRecord == null)
|
|
550
|
+
return result;
|
|
551
|
+
const userId = txRecord.userId;
|
|
552
|
+
// Walk the failed tx's inputs to find which user-owned UTXOs were
|
|
553
|
+
// consumed and need on-chain verification.
|
|
554
|
+
const tx = sdk_1.Transaction.fromBinary(req.rawTx);
|
|
555
|
+
const outpoints = tx.inputs
|
|
556
|
+
.map(i => { var _a, _b; return ({ txid: (_a = i.sourceTXID) !== null && _a !== void 0 ? _a : '', vout: (_b = i.sourceOutputIndex) !== null && _b !== void 0 ? _b : 0 }); })
|
|
557
|
+
.filter(o => o.txid !== '');
|
|
558
|
+
if (outpoints.length === 0)
|
|
559
|
+
return result;
|
|
560
|
+
const byOutpoint = await storage.findOutputsByOutpoints(userId, outpoints, trx);
|
|
561
|
+
const checks = await Promise.all(outpoints.map(async (outpoint) => {
|
|
562
|
+
const localOutput = byOutpoint[`${outpoint.txid}.${outpoint.vout}`];
|
|
563
|
+
if (localOutput == null)
|
|
564
|
+
return { kind: 'skipped' };
|
|
565
|
+
// services.isUtxo requires the lockingScript; load it lazily.
|
|
566
|
+
if (localOutput.lockingScript == null) {
|
|
567
|
+
try {
|
|
568
|
+
await storage.validateOutputScript(localOutput, trx);
|
|
310
569
|
}
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
const hash = services.hashOutputScript(lockingScript);
|
|
314
|
-
const shhrs = await services.getScriptHashHistory(hash, undefined, logger);
|
|
315
|
-
if (shhrs.status === 'success') {
|
|
316
|
-
for (const h of shhrs.history) {
|
|
317
|
-
// Neither the source of the input nor the current transaction are competition.
|
|
318
|
-
if (h.txid !== input.sourceTXID && h.txid !== ar.txid)
|
|
319
|
-
competingTxids.add(h.txid);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
570
|
+
catch (_a) {
|
|
571
|
+
return { kind: 'skipped' };
|
|
322
572
|
}
|
|
323
573
|
}
|
|
324
|
-
|
|
325
|
-
|
|
574
|
+
let isStillUtxo;
|
|
575
|
+
try {
|
|
576
|
+
isStillUtxo = await services.isUtxo(localOutput);
|
|
577
|
+
}
|
|
578
|
+
catch (_b) {
|
|
579
|
+
// Service error — preserve current behavior (keep spendable=true).
|
|
580
|
+
// Eviction requires positive evidence of stale state.
|
|
581
|
+
return { kind: 'service-error', localOutput };
|
|
582
|
+
}
|
|
583
|
+
return isStillUtxo
|
|
584
|
+
? { kind: 'still-utxo', localOutput }
|
|
585
|
+
: { kind: 'stale', localOutput, outpoint };
|
|
586
|
+
}));
|
|
587
|
+
for (const c of checks) {
|
|
588
|
+
if (c.kind === 'skipped')
|
|
589
|
+
continue;
|
|
590
|
+
result.checked++;
|
|
591
|
+
if (c.kind === 'stale') {
|
|
592
|
+
// Authoritative on-chain evidence the input is spent. Override
|
|
593
|
+
// the optimistic restore from updateTransactionStatus(failed).
|
|
594
|
+
await storage.updateOutput(c.localOutput.outputId, { spendable: false }, trx);
|
|
595
|
+
result.staleConfirmed++;
|
|
596
|
+
result.staleOutpoints.push(`${c.outpoint.txid}.${c.outpoint.vout}`);
|
|
597
|
+
}
|
|
326
598
|
}
|
|
327
|
-
|
|
599
|
+
if (result.staleConfirmed > 0) {
|
|
600
|
+
logger === null || logger === void 0 ? void 0 : logger.log(`markStaleInputsAsSpent: ${result.staleConfirmed} of ${result.checked} input(s) confirmed-spent on chain for txid=${req.txid}`);
|
|
601
|
+
}
|
|
602
|
+
return result;
|
|
328
603
|
}
|
|
329
604
|
//# sourceMappingURL=attemptToPostReqsToNetwork.js.map
|