@bsv/wallet-toolbox-client 2.1.24 → 3.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/src/CWIStyleWalletManager.d.ts +33 -7
- package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
- package/out/src/CWIStyleWalletManager.js +281 -313
- package/out/src/CWIStyleWalletManager.js.map +1 -1
- package/out/src/SetupClient.d.ts +6 -6
- package/out/src/SetupClient.d.ts.map +1 -1
- package/out/src/SetupClient.js +5 -5
- package/out/src/SetupClient.js.map +1 -1
- package/out/src/SetupWallet.d.ts.map +1 -1
- package/out/src/SimpleWalletManager.d.ts +12 -2
- package/out/src/SimpleWalletManager.d.ts.map +1 -1
- package/out/src/SimpleWalletManager.js +46 -30
- package/out/src/SimpleWalletManager.js.map +1 -1
- package/out/src/Wallet.d.ts +1 -1
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +102 -100
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts +1 -1
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
- package/out/src/WalletAuthenticationManager.js +3 -3
- package/out/src/WalletAuthenticationManager.js.map +1 -1
- package/out/src/WalletLogger.d.ts.map +1 -1
- package/out/src/WalletLogger.js +16 -8
- package/out/src/WalletLogger.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +89 -18
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +656 -870
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/WalletSettingsManager.d.ts +2 -2
- package/out/src/WalletSettingsManager.d.ts.map +1 -1
- package/out/src/WalletSettingsManager.js.map +1 -1
- package/out/src/fundWalletP2PKH.d.ts +2 -2
- package/out/src/fundWalletP2PKH.d.ts.map +1 -1
- package/out/src/fundWalletP2PKH.js +11 -10
- package/out/src/fundWalletP2PKH.js.map +1 -1
- package/out/src/mockchain/MockChainMigrations.d.ts +3 -3
- package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -1
- package/out/src/mockchain/MockChainMigrations.js.map +1 -1
- package/out/src/mockchain/MockChainStorage.d.ts.map +1 -1
- package/out/src/mockchain/MockChainStorage.js +5 -5
- package/out/src/mockchain/MockChainStorage.js.map +1 -1
- package/out/src/mockchain/MockChainTracker.d.ts.map +1 -1
- package/out/src/mockchain/MockChainTracker.js +10 -10
- package/out/src/mockchain/MockChainTracker.js.map +1 -1
- package/out/src/mockchain/MockMiner.d.ts.map +1 -1
- package/out/src/mockchain/MockMiner.js +3 -3
- package/out/src/mockchain/MockMiner.js.map +1 -1
- package/out/src/mockchain/MockServices.d.ts +9 -0
- package/out/src/mockchain/MockServices.d.ts.map +1 -1
- package/out/src/mockchain/MockServices.js +195 -238
- package/out/src/mockchain/MockServices.js.map +1 -1
- package/out/src/mockchain/merkleTree.d.ts.map +1 -1
- package/out/src/mockchain/merkleTree.js +21 -12
- package/out/src/mockchain/merkleTree.js.map +1 -1
- package/out/src/monitor/LeasedMonitorTask.d.ts +43 -0
- package/out/src/monitor/LeasedMonitorTask.d.ts.map +1 -0
- package/out/src/monitor/LeasedMonitorTask.js +89 -0
- package/out/src/monitor/LeasedMonitorTask.js.map +1 -0
- package/out/src/monitor/Monitor.d.ts +24 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +63 -75
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/V7LeasedTask.d.ts +43 -0
- package/out/src/monitor/V7LeasedTask.d.ts.map +1 -0
- package/out/src/monitor/V7LeasedTask.js +89 -0
- package/out/src/monitor/V7LeasedTask.js.map +1 -0
- package/out/src/monitor/tasks/TaskArcSSE.d.ts +2 -2
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.js +10 -23
- package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +4 -2
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.js +83 -16
- package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.d.ts +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.js +1 -2
- package/out/src/monitor/tasks/TaskCheckNoSends.js.map +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskClock.js +0 -1
- package/out/src/monitor/tasks/TaskClock.js.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.d.ts +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.js +1 -1
- package/out/src/monitor/tasks/TaskMonitorCallHistory.js.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.d.ts +2 -2
- package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.js +7 -5
- package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.js +2 -2
- package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +10 -10
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js +2 -2
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.js +4 -5
- package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.d.ts +1 -1
- package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.js +13 -15
- package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
- package/out/src/monitor/tasks/WalletMonitorTask.d.ts.map +1 -1
- package/out/src/monitor/tasks/WalletMonitorTask.js +3 -1
- package/out/src/monitor/tasks/WalletMonitorTask.js.map +1 -1
- package/out/src/sdk/CertOpsWallet.d.ts +3 -3
- package/out/src/sdk/CertOpsWallet.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.d.ts +3 -3
- package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.js +26 -21
- package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js +5 -5
- package/out/src/sdk/WERR_errors.js.map +1 -1
- package/out/src/sdk/WalletError.d.ts +1 -1
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +10 -3
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.js +1 -3
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +19 -19
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +59 -59
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/types.d.ts +36 -4
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +53 -4
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/services/ServiceCollection.d.ts +6 -6
- package/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.js +3 -4
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts +5 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +174 -182
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.js +7 -7
- package/out/src/services/chaintracker/BHServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js +5 -5
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts +5 -3
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +20 -10
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +228 -221
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +9 -10
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts +1 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +6 -39
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts +3 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js +8 -6
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +9 -16
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +34 -22
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +31 -30
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +11 -10
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +6 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +247 -227
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js +8 -7
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js +35 -25
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +5 -5
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +13 -11
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +0 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js +21 -13
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts +2 -2
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +28 -24
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +9 -10
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +3 -3
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/services/providers/ARC.d.ts.map +1 -1
- package/out/src/services/providers/ARC.js +7 -14
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +1 -1
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/services/providers/Bitails.d.ts.map +1 -1
- package/out/src/services/providers/Bitails.js +17 -17
- package/out/src/services/providers/Bitails.js.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
- package/out/src/services/providers/WhatsOnChain.d.ts +2 -0
- package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +109 -233
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/exchangeRates.d.ts.map +1 -1
- package/out/src/services/providers/exchangeRates.js +3 -3
- package/out/src/services/providers/exchangeRates.js.map +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
- package/out/src/services/providers/getBeefForTxid.js.map +1 -1
- package/out/src/services/providers/whatsOnChainHelpers.d.ts +68 -0
- package/out/src/services/providers/whatsOnChainHelpers.d.ts.map +1 -0
- package/out/src/services/providers/whatsOnChainHelpers.js +147 -0
- package/out/src/services/providers/whatsOnChainHelpers.js.map +1 -0
- package/out/src/signer/WalletSigner.d.ts.map +1 -1
- package/out/src/signer/WalletSigner.js.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.js +21 -13
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/completeSignedTransaction.js +20 -21
- package/out/src/signer/methods/completeSignedTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +8 -7
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js +8 -6
- package/out/src/signer/methods/internalizeAction.js.map +1 -1
- package/out/src/signer/methods/proveCertificate.js +1 -1
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +8 -10
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +16 -1
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +544 -1224
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +124 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +316 -186
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js +8 -7
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +32 -32
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
- package/out/src/storage/StorageSyncReader.js +3 -3
- package/out/src/storage/StorageSyncReader.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +3 -0
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +83 -73
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/idbHelpers.d.ts +47 -0
- package/out/src/storage/idbHelpers.d.ts.map +1 -0
- package/out/src/storage/idbHelpers.js +417 -0
- package/out/src/storage/idbHelpers.js.map +1 -0
- package/out/src/storage/methods/ListActionsSpecOp.d.ts +6 -1
- package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.js +28 -2
- package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +8 -11
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +83 -0
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +338 -63
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +251 -274
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +99 -80
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.js +15 -13
- package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
- package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -1
- package/out/src/storage/methods/getSyncChunk.js +4 -3
- package/out/src/storage/methods/getSyncChunk.js.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +213 -56
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +85 -110
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listCertificates.d.ts +1 -1
- package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/out/src/storage/methods/listCertificates.js +7 -7
- package/out/src/storage/methods/listCertificates.js.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.js +24 -27
- package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/out/src/storage/methods/offsetKey.d.ts +1 -1
- package/out/src/storage/methods/offsetKey.d.ts.map +1 -1
- package/out/src/storage/methods/offsetKey.js +3 -5
- package/out/src/storage/methods/offsetKey.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts +0 -11
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +168 -93
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/methods/purgeDataIdb.d.ts.map +1 -1
- package/out/src/storage/methods/purgeDataIdb.js +1 -1
- package/out/src/storage/methods/purgeDataIdb.js.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.js.map +1 -1
- package/out/src/storage/methods/utils.d.ts.map +1 -1
- package/out/src/storage/methods/utils.js +7 -1
- package/out/src/storage/methods/utils.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts +4 -270
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +16 -423
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +289 -0
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -0
- package/out/src/storage/remoting/StorageClientBase.js +375 -0
- package/out/src/storage/remoting/StorageClientBase.js.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts +29 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.js +91 -0
- package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -0
- package/out/src/storage/schema/StorageIdbSchema.d.ts +43 -2
- package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificate.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificate.js +5 -4
- package/out/src/storage/schema/entities/EntityCertificate.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCertificateField.js +5 -7
- package/out/src/storage/schema/entities/EntityCertificateField.js.map +1 -1
- package/out/src/storage/schema/entities/EntityCommission.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityCommission.js +6 -8
- package/out/src/storage/schema/entities/EntityCommission.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.js +21 -24
- package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.js +6 -6
- package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTag.js +2 -2
- package/out/src/storage/schema/entities/EntityOutputTag.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputTagMap.js +4 -6
- package/out/src/storage/schema/entities/EntityOutputTagMap.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts +3 -3
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.js +22 -23
- package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts +9 -0
- package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.js +116 -68
- package/out/src/storage/schema/entities/EntityProvenTxReq.js.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js +19 -18
- package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.js +25 -26
- package/out/src/storage/schema/entities/EntityTransaction.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabel.js +2 -2
- package/out/src/storage/schema/entities/EntityTxLabel.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTxLabelMap.js +4 -6
- package/out/src/storage/schema/entities/EntityTxLabelMap.js.map +1 -1
- package/out/src/storage/schema/entities/EntityUser.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityUser.js +3 -3
- package/out/src/storage/schema/entities/EntityUser.js.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.js +6 -6
- package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
- package/out/src/storage/schema/monitorLease.d.ts +57 -0
- package/out/src/storage/schema/monitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/monitorLease.js +101 -0
- package/out/src/storage/schema/monitorLease.js.map +1 -0
- package/out/src/storage/schema/processingFsm.d.ts +27 -0
- package/out/src/storage/schema/processingFsm.d.ts.map +1 -0
- package/out/src/storage/schema/processingFsm.js +132 -0
- package/out/src/storage/schema/processingFsm.js.map +1 -0
- package/out/src/storage/schema/tables/TableAction.d.ts +38 -0
- package/out/src/storage/schema/tables/TableAction.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableAction.js +3 -0
- package/out/src/storage/schema/tables/TableAction.js.map +1 -0
- package/out/src/storage/schema/tables/TableCertificate.d.ts +2 -1
- package/out/src/storage/schema/tables/TableCertificate.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableChainTip.d.ts +17 -0
- package/out/src/storage/schema/tables/TableChainTip.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableChainTip.js +3 -0
- package/out/src/storage/schema/tables/TableChainTip.js.map +1 -0
- package/out/src/storage/schema/tables/TableCommission.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCommission.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableMonitorLease.d.ts +23 -0
- package/out/src/storage/schema/tables/TableMonitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableMonitorLease.js +3 -0
- package/out/src/storage/schema/tables/TableMonitorLease.js.map +1 -0
- package/out/src/storage/schema/tables/TableOutput.d.ts +10 -2
- package/out/src/storage/schema/tables/TableOutput.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutput.js +1 -1
- package/out/src/storage/schema/tables/TableOutput.js.map +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts +24 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransactionNew.d.ts +50 -0
- package/out/src/storage/schema/tables/TableTransactionNew.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionNew.js +3 -0
- package/out/src/storage/schema/tables/TableTransactionNew.js.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionV7.d.ts +50 -0
- package/out/src/storage/schema/tables/TableTransactionV7.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTransactionV7.js +3 -0
- package/out/src/storage/schema/tables/TableTransactionV7.js.map +1 -0
- package/out/src/storage/schema/tables/TableTxAudit.d.ts +26 -0
- package/out/src/storage/schema/tables/TableTxAudit.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TableTxAudit.js +3 -0
- package/out/src/storage/schema/tables/TableTxAudit.js.map +1 -0
- package/out/src/storage/schema/tables/TableTxLabel.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts.map +1 -1
- package/out/src/storage/schema/tables/index.d.ts +5 -0
- package/out/src/storage/schema/tables/index.d.ts.map +1 -1
- package/out/src/storage/schema/tables/index.js +5 -0
- package/out/src/storage/schema/tables/index.js.map +1 -1
- package/out/src/storage/schema/transactionCrud.d.ts +41 -0
- package/out/src/storage/schema/transactionCrud.d.ts.map +1 -0
- package/out/src/storage/schema/transactionCrud.js +205 -0
- package/out/src/storage/schema/transactionCrud.js.map +1 -0
- package/out/src/storage/schema/transactionService.d.ts +315 -0
- package/out/src/storage/schema/transactionService.d.ts.map +1 -0
- package/out/src/storage/schema/transactionService.js +783 -0
- package/out/src/storage/schema/transactionService.js.map +1 -0
- package/out/src/storage/schema/txAudit.d.ts +33 -0
- package/out/src/storage/schema/txAudit.d.ts.map +1 -0
- package/out/src/storage/schema/txAudit.js +64 -0
- package/out/src/storage/schema/txAudit.js.map +1 -0
- package/out/src/storage/schema/v7Crud.d.ts +41 -0
- package/out/src/storage/schema/v7Crud.d.ts.map +1 -0
- package/out/src/storage/schema/v7Crud.js +205 -0
- package/out/src/storage/schema/v7Crud.js.map +1 -0
- package/out/src/storage/schema/v7Fsm.d.ts +27 -0
- package/out/src/storage/schema/v7Fsm.d.ts.map +1 -0
- package/out/src/storage/schema/v7Fsm.js +124 -0
- package/out/src/storage/schema/v7Fsm.js.map +1 -0
- package/out/src/storage/schema/v7MonitorLease.d.ts +57 -0
- package/out/src/storage/schema/v7MonitorLease.d.ts.map +1 -0
- package/out/src/storage/schema/v7MonitorLease.js +101 -0
- package/out/src/storage/schema/v7MonitorLease.js.map +1 -0
- package/out/src/storage/schema/v7Service.d.ts +305 -0
- package/out/src/storage/schema/v7Service.d.ts.map +1 -0
- package/out/src/storage/schema/v7Service.js +757 -0
- package/out/src/storage/schema/v7Service.js.map +1 -0
- package/out/src/storage/schema/v7TxAudit.d.ts +33 -0
- package/out/src/storage/schema/v7TxAudit.d.ts.map +1 -0
- package/out/src/storage/schema/v7TxAudit.js +64 -0
- package/out/src/storage/schema/v7TxAudit.js.map +1 -0
- package/out/src/storage/storageProviderHelpers.d.ts +34 -0
- package/out/src/storage/storageProviderHelpers.d.ts.map +1 -0
- package/out/src/storage/storageProviderHelpers.js +100 -0
- package/out/src/storage/storageProviderHelpers.js.map +1 -0
- package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.js +2 -1
- package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
- package/out/src/utility/aggregateResults.d.ts +1 -1
- package/out/src/utility/aggregateResults.d.ts.map +1 -1
- package/out/src/utility/aggregateResults.js +2 -2
- package/out/src/utility/aggregateResults.js.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.d.ts +2 -2
- package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -1
- package/out/src/utility/brc114ActionTimeLabels.js +16 -9
- package/out/src/utility/brc114ActionTimeLabels.js.map +1 -1
- package/out/src/utility/identityUtils.js +1 -1
- package/out/src/utility/identityUtils.js.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.d.ts +4 -4
- package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.js.map +1 -1
- package/out/src/utility/stampLog.d.ts.map +1 -1
- package/out/src/utility/stampLog.js +7 -5
- package/out/src/utility/stampLog.js.map +1 -1
- package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
- package/out/src/utility/tscProofToMerklePath.js +1 -1
- package/out/src/utility/tscProofToMerklePath.js.map +1 -1
- package/out/src/utility/utilityHelpers.d.ts +1 -2
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +10 -10
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.d.ts +7 -3
- package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.js +3 -3
- package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -1
- package/out/src/wab-client/WABClient.d.ts +1 -1
- package/out/src/wab-client/WABClient.d.ts.map +1 -1
- package/out/src/wab-client/WABClient.js +12 -12
- package/out/src/wab-client/WABClient.js.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +3 -3
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
- package/package.json +7 -6
|
@@ -18,14 +18,16 @@ function setDisableDoubleSpendCheckForTest(v) {
|
|
|
18
18
|
}
|
|
19
19
|
async function createAction(storage, auth, vargs, originator) {
|
|
20
20
|
const logger = vargs.logger;
|
|
21
|
-
logger === null || logger === void 0 ? void 0 : logger.group(
|
|
22
|
-
//stampLog(vargs, `start storage createTransactionSdk`)
|
|
21
|
+
logger === null || logger === void 0 ? void 0 : logger.group('storage createAction');
|
|
22
|
+
// stampLog(vargs, `start storage createTransactionSdk`)
|
|
23
23
|
if (vargs.isTestWerrReviewActions)
|
|
24
24
|
(0, Wallet_1.throwDummyReviewActions)();
|
|
25
|
-
if (!vargs.isNewTx)
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
if (!vargs.isNewTx)
|
|
26
|
+
// The purpose of this function is to create the initial storage records associated
|
|
27
|
+
// with a new transaction. It's an error if we have no new inputs or outputs...
|
|
28
|
+
{
|
|
28
29
|
throw new WERR_errors_1.WERR_INTERNAL();
|
|
30
|
+
}
|
|
29
31
|
/**
|
|
30
32
|
* Steps to create a transaction:
|
|
31
33
|
* - Verify that all inputs either have proof in vargs.inputBEEF or that options.trustSelf === 'known' and input txid.vout are known valid to storage.
|
|
@@ -59,7 +61,7 @@ async function createAction(storage, auth, vargs, originator) {
|
|
|
59
61
|
await preflightInsufficientFundsFastPath(vargs, xinputs, xoutputs, noSendChangeIn, availableChangeCount, feeModel);
|
|
60
62
|
logger === null || logger === void 0 ? void 0 : logger.log('passed insufficient-funds preflight');
|
|
61
63
|
const newTx = await createNewTxRecord(storage, userId, vargs, storageBeef);
|
|
62
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
64
|
+
logger === null || logger === void 0 ? void 0 : logger.log('created new transaction record');
|
|
63
65
|
const ctx = {
|
|
64
66
|
xinputs,
|
|
65
67
|
xoutputs,
|
|
@@ -70,23 +72,26 @@ async function createAction(storage, auth, vargs, originator) {
|
|
|
70
72
|
transactionId: newTx.transactionId
|
|
71
73
|
};
|
|
72
74
|
const { allocatedChange, changeOutputs, derivationPrefix, maxPossibleSatoshisAdjustment } = await fundNewTransactionSdk(storage, userId, vargs, ctx);
|
|
73
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
74
|
-
if (maxPossibleSatoshisAdjustment) {
|
|
75
|
+
logger === null || logger === void 0 ? void 0 : logger.log('funded new transaction');
|
|
76
|
+
if (maxPossibleSatoshisAdjustment != null) {
|
|
75
77
|
const a = maxPossibleSatoshisAdjustment;
|
|
76
78
|
if (ctx.xoutputs[a.fixedOutputIndex].satoshis !== generateChange_1.maxPossibleSatoshis)
|
|
77
79
|
throw new WERR_errors_1.WERR_INTERNAL();
|
|
78
80
|
ctx.xoutputs[a.fixedOutputIndex].satoshis = a.satoshis;
|
|
79
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
81
|
+
logger === null || logger === void 0 ? void 0 : logger.log('adjusted change outputs to max possible');
|
|
80
82
|
}
|
|
81
83
|
// The satoshis of the transaction is the satoshis we get back in change minus the satoshis we spend.
|
|
82
84
|
const satoshis = changeOutputs.reduce((a, e) => a + e.satoshis, 0) - allocatedChange.reduce((a, e) => a + e.satoshis, 0);
|
|
83
|
-
|
|
85
|
+
// new-schema additive wiring: newTx lives in transactions_legacy post-cutover.
|
|
86
|
+
// updateLegacyTransaction routes to transactions_legacy when it exists,
|
|
87
|
+
// otherwise falls through to updateTransaction (pre-cutover behaviour).
|
|
88
|
+
await storage.updateLegacyTransaction(newTx.transactionId, { satoshis });
|
|
84
89
|
const { outputs, changeVouts } = await createNewOutputs(storage, userId, vargs, ctx, changeOutputs);
|
|
85
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
90
|
+
logger === null || logger === void 0 ? void 0 : logger.log('created new output records');
|
|
86
91
|
const inputBeef = await mergeAllocatedChangeBeefs(storage, userId, vargs, allocatedChange, beef);
|
|
87
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
92
|
+
logger === null || logger === void 0 ? void 0 : logger.log('merged allocated change beefs');
|
|
88
93
|
const inputs = await createNewInputs(storage, userId, vargs, ctx, allocatedChange);
|
|
89
|
-
logger === null || logger === void 0 ? void 0 : logger.log(
|
|
94
|
+
logger === null || logger === void 0 ? void 0 : logger.log('created new inputs');
|
|
90
95
|
const r = {
|
|
91
96
|
reference: newTx.reference,
|
|
92
97
|
version: newTx.version,
|
|
@@ -108,7 +113,7 @@ function makeDefaultOutput(userId, transactionId, satoshis, vout) {
|
|
|
108
113
|
outputId: 0,
|
|
109
114
|
userId,
|
|
110
115
|
transactionId,
|
|
111
|
-
satoshis
|
|
116
|
+
satoshis,
|
|
112
117
|
vout,
|
|
113
118
|
basketId: undefined,
|
|
114
119
|
change: false,
|
|
@@ -128,115 +133,165 @@ function makeDefaultOutput(userId, transactionId, satoshis, vout) {
|
|
|
128
133
|
};
|
|
129
134
|
return output;
|
|
130
135
|
}
|
|
136
|
+
/** Check known outputs for double-spend, mark them spent, return competing txid if found. */
|
|
137
|
+
async function markKnownInputsSpent(storage, knownInputRows, transactionId) {
|
|
138
|
+
let doubleSpendTxid;
|
|
139
|
+
await storage.transaction(async (trx) => {
|
|
140
|
+
const outputIds = knownInputRows.map(ni => (0, utilityHelpers_1.verifyId)(ni.o.outputId));
|
|
141
|
+
const knownOutputsById = await storage.findOutputsByIds(outputIds, trx);
|
|
142
|
+
for (const ni of knownInputRows) {
|
|
143
|
+
const { i, o } = ni;
|
|
144
|
+
const o2 = knownOutputsById[(0, utilityHelpers_1.verifyId)(o.outputId)];
|
|
145
|
+
if (!o2)
|
|
146
|
+
throw new WERR_errors_1.WERR_INTERNAL(`missing outputId ${o.outputId}`);
|
|
147
|
+
if (o2.spentBy !== undefined) {
|
|
148
|
+
const spendingTx = await storage.findTransactionById((0, utilityHelpers_1.verifyId)(o2.spentBy), trx);
|
|
149
|
+
if (spendingTx === null || spendingTx === void 0 ? void 0 : spendingTx.txid) {
|
|
150
|
+
doubleSpendTxid = spendingTx.txid;
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (!o2.spendable) {
|
|
155
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`inputs[${i.vin}]`, `spendable output. output ${o.txid}:${o.vout} appears to have been spent (spendable=${o2.spendable}).`);
|
|
156
|
+
}
|
|
157
|
+
// Post-cutover: outputs.spentBy FK → new transactions. transactionId is
|
|
158
|
+
// from transactions_legacy (new unsigned tx). Use markOutputAsSpentBy to
|
|
159
|
+
// disable FK temporarily on SQLite. Mapping §2: bridge-period spentBy.
|
|
160
|
+
await storage.markOutputAsSpentBy((0, utilityHelpers_1.verifyId)(o.outputId), { spendable: false, spentBy: transactionId, spendingDescription: i.inputDescription }, trx);
|
|
161
|
+
o.spendable = false;
|
|
162
|
+
o.spentBy = transactionId;
|
|
163
|
+
o.spendingDescription = i.inputDescription;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
return doubleSpendTxid;
|
|
167
|
+
}
|
|
168
|
+
/** Build an SDK input record for a new-input row that has a backing output. */
|
|
169
|
+
async function buildSdkInputFromOutput(storage, vargs, vin, i, o, unlockLen) {
|
|
170
|
+
if ((i == null) && !unlockLen)
|
|
171
|
+
throw new WERR_errors_1.WERR_INTERNAL(`vin ${vin} non-fixedInput without unlockLen`);
|
|
172
|
+
const sourceTransaction = vargs.includeAllSourceTransactions && vargs.isSignAction
|
|
173
|
+
? await storage.getRawTxOfKnownValidTransaction(o.txid)
|
|
174
|
+
: undefined;
|
|
175
|
+
return {
|
|
176
|
+
vin,
|
|
177
|
+
sourceTxid: o.txid,
|
|
178
|
+
sourceVout: o.vout,
|
|
179
|
+
sourceSatoshis: o.satoshis,
|
|
180
|
+
sourceLockingScript: (0, utilityHelpers_noBuffer_1.asString)(o.lockingScript),
|
|
181
|
+
sourceTransaction,
|
|
182
|
+
unlockingScriptLength: unlockLen || i.unlockingScriptLength,
|
|
183
|
+
providedBy: (i != null) && o.providedBy === 'storage' ? 'you-and-storage' : o.providedBy,
|
|
184
|
+
type: o.type,
|
|
185
|
+
spendingDescription: o.spendingDescription || undefined,
|
|
186
|
+
derivationPrefix: o.derivationPrefix || undefined,
|
|
187
|
+
derivationSuffix: o.derivationSuffix || undefined,
|
|
188
|
+
senderIdentityKey: o.senderIdentityKey || undefined
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
/** Build an SDK input record for a user-specified input with no corresponding stored output. */
|
|
192
|
+
function buildSdkInputFromXInput(vin, i) {
|
|
193
|
+
return {
|
|
194
|
+
vin,
|
|
195
|
+
sourceTxid: i.outpoint.txid,
|
|
196
|
+
sourceVout: i.outpoint.vout,
|
|
197
|
+
sourceSatoshis: i.satoshis,
|
|
198
|
+
sourceLockingScript: i.lockingScript.toHex(),
|
|
199
|
+
unlockingScriptLength: i.unlockingScriptLength,
|
|
200
|
+
providedBy: 'you',
|
|
201
|
+
type: 'custom',
|
|
202
|
+
spendingDescription: undefined,
|
|
203
|
+
derivationPrefix: undefined,
|
|
204
|
+
derivationSuffix: undefined,
|
|
205
|
+
senderIdentityKey: undefined
|
|
206
|
+
};
|
|
207
|
+
}
|
|
131
208
|
async function createNewInputs(storage, userId, vargs, ctx, allocatedChange) {
|
|
132
209
|
const r = [];
|
|
133
210
|
const newInputs = [];
|
|
134
|
-
for (const i of ctx.xinputs)
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
138
|
-
const knownInputRows = newInputs.filter((ni) => !!ni.i && !!ni.o);
|
|
211
|
+
for (const i of ctx.xinputs)
|
|
212
|
+
newInputs.push({ i, o: i.output });
|
|
213
|
+
const knownInputRows = newInputs.filter((ni) => ni.i != null && ni.o != null);
|
|
139
214
|
if (knownInputRows.length > 0) {
|
|
140
|
-
|
|
141
|
-
await storage.transaction(async (trx) => {
|
|
142
|
-
const outputIds = knownInputRows.map(ni => (0, utilityHelpers_1.verifyId)(ni.o.outputId));
|
|
143
|
-
const knownOutputsById = await storage.findOutputsByIds(outputIds, trx);
|
|
144
|
-
for (const ni of knownInputRows) {
|
|
145
|
-
const { i, o } = ni;
|
|
146
|
-
const o2 = knownOutputsById[(0, utilityHelpers_1.verifyId)(o.outputId)];
|
|
147
|
-
if (!o2)
|
|
148
|
-
throw new WERR_errors_1.WERR_INTERNAL(`missing outputId ${o.outputId}`);
|
|
149
|
-
if (o2.spentBy !== undefined) {
|
|
150
|
-
const spendingTx = await storage.findTransactionById((0, utilityHelpers_1.verifyId)(o2.spentBy), trx);
|
|
151
|
-
if (spendingTx === null || spendingTx === void 0 ? void 0 : spendingTx.txid) {
|
|
152
|
-
doubleSpendTxid = spendingTx.txid;
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
if (o2.spendable != true) {
|
|
157
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`inputs[${i.vin}]`, `spendable output. output ${o.txid}:${o.vout} appears to have been spent (spendable=${o2.spendable}).`);
|
|
158
|
-
}
|
|
159
|
-
await storage.updateOutput((0, utilityHelpers_1.verifyId)(o.outputId), {
|
|
160
|
-
spendable: false,
|
|
161
|
-
spentBy: ctx.transactionId,
|
|
162
|
-
spendingDescription: i.inputDescription
|
|
163
|
-
}, trx);
|
|
164
|
-
o.spendable = false;
|
|
165
|
-
o.spentBy = ctx.transactionId;
|
|
166
|
-
o.spendingDescription = i.inputDescription;
|
|
167
|
-
}
|
|
168
|
-
});
|
|
215
|
+
const doubleSpendTxid = await markKnownInputsSpent(storage, knownInputRows, ctx.transactionId);
|
|
169
216
|
if (doubleSpendTxid) {
|
|
170
217
|
const beef = await storage.getBeefForTransaction(doubleSpendTxid, {});
|
|
171
|
-
|
|
172
|
-
txid: '',
|
|
173
|
-
status: 'doubleSpend',
|
|
174
|
-
competingTxs: [doubleSpendTxid],
|
|
175
|
-
competingBeef: beef.toBinary()
|
|
176
|
-
};
|
|
177
|
-
throw new WERR_errors_1.WERR_REVIEW_ACTIONS([rar], []);
|
|
218
|
+
throw new WERR_errors_1.WERR_REVIEW_ACTIONS([{ txid: '', status: 'doubleSpend', competingTxs: [doubleSpendTxid], competingBeef: beef.toBinary() }], []);
|
|
178
219
|
}
|
|
179
220
|
}
|
|
180
|
-
for (const o of allocatedChange)
|
|
221
|
+
for (const o of allocatedChange)
|
|
181
222
|
newInputs.push({ o, unlockLen: 107 });
|
|
182
|
-
}
|
|
183
223
|
let vin = -1;
|
|
184
224
|
for (const { i, o, unlockLen } of newInputs) {
|
|
185
225
|
vin++;
|
|
186
|
-
if (o) {
|
|
187
|
-
|
|
188
|
-
throw new WERR_errors_1.WERR_INTERNAL(`vin ${vin} non-fixedInput without unlockLen`);
|
|
189
|
-
const sourceTransaction = vargs.includeAllSourceTransactions && vargs.isSignAction
|
|
190
|
-
? await storage.getRawTxOfKnownValidTransaction(o.txid)
|
|
191
|
-
: undefined;
|
|
192
|
-
const ri = {
|
|
193
|
-
vin,
|
|
194
|
-
sourceTxid: o.txid,
|
|
195
|
-
sourceVout: o.vout,
|
|
196
|
-
sourceSatoshis: o.satoshis,
|
|
197
|
-
sourceLockingScript: (0, utilityHelpers_noBuffer_1.asString)(o.lockingScript),
|
|
198
|
-
sourceTransaction,
|
|
199
|
-
unlockingScriptLength: unlockLen ? unlockLen : i.unlockingScriptLength,
|
|
200
|
-
providedBy: i && o.providedBy === 'storage' ? 'you-and-storage' : o.providedBy,
|
|
201
|
-
type: o.type,
|
|
202
|
-
spendingDescription: o.spendingDescription || undefined,
|
|
203
|
-
derivationPrefix: o.derivationPrefix || undefined,
|
|
204
|
-
derivationSuffix: o.derivationSuffix || undefined,
|
|
205
|
-
senderIdentityKey: o.senderIdentityKey || undefined
|
|
206
|
-
};
|
|
207
|
-
r.push(ri);
|
|
226
|
+
if (o != null) {
|
|
227
|
+
r.push(await buildSdkInputFromOutput(storage, vargs, vin, i, o, unlockLen));
|
|
208
228
|
}
|
|
209
229
|
else {
|
|
210
|
-
if (
|
|
230
|
+
if (i == null)
|
|
211
231
|
throw new WERR_errors_1.WERR_INTERNAL(`vin ${vin} without output or xinput`);
|
|
212
|
-
|
|
213
|
-
const ri = {
|
|
214
|
-
vin,
|
|
215
|
-
sourceTxid: i.outpoint.txid,
|
|
216
|
-
sourceVout: i.outpoint.vout,
|
|
217
|
-
sourceSatoshis: i.satoshis,
|
|
218
|
-
sourceLockingScript: i.lockingScript.toHex(),
|
|
219
|
-
unlockingScriptLength: i.unlockingScriptLength,
|
|
220
|
-
providedBy: 'you',
|
|
221
|
-
type: 'custom',
|
|
222
|
-
spendingDescription: undefined,
|
|
223
|
-
derivationPrefix: undefined,
|
|
224
|
-
derivationSuffix: undefined,
|
|
225
|
-
senderIdentityKey: undefined
|
|
226
|
-
};
|
|
227
|
-
r.push(ri);
|
|
232
|
+
r.push(buildSdkInputFromXInput(vin, i));
|
|
228
233
|
}
|
|
229
234
|
}
|
|
230
235
|
return r;
|
|
231
236
|
}
|
|
232
|
-
|
|
237
|
+
/** Randomly reassign vout values across newOutputs using either the provided randomVals or crypto-random bytes. */
|
|
238
|
+
function randomizeOutputVouts(newOutputs, randomVals) {
|
|
239
|
+
const vals = [...(randomVals || [])];
|
|
240
|
+
const nextRandom = () => {
|
|
241
|
+
if (vals.length > 0) {
|
|
242
|
+
const v = vals.shift();
|
|
243
|
+
vals.push(v);
|
|
244
|
+
return v;
|
|
245
|
+
}
|
|
246
|
+
const bytes = (0, sdk_1.Random)(4);
|
|
247
|
+
return (((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0) / 0x100000000;
|
|
248
|
+
};
|
|
249
|
+
const newVouts = Array.from({ length: newOutputs.length }, (_, i) => i);
|
|
250
|
+
for (let cur = newVouts.length; cur > 0; cur--) {
|
|
251
|
+
const rnd = Math.floor(nextRandom() * cur);
|
|
252
|
+
[newVouts[cur - 1], newVouts[rnd]] = [newVouts[rnd], newVouts[cur - 1]];
|
|
253
|
+
}
|
|
254
|
+
let vout = -1;
|
|
255
|
+
for (const no of newOutputs) {
|
|
256
|
+
vout++;
|
|
257
|
+
if (no.o.vout !== vout)
|
|
258
|
+
throw new WERR_errors_1.WERR_INTERNAL(`new output ${vout} has out of order vout ${no.o.vout}`);
|
|
259
|
+
no.o.vout = newVouts[vout];
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/** Insert the output and attach its tags; return the SDK output descriptor. */
|
|
263
|
+
async function persistNewOutput(storage, o, tags, txTags, txBaskets) {
|
|
233
264
|
var _a;
|
|
234
|
-
|
|
235
|
-
|
|
265
|
+
o.outputId = await storage.insertOutput(o);
|
|
266
|
+
const changeVout = (o.change && o.purpose === 'change' && o.providedBy === 'storage') ? o.vout : undefined;
|
|
267
|
+
for (const tagName of new Set(tags)) {
|
|
268
|
+
const tag = txTags[tagName];
|
|
269
|
+
await storage.insertOutputTagMap({
|
|
270
|
+
outputId: (0, utilityHelpers_1.verifyId)(o.outputId),
|
|
271
|
+
outputTagId: (0, utilityHelpers_1.verifyId)(tag.outputTagId),
|
|
272
|
+
created_at: new Date(),
|
|
273
|
+
updated_at: new Date(),
|
|
274
|
+
isDeleted: false
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
const ro = {
|
|
278
|
+
vout: (0, utilityHelpers_1.verifyInteger)(o.vout),
|
|
279
|
+
satoshis: sdk_1.Validation.validateSatoshis(o.satoshis, 'o.satoshis'),
|
|
280
|
+
lockingScript: (o.lockingScript == null) ? '' : (0, utilityHelpers_noBuffer_1.asString)(o.lockingScript),
|
|
281
|
+
providedBy: (0, utilityHelpers_1.verifyTruthy)(o.providedBy),
|
|
282
|
+
purpose: o.purpose || undefined,
|
|
283
|
+
basket: (_a = Object.values(txBaskets).find(b => b.basketId === o.basketId)) === null || _a === void 0 ? void 0 : _a.name,
|
|
284
|
+
tags,
|
|
285
|
+
outputDescription: o.outputDescription,
|
|
286
|
+
derivationSuffix: o.derivationSuffix,
|
|
287
|
+
customInstructions: o.customInstructions
|
|
288
|
+
};
|
|
289
|
+
return { changeVout, ro };
|
|
290
|
+
}
|
|
291
|
+
async function createNewOutputs(storage, userId, vargs, ctx, changeOutputs) {
|
|
236
292
|
const txBaskets = {};
|
|
237
293
|
const basketNames = [...new Set(ctx.xoutputs.map(x => x.basket).filter((v) => !!v))];
|
|
238
294
|
Object.assign(txBaskets, await storage.findOrInsertOutputBasketsBulk(userId, basketNames));
|
|
239
|
-
// Lookup output tags
|
|
240
295
|
const txTags = {};
|
|
241
296
|
const tagNames = [...new Set(ctx.xoutputs.flatMap(x => x.tags))];
|
|
242
297
|
Object.assign(txTags, await storage.findOrInsertOutputTagsBulk(userId, tagNames));
|
|
@@ -245,17 +300,7 @@ async function createNewOutputs(storage, userId, vargs, ctx, changeOutputs) {
|
|
|
245
300
|
const lockingScript = (0, utilityHelpers_noBuffer_1.asArray)(xo.lockingScript);
|
|
246
301
|
if (xo.purpose === 'service-charge') {
|
|
247
302
|
const now = new Date();
|
|
248
|
-
await storage.insertCommission({
|
|
249
|
-
userId,
|
|
250
|
-
transactionId: ctx.transactionId,
|
|
251
|
-
lockingScript,
|
|
252
|
-
satoshis: xo.satoshis,
|
|
253
|
-
isRedeemed: false,
|
|
254
|
-
keyOffset: (0, utilityHelpers_1.verifyTruthy)(xo.keyOffset),
|
|
255
|
-
created_at: now,
|
|
256
|
-
updated_at: now,
|
|
257
|
-
commissionId: 0
|
|
258
|
-
});
|
|
303
|
+
await storage.insertCommission({ userId, transactionId: ctx.transactionId, lockingScript, satoshis: xo.satoshis, isRedeemed: false, keyOffset: (0, utilityHelpers_1.verifyTruthy)(xo.keyOffset), created_at: now, updated_at: now, commissionId: 0 });
|
|
259
304
|
const o = makeDefaultOutput(userId, ctx.transactionId, xo.satoshis, xo.vout);
|
|
260
305
|
o.lockingScript = lockingScript;
|
|
261
306
|
o.providedBy = 'storage';
|
|
@@ -265,11 +310,9 @@ async function createNewOutputs(storage, userId, vargs, ctx, changeOutputs) {
|
|
|
265
310
|
newOutputs.push({ o, tags: [] });
|
|
266
311
|
}
|
|
267
312
|
else {
|
|
268
|
-
// The user wants tracking if they put their output in a basket
|
|
269
|
-
const basketId = !xo.basket ? undefined : txBaskets[xo.basket].basketId;
|
|
270
313
|
const o = makeDefaultOutput(userId, ctx.transactionId, xo.satoshis, xo.vout);
|
|
271
314
|
o.lockingScript = lockingScript;
|
|
272
|
-
o.basketId = basketId;
|
|
315
|
+
o.basketId = xo.basket ? txBaskets[xo.basket].basketId : undefined;
|
|
273
316
|
o.customInstructions = xo.customInstructions;
|
|
274
317
|
o.outputDescription = xo.outputDescription;
|
|
275
318
|
o.providedBy = xo.providedBy;
|
|
@@ -282,74 +325,14 @@ async function createNewOutputs(storage, userId, vargs, ctx, changeOutputs) {
|
|
|
282
325
|
o.spendable = true;
|
|
283
326
|
newOutputs.push({ o, tags: [] });
|
|
284
327
|
}
|
|
285
|
-
if (vargs.options.randomizeOutputs)
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
let val = 0;
|
|
289
|
-
if (!randomVals || randomVals.length === 0) {
|
|
290
|
-
const bytes = (0, sdk_1.Random)(4);
|
|
291
|
-
val = (((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0) / 0x100000000;
|
|
292
|
-
}
|
|
293
|
-
else {
|
|
294
|
-
val = randomVals.shift() || 0;
|
|
295
|
-
randomVals.push(val);
|
|
296
|
-
}
|
|
297
|
-
return val;
|
|
298
|
-
};
|
|
299
|
-
/** In-place array shuffle */
|
|
300
|
-
const shuffleArray = (array) => {
|
|
301
|
-
let currentIndex = array.length;
|
|
302
|
-
let temporaryValue;
|
|
303
|
-
let randomIndex;
|
|
304
|
-
while (currentIndex !== 0) {
|
|
305
|
-
randomIndex = Math.floor(nextRandomVal() * currentIndex);
|
|
306
|
-
currentIndex -= 1;
|
|
307
|
-
temporaryValue = array[currentIndex];
|
|
308
|
-
array[currentIndex] = array[randomIndex];
|
|
309
|
-
array[randomIndex] = temporaryValue;
|
|
310
|
-
}
|
|
311
|
-
return array;
|
|
312
|
-
};
|
|
313
|
-
let vout = -1;
|
|
314
|
-
const newVouts = Array(newOutputs.length);
|
|
315
|
-
for (let i = 0; i < newVouts.length; i++)
|
|
316
|
-
newVouts[i] = i;
|
|
317
|
-
shuffleArray(newVouts);
|
|
318
|
-
for (const no of newOutputs) {
|
|
319
|
-
vout++;
|
|
320
|
-
if (no.o.vout !== vout)
|
|
321
|
-
throw new WERR_errors_1.WERR_INTERNAL(`new output ${vout} has out of order vout ${no.o.vout}`);
|
|
322
|
-
no.o.vout = newVouts[vout];
|
|
323
|
-
}
|
|
324
|
-
}
|
|
328
|
+
if (vargs.options.randomizeOutputs)
|
|
329
|
+
randomizeOutputVouts(newOutputs, vargs.randomVals);
|
|
330
|
+
const outputs = [];
|
|
325
331
|
const changeVouts = [];
|
|
326
332
|
for (const { o, tags } of newOutputs) {
|
|
327
|
-
|
|
328
|
-
if (
|
|
329
|
-
changeVouts.push(
|
|
330
|
-
// Add tags to the output
|
|
331
|
-
for (const tagName of [...new Set(tags)]) {
|
|
332
|
-
const tag = txTags[tagName];
|
|
333
|
-
await storage.insertOutputTagMap({
|
|
334
|
-
outputId: (0, utilityHelpers_1.verifyId)(o.outputId),
|
|
335
|
-
outputTagId: (0, utilityHelpers_1.verifyId)(tag.outputTagId),
|
|
336
|
-
created_at: new Date(),
|
|
337
|
-
updated_at: new Date(),
|
|
338
|
-
isDeleted: false
|
|
339
|
-
});
|
|
340
|
-
}
|
|
341
|
-
const ro = {
|
|
342
|
-
vout: (0, utilityHelpers_1.verifyInteger)(o.vout),
|
|
343
|
-
satoshis: sdk_1.Validation.validateSatoshis(o.satoshis, 'o.satoshis'),
|
|
344
|
-
lockingScript: !o.lockingScript ? '' : (0, utilityHelpers_noBuffer_1.asString)(o.lockingScript),
|
|
345
|
-
providedBy: (0, utilityHelpers_1.verifyTruthy)(o.providedBy),
|
|
346
|
-
purpose: o.purpose || undefined,
|
|
347
|
-
basket: (_a = Object.values(txBaskets).find(b => b.basketId === o.basketId)) === null || _a === void 0 ? void 0 : _a.name,
|
|
348
|
-
tags: tags,
|
|
349
|
-
outputDescription: o.outputDescription,
|
|
350
|
-
derivationSuffix: o.derivationSuffix,
|
|
351
|
-
customInstructions: o.customInstructions
|
|
352
|
-
};
|
|
333
|
+
const { changeVout, ro } = await persistNewOutput(storage, o, tags, txTags, txBaskets);
|
|
334
|
+
if (changeVout !== undefined)
|
|
335
|
+
changeVouts.push(changeVout);
|
|
353
336
|
outputs.push(ro);
|
|
354
337
|
}
|
|
355
338
|
return { outputs, changeVouts };
|
|
@@ -372,10 +355,19 @@ async function createNewTxRecord(storage, userId, vargs, storageBeef) {
|
|
|
372
355
|
txid: undefined,
|
|
373
356
|
rawTx: undefined
|
|
374
357
|
};
|
|
375
|
-
|
|
358
|
+
// new-schema additive wiring: use insertLegacyTransaction so that post-cutover
|
|
359
|
+
// this row lands in `transactions_legacy` (not the new `transactions` table,
|
|
360
|
+
// which requires a non-null txid that is unknown until signing).
|
|
361
|
+
// Pre-cutover this falls through to the standard `transactions` table.
|
|
362
|
+
// See docs/CREATEACTION_BLOCKERS.md §3 Option B (wiring session).
|
|
363
|
+
newTx.transactionId = await storage.insertLegacyTransaction(newTx);
|
|
376
364
|
for (const label of vargs.labels) {
|
|
377
365
|
const txLabel = await storage.findOrInsertTxLabel(userId, label);
|
|
378
|
-
|
|
366
|
+
// new-schema additive wiring: post-cutover the tx_labels_map.transactionId FK points
|
|
367
|
+
// to actions.actionId, but we only have the legacyTransactionId here. Use the
|
|
368
|
+
// legacy-safe shim which bypasses FK constraints temporarily. processAction
|
|
369
|
+
// rewrites these rows to the new actionId via repointLabelsToActionId.
|
|
370
|
+
await storage.findOrInsertLegacyTxLabelMap((0, utilityHelpers_1.verifyId)(newTx.transactionId), (0, utilityHelpers_1.verifyId)(txLabel.txLabelId));
|
|
379
371
|
}
|
|
380
372
|
return newTx;
|
|
381
373
|
}
|
|
@@ -455,11 +447,11 @@ function validateRequiredOutputs(storage, userId, vargs) {
|
|
|
455
447
|
* @returns {xinputs} extended validated required inputs.
|
|
456
448
|
*/
|
|
457
449
|
async function validateRequiredInputs(storage, userId, vargs) {
|
|
458
|
-
//stampLog(vargs, `start storage verifyInputBeef`)
|
|
450
|
+
// stampLog(vargs, `start storage verifyInputBeef`)
|
|
459
451
|
const beef = new sdk_1.Beef();
|
|
460
452
|
if (vargs.inputs.length === 0)
|
|
461
453
|
return { storageBeef: beef, beef, xinputs: [] };
|
|
462
|
-
if (vargs.inputBEEF)
|
|
454
|
+
if (vargs.inputBEEF != null)
|
|
463
455
|
beef.mergeBeef(vargs.inputBEEF);
|
|
464
456
|
const xinputs = vargs.inputs.map((input, vin) => ({
|
|
465
457
|
...input,
|
|
@@ -472,98 +464,78 @@ async function validateRequiredInputs(storage, userId, vargs) {
|
|
|
472
464
|
const inputTxids = {};
|
|
473
465
|
for (const input of xinputs)
|
|
474
466
|
inputTxids[input.outpoint.txid] = true;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
467
|
+
await validateBeefTxidOnlyEntries(beef, inputTxids, trustSelf, storage);
|
|
468
|
+
await ensureBeefContainsAllInputTxids(beef, inputTxids, trustSelf, storage);
|
|
469
|
+
if (!(await beef.verify(await storage.getServices().getChainTracker(), true))) {
|
|
470
|
+
console.log(`verifyInputBeef failed, inputBEEF failed to verify.\n${beef.toLogString()}\n`);
|
|
471
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', 'valid Beef when factoring options.trustSelf');
|
|
472
|
+
}
|
|
473
|
+
const storageBeef = beef.clone();
|
|
474
|
+
const preloadedOutputsByOutpoint = await storage.findOutputsByOutpoints(userId, xinputs.map(i => ({ txid: i.outpoint.txid, vout: i.outpoint.vout })));
|
|
475
|
+
for (const input of xinputs) {
|
|
476
|
+
await resolveInputScript(storage, userId, vargs, input, beef, preloadedOutputsByOutpoint);
|
|
477
|
+
}
|
|
478
|
+
return { beef, storageBeef, xinputs };
|
|
479
|
+
}
|
|
480
|
+
/** Check all txidOnly entries in beef: require either trustSelf vouch or throw. */
|
|
481
|
+
async function validateBeefTxidOnlyEntries(beef, inputTxids, trustSelf, storage) {
|
|
478
482
|
for (const btx of beef.txs) {
|
|
479
|
-
if (btx.isTxidOnly)
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
}
|
|
483
|
+
if (!btx.isTxidOnly)
|
|
484
|
+
continue;
|
|
485
|
+
if (!trustSelf)
|
|
486
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain complete proof data for ${btx.txid}`);
|
|
487
|
+
if (!inputTxids[btx.txid]) {
|
|
488
|
+
const isKnown = await storage.verifyKnownValidTransaction(btx.txid);
|
|
489
|
+
if (!isKnown)
|
|
490
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain complete proof data for unknown ${btx.txid}`);
|
|
488
491
|
}
|
|
489
492
|
}
|
|
490
|
-
|
|
493
|
+
}
|
|
494
|
+
/** Ensure beef has an entry (or txidOnly) for every input txid. */
|
|
495
|
+
async function ensureBeefContainsAllInputTxids(beef, inputTxids, trustSelf, storage) {
|
|
491
496
|
for (const txid of Object.keys(inputTxids)) {
|
|
492
497
|
let btx = beef.findTxid(txid);
|
|
493
|
-
if (
|
|
498
|
+
if (btx == null && trustSelf) {
|
|
494
499
|
if (await storage.verifyKnownValidTransaction(txid))
|
|
495
500
|
btx = beef.mergeTxidOnly(txid);
|
|
496
501
|
}
|
|
497
|
-
if (
|
|
502
|
+
if (btx == null) {
|
|
498
503
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain proof data for possibly known ${txid}, beef ${beef.toLogString()}`);
|
|
499
504
|
}
|
|
500
505
|
}
|
|
501
|
-
if (!(await beef.verify(await storage.getServices().getChainTracker(), true))) {
|
|
502
|
-
console.log(`verifyInputBeef failed, inputBEEF failed to verify.\n${beef.toLogString()}\n`);
|
|
503
|
-
//console.log(`verifyInputBeef failed, inputBEEF failed to verify.\n${stampLogFormat(vargs.log)}\n${beef.toLogString()}\n`)
|
|
504
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', 'valid Beef when factoring options.trustSelf');
|
|
505
|
-
}
|
|
506
|
-
// beef may now be trusted and has a BeefTx for every input txid.
|
|
507
|
-
const storageBeef = beef.clone();
|
|
508
|
-
const preloadedOutputsByOutpoint = await storage.findOutputsByOutpoints(userId, xinputs.map(i => ({ txid: i.outpoint.txid, vout: i.outpoint.vout })));
|
|
509
|
-
for (const input of xinputs) {
|
|
510
|
-
const { txid, vout } = input.outpoint;
|
|
511
|
-
let output = preloadedOutputsByOutpoint[`${txid}.${vout}`];
|
|
512
|
-
if (!output)
|
|
513
|
-
output = (0, utilityHelpers_1.verifyOneOrNone)(await storage.findOutputs({ partial: { userId, txid, vout } }));
|
|
514
|
-
if (output) {
|
|
515
|
-
if (output.change) {
|
|
516
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`inputs[${input.vin}]`, 'an unmanaged input. Change outputs are managed by your wallet.');
|
|
517
|
-
}
|
|
518
|
-
input.output = output;
|
|
519
|
-
if (!Array.isArray(output.lockingScript) || !Number.isInteger(output.satoshis))
|
|
520
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'output with valid lockingScript and satoshis');
|
|
521
|
-
if (!disableDoubleSpendCheckForTest && !output.spendable && !vargs.isNoSend)
|
|
522
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'spendable output unless noSend is true');
|
|
523
|
-
// input is spending an existing user output which has an lockingScript
|
|
524
|
-
input.satoshis = sdk_1.Validation.validateSatoshis(output.satoshis, 'output.satoshis');
|
|
525
|
-
input.lockingScript = sdk_1.Script.fromBinary((0, utilityHelpers_noBuffer_1.asArray)(output.lockingScript));
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
let btx = beef.findTxid(txid);
|
|
529
|
-
if (btx.isTxidOnly) {
|
|
530
|
-
const { rawTx, proven } = await storage.getProvenOrRawTx(txid);
|
|
531
|
-
//stampLog(vargs, `... storage verifyInputBeef getProvenOrRawTx ${txid} ${proven ? 'proven' : rawTx ? 'rawTx' : 'unknown'}`)
|
|
532
|
-
if (!rawTx)
|
|
533
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain proof data for ${txid}`);
|
|
534
|
-
btx = beef.mergeRawTx((0, utilityHelpers_noBuffer_1.asArray)(rawTx));
|
|
535
|
-
if (proven)
|
|
536
|
-
beef.mergeBump(new EntityProvenTx_1.EntityProvenTx(proven).getMerklePath());
|
|
537
|
-
}
|
|
538
|
-
// btx is valid has parsed transaction data.
|
|
539
|
-
if (vout >= btx.tx.outputs.length)
|
|
540
|
-
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'valid outpoint');
|
|
541
|
-
const so = btx.tx.outputs[vout];
|
|
542
|
-
input.satoshis = sdk_1.Validation.validateSatoshis(so.satoshis, 'so.satoshis');
|
|
543
|
-
input.lockingScript = so.lockingScript;
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
return { beef, storageBeef, xinputs };
|
|
547
506
|
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
507
|
+
/** Resolve satoshis and lockingScript for one xinput from either storage or the beef. */
|
|
508
|
+
async function resolveInputScript(storage, userId, vargs, input, beef, preloadedOutputsByOutpoint) {
|
|
509
|
+
const { txid, vout } = input.outpoint;
|
|
510
|
+
let output = preloadedOutputsByOutpoint[`${txid}.${vout}`];
|
|
511
|
+
output !== null && output !== void 0 ? output : (output = (0, utilityHelpers_1.verifyOneOrNone)(await storage.findOutputs({ partial: { userId, txid, vout } })));
|
|
512
|
+
if (output != null) {
|
|
513
|
+
if (output.change)
|
|
514
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`inputs[${input.vin}]`, 'an unmanaged input. Change outputs are managed by your wallet.');
|
|
515
|
+
input.output = output;
|
|
516
|
+
if (!Array.isArray(output.lockingScript) || !Number.isInteger(output.satoshis))
|
|
517
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'output with valid lockingScript and satoshis');
|
|
518
|
+
if (!disableDoubleSpendCheckForTest && !output.spendable && !vargs.isNoSend)
|
|
519
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'spendable output unless noSend is true');
|
|
520
|
+
input.satoshis = sdk_1.Validation.validateSatoshis(output.satoshis, 'output.satoshis');
|
|
521
|
+
input.lockingScript = sdk_1.Script.fromBinary((0, utilityHelpers_noBuffer_1.asArray)(output.lockingScript));
|
|
553
522
|
}
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
523
|
+
else {
|
|
524
|
+
let btx = beef.findTxid(txid);
|
|
525
|
+
if (btx.isTxidOnly) {
|
|
526
|
+
const { rawTx, proven } = await storage.getProvenOrRawTx(txid);
|
|
527
|
+
if (rawTx == null)
|
|
528
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain proof data for ${txid}`);
|
|
529
|
+
btx = beef.mergeRawTx((0, utilityHelpers_noBuffer_1.asArray)(rawTx));
|
|
530
|
+
if (proven != null)
|
|
531
|
+
beef.mergeBump(new EntityProvenTx_1.EntityProvenTx(proven).getMerklePath());
|
|
532
|
+
}
|
|
533
|
+
if (vout >= btx.tx.outputs.length)
|
|
534
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'valid outpoint');
|
|
535
|
+
const so = btx.tx.outputs[vout];
|
|
536
|
+
input.satoshis = sdk_1.Validation.validateSatoshis(so.satoshis, 'so.satoshis');
|
|
537
|
+
input.lockingScript = so.lockingScript;
|
|
565
538
|
}
|
|
566
|
-
return false;
|
|
567
539
|
}
|
|
568
540
|
async function validateNoSendChange(storage, userId, vargs, changeBasket) {
|
|
569
541
|
const r = [];
|
|
@@ -576,17 +548,19 @@ async function validateNoSendChange(storage, userId, vargs, changeBasket) {
|
|
|
576
548
|
partial: { userId, txid: op.txid, vout: op.vout }
|
|
577
549
|
}));
|
|
578
550
|
// noSendChange is not marked spendable until sent, may not already be spent, and must have a valid greater than zero satoshis
|
|
579
|
-
if (
|
|
580
|
-
output.providedBy !== 'storage' ||
|
|
551
|
+
if ((output === null || output === void 0 ? void 0 : output.providedBy) !== 'storage' ||
|
|
581
552
|
output.purpose !== 'change' ||
|
|
582
|
-
output.spendable
|
|
553
|
+
!output.spendable ||
|
|
583
554
|
Number.isInteger(output.spentBy) ||
|
|
584
555
|
!(0, utilityHelpers_1.verifyNumber)(output.satoshis) ||
|
|
585
|
-
output.basketId !== changeBasket.basketId)
|
|
556
|
+
output.basketId !== changeBasket.basketId) {
|
|
586
557
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('noSendChange outpoint', 'valid');
|
|
587
|
-
|
|
588
|
-
|
|
558
|
+
}
|
|
559
|
+
if (r.some(o => o.outputId === output.outputId))
|
|
560
|
+
// noSendChange duplicate OutPoints are not allowed.
|
|
561
|
+
{
|
|
589
562
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('noSendChange outpoint', 'unique. Duplicates are not allowed.');
|
|
563
|
+
}
|
|
590
564
|
r.push(output);
|
|
591
565
|
}
|
|
592
566
|
}
|
|
@@ -638,7 +612,9 @@ async function fundNewTransactionSdk(storage, userId, vargs, ctx) {
|
|
|
638
612
|
const o = noSendChange.pop();
|
|
639
613
|
outputs[o.outputId] = o;
|
|
640
614
|
// allocate the output in storage, noSendChange is by definition spendable false and part of noSpend transaction batch.
|
|
641
|
-
|
|
615
|
+
// Post-cutover: outputs.spentBy FK → new transactions; ctx.transactionId is from
|
|
616
|
+
// transactions_legacy. Use markOutputAsSpentBy for FK bypass. Mapping §2: bridge-period.
|
|
617
|
+
await storage.markOutputAsSpentBy(o.outputId, {
|
|
642
618
|
spendable: false,
|
|
643
619
|
spentBy: ctx.transactionId
|
|
644
620
|
});
|
|
@@ -652,7 +628,7 @@ async function fundNewTransactionSdk(storage, userId, vargs, ctx) {
|
|
|
652
628
|
}
|
|
653
629
|
const basketId = ctx.changeBasket.basketId;
|
|
654
630
|
const o = await storage.allocateChangeInput(userId, basketId, targetSatoshis, exactSatoshis, !vargs.isDelayed, ctx.transactionId);
|
|
655
|
-
if (
|
|
631
|
+
if (o == null)
|
|
656
632
|
return undefined;
|
|
657
633
|
outputs[o.outputId] = o;
|
|
658
634
|
const r = {
|
|
@@ -663,7 +639,7 @@ async function fundNewTransactionSdk(storage, userId, vargs, ctx) {
|
|
|
663
639
|
};
|
|
664
640
|
const releaseChangeInput = async (outputId) => {
|
|
665
641
|
const nsco = ctx.noSendChangeIn.find(o => o.outputId === outputId);
|
|
666
|
-
if (nsco) {
|
|
642
|
+
if (nsco != null) {
|
|
667
643
|
noSendChange.push(nsco);
|
|
668
644
|
return;
|
|
669
645
|
}
|
|
@@ -675,7 +651,7 @@ async function fundNewTransactionSdk(storage, userId, vargs, ctx) {
|
|
|
675
651
|
const gcr = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput, vargs.logger);
|
|
676
652
|
const nextRandomVal = () => {
|
|
677
653
|
let val = 0;
|
|
678
|
-
if (
|
|
654
|
+
if ((vargs.randomVals == null) || vargs.randomVals.length === 0) {
|
|
679
655
|
const bytes = (0, sdk_1.Random)(4);
|
|
680
656
|
val = (((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0) / 0x100000000;
|
|
681
657
|
}
|
|
@@ -695,7 +671,7 @@ async function fundNewTransactionSdk(storage, userId, vargs, ctx) {
|
|
|
695
671
|
};
|
|
696
672
|
const randomDerivation = (count) => {
|
|
697
673
|
let val = [];
|
|
698
|
-
if (
|
|
674
|
+
if ((vargs.randomVals == null) || vargs.randomVals.length === 0) {
|
|
699
675
|
val = (0, sdk_1.Random)(count);
|
|
700
676
|
}
|
|
701
677
|
else {
|
|
@@ -757,6 +733,7 @@ function trimInputBeef(beef, vargs) {
|
|
|
757
733
|
return beef.toBinary();
|
|
758
734
|
}
|
|
759
735
|
async function mergeAllocatedChangeBeefs(storage, userId, vargs, allocatedChange, beef) {
|
|
736
|
+
var _a;
|
|
760
737
|
const options = {
|
|
761
738
|
trustSelf: undefined,
|
|
762
739
|
knownTxids: vargs.options.knownTxids,
|
|
@@ -769,7 +746,7 @@ async function mergeAllocatedChangeBeefs(storage, userId, vargs, allocatedChange
|
|
|
769
746
|
if (vargs.options.returnTXIDOnly)
|
|
770
747
|
return undefined;
|
|
771
748
|
for (const o of allocatedChange) {
|
|
772
|
-
if (
|
|
749
|
+
if ((beef.findTxid(o.txid) == null) && !((_a = vargs.options.knownTxids) !== null && _a !== void 0 ? _a : []).some(txid => txid === o.txid)) {
|
|
773
750
|
await storage.getBeefForTransaction(o.txid, options);
|
|
774
751
|
}
|
|
775
752
|
}
|