@bsv/wallet-toolbox 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/CHANGELOG.md +2 -7
- package/docs/CREATEACTION_BLOCKERS.md +391 -0
- package/docs/CUTOVER_RUNBOOK.md +95 -0
- package/docs/REQUIREMENTS_COMPLIANCE.md +157 -0
- package/docs/ROLLOUT_PLAN.md +273 -0
- package/docs/SESSION_HANDOFF.md +298 -0
- package/docs/STORAGE_METHOD_WIRING.md +176 -0
- package/docs/client.md +3765 -1325
- package/docs/monitor.md +255 -33
- package/docs/services.md +304 -280
- package/docs/setup.md +24 -24
- package/docs/storage.md +2775 -243
- package/docs/v3-upgrade/index.html +911 -0
- package/docs/wallet.md +4956 -9455
- 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/Setup.d.ts +6 -6
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +5 -5
- package/out/src/Setup.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/ShamirWalletManager.d.ts +3 -3
- package/out/src/ShamirWalletManager.d.ts.map +1 -1
- package/out/src/ShamirWalletManager.js +6 -6
- package/out/src/ShamirWalletManager.js.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/__tests/CWIStyleWalletManager.test.js +6 -6
- package/out/src/__tests/CWIStyleWalletManager.test.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.checks.test.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js +8 -8
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +0 -2
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.js +6 -18
- package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.pmodules.test.js +7 -7
- package/out/src/__tests/WalletPermissionsManager.pmodules.test.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js +1 -1
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js.map +1 -1
- package/out/src/entropy/EntropyCollector.d.ts +1 -1
- package/out/src/entropy/EntropyCollector.d.ts.map +1 -1
- package/out/src/entropy/EntropyCollector.js +3 -3
- package/out/src/entropy/EntropyCollector.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/MonitorDaemon.d.ts.map +1 -1
- package/out/src/monitor/MonitorDaemon.js +24 -23
- package/out/src/monitor/MonitorDaemon.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/__test/MonitorDaemon.man.test.js.map +1 -1
- package/out/src/monitor/index.all.d.ts +1 -0
- package/out/src/monitor/index.all.d.ts.map +1 -1
- package/out/src/monitor/index.all.js +1 -0
- package/out/src/monitor/index.all.js.map +1 -1
- 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/TaskSyncWhenIdle.d.ts +1 -1
- package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSyncWhenIdle.js +1 -4
- package/out/src/monitor/tasks/TaskSyncWhenIdle.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/monitor/tasks/__tests/TaskArcSSE.test.js.map +1 -1
- package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.js.map +1 -1
- package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.js.map +1 -1
- package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.js.map +1 -1
- package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.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/__test/CertificateLifeCycle.test.js +3 -3
- package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
- package/out/src/sdk/__test/WalletError.test.js +4 -4
- package/out/src/sdk/__test/WalletError.test.js.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/__tests/ARC.man.test.js.map +1 -1
- package/out/src/services/__tests/ARC.timeout.man.test.js +3 -3
- package/out/src/services/__tests/ARC.timeout.man.test.js.map +1 -1
- package/out/src/services/__tests/ArcGorillaPool.man.test.js.map +1 -1
- package/out/src/services/__tests/bitrails.test.js +3 -2
- package/out/src/services/__tests/bitrails.test.js.map +1 -1
- package/out/src/services/__tests/getFiatExchangeRate.test.js.map +1 -1
- package/out/src/services/__tests/postBeef.test.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/__tests/ChaintracksChainTracker.test.js +2 -2
- package/out/src/services/chaintracker/__tests/ChaintracksChainTracker.test.js.map +1 -1
- package/out/src/services/chaintracker/__tests/ChaintracksServiceClient.test.js +1 -1
- package/out/src/services/chaintracker/__tests/ChaintracksServiceClient.test.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/ChaintracksService.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.js +5 -22
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.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/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.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/LiveIngestorTeranodeP2P.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js +1 -8
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.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/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +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/Ingest/__tests/BulkIngestorCDNBabbage.test.js +2 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.js +4 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.man.test.js +11 -10
- package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.man.test.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/ChaintracksKnexMigrations.d.ts +3 -3
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +13 -13
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.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/ChaintracksStorageKnex.d.ts +1 -2
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +25 -22
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.js +0 -21
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.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/Storage/__tests/ChaintracksStorageIdb.test.js +2 -1
- package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js +8 -7
- package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksCDN.man.test.js +6 -5
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksCDN.man.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js +10 -9
- package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.js +14 -17
- package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js +3 -2
- package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.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/createDefaultKnexChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js +6 -8
- package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.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/createKnexChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.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/ChaintracksFs.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js +13 -13
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.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/__tests/BulkFileDataManager.test.js +11 -11
- package/out/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.js +1 -1
- package/out/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.js +2 -2
- package/out/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.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/__tests/ArcSSEClient.test.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/StorageKnex.d.ts +143 -3
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +829 -222
- package/out/src/storage/StorageKnex.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/__test/StorageIdb.test.js +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
- package/out/src/storage/__test/adminStats.man.test.js +1 -1
- package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
- package/out/src/storage/__test/findStaleMerkleRoots.test.js.map +1 -1
- package/out/src/storage/__test/findStaleMerkleRootsKnex.test.js.map +1 -1
- package/out/src/storage/__test/getBeefForTransaction.test.js +1 -1
- package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminServer.js +12 -12
- package/out/src/storage/adminServer/adminServer.js.map +1 -1
- package/out/src/storage/adminServer/adminUi.d.ts.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/__test/GenerateChange/generateChangeSdk.test.js +3 -3
- package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js.map +1 -1
- package/out/src/storage/methods/__test/offsetKey.test.js +1 -1
- package/out/src/storage/methods/__test/offsetKey.test.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/listActionsKnex.d.ts +50 -1
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js +256 -169
- package/out/src/storage/methods/listActionsKnex.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/listOutputsKnex.d.ts +1 -1
- package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.js +78 -32
- package/out/src/storage/methods/listOutputsKnex.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/purgeData.d.ts +1 -1
- package/out/src/storage/methods/purgeData.d.ts.map +1 -1
- package/out/src/storage/methods/purgeData.js +54 -27
- package/out/src/storage/methods/purgeData.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/reviewStatus.d.ts +1 -1
- package/out/src/storage/methods/reviewStatus.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatus.js +35 -18
- package/out/src/storage/methods/reviewStatus.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.Buffer.d.ts.map +1 -1
- package/out/src/storage/methods/utils.Buffer.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/StorageMobile.d.ts +7 -275
- package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageMobile.js +12 -421
- package/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +11 -8
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +51 -102
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/__test/StorageClient.man.test.js +6 -6
- package/out/src/storage/remoting/__test/StorageClient.man.test.js.map +1 -1
- package/out/src/storage/remoting/__test/StorageClient.test.js +8 -8
- package/out/src/storage/remoting/__test/StorageClient.test.js.map +1 -1
- package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.d.ts +2 -0
- package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.d.ts.map +1 -0
- package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.js +268 -0
- package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.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/KnexMigrations.d.ts +3 -3
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +160 -9
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- 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/__tests/backfill.runner.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/backfill.runner.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/backfill.runner.test.js +148 -0
- package/out/src/storage/schema/__tests/backfill.runner.test.js.map +1 -0
- package/out/src/storage/schema/__tests/backfill.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/backfill.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/backfill.test.js +96 -0
- package/out/src/storage/schema/__tests/backfill.test.js.map +1 -0
- package/out/src/storage/schema/__tests/processingFsm.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/processingFsm.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/processingFsm.test.js +42 -0
- package/out/src/storage/schema/__tests/processingFsm.test.js.map +1 -0
- package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.js +82 -0
- package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.js.map +1 -0
- package/out/src/storage/schema/__tests/spendabilityRule.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/spendabilityRule.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/spendabilityRule.test.js +29 -0
- package/out/src/storage/schema/__tests/spendabilityRule.test.js.map +1 -0
- package/out/src/storage/schema/__tests/v7Backfill.runner.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/v7Backfill.runner.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/v7Backfill.runner.test.js +148 -0
- package/out/src/storage/schema/__tests/v7Backfill.runner.test.js.map +1 -0
- package/out/src/storage/schema/__tests/v7Backfill.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/v7Backfill.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/v7Backfill.test.js +96 -0
- package/out/src/storage/schema/__tests/v7Backfill.test.js.map +1 -0
- package/out/src/storage/schema/__tests/v7Fsm.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/v7Fsm.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/v7Fsm.test.js +42 -0
- package/out/src/storage/schema/__tests/v7Fsm.test.js.map +1 -0
- package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.js +77 -0
- package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.js.map +1 -0
- package/out/src/storage/schema/__tests/v7Spendability.test.d.ts +2 -0
- package/out/src/storage/schema/__tests/v7Spendability.test.d.ts.map +1 -0
- package/out/src/storage/schema/__tests/v7Spendability.test.js +29 -0
- package/out/src/storage/schema/__tests/v7Spendability.test.js.map +1 -0
- package/out/src/storage/schema/backfill.d.ts +35 -0
- package/out/src/storage/schema/backfill.d.ts.map +1 -0
- package/out/src/storage/schema/backfill.idb.d.ts +32 -0
- package/out/src/storage/schema/backfill.idb.d.ts.map +1 -0
- package/out/src/storage/schema/backfill.idb.js +95 -0
- package/out/src/storage/schema/backfill.idb.js.map +1 -0
- package/out/src/storage/schema/backfill.js +150 -0
- package/out/src/storage/schema/backfill.js.map +1 -0
- package/out/src/storage/schema/backfill.knex.d.ts +32 -0
- package/out/src/storage/schema/backfill.knex.d.ts.map +1 -0
- package/out/src/storage/schema/backfill.knex.js +240 -0
- package/out/src/storage/schema/backfill.knex.js.map +1 -0
- package/out/src/storage/schema/backfill.runner.d.ts +63 -0
- package/out/src/storage/schema/backfill.runner.d.ts.map +1 -0
- package/out/src/storage/schema/backfill.runner.js +64 -0
- package/out/src/storage/schema/backfill.runner.js.map +1 -0
- package/out/src/storage/schema/coinbaseMaturityBackfill.d.ts +25 -0
- package/out/src/storage/schema/coinbaseMaturityBackfill.d.ts.map +1 -0
- package/out/src/storage/schema/coinbaseMaturityBackfill.js +75 -0
- package/out/src/storage/schema/coinbaseMaturityBackfill.js.map +1 -0
- 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/entities/__tests/CertificateFieldTests.test.js +1 -1
- package/out/src/storage/schema/entities/__tests/CertificateFieldTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/CertificateTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/CommissionTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js +3 -3
- package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTests.test.js +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/ProvenTxReqTests.test.js +32 -0
- package/out/src/storage/schema/entities/__tests/ProvenTxReqTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js +6 -6
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js +3 -3
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/stampLogTests.test.js +3 -3
- package/out/src/storage/schema/entities/__tests/usersTests.test.js +1 -1
- package/out/src/storage/schema/entities/__tests/usersTests.test.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/schemaCutover.d.ts +34 -0
- package/out/src/storage/schema/schemaCutover.d.ts.map +1 -0
- package/out/src/storage/schema/schemaCutover.js +230 -0
- package/out/src/storage/schema/schemaCutover.js.map +1 -0
- package/out/src/storage/schema/schemaCutoverIdb.d.ts +26 -0
- package/out/src/storage/schema/schemaCutoverIdb.d.ts.map +1 -0
- package/out/src/storage/schema/schemaCutoverIdb.js +90 -0
- package/out/src/storage/schema/schemaCutoverIdb.js.map +1 -0
- package/out/src/storage/schema/spendabilityRefresh.d.ts +49 -0
- package/out/src/storage/schema/spendabilityRefresh.d.ts.map +1 -0
- package/out/src/storage/schema/spendabilityRefresh.js +120 -0
- package/out/src/storage/schema/spendabilityRefresh.js.map +1 -0
- package/out/src/storage/schema/spendabilityRule.d.ts +45 -0
- package/out/src/storage/schema/spendabilityRule.d.ts.map +1 -0
- package/out/src/storage/schema/spendabilityRule.js +52 -0
- package/out/src/storage/schema/spendabilityRule.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/v7Backfill.d.ts +35 -0
- package/out/src/storage/schema/v7Backfill.d.ts.map +1 -0
- package/out/src/storage/schema/v7Backfill.idb.d.ts +32 -0
- package/out/src/storage/schema/v7Backfill.idb.d.ts.map +1 -0
- package/out/src/storage/schema/v7Backfill.idb.js +95 -0
- package/out/src/storage/schema/v7Backfill.idb.js.map +1 -0
- package/out/src/storage/schema/v7Backfill.js +150 -0
- package/out/src/storage/schema/v7Backfill.js.map +1 -0
- package/out/src/storage/schema/v7Backfill.knex.d.ts +32 -0
- package/out/src/storage/schema/v7Backfill.knex.d.ts.map +1 -0
- package/out/src/storage/schema/v7Backfill.knex.js +240 -0
- package/out/src/storage/schema/v7Backfill.knex.js.map +1 -0
- package/out/src/storage/schema/v7Backfill.runner.d.ts +63 -0
- package/out/src/storage/schema/v7Backfill.runner.d.ts.map +1 -0
- package/out/src/storage/schema/v7Backfill.runner.js +64 -0
- package/out/src/storage/schema/v7Backfill.runner.js.map +1 -0
- package/out/src/storage/schema/v7CoinbaseMaturityBackfill.d.ts +25 -0
- package/out/src/storage/schema/v7CoinbaseMaturityBackfill.d.ts.map +1 -0
- package/out/src/storage/schema/v7CoinbaseMaturityBackfill.js +75 -0
- package/out/src/storage/schema/v7CoinbaseMaturityBackfill.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/v7Cutover.d.ts +34 -0
- package/out/src/storage/schema/v7Cutover.d.ts.map +1 -0
- package/out/src/storage/schema/v7Cutover.js +223 -0
- package/out/src/storage/schema/v7Cutover.js.map +1 -0
- package/out/src/storage/schema/v7CutoverIdb.d.ts +26 -0
- package/out/src/storage/schema/v7CutoverIdb.d.ts.map +1 -0
- package/out/src/storage/schema/v7CutoverIdb.js +90 -0
- package/out/src/storage/schema/v7CutoverIdb.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/v7Spendability.d.ts +45 -0
- package/out/src/storage/schema/v7Spendability.d.ts.map +1 -0
- package/out/src/storage/schema/v7Spendability.js +52 -0
- package/out/src/storage/schema/v7Spendability.js.map +1 -0
- package/out/src/storage/schema/v7SpendabilityRefresh.d.ts +49 -0
- package/out/src/storage/schema/v7SpendabilityRefresh.d.ts.map +1 -0
- package/out/src/storage/schema/v7SpendabilityRefresh.js +111 -0
- package/out/src/storage/schema/v7SpendabilityRefresh.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/storage/sync/StorageMySQLDojoReader.d.ts +1 -2
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +37 -32
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/Format.d.ts.map +1 -1
- package/out/src/utility/Format.js +11 -9
- package/out/src/utility/Format.js.map +1 -1
- 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.buffer.d.ts +5 -3
- package/out/src/utility/utilityHelpers.buffer.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.buffer.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 +28 -21
package/CHANGELOG.md
CHANGED
|
@@ -4,14 +4,9 @@ This document captures the history of significant changes to the wallet-toolbox
|
|
|
4
4
|
The git commit history contains the details but is unable to draw
|
|
5
5
|
attention to changes that materially alter behavior or extend functionality.
|
|
6
6
|
|
|
7
|
-
## wallet-toolbox
|
|
7
|
+
## wallet-toolbox (unreleased)
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
|
|
11
|
-
## wallet-toolbox 2.1.22
|
|
12
|
-
|
|
13
|
-
- StorageIdb: drop unused import and dead non-null assertions
|
|
14
|
-
- StorageIdb: align filter/update semantics with Knex canon
|
|
9
|
+
- Fix: auto-evict confirmed-stale inputs after any failed broadcast, regardless of how the broadcaster classifies the failure. When a tx is marked failed, `updateTransactionStatus(failed)` previously restored ALL consumed inputs to `spendable: true` to support transient retry. That's correct for fee/script/malformed failures where inputs are still UTXOs, but wrong for cases where the input has been spent on chain by a different tx — the wallet then picks the same already-spent UTXO on the next createAction → infinite missing-inputs broadcast loop. The new `markStaleInputsAsSpent` helper runs after `updateTransactionsStatus(failed)` and queries `services.isUtxo` per consumed input (concurrently across inputs via `Promise.all`), overriding `spendable: false` only for inputs the chain authoritatively confirms are spent. Inputs still on chain (transient/false-positive failures) keep the existing retry semantics. Service errors leave inputs untouched (eviction is opt-in based on positive evidence). Helper is broadcaster-agnostic — applies to ARC's `doubleSpend` (`SEEN_IN_ORPHAN_MEMPOOL`) and to WhatsOnChain/Bitails `invalidTx` (`missing-inputs`) classifications alike. Pre-broadcast races where concurrent createActions reach the same UTXO across separate app processes remain out of scope; that's a separate class of double-spend with its own design space (TaskReviewUtxos enqueue, locked-input semantics).
|
|
15
10
|
|
|
16
11
|
## wallet-toolbox 2.1.21
|
|
17
12
|
|
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
# createAction.ts Wiring — Blockers Analysis
|
|
2
|
+
|
|
3
|
+
## Decision: Analysis doc over immediate implementation
|
|
4
|
+
|
|
5
|
+
Attempting minimal wiring of `createAction.ts` in isolation would immediately break **all**
|
|
6
|
+
existing `createAction` tests. Those tests use `createLegacyWalletSQLiteCopy()` which calls
|
|
7
|
+
`activeStorage.migrate()` but NOT `runSchemaCutover()`. The `transactions_new` and `actions` tables
|
|
8
|
+
do not exist in those test databases. Any `TransactionService` call inside `createAction.ts`
|
|
9
|
+
would throw `no such table: transactions_new` at runtime, causing all 50+ createAction tests to fail.
|
|
10
|
+
|
|
11
|
+
Additionally, `createAction.ts` cannot safely create new-schema rows in isolation because the real `txid`
|
|
12
|
+
is unknown at `createAction` time. An abandoned sentinel in `transactions_new` with no corresponding
|
|
13
|
+
sentinel-rewrite in `processAction.ts` would leave every new transaction in a permanently broken
|
|
14
|
+
new-schema state. The two methods must be wired together.
|
|
15
|
+
|
|
16
|
+
This document enumerates three concrete options with exact line-level change maps and effort
|
|
17
|
+
estimates so the next engineer can make an informed implementation choice.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. API contract `createAction` must preserve
|
|
22
|
+
|
|
23
|
+
`createAction(storage: StorageProvider, auth: AuthId, vargs: ValidCreateActionArgs)`
|
|
24
|
+
returns `StorageCreateActionResult` with these fields:
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
reference string (randomBytesBase64(12) — set in createNewTxRecord, line 482)
|
|
28
|
+
version number (from vargs)
|
|
29
|
+
lockTime number (from vargs)
|
|
30
|
+
inputs StorageCreateTransactionSdkInput[]
|
|
31
|
+
outputs StorageCreateTransactionSdkOutput[]
|
|
32
|
+
derivationPrefix string
|
|
33
|
+
inputBeef number[] | undefined
|
|
34
|
+
noSendChangeOutputVouts number[] | undefined
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The `reference` value is the **only cross-method linkage** between `createAction` and
|
|
38
|
+
`processAction`. When `processAction` is later called, it locates the pending transaction via:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
// processAction.ts line 307-311
|
|
42
|
+
const transaction = verifyOne(
|
|
43
|
+
await storage.findTransactions({ partial: { userId, reference: params.reference } })
|
|
44
|
+
)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
This means `reference` is available in `processAction`, which is critical for all three options below.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## 2. The reference/txid timing problem
|
|
52
|
+
|
|
53
|
+
### Timeline
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
createAction called
|
|
57
|
+
↓ storage.insertTransaction({ txid: undefined, status: 'unsigned', reference: R })
|
|
58
|
+
↓ legacy transactionId T allocated
|
|
59
|
+
↓ outputs/labels created, satoshis computed
|
|
60
|
+
↓ returns reference R to caller
|
|
61
|
+
(wallet signs the transaction outside storage layer)
|
|
62
|
+
processAction called with { reference: R, txid: REAL_TXID, rawTx: [...] }
|
|
63
|
+
↓ storage.findTransactions({ userId, reference: R }) → retrieves T
|
|
64
|
+
↓ storage.insertTransaction + updateTransaction with real txid
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Schema constraint
|
|
68
|
+
|
|
69
|
+
`transactions_new.txid VARCHAR(64) NOT NULL UNIQUE` (migration line 101). Every row must have
|
|
70
|
+
a non-null, unique, 64-char-max txid **at insert time**. The real txid is not known until
|
|
71
|
+
signing completes outside the storage layer.
|
|
72
|
+
|
|
73
|
+
### The keyspace difference for labels
|
|
74
|
+
|
|
75
|
+
Post-cutover `tx_labels_map.transactionId` is an FK to `actions.actionId` (not
|
|
76
|
+
`transactions_new.transactionId`). The current `createNewTxRecord` (lines 493-496) writes:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
for (const label of vargs.labels) {
|
|
80
|
+
const txLabel = await storage.findOrInsertTxLabel(userId, label)
|
|
81
|
+
await storage.findOrInsertTxLabelMap(
|
|
82
|
+
verifyId(newTx.transactionId), // ← legacy transactionId
|
|
83
|
+
verifyId(txLabel.txLabelId)
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Post-cutover this must pass `actionId` instead. This cannot be fixed until an `actions` row
|
|
89
|
+
exists, which requires `transactionId` from a `transactions_new` row, which requires `txid`.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 3. Three concrete solution sketches
|
|
94
|
+
|
|
95
|
+
### Option A — Sentinel txid (recommended)
|
|
96
|
+
|
|
97
|
+
**Concept:** Insert a `transactions_new` row immediately with a unique placeholder txid
|
|
98
|
+
`'pending:' + legacyTransactionId` (e.g. `'pending:42'`). The sentinel is at most 18 chars,
|
|
99
|
+
well under the VARCHAR(64) limit. It is guaranteed unique because `legacyTransactionId` is
|
|
100
|
+
auto-increment unique. `processAction` rewrites it to the real txid when it commits.
|
|
101
|
+
|
|
102
|
+
#### Changes in `createAction.ts`
|
|
103
|
+
|
|
104
|
+
**Prerequisite (one-time):** Add a `getTransactionService(): TransactionService | undefined` method
|
|
105
|
+
to `StorageProvider` (returns `undefined` by default). Override it in `StorageKnex` to return
|
|
106
|
+
`new TransactionService(this.knex)`. This avoids a type-unsafe cast while keeping the
|
|
107
|
+
`StorageProvider` interface stable.
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
StorageProvider.ts +6 lines abstract/default getTransactionService()
|
|
111
|
+
StorageKnex.ts +7 lines override getTransactionService()
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**In `createNewTxRecord`** (lines 468-499):
|
|
115
|
+
|
|
116
|
+
After line 491 (`newTx.transactionId = await storage.insertTransaction(newTx)`), add:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
// New-schema additive wiring — create a new-schema transaction row with a pending sentinel txid.
|
|
120
|
+
// processAction MUST rewrite this sentinel to the real txid after signing.
|
|
121
|
+
// See CREATEACTION_BLOCKERS.md §3 Option A.
|
|
122
|
+
const txSvc = storage.getTransactionService()
|
|
123
|
+
if (txSvc != null) {
|
|
124
|
+
const sentinelTxid = `pending:${newTx.transactionId}` as string
|
|
125
|
+
const newTx = await txSvc.create({
|
|
126
|
+
txid: sentinelTxid,
|
|
127
|
+
processing: 'queued',
|
|
128
|
+
inputBeef: storageBeef.toBinary()
|
|
129
|
+
})
|
|
130
|
+
// Create the per-user actions row (satoshisDelta=0, updated after fund)
|
|
131
|
+
const actionId = await txSvc.createAction({
|
|
132
|
+
userId,
|
|
133
|
+
transactionId: newTx.transactionId,
|
|
134
|
+
reference: newTx.reference,
|
|
135
|
+
description: vargs.description,
|
|
136
|
+
isOutgoing: true,
|
|
137
|
+
satoshisDelta: 0
|
|
138
|
+
})
|
|
139
|
+
newTx._actionId = actionId // stash on in-memory object only (no DB column)
|
|
140
|
+
newTx._newTransactionId = newTx.transactionId
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
After line 142 (`await storage.updateTransaction(newTx.transactionId, { satoshis })`), add:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
// New-schema additive wiring — update satoshisDelta now that funding is known.
|
|
148
|
+
// TODO(processAction-wiring): migrate tx_labels_map writes to pass actionId here
|
|
149
|
+
// once sentinel is replaced with real txid in processAction.
|
|
150
|
+
if (txSvc != null && newTx._actionId != null) {
|
|
151
|
+
await txSvc.updateActionSatoshisDelta(newTx._actionId, satoshis)
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The `tx_labels_map` writes (line 495: `findOrInsertTxLabelMap(legacyTransactionId, ...)`) remain
|
|
156
|
+
using the legacy `transactionId` for now. Mark with comment:
|
|
157
|
+
```typescript
|
|
158
|
+
// TODO(post-cutover-label-wiring): post-cutover this must pass actionId; deferred until
|
|
159
|
+
// processAction-wiring resolves the sentinel-to-txid rewrite.
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
#### Changes in `processAction.ts`
|
|
163
|
+
|
|
164
|
+
In `validateCommitNewTxToStorageArgs`, after line 318 (`const transactionId = verifyId(...)`),
|
|
165
|
+
the legacy `transactionId` is known. Add sentinel-rewrite:
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// New-schema additive wiring — rewrite sentinel txid to real txid now that it is known.
|
|
169
|
+
const txSvc = storage.getTransactionService()
|
|
170
|
+
if (txSvc != null) {
|
|
171
|
+
const sentinel = `pending:${transactionId}` as string
|
|
172
|
+
// Update transactions_new row: sentinel → real txid, attach rawTx
|
|
173
|
+
await txSvc.knex('transactions').where({ txid: sentinel }).update({
|
|
174
|
+
txid: params.txid,
|
|
175
|
+
raw_tx: Buffer.from(params.rawTx),
|
|
176
|
+
input_beef: null, // now stored in proven_tx_reqs / rawTx
|
|
177
|
+
updated_at: new Date()
|
|
178
|
+
})
|
|
179
|
+
// Resolve actionId for subsequent the processing FSM transition
|
|
180
|
+
const found = await txSvc.findActionByUserTxid(userId, params.txid)
|
|
181
|
+
// found.transaction.transactionId is the new-schema transactionId for transitionMany
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Labels must also be rewritten here** (post-cutover): find the action and update
|
|
186
|
+
`tx_labels_map.transactionId` from `legacyTransactionId` to `actionId`. This is the
|
|
187
|
+
"TODO(post-cutover-label-wiring)" left in createAction and completed in processAction wiring.
|
|
188
|
+
|
|
189
|
+
#### Effort
|
|
190
|
+
|
|
191
|
+
| Sub-task | Hours |
|
|
192
|
+
|---|---|
|
|
193
|
+
| Add `getTransactionService()` to StorageProvider + override in StorageKnex | 0.5 |
|
|
194
|
+
| Add sentinel create/satoshis update in `createNewTxRecord` | 1.5 |
|
|
195
|
+
| Write 3 integration tests (pre-cutover skips; post-cutover sentinel created + satoshis) | 2 |
|
|
196
|
+
| Add sentinel-rewrite to `processAction.validateCommitNewTxToStorageArgs` | 1.5 |
|
|
197
|
+
| Migrate `tx_labels_map` writes to use `actionId` post-cutover | 1 |
|
|
198
|
+
| Write 2 integration tests (sentinel resolved; label keyspace correct post-cutover) | 2 |
|
|
199
|
+
| Fix pre-cutover test helpers to skip or guard new-schema calls | 0.5 |
|
|
200
|
+
| **Total** | **~9 hours** |
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### Option B — Defer new-schema row creation entirely to `processAction`
|
|
205
|
+
|
|
206
|
+
**Concept:** Do not touch `createAction.ts` at all. In `processAction.ts`, after the legacy
|
|
207
|
+
transaction row is updated with the real txid (line 421: `storage.updateTransaction(...)`),
|
|
208
|
+
create the new-schema `transactions_new` row and `actions` row in one shot using
|
|
209
|
+
`TransactionService.findOrCreateActionForTxid`.
|
|
210
|
+
|
|
211
|
+
```typescript
|
|
212
|
+
// After commitNewTxToStorage — New-schema additive wiring
|
|
213
|
+
const txSvc = (storage as StorageKnex).getTransactionService?.()
|
|
214
|
+
if (txSvc != null) {
|
|
215
|
+
await txSvc.findOrCreateActionForTxid({
|
|
216
|
+
userId,
|
|
217
|
+
txid: vargs.txid,
|
|
218
|
+
isOutgoing: true,
|
|
219
|
+
description: vargs.transaction.description!,
|
|
220
|
+
satoshisDelta: vargs.transaction.satoshis!,
|
|
221
|
+
reference: vargs.reference,
|
|
222
|
+
rawTx: vargs.rawTx,
|
|
223
|
+
inputBeef: asArray(vargs.transaction.inputBEEF!),
|
|
224
|
+
processing: vargs.isNoSend ? 'nosend' : 'queued'
|
|
225
|
+
})
|
|
226
|
+
}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### Advantages
|
|
230
|
+
- Zero changes to `createAction.ts`
|
|
231
|
+
- No sentinel/rewrite complexity
|
|
232
|
+
- Single location for new-schema row creation (processAction)
|
|
233
|
+
- `tx_labels_map` migration can also happen here
|
|
234
|
+
|
|
235
|
+
#### Disadvantages
|
|
236
|
+
- new-schema rows don't exist for the `createAction → processAction` gap. If the wallet crashes between
|
|
237
|
+
`createAction` and `processAction`, the new-schema layer has no record of the pending transaction.
|
|
238
|
+
Recovery depends entirely on the legacy table.
|
|
239
|
+
- `tx_labels_map.transactionId` must still be migrated to use `actionId`. In `processAction`
|
|
240
|
+
we'd need to UPDATE those rows from `legacyTransactionId` to `actionId`.
|
|
241
|
+
- When `processAction` calls `findOrCreateActionForTxid`, the `satoshisDelta` must come from
|
|
242
|
+
`transaction.satoshis` (legacy column). Post-cutover this column is gone. So B only works in
|
|
243
|
+
the legacy-table era, not post-cutover.
|
|
244
|
+
|
|
245
|
+
**Not recommended** for a definitive schema migration path, but acceptable as a bridge in a
|
|
246
|
+
pre-cutover world since `satoshis` is still readable.
|
|
247
|
+
|
|
248
|
+
#### Effort
|
|
249
|
+
|
|
250
|
+
| Sub-task | Hours |
|
|
251
|
+
|---|---|
|
|
252
|
+
| Add `getTransactionService()` to StorageProvider + override in StorageKnex | 0.5 |
|
|
253
|
+
| Add `findOrCreateActionForTxid` call in `commitNewTxToStorage` | 1.5 |
|
|
254
|
+
| Migrate `tx_labels_map` transactionId→actionId in processAction | 1 |
|
|
255
|
+
| Write 3 integration tests | 2 |
|
|
256
|
+
| **Total** | **~5 hours** |
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
### Option C — Schema change: make `txid` nullable in `transactions_new`
|
|
261
|
+
|
|
262
|
+
**Concept:** Add a migration to ALTER `transactions_new` to allow `txid` to be NULL (with UNIQUE
|
|
263
|
+
nullable — SQL NULL ≠ NULL so multiple NULLs are allowed). Insert `transactions_new` rows with
|
|
264
|
+
`txid = NULL` at `createAction` time. Populate `txid` at `processAction` time.
|
|
265
|
+
|
|
266
|
+
#### Advantages
|
|
267
|
+
- No sentinel hackery
|
|
268
|
+
- Semantically clean: `txid = NULL` means "unsigned, not yet broadcast"
|
|
269
|
+
|
|
270
|
+
#### Disadvantages
|
|
271
|
+
- Requires a new migration (migration number management, down path)
|
|
272
|
+
- Post-cutover code that does `WHERE txid = ?` must handle the NULL case
|
|
273
|
+
- `findOrCreateActionForTxid` signature would need adjustment (txid optional)
|
|
274
|
+
- `TransactionService.findByTxid` would need a NULL guard
|
|
275
|
+
- More blast radius than Option A or B
|
|
276
|
+
|
|
277
|
+
#### Effort
|
|
278
|
+
|
|
279
|
+
| Sub-task | Hours |
|
|
280
|
+
|---|---|
|
|
281
|
+
| New migration + down path | 1 |
|
|
282
|
+
| Update `findOrCreateActionForTxid`, `findByTxid`, `create` to accept null txid | 2 |
|
|
283
|
+
| Update createAction.ts to insert null-txid new-schema row | 1.5 |
|
|
284
|
+
| Update processAction.ts to populate txid | 1 |
|
|
285
|
+
| Update all queries that join/filter on txid to handle null | 1.5 |
|
|
286
|
+
| Integration tests | 2.5 |
|
|
287
|
+
| **Total** | **~9.5 hours** |
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
291
|
+
## 4. Specific lines changed per option
|
|
292
|
+
|
|
293
|
+
### Option A changes
|
|
294
|
+
|
|
295
|
+
| File | Line(s) | Change |
|
|
296
|
+
|---|---|---|
|
|
297
|
+
| `StorageProvider.ts` | ~73 (class body) | Add `getTransactionService(): TransactionService \| undefined { return undefined }` |
|
|
298
|
+
| `StorageKnex.ts` | ~77 (after constructor) | Override `getTransactionService() { return new TransactionService(this.knex) }` |
|
|
299
|
+
| `createAction.ts` | 491 (after `insertTransaction`) | Add sentinel create + action create (see §3-A) |
|
|
300
|
+
| `createAction.ts` | 142 (after `updateTransaction satoshis`) | Add `updateActionSatoshisDelta` call |
|
|
301
|
+
| `createAction.ts` | 495 (`findOrInsertTxLabelMap`) | Add `// TODO(post-cutover-label-wiring)` comment |
|
|
302
|
+
| `processAction.ts` | 318 (after `transactionId = verifyId`) | Add sentinel-rewrite UPDATE + label migration |
|
|
303
|
+
|
|
304
|
+
### Option B changes
|
|
305
|
+
|
|
306
|
+
| File | Line(s) | Change |
|
|
307
|
+
|---|---|---|
|
|
308
|
+
| `StorageProvider.ts` | ~73 | Add `getTransactionService()` |
|
|
309
|
+
| `StorageKnex.ts` | ~77 | Override `getTransactionService()` |
|
|
310
|
+
| `processAction.ts` | ~421 (after `updateTransaction`) | Add `findOrCreateActionForTxid` call + label migration |
|
|
311
|
+
|
|
312
|
+
### Option C changes
|
|
313
|
+
|
|
314
|
+
| File | Line(s) | Change |
|
|
315
|
+
|---|---|---|
|
|
316
|
+
| `KnexMigrations.ts` | After migration `2026-05-11-001` | New migration altering `txid` to nullable |
|
|
317
|
+
| `transactionService.ts` | `create`, `findByTxid`, `findOrCreateActionForTxid` | Accept/handle null txid |
|
|
318
|
+
| `createAction.ts` | 491 | Insert null-txid new-schema row |
|
|
319
|
+
| `processAction.ts` | 318 | Populate txid on new-schema row |
|
|
320
|
+
| `transactionCrud.ts` | `insertTransactionNew` | Allow null txid |
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 5. Recommendation
|
|
325
|
+
|
|
326
|
+
**Use Option B** for the current migration phase (pre-cutover, legacy tables still in-place):
|
|
327
|
+
|
|
328
|
+
1. It has the lowest risk to existing tests — **zero changes to `createAction.ts`**.
|
|
329
|
+
2. The entire new-schema row creation happens atomically in `processAction.commitNewTxToStorage`
|
|
330
|
+
where both the real `txid` and the legacy `satoshis` (still readable) are known.
|
|
331
|
+
3. `tx_labels_map` migration from `legacyTransactionId` to `actionId` can be done in one
|
|
332
|
+
place in `processAction` rather than split across two methods.
|
|
333
|
+
4. A crash in the `createAction`→`processAction` gap leaves an orphan new-schema row risk (Option A)
|
|
334
|
+
or a gap with no new-schema row (Option B) — both are acceptable since the legacy table is the
|
|
335
|
+
source of truth until full cutover.
|
|
336
|
+
5. The `findOrCreateActionForTxid` method is already implemented and covers both the
|
|
337
|
+
"brand new txid" and "txid seen before via internalizeAction" cases.
|
|
338
|
+
|
|
339
|
+
**Migration label fix in Option B** (needed in `processAction`):
|
|
340
|
+
```typescript
|
|
341
|
+
// After findOrCreateActionForTxid resolves actionId:
|
|
342
|
+
// Update tx_labels_map rows that were written with legacyTransactionId → actionId
|
|
343
|
+
await storage.knex('tx_labels_map')
|
|
344
|
+
.where({ transactionId: legacyTransactionId })
|
|
345
|
+
.update({ transactionId: actionId })
|
|
346
|
+
```
|
|
347
|
+
(Note: this UPDATE is post-cutover only — pre-cutover `tx_labels_map.transactionId` is still
|
|
348
|
+
the legacy transactionId. Guard with `if (txSvc != null)` and ensure it runs inside the same
|
|
349
|
+
DB transaction as `commitNewTxToStorage`.)
|
|
350
|
+
|
|
351
|
+
**Switch to Option A** if the `createAction`→`processAction` gap recovery becomes a
|
|
352
|
+
production concern (e.g. monitoring needs to see unsigned transactions in the new-schema layer).
|
|
353
|
+
At that point the sentinel approach provides visibility across the full lifecycle.
|
|
354
|
+
|
|
355
|
+
---
|
|
356
|
+
|
|
357
|
+
## 6. Prerequisites for either option
|
|
358
|
+
|
|
359
|
+
Before coding either Option A or B:
|
|
360
|
+
|
|
361
|
+
1. **`getTransactionService()` on StorageProvider** (0.5h) — needed by both options. Both `createAction.ts`
|
|
362
|
+
and `processAction.ts` take `storage: StorageProvider` (not `StorageKnex`). Without this
|
|
363
|
+
accessor, accessing `storage.knex` requires a type-unsafe cast. One clean interface method
|
|
364
|
+
isolates the coupling.
|
|
365
|
+
|
|
366
|
+
2. **Test helper: post-cutover setup** — both options add new-schema writes that require `transactions_new`
|
|
367
|
+
to exist. New integration tests must use a test helper that calls `runSchemaCutover()`. The
|
|
368
|
+
pattern already established in `test/storage/transactionServiceExpansion.test.ts` (uses
|
|
369
|
+
`createSQLiteTestSetup2Wallet` + `runSchemaCutover`) is the model.
|
|
370
|
+
|
|
371
|
+
3. **Existing createAction tests must continue to pass** — both options guard new-schema calls with
|
|
372
|
+
`if (txSvc != null)`. Pre-cutover databases return `undefined` from `getTransactionService()` is
|
|
373
|
+
incorrect; `getTransactionService()` always returns a service (the Knex tables just won't exist).
|
|
374
|
+
The correct guard is: catch the "no such table" error and log a warning, or check
|
|
375
|
+
`storage.isCutoverDone()` (a flag that could be added to StorageKnex). The simplest
|
|
376
|
+
guard for Option B is to wrap the entire new-schema block in a try/catch that silently no-ops on
|
|
377
|
+
"no such table" errors during the pre-cutover test era.
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## 7. Summary table
|
|
382
|
+
|
|
383
|
+
| Criterion | Option A (sentinel) | Option B (defer to processAction) | Option C (nullable txid) |
|
|
384
|
+
|---|---|---|---|
|
|
385
|
+
| createAction.ts changes | Yes (additive) | None | Yes (additive) |
|
|
386
|
+
| processAction.ts changes | Yes (sentinel rewrite) | Yes (new-schema create) | Yes (populate txid) |
|
|
387
|
+
| Schema migration needed | No | No | Yes |
|
|
388
|
+
| Crash-gap new-schema visibility | Yes (sentinel row) | No (new row only after sign) | Yes (null-txid row) |
|
|
389
|
+
| Existing test breakage risk | Medium (needs guard) | Low (zero createAction changes) | Medium (nullable queries) |
|
|
390
|
+
| Effort (hours) | ~9 | ~5 | ~9.5 |
|
|
391
|
+
| **Recommendation** | Second choice | **First choice** | Not recommended |
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
# Schema Cutover Runbook
|
|
2
|
+
|
|
3
|
+
Operator guide for running `runSchemaCutover` (Knex) and `runIdbSchemaCutover` (IndexedDB) against a populated production database. Read top to bottom before starting.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 0. Scope
|
|
8
|
+
|
|
9
|
+
The schema cutover is a one-way destructive migration that:
|
|
10
|
+
|
|
11
|
+
- Renames legacy `transactions`, `proven_tx_reqs`, `proven_txs` → `*_legacy`.
|
|
12
|
+
- Swaps the `transactions_new` table in as the new canonical `transactions`.
|
|
13
|
+
- Remaps every FK value in `outputs`, `commissions`, and `tx_labels_map` so that downstream rows continue to reference consistent records.
|
|
14
|
+
- Rebuilds `tx_labels_map.transactionId` so its FK points at `actions(actionId)` instead of the renamed legacy table.
|
|
15
|
+
|
|
16
|
+
Application code is expected to be running the new-schema storage path (TransactionService + post-cutover table names) BEFORE the cutover starts. Code that still queries `proven_txs` or `proven_tx_reqs` will break the moment the rename completes.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 1. Pre-flight
|
|
21
|
+
|
|
22
|
+
| Step | Action |
|
|
23
|
+
|------|--------|
|
|
24
|
+
| 1.1 | Take a full backup of the database file (SQLite) or `mysqldump` (MySQL). Store off-host. |
|
|
25
|
+
| 1.2 | Verify the new-schema additive migration is already applied: `SELECT name FROM sqlite_master WHERE type='table' AND name='transactions_new'` returns one row. |
|
|
26
|
+
| 1.3 | Verify deployed code uses the new-schema storage path. If unsure, do not proceed — roll application forward first. |
|
|
27
|
+
| 1.4 | Run smoke queries against `transactions_new` and `actions` to confirm shape and indexes match expectations. |
|
|
28
|
+
| 1.5 | Estimate the size of legacy data. Cutover scales linearly with row count: each row in `outputs`, `commissions`, and `tx_labels_map` is touched twice (write with offset, write to collapse). Budget roughly 2 minutes per 100k rows on commodity hardware. |
|
|
29
|
+
| 1.6 | Confirm no live writer is mid-flight. Either drain the writer pool or place the application in maintenance mode. |
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 2. Maintenance window
|
|
34
|
+
|
|
35
|
+
Cutover is not online-safe. Concurrent writers can see torn reads while the FK value remap is mid-flight. Plan for downtime equal to the cutover duration plus a smoke-test buffer.
|
|
36
|
+
|
|
37
|
+
| Step | Action |
|
|
38
|
+
|------|--------|
|
|
39
|
+
| 2.1 | Drain writers; confirm no in-flight Wallet transactions. |
|
|
40
|
+
| 2.2 | Stop the Monitor daemon (so it does not race the rename). |
|
|
41
|
+
| 2.3 | Run `runSchemaCutover(knex)`. The function logs progress to the standard logger; capture stdout. |
|
|
42
|
+
| 2.4 | Run `runIdbSchemaCutover(dbName)` for each IDB-backed client database (if applicable). |
|
|
43
|
+
| 2.5 | Verify the renames landed: `SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%_legacy'` should list three tables. `transactions` must exist and `transactions_new` must not. |
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## 3. Smoke tests
|
|
48
|
+
|
|
49
|
+
Run these against production immediately after the cutover and before reopening the writer pool.
|
|
50
|
+
|
|
51
|
+
| Step | Query / assertion |
|
|
52
|
+
|------|-------------------|
|
|
53
|
+
| 3.1 | `SELECT COUNT(*) FROM transactions` matches the row count of `transactions_legacy.txid DISTINCT` from the pre-cutover state. |
|
|
54
|
+
| 3.2 | `SELECT COUNT(*) FROM actions` matches the row count of `transactions_legacy`. |
|
|
55
|
+
| 3.3 | Pick five txids at random from `transactions_legacy`; assert each appears in `transactions` with the correct `processing` state derived from the legacy `proven_tx_reqs_legacy.status`. |
|
|
56
|
+
| 3.4 | `SELECT COUNT(*) FROM outputs o LEFT JOIN transactions t ON t.transactionId = o.transactionId WHERE t.transactionId IS NULL` returns 0 (no orphans). |
|
|
57
|
+
| 3.5 | `SELECT COUNT(*) FROM tx_labels_map lm LEFT JOIN actions a ON a.actionId = lm.transactionId WHERE a.actionId IS NULL` returns 0 (no orphans). |
|
|
58
|
+
| 3.6 | Run `TransactionService.create + transition + recordProof` against a throwaway txid; assert `tx_audit` recorded each event. |
|
|
59
|
+
| 3.7 | Run `refreshOutputsSpendable(knex)` and verify the cached `outputs.spendable` matches the §4 rule on a sample of outputs. |
|
|
60
|
+
| 3.8 | Bring up one Monitor instance, confirm it claims `monitor_lease`, runs one tick, and releases. |
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## 4. Rollback
|
|
65
|
+
|
|
66
|
+
Rollback is best-effort. Once writes have occurred on the post-cutover `transactions` table, those writes have no representation in the renamed legacy tables and rolling back will lose them.
|
|
67
|
+
|
|
68
|
+
If rollback is necessary AND no post-cutover writes have occurred:
|
|
69
|
+
|
|
70
|
+
| Step | Action |
|
|
71
|
+
|------|--------|
|
|
72
|
+
| 4.1 | Stop writers and the Monitor. |
|
|
73
|
+
| 4.2 | Run `rollbackSchemaCutover(knex)`. This reverses the table renames but does not undo the FK value remap. |
|
|
74
|
+
| 4.3 | If FK values need to be restored to legacy IDs, restore from the pre-flight backup (step 1.1). Do not attempt to invert the offset arithmetic manually — the legacy keyspace may have already been recycled. |
|
|
75
|
+
|
|
76
|
+
Otherwise: restore from backup, then redeploy the pre-cutover application code.
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
## 5. Post-cutover hygiene
|
|
81
|
+
|
|
82
|
+
| Step | Action |
|
|
83
|
+
|------|--------|
|
|
84
|
+
| 5.1 | Leave `*_legacy` tables in place for 30 days as a recovery aid. |
|
|
85
|
+
| 5.2 | After the soak period, drop `transactions_legacy`, `proven_tx_reqs_legacy`, `proven_txs_legacy` with the next maintenance window. |
|
|
86
|
+
| 5.3 | Re-run `refreshOutputsSpendable(knex)` after each chain tip advance to keep the cached column in sync. |
|
|
87
|
+
| 5.4 | Monitor `tx_audit.processing.rejected` rows; sustained growth indicates a caller is attempting impossible FSM transitions. |
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 6. Known limitations
|
|
92
|
+
|
|
93
|
+
- `runSchemaCutover` is not wrapped in a single SQL transaction: SQLite requires toggling the `legacy_alter_table` pragma between RENAME statements, which is incompatible with a deferred-commit transaction. The function relies on idempotency + the `transactions_legacy` presence guard to recover from partial failure.
|
|
94
|
+
- `outputs.maturesAtHeight` is populated only for newly inserted coinbase outputs. Legacy coinbase outputs need a one-off backfill before the §4 rule will allow them to be spendable.
|
|
95
|
+
- MySQL is supported but not yet covered by automated integration tests in this repository. Run a staging dry-run before production.
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# New-Schema Compliance Audit — `bsv_wallet_transaction_requirements (1).md` v1.0
|
|
2
|
+
|
|
3
|
+
Comparison of the v1.0 BSV Wallet Transaction Confirmation & UTXO Management Requirements against the new-schema implementation in this repository.
|
|
4
|
+
|
|
5
|
+
Date: 2026-05-12
|
|
6
|
+
Source: `/Users/personal/Downloads/bsv_wallet_transaction_requirements (1).md`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 1. Core Principles (§1)
|
|
11
|
+
|
|
12
|
+
| Principle | Status | Evidence |
|
|
13
|
+
|---|---|---|
|
|
14
|
+
| Confirmed = valid Merkle path AND ≥1 block on top | ✅ | `ProcessingStatus.unconfirmed` (mined into tip block) and `confirmed` (≥1 block deep) distinguished. `processingFsm.ts` `unconfirmed → confirmed` edge. |
|
|
15
|
+
| Outputs table = single source of truth for spendability; status changes drive updates | ✅ | `refreshOutputsSpendable` (`spendabilityRefresh.ts`) derives `outputs.spendable` from `transactions.processing` per §4 rule. |
|
|
16
|
+
| Invalid/doubleSpend outputs toxic, never selected for inputs | ✅ | `isOutputSpendable` returns `false` when processing ∈ `{invalid, doubleSpend}`. `outputs.spendable` flips false during refresh. |
|
|
17
|
+
| Robust for self-created, strict for third-party | ✅ | Routed via legacy `attemptToPostReqsToNetwork` (sequential fallback) for self-created vs `internalizeAction` discard semantics for third-party. |
|
|
18
|
+
| Reorgs must never invalidate a previously valid transaction | ⚠️ **GAP 1** | FSM table currently permits `reorging → invalid` and `reorging → doubleSpend` edges. Spec forbids automatic invalidation during reorg. See §Fixes below. |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 2. Transaction Statuses (§2)
|
|
23
|
+
|
|
24
|
+
Spec status ↔ `ProcessingStatus` mapping:
|
|
25
|
+
|
|
26
|
+
| Spec status | ProcessingStatus | spendable | Notes |
|
|
27
|
+
|---|---|---|---|
|
|
28
|
+
| NoSend | `nosend` | false | ✅ |
|
|
29
|
+
| Sending | `sending` | false | ✅ |
|
|
30
|
+
| Unmined | `sent` | true | ✅ semantics match (broadcast accepted, not yet mined) |
|
|
31
|
+
| Callback | `seen` | true | ✅ semantics match (first confirmation observation) |
|
|
32
|
+
| Unconfirmed | `unconfirmed` | true (coinbase=false) | ✅ |
|
|
33
|
+
| Completed | `confirmed` | true (coinbase=false) | ✅ |
|
|
34
|
+
| Invalid | `invalid` | false | ✅ |
|
|
35
|
+
| DoubleSpend | `doubleSpend` | false | ✅ |
|
|
36
|
+
| Unfail | `unfail` | unchanged | ✅ |
|
|
37
|
+
|
|
38
|
+
New-schema adds (richer state granularity, all subsumed by spec semantics): `queued` (pre-broadcast queue), `seen_multi` (multi-provider confirmation), `reorging` (reorg in progress), `frozen` (operator pause), `nonfinal` (live nLockTime).
|
|
39
|
+
|
|
40
|
+
Coinbase 100-block maturity: ✅ `outputs.matures_at_height` column added by migration `2026-05-13-001`; `backfillCoinbaseMaturity` helper computes `height + 100`. `isOutputSpendable` blocks coinbase until `chain_tip.height >= maturesAtHeight`.
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 3. Happy Path Self-Created (§3)
|
|
45
|
+
|
|
46
|
+
| Step | Processing transition | Status |
|
|
47
|
+
|---|---|---|
|
|
48
|
+
| NoSend → User finalizes | `nosend → queued` or createAction inserts `queued` | ✅ |
|
|
49
|
+
| Sending — broadcast initiated | `queued → sending` | ✅ FSM-permitted |
|
|
50
|
+
| Unmined — service accepted | `sending → sent` | ✅ |
|
|
51
|
+
| Callback — awaiting SSE | `sent → seen` | ✅ |
|
|
52
|
+
| Unconfirmed — Merkle path received | `seen → unconfirmed` | ✅ |
|
|
53
|
+
| Completed — 1 block on top | `unconfirmed → confirmed` | ✅ |
|
|
54
|
+
|
|
55
|
+
Broadcast robustness (sequential fallback ARC → WhatsOnChain → BitTails): preserved in legacy `attemptToPostReqsToNetwork.ts`. New-schema wiring is additive — does not alter fallback ordering.
|
|
56
|
+
|
|
57
|
+
Mixed-results handling (positive preferred, discrepancy logged): preserved. New-schema adds `recordHistoryNote` so discrepancies are now persisted to `tx_audit` for audit trail.
|
|
58
|
+
|
|
59
|
+
`Unfail` admin retry without altering outputs: ✅ FSM permits all states → `unfail` → re-evaluation. `txAudit.auditProcessingTransition` writes audit row but `refreshOutputsSpendable` is not triggered for `unfail` (correct).
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 4. Third-Party Transactions (§4)
|
|
64
|
+
|
|
65
|
+
| Spec rule | Implementation | Status |
|
|
66
|
+
|---|---|---|
|
|
67
|
+
| §4.1 Merkle valid, block below tip → Completed + spendable | `createWithProof({...})` writes new-schema row with `processing: 'confirmed'`, proof fields populated | ✅ |
|
|
68
|
+
| §4.1 Merkle valid, block is tip → Unconfirmed + spendable | Caller can use `transition(..., to: 'unconfirmed')` after `findOrCreateForBroadcast` | ⚠️ Service supports it but no dedicated method enforces tip-vs-deep at callsite. Caller responsible for choosing `confirmed` vs `unconfirmed` based on chain tip comparison. |
|
|
69
|
+
| §4.1 Merkle invalid → discard | `recordProof` accepts but does not validate path against chaintracks. Caller responsible. | ⚠️ Validation lives at internalizeAction call layer; the transaction service is permissive by design. |
|
|
70
|
+
| §4.2 Unconfirmed third-party: start at Sending, broadcast self | `findOrCreateForBroadcast` → caller transitions to `sending` | ✅ |
|
|
71
|
+
| §4.2 Broadcast fails → discard, no DB record | Caller responsibility; `internalizeAction` legacy logic preserved | ✅ |
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 5. Failure Scenarios (§5)
|
|
76
|
+
|
|
77
|
+
| Scenario | Self-Created | Third-Party | Output effect | Status |
|
|
78
|
+
|---|---|---|---|---|
|
|
79
|
+
| Service error (404/500/timeout) | Sequential fallback | Discard | unchanged | ✅ preserved |
|
|
80
|
+
| Mixed results | Prefer positive, log discrepancy | N/A | follow positive | ✅ `recordHistoryNote` persists discrepancy |
|
|
81
|
+
| Rejected by all services | `* → invalid` | Discard | spendable=false | ✅ |
|
|
82
|
+
| Stuck in mempool | Stay Unmined; manual Unfail | Discard | unchanged or false | ✅ FSM permits `unfail → *` |
|
|
83
|
+
| Double-spend (conflicting mined) | `* → doubleSpend` | `* → doubleSpend` if stored | toxic | ✅ |
|
|
84
|
+
| Reorg (block orphaned) | `confirmed → reorging → unconfirmed` | same | preserve current spendable | ⚠️ **GAP 2** — current `refreshOutputsSpendable` flips spendable to false during `reorging` because that state is not in `ProcessingSpendableStatus`. Spec requires preservation. See §Fixes. |
|
|
85
|
+
| Coinbase offset=0 | 100-block maturity | 100-block maturity | spendable=false until ≥100 deep | ✅ `outputs.matures_at_height` |
|
|
86
|
+
|
|
87
|
+
**Critical reorg rule:** "Reorg SHALL never cause Invalid/DoubleSpend" — currently FSM permits direct `reorging → invalid` and `reorging → doubleSpend` edges. See **GAP 1**.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 6. DB Synchronization Rules (§6)
|
|
92
|
+
|
|
93
|
+
| Rule | Implementation | Status |
|
|
94
|
+
|---|---|---|
|
|
95
|
+
| Spendable status set → outputs.spendable = true | `ProcessingSpendableStatus = ['sent','seen','seen_multi','unconfirmed','confirmed']`; `refreshOutputsSpendable` derives | ✅ |
|
|
96
|
+
| Invalid / DoubleSpend → outputs.spendable = false on ALL outputs | `isOutputSpendable` returns false; refresh flips | ✅ |
|
|
97
|
+
| Unfail → no output change | `unfail` is not in spendable set; refresh would change outputs. **Risk**: existing tests may not exercise this. | ⚠️ Verify Unfail does not trigger refresh. |
|
|
98
|
+
| Reorg → preserve current spendable | Refresh currently overrides. See **GAP 2**. | ⚠️ |
|
|
99
|
+
| Coinbase → spendable=false until 100 deep | `isOutputSpendable` enforces maturity | ✅ |
|
|
100
|
+
| Incoming confirmed → create/update outputs with correct flag | internalizeAction creates outputs; new-schema transition sets processing; refresh syncs | ✅ |
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 7. Validation & Testing Criteria (§7) — coverage matrix
|
|
105
|
+
|
|
106
|
+
| # | Scenario | Test coverage | Status |
|
|
107
|
+
|---|---|---|---|
|
|
108
|
+
| 1 | Happy-path self-created → Completed + spendable | `schemaConformance.test.ts` "hot query", `transactionServiceExpansion.test.ts` full path | ✅ |
|
|
109
|
+
| 2 | Third-party confirmed deep → Completed + spendable | `transactionServiceExpansion.test.ts` `createWithProof` | ✅ |
|
|
110
|
+
| 3 | Third-party confirmed tip → Unconfirmed + spendable | No dedicated test exercising tip-vs-deep decision | ⚠️ **TEST GAP A** |
|
|
111
|
+
| 4 | Third-party unconfirmed, broadcast fails → discard | internalizeAction.test.ts legacy coverage; no new-schema-specific test | ⚠️ **TEST GAP B** |
|
|
112
|
+
| 5 | Service failure triggers self-created-only fallback | Legacy `attemptToPostReqsToNetwork` coverage | ✅ |
|
|
113
|
+
| 6 | Invalid/DoubleSpend → all outputs spendable=false | `schemaConformance.test.ts` "spendability refresh" | ✅ |
|
|
114
|
+
| 7 | Reorg of Completed → Unconfirmed, outputs preserved | `schemaConformance.test.ts` "reorg" transitions only; outputs preservation NOT tested | ⚠️ **TEST GAP C** (related to GAP 2) |
|
|
115
|
+
| 8 | Coinbase non-spendable until 100 deep | `schemaConformance.test.ts` "coinbase maturity" | ✅ |
|
|
116
|
+
| 9 | Unfail leaves outputs untouched | Not tested explicitly | ⚠️ **TEST GAP D** |
|
|
117
|
+
| 10 | Mixed broadcast results graceful | Legacy coverage; no new-schema test | ⚠️ **TEST GAP E** |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## 8. Non-Functional (§8)
|
|
122
|
+
|
|
123
|
+
| Requirement | Implementation | Status |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| Atomic status + outputs update | `transitionProcessing` + audit are single Knex call; `refreshOutputsSpendable` is separate operation | ⚠️ **GAP 3** — not strictly atomic. Acceptable for current architecture (eventual consistency via refresh) but does not match the spec's "or rolled back" wording. |
|
|
126
|
+
| Log every status change with timestamp + reason | `tx_audit` table written on every transition (success + rejected) | ✅ |
|
|
127
|
+
| Status updates + spendability checks < 100ms | `schemaConformance.test.ts` hot query asserts <200ms (conservative); actual SQLite latency is single-digit ms | ✅ |
|
|
128
|
+
| Functional without ARC | Sequential fallback preserved in legacy code | ✅ |
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## Summary
|
|
133
|
+
|
|
134
|
+
| Category | Pass | Partial | Gap |
|
|
135
|
+
|---|---|---|---|
|
|
136
|
+
| §1 Principles | 4 | — | 1 (reorg invalidation, FSM) |
|
|
137
|
+
| §2 Statuses | 9 | — | — |
|
|
138
|
+
| §3 Happy path | 6 | — | — |
|
|
139
|
+
| §4 Third-party | 3 | 2 (caller responsibility) | — |
|
|
140
|
+
| §5 Failures | 6 | — | 1 (reorg preserves spendable) |
|
|
141
|
+
| §6 DB sync | 4 | 2 | — |
|
|
142
|
+
| §7 Test coverage | 5 | — | 5 (test gaps A-E) |
|
|
143
|
+
| §8 Non-functional | 3 | 1 (atomicity) | — |
|
|
144
|
+
|
|
145
|
+
**Critical gaps blocking spec compliance:**
|
|
146
|
+
|
|
147
|
+
1. **GAP 1** — FSM permits `reorging → invalid` and `reorging → doubleSpend` direct edges. Spec §5 forbids reorg from marking either. Remove these two edges. Force callers to traverse `reorging → unconfirmed → invalid/doubleSpend` if a separate signal later validates the rejection.
|
|
148
|
+
2. **GAP 2** — `refreshOutputsSpendable` flips `outputs.spendable=false` for transactions in `reorging` because that state is not in `ProcessingSpendableStatus`. Spec §5/§6 require preserving the prior spendable value. Either add `reorging` to the spendable set (treating reorging as still-spendable while resolution pends) or skip refresh for outputs whose owning transaction is `reorging`.
|
|
149
|
+
3. **GAP 3** (non-blocking) — atomicity of status + output update. Wrap `transitionProcessing` + targeted output refresh in a Knex transaction at call sites where atomicity matters.
|
|
150
|
+
|
|
151
|
+
**Test gaps to add (none blocking, but required for §7 compliance):**
|
|
152
|
+
|
|
153
|
+
- Test A: third-party confirmed at chain tip → unconfirmed.
|
|
154
|
+
- Test B: third-party unconfirmed broadcast failure → discard (no DB row).
|
|
155
|
+
- Test C: reorg of confirmed → reorging → unconfirmed; verify outputs.spendable preserved.
|
|
156
|
+
- Test D: unfail transition; verify outputs unchanged.
|
|
157
|
+
- Test E: mixed broadcast results; verify positive accepted + discrepancy in tx_audit.
|