@bsv/wallet-toolbox 1.1.60 → 1.1.62
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/.prettierrc +1 -1
- package/docs/client.md +39 -5
- package/docs/services.md +1 -0
- package/docs/setup.md +9 -26
- package/docs/storage.md +35 -0
- package/docs/wallet.md +39 -5
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +6 -16
- package/out/src/Setup.js.map +1 -1
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +4 -11
- package/out/src/Wallet.js.map +1 -1
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- 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 +1 -3
- package/out/src/monitor/MonitorDaemon.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.js +2 -10
- package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskClock.js +1 -1
- package/out/src/monitor/tasks/TaskClock.js.map +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/TaskNewHeader.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.js +1 -2
- package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.js +1 -2
- package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.js +1 -2
- package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
- package/out/src/sdk/CertOps.d.ts.map +1 -1
- package/out/src/sdk/CertOps.js +4 -12
- package/out/src/sdk/CertOps.js.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
- 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.map +1 -1
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +1 -4
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +2 -0
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/__test/CertificateLifeCycle.test.js +1 -3
- package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
- package/out/src/sdk/__test/PrivilegedKeyManager.test.js +13 -26
- package/out/src/sdk/__test/PrivilegedKeyManager.test.js.map +1 -1
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +2 -10
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/sdk/validationHelpers.d.ts.map +1 -1
- package/out/src/sdk/validationHelpers.js +5 -12
- package/out/src/sdk/validationHelpers.js.map +1 -1
- package/out/src/services/Services.d.ts +1 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +29 -38
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/__tests/ARC.test.js +9 -0
- package/out/src/services/__tests/ARC.test.js.map +1 -1
- package/out/src/services/__tests/bitrails.test.js.map +1 -1
- package/out/src/services/__tests/getMerklePath.test.js.map +1 -1
- package/out/src/services/__tests/getRawTx.test.js.map +1 -1
- package/out/src/services/__tests/verifyBeef.test.js +2 -1
- package/out/src/services/__tests/verifyBeef.test.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +1 -3
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- 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 +2 -3
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/services/providers/Bitails.d.ts.map +1 -1
- package/out/src/services/providers/Bitails.js +62 -134
- 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.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +6 -21
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/__tests/WhatsOnChain.test.js +1 -2
- package/out/src/services/providers/__tests/WhatsOnChain.test.js.map +1 -1
- package/out/src/services/providers/echangeRates.d.ts.map +1 -1
- package/out/src/services/providers/echangeRates.js.map +1 -1
- 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.d.ts.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js +1 -3
- 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 +3 -11
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +3 -10
- 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.map +1 -1
- package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/proveCertificate.js.map +1 -1
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +2 -7
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +15 -44
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +9 -34
- 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.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- 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.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +5 -10
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js +2 -8
- package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js +10 -30
- package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.d.ts.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.js +17 -28
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +6 -20
- 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 +4 -9
- 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 +7 -18
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.d.ts.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.js +1 -3
- 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.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +2 -9
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActions.d.ts.map +1 -1
- package/out/src/storage/methods/listActions.js +3 -15
- package/out/src/storage/methods/listActions.js.map +1 -1
- package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/out/src/storage/methods/listCertificates.js.map +1 -1
- package/out/src/storage/methods/listOutputs.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputs.js +5 -12
- package/out/src/storage/methods/listOutputs.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +4 -10
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/methods/purgeData.d.ts.map +1 -1
- package/out/src/storage/methods/purgeData.js +8 -32
- package/out/src/storage/methods/purgeData.js.map +1 -1
- package/out/src/storage/methods/reviewStatus.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatus.js +1 -3
- package/out/src/storage/methods/reviewStatus.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +15 -41
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +2 -5
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +24 -130
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/entities/Certificate.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Certificate.js +1 -1
- package/out/src/storage/schema/entities/Certificate.js.map +1 -1
- package/out/src/storage/schema/entities/CertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/entities/CertificateField.js +2 -5
- package/out/src/storage/schema/entities/CertificateField.js.map +1 -1
- package/out/src/storage/schema/entities/Commission.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Commission.js +2 -5
- package/out/src/storage/schema/entities/Commission.js.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/MergeEntity.d.ts.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.js +14 -9
- package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
- package/out/src/storage/schema/entities/Output.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Output.js +8 -25
- package/out/src/storage/schema/entities/Output.js.map +1 -1
- package/out/src/storage/schema/entities/OutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputBasket.js +1 -1
- package/out/src/storage/schema/entities/OutputBasket.js.map +1 -1
- package/out/src/storage/schema/entities/OutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputTag.js +1 -1
- package/out/src/storage/schema/entities/OutputTag.js.map +1 -1
- package/out/src/storage/schema/entities/OutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputTagMap.js +3 -7
- package/out/src/storage/schema/entities/OutputTagMap.js.map +1 -1
- package/out/src/storage/schema/entities/ProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/ProvenTx.js +10 -20
- package/out/src/storage/schema/entities/ProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/entities/ProvenTxReq.js +8 -18
- package/out/src/storage/schema/entities/ProvenTxReq.js.map +1 -1
- package/out/src/storage/schema/entities/SyncState.d.ts +1 -0
- package/out/src/storage/schema/entities/SyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/SyncState.js +41 -6
- package/out/src/storage/schema/entities/SyncState.js.map +1 -1
- package/out/src/storage/schema/entities/Transaction.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Transaction.js +4 -13
- package/out/src/storage/schema/entities/Transaction.js.map +1 -1
- package/out/src/storage/schema/entities/TxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/entities/TxLabel.js +1 -1
- package/out/src/storage/schema/entities/TxLabel.js.map +1 -1
- package/out/src/storage/schema/entities/TxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/TxLabelMap.js +3 -9
- package/out/src/storage/schema/entities/TxLabelMap.js.map +1 -1
- package/out/src/storage/schema/entities/User.d.ts.map +1 -1
- package/out/src/storage/schema/entities/User.js +3 -5
- package/out/src/storage/schema/entities/User.js.map +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/OutputBasketTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTagTests.test.js.map +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.map +1 -1
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js +1 -2
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/SyncStateTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js +2 -2
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TxLabelMapTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TxLabelTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/stampLogTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/usersTests.test.js.map +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +1 -3
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.js +1 -2
- package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
- package/out/src/utility/stampLog.d.ts.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/out/src/utility/utilityHelpers.js +1 -3
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/out/test/Wallet/StorageClient/storageClient.man.test.js.map +1 -1
- package/out/test/Wallet/action/internalizeAction.a.test.js.map +1 -1
- package/out/test/Wallet/certificate/acquireCertificate.test.js.map +1 -1
- package/out/test/Wallet/certificate/listCertificates.test.js.map +1 -1
- package/out/test/Wallet/get/getHeaderForHeight.test.js +2 -6
- package/out/test/Wallet/get/getHeaderForHeight.test.js.map +1 -1
- package/out/test/Wallet/get/getHeight.test.js.map +1 -1
- package/out/test/Wallet/get/getKnownTxids.test.js.map +1 -1
- package/out/test/Wallet/get/getNetwork.test.js.map +1 -1
- package/out/test/Wallet/get/getVersion.test.js.map +1 -1
- package/out/test/Wallet/live/walletLive.man.test.d.ts.map +1 -1
- package/out/test/Wallet/live/walletLive.man.test.js +3 -9
- package/out/test/Wallet/live/walletLive.man.test.js.map +1 -1
- package/out/test/Wallet/local/localWallet.man.test.d.ts.map +1 -1
- package/out/test/Wallet/local/localWallet.man.test.js +39 -31
- package/out/test/Wallet/local/localWallet.man.test.js.map +1 -1
- package/out/test/Wallet/specOps/specOps.man.test.js +1 -4
- package/out/test/Wallet/specOps/specOps.man.test.js.map +1 -1
- package/out/test/Wallet/support/janitor.man.test.js.map +1 -1
- package/out/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.js.map +1 -1
- package/out/test/Wallet/sync/setActive.test.js +73 -50
- package/out/test/Wallet/sync/setActive.test.js.map +1 -1
- package/out/test/checkDB.d.ts.map +1 -1
- package/out/test/checkDB.js.map +1 -1
- package/out/test/examples/backup.man.test.d.ts.map +1 -1
- package/out/test/examples/backup.man.test.js.map +1 -1
- package/out/test/examples/pushdrop.test.d.ts.map +1 -1
- package/out/test/examples/pushdrop.test.js +5 -4
- package/out/test/examples/pushdrop.test.js.map +1 -1
- package/out/test/monitor/Monitor.test.js.map +1 -1
- package/out/test/services/Services.test.js.map +1 -1
- package/out/test/storage/KnexMigrations.test.js.map +1 -1
- package/out/test/storage/StorageMySQLDojoReader.man.test.js +1 -3
- package/out/test/storage/StorageMySQLDojoReader.man.test.js.map +1 -1
- package/out/test/storage/count.test.js.map +1 -1
- package/out/test/storage/find.test.js +5 -10
- package/out/test/storage/find.test.js.map +1 -1
- package/out/test/storage/findLegacy.test.js.map +1 -1
- package/out/test/storage/insert.test.js.map +1 -1
- package/out/test/storage/update.test.js +7 -19
- package/out/test/storage/update.test.js.map +1 -1
- package/out/test/storage/update2.test.js +22 -24
- package/out/test/storage/update2.test.js.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.d.ts +3 -1
- package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.js +52 -76
- package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
- package/out/test/wallet/action/abortAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction.test.js +1 -2
- package/out/test/wallet/action/createAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction2.test.d.ts.map +1 -1
- package/out/test/wallet/action/createAction2.test.js +6 -16
- package/out/test/wallet/action/createAction2.test.js.map +1 -1
- package/out/test/wallet/action/createActionToGenerateBeefs.man.test.js.map +1 -1
- package/out/test/wallet/action/internalizeAction.test.js.map +1 -1
- package/out/test/wallet/action/relinquishOutput.test.js.map +1 -1
- package/out/test/wallet/list/listActions.test.js.map +1 -1
- package/out/test/wallet/list/listActions2.test.js.map +1 -1
- package/out/test/wallet/list/listCertificates.test.js +2 -6
- package/out/test/wallet/list/listCertificates.test.js.map +1 -1
- package/out/test/wallet/list/listOutputs.test.js +2 -10
- package/out/test/wallet/list/listOutputs.test.js.map +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.js +4 -6
- package/out/test/wallet/sync/Wallet.sync.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/Setup.ts +15 -52
- package/src/Wallet.ts +58 -161
- package/src/monitor/Monitor.ts +7 -22
- package/src/monitor/MonitorDaemon.ts +6 -23
- package/src/monitor/tasks/TaskCheckForProofs.ts +4 -23
- package/src/monitor/tasks/TaskClock.ts +1 -3
- package/src/monitor/tasks/TaskFailAbandoned.ts +1 -3
- package/src/monitor/tasks/TaskNewHeader.ts +1 -4
- package/src/monitor/tasks/TaskPurge.ts +1 -2
- package/src/monitor/tasks/TaskReviewStatus.ts +1 -3
- package/src/monitor/tasks/TaskSendWaiting.ts +3 -10
- package/src/sdk/CertOps.ts +31 -103
- package/src/sdk/PrivilegedKeyManager.ts +18 -48
- package/src/sdk/WERR_errors.ts +6 -25
- package/src/sdk/WalletError.ts +5 -21
- package/src/sdk/WalletServices.interfaces.ts +11 -33
- package/src/sdk/WalletStorage.interfaces.ts +25 -91
- package/src/sdk/__test/CertificateLifeCycle.test.ts +9 -27
- package/src/sdk/__test/PrivilegedKeyManager.test.ts +29 -66
- package/src/sdk/types.ts +6 -26
- package/src/sdk/validationHelpers.ts +111 -402
- package/src/services/Services.ts +51 -114
- package/src/services/__tests/ARC.test.ts +14 -1
- package/src/services/__tests/bitrails.test.ts +4 -15
- package/src/services/__tests/getMerklePath.test.ts +1 -2
- package/src/services/__tests/getRawTx.test.ts +1 -3
- package/src/services/__tests/verifyBeef.test.ts +2 -1
- package/src/services/chaintracker/ChaintracksChainTracker.ts +3 -13
- package/src/services/chaintracker/chaintracks/BlockHeaderApi.ts +4 -12
- package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +9 -27
- package/src/services/createDefaultWalletServicesOptions.ts +2 -5
- package/src/services/processingErrors/arcSuccessError.json +76 -0
- package/src/services/providers/ARC.ts +6 -25
- package/src/services/providers/Bitails.ts +61 -159
- package/src/services/providers/SdkWhatsOnChain.ts +4 -17
- package/src/services/providers/WhatsOnChain.ts +31 -100
- package/src/services/providers/__tests/WhatsOnChain.test.ts +5 -15
- package/src/services/providers/echangeRates.ts +7 -22
- package/src/signer/WalletSigner.ts +1 -5
- package/src/signer/methods/acquireDirectCertificate.ts +1 -4
- package/src/signer/methods/buildSignableTransaction.ts +5 -20
- package/src/signer/methods/createAction.ts +15 -54
- package/src/signer/methods/internalizeAction.ts +10 -39
- package/src/signer/methods/proveCertificate.ts +2 -5
- package/src/signer/methods/signAction.ts +9 -39
- package/src/storage/StorageKnex.ts +166 -499
- package/src/storage/StorageProvider.ts +75 -291
- package/src/storage/StorageReader.ts +20 -65
- package/src/storage/StorageReaderWriter.ts +67 -264
- package/src/storage/StorageSyncReader.ts +2 -5
- package/src/storage/WalletStorageManager.ts +33 -108
- package/src/storage/__test/WalletStorageManager.test.ts +6 -23
- package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +53 -171
- package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +17 -28
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +9 -37
- package/src/storage/methods/createAction.ts +45 -181
- package/src/storage/methods/generateChange.ts +33 -114
- package/src/storage/methods/getBeefForTransaction.ts +7 -37
- package/src/storage/methods/getSyncChunk.ts +18 -69
- package/src/storage/methods/internalizeAction.ts +18 -70
- package/src/storage/methods/listActions.ts +6 -23
- package/src/storage/methods/listCertificates.ts +5 -14
- package/src/storage/methods/listOutputs.ts +15 -69
- package/src/storage/methods/processAction.ts +29 -104
- package/src/storage/methods/purgeData.ts +11 -45
- package/src/storage/methods/reviewStatus.ts +3 -9
- package/src/storage/remoting/StorageClient.ts +43 -146
- package/src/storage/remoting/StorageServer.ts +21 -59
- package/src/storage/schema/KnexMigrations.ts +34 -165
- package/src/storage/schema/entities/Certificate.ts +3 -14
- package/src/storage/schema/entities/CertificateField.ts +6 -28
- package/src/storage/schema/entities/Commission.ts +6 -23
- package/src/storage/schema/entities/EntityBase.ts +1 -6
- package/src/storage/schema/entities/MergeEntity.ts +14 -21
- package/src/storage/schema/entities/Output.ts +10 -39
- package/src/storage/schema/entities/OutputBasket.ts +4 -16
- package/src/storage/schema/entities/OutputTag.ts +4 -17
- package/src/storage/schema/entities/OutputTagMap.ts +7 -30
- package/src/storage/schema/entities/ProvenTx.ts +16 -57
- package/src/storage/schema/entities/ProvenTxReq.ts +29 -93
- package/src/storage/schema/entities/SyncState.ts +64 -116
- package/src/storage/schema/entities/Transaction.ts +10 -35
- package/src/storage/schema/entities/TxLabel.ts +4 -17
- package/src/storage/schema/entities/TxLabelMap.ts +6 -28
- package/src/storage/schema/entities/User.ts +8 -31
- package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +23 -54
- package/src/storage/schema/entities/__tests/CertificateTests.test.ts +26 -59
- package/src/storage/schema/entities/__tests/CommissionTests.test.ts +2 -11
- package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +1 -4
- package/src/storage/schema/entities/__tests/OutputTests.test.ts +3 -14
- package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +4 -16
- package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +5 -18
- package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +5 -26
- package/src/storage/schema/entities/__tests/TransactionTests.test.ts +12 -48
- package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +4 -22
- package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/stampLogTests.test.ts +3 -10
- package/src/storage/schema/entities/__tests/usersTests.test.ts +4 -7
- package/src/storage/schema/tables/TableSettings.ts +1 -3
- package/src/storage/sync/StorageMySQLDojoReader.ts +47 -148
- package/src/utility/ScriptTemplateBRC29.ts +2 -11
- package/src/utility/stampLog.ts +2 -6
- package/src/utility/tscProofToMerklePath.ts +1 -4
- package/src/utility/utilityHelpers.buffer.ts +3 -12
- package/src/utility/utilityHelpers.ts +14 -49
- package/test/Wallet/StorageClient/storageClient.man.test.ts +2 -8
- package/test/Wallet/action/internalizeAction.a.test.ts +8 -23
- package/test/Wallet/certificate/acquireCertificate.test.ts +10 -24
- package/test/Wallet/certificate/listCertificates.test.ts +8 -18
- package/test/Wallet/get/getHeaderForHeight.test.ts +4 -15
- package/test/Wallet/get/getHeight.test.ts +2 -6
- package/test/Wallet/get/getKnownTxids.test.ts +1 -5
- package/test/Wallet/get/getNetwork.test.ts +1 -2
- package/test/Wallet/get/getVersion.test.ts +1 -2
- package/test/Wallet/live/walletLive.man.test.ts +14 -41
- package/test/Wallet/local/localWallet.man.test.ts +45 -102
- package/test/Wallet/specOps/specOps.man.test.ts +4 -13
- package/test/Wallet/support/janitor.man.test.ts +2 -7
- package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +11 -34
- package/test/Wallet/sync/setActive.test.ts +75 -61
- package/test/checkDB.ts +2 -8
- package/test/examples/backup.man.test.ts +2 -9
- package/test/examples/pushdrop.test.ts +7 -20
- package/test/monitor/Monitor.test.ts +33 -87
- package/test/services/Services.test.ts +8 -19
- package/test/storage/KnexMigrations.test.ts +3 -18
- package/test/storage/StorageMySQLDojoReader.man.test.ts +4 -15
- package/test/storage/count.test.ts +7 -24
- package/test/storage/find.test.ts +7 -29
- package/test/storage/findLegacy.test.ts +2 -5
- package/test/storage/insert.test.ts +3 -19
- package/test/storage/update.test.ts +47 -179
- package/test/storage/update2.test.ts +54 -176
- package/test/utils/TestUtilsWalletStorage.ts +139 -372
- package/test/wallet/action/abortAction.test.ts +4 -12
- package/test/wallet/action/createAction.test.ts +4 -14
- package/test/wallet/action/createAction2.test.ts +74 -208
- package/test/wallet/action/createActionToGenerateBeefs.man.test.ts +8 -11
- package/test/wallet/action/internalizeAction.test.ts +20 -72
- package/test/wallet/action/relinquishOutput.test.ts +3 -9
- package/test/wallet/list/listActions.test.ts +2 -9
- package/test/wallet/list/listActions2.test.ts +8 -34
- package/test/wallet/list/listCertificates.test.ts +5 -16
- package/test/wallet/list/listOutputs.test.ts +15 -54
- package/test/wallet/sync/Wallet.sync.test.ts +18 -49
|
@@ -58,6 +58,7 @@ import {
|
|
|
58
58
|
import { Knex, knex as makeKnex } from 'knex'
|
|
59
59
|
|
|
60
60
|
import * as dotenv from 'dotenv'
|
|
61
|
+
import { WalletServicesOptions } from '../../src/sdk'
|
|
61
62
|
dotenv.config()
|
|
62
63
|
|
|
63
64
|
const localMySqlConnection = process.env.MYSQL_CONNECTION || ''
|
|
@@ -67,6 +68,8 @@ export interface TuEnv {
|
|
|
67
68
|
identityKey: string
|
|
68
69
|
identityKey2: string
|
|
69
70
|
taalApiKey: string
|
|
71
|
+
bitailsApiKey: string
|
|
72
|
+
whatsonchainApiKey: string
|
|
70
73
|
devKeys: Record<string, string>
|
|
71
74
|
runMySQL: boolean
|
|
72
75
|
runSlowTests: boolean
|
|
@@ -115,41 +118,28 @@ export abstract class TestUtilsWalletStorage {
|
|
|
115
118
|
|
|
116
119
|
static getEnv(chain: sdk.Chain): TuEnv {
|
|
117
120
|
// Identity keys of the lead maintainer of this repo...
|
|
118
|
-
const identityKey =
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
const
|
|
123
|
-
chain === 'main'
|
|
124
|
-
? process.env.MY_MAIN_FILEPATH
|
|
125
|
-
: process.env.MY_TEST_FILEPATH
|
|
126
|
-
const identityKey2 =
|
|
127
|
-
(chain === 'main'
|
|
128
|
-
? process.env.MY_MAIN_IDENTITY2
|
|
129
|
-
: process.env.MY_TEST_IDENTITY2) || ''
|
|
130
|
-
const testIdentityKey =
|
|
131
|
-
chain === 'main'
|
|
132
|
-
? process.env.TEST_MAIN_IDENTITY
|
|
133
|
-
: process.env.TEST_TEST_IDENTITY
|
|
134
|
-
const testFilePath =
|
|
135
|
-
chain === 'main'
|
|
136
|
-
? process.env.TEST_MAIN_FILEPATH
|
|
137
|
-
: process.env.TEST_TEST_FILEPATH
|
|
121
|
+
const identityKey = (chain === 'main' ? process.env.MY_MAIN_IDENTITY : process.env.MY_TEST_IDENTITY) || ''
|
|
122
|
+
const filePath = chain === 'main' ? process.env.MY_MAIN_FILEPATH : process.env.MY_TEST_FILEPATH
|
|
123
|
+
const identityKey2 = (chain === 'main' ? process.env.MY_MAIN_IDENTITY2 : process.env.MY_TEST_IDENTITY2) || ''
|
|
124
|
+
const testIdentityKey = chain === 'main' ? process.env.TEST_MAIN_IDENTITY : process.env.TEST_TEST_IDENTITY
|
|
125
|
+
const testFilePath = chain === 'main' ? process.env.TEST_MAIN_FILEPATH : process.env.TEST_TEST_FILEPATH
|
|
138
126
|
const cloudMySQLConnection =
|
|
139
|
-
chain === 'main'
|
|
140
|
-
? process.env.MAIN_CLOUD_MYSQL_CONNECTION
|
|
141
|
-
: process.env.TEST_CLOUD_MYSQL_CONNECTION
|
|
127
|
+
chain === 'main' ? process.env.MAIN_CLOUD_MYSQL_CONNECTION : process.env.TEST_CLOUD_MYSQL_CONNECTION
|
|
142
128
|
const DEV_KEYS = process.env.DEV_KEYS || '{}'
|
|
143
129
|
const logTests = !!process.env.LOGTESTS
|
|
144
130
|
const runMySQL = !!process.env.RUNMYSQL
|
|
145
131
|
const runSlowTests = !!process.env.RUNSLOWTESTS
|
|
146
|
-
const
|
|
147
|
-
const
|
|
132
|
+
const taalApiKey = (chain === 'main' ? process.env.MAIN_TAAL_API_KEY : process.env.TEST_TAAL_API_KEY) || ''
|
|
133
|
+
const bitailsApiKey = (chain === 'main' ? process.env.MAIN_BITAILS_API_KEY : process.env.TEST_BITAILS_API_KEY) || ''
|
|
134
|
+
const whatsonchainApiKey =
|
|
135
|
+
(chain === 'main' ? process.env.MAIN_WHATSONCHAIN_API_KEY : process.env.TEST_WHATSONCHAIN_API_KEY) || ''
|
|
148
136
|
return {
|
|
149
137
|
chain,
|
|
150
138
|
identityKey,
|
|
151
139
|
identityKey2,
|
|
152
|
-
taalApiKey
|
|
140
|
+
taalApiKey,
|
|
141
|
+
bitailsApiKey,
|
|
142
|
+
whatsonchainApiKey,
|
|
153
143
|
devKeys: JSON.parse(DEV_KEYS) as Record<string, string>,
|
|
154
144
|
runMySQL,
|
|
155
145
|
runSlowTests,
|
|
@@ -172,13 +162,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
172
162
|
cr: CreateActionResult
|
|
173
163
|
sr: SignActionResult
|
|
174
164
|
}> {
|
|
175
|
-
return await _tu.createNoSendP2PKHTestOutpoints(
|
|
176
|
-
1,
|
|
177
|
-
address,
|
|
178
|
-
satoshis,
|
|
179
|
-
noSendChange,
|
|
180
|
-
wallet
|
|
181
|
-
)
|
|
165
|
+
return await _tu.createNoSendP2PKHTestOutpoints(1, address, satoshis, noSendChange, wallet)
|
|
182
166
|
}
|
|
183
167
|
|
|
184
168
|
static async createNoSendP2PKHTestOutpoints(
|
|
@@ -292,18 +276,16 @@ export abstract class TestUtilsWalletStorage {
|
|
|
292
276
|
const identityKey = rootKey.toPublicKey().toString()
|
|
293
277
|
const keyDeriver = new KeyDeriver(rootKey)
|
|
294
278
|
const chain = args.chain
|
|
295
|
-
const storage = new WalletStorageManager(
|
|
296
|
-
identityKey,
|
|
297
|
-
args.active,
|
|
298
|
-
args.backups
|
|
299
|
-
)
|
|
279
|
+
const storage = new WalletStorageManager(identityKey, args.active, args.backups)
|
|
300
280
|
if (storage.canMakeAvailable()) await storage.makeAvailable()
|
|
301
|
-
const
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
281
|
+
const env = _tu.getEnv(args.chain!)
|
|
282
|
+
const serviceOptions: WalletServicesOptions = Services.createDefaultOptions(env.chain)
|
|
283
|
+
serviceOptions.taalApiKey = env.taalApiKey
|
|
284
|
+
serviceOptions.arcConfig.apiKey = env.taalApiKey
|
|
285
|
+
serviceOptions.bitailsApiKey = env.bitailsApiKey
|
|
286
|
+
serviceOptions.whatsOnChainApiKey = env.whatsonchainApiKey
|
|
287
|
+
const services = new Services(serviceOptions)
|
|
288
|
+
const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services)
|
|
307
289
|
const monitor = new Monitor(monopts)
|
|
308
290
|
monitor.addDefaultTasks()
|
|
309
291
|
let privilegedKeyManager: sdk.PrivilegedKeyManager | undefined = undefined
|
|
@@ -344,9 +326,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
344
326
|
*
|
|
345
327
|
* @returns {TestWalletNoSetup}
|
|
346
328
|
*/
|
|
347
|
-
static async createTestWallet(
|
|
348
|
-
args: sdk.Chain | CreateTestWalletArgs
|
|
349
|
-
): Promise<TestWalletNoSetup> {
|
|
329
|
+
static async createTestWallet(args: sdk.Chain | CreateTestWalletArgs): Promise<TestWalletNoSetup> {
|
|
350
330
|
let chain: sdk.Chain
|
|
351
331
|
let rootKeyHex: string
|
|
352
332
|
let filePath: string
|
|
@@ -357,10 +337,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
357
337
|
chain = args
|
|
358
338
|
const env = _tu.getEnv(chain)
|
|
359
339
|
if (!env.testIdentityKey || !env.testFilePath) {
|
|
360
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
361
|
-
'env.testIdentityKey and env.testFilePath',
|
|
362
|
-
'valid'
|
|
363
|
-
)
|
|
340
|
+
throw new sdk.WERR_INVALID_PARAMETER('env.testIdentityKey and env.testFilePath', 'valid')
|
|
364
341
|
}
|
|
365
342
|
rootKeyHex = env.devKeys[env.testIdentityKey!]
|
|
366
343
|
filePath = env.testFilePath
|
|
@@ -385,11 +362,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
385
362
|
let client: sdk.WalletStorageProvider
|
|
386
363
|
if (useMySQLConnectionForClient) {
|
|
387
364
|
const env = _tu.getEnv(chain)
|
|
388
|
-
if (!env.cloudMySQLConnection)
|
|
389
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
390
|
-
'env.cloundMySQLConnection',
|
|
391
|
-
'valid'
|
|
392
|
-
)
|
|
365
|
+
if (!env.cloudMySQLConnection) throw new sdk.WERR_INVALID_PARAMETER('env.cloundMySQLConnection', 'valid')
|
|
393
366
|
const connection = JSON.parse(env.cloudMySQLConnection)
|
|
394
367
|
client = new StorageKnex({
|
|
395
368
|
...StorageKnex.defaultOptions(),
|
|
@@ -398,15 +371,11 @@ export abstract class TestUtilsWalletStorage {
|
|
|
398
371
|
})
|
|
399
372
|
} else {
|
|
400
373
|
const endpointUrl =
|
|
401
|
-
chain === 'main'
|
|
402
|
-
? 'https://storage.babbage.systems'
|
|
403
|
-
: 'https://staging-storage.babbage.systems'
|
|
374
|
+
chain === 'main' ? 'https://storage.babbage.systems' : 'https://staging-storage.babbage.systems'
|
|
404
375
|
|
|
405
376
|
client = new StorageClient(setup.wallet, endpointUrl)
|
|
406
377
|
}
|
|
407
|
-
setup.clientStorageIdentityKey = (
|
|
408
|
-
await client.makeAvailable()
|
|
409
|
-
).storageIdentityKey
|
|
378
|
+
setup.clientStorageIdentityKey = (await client.makeAvailable()).storageIdentityKey
|
|
410
379
|
await setup.wallet.storage.addWalletStorageProvider(client)
|
|
411
380
|
|
|
412
381
|
if (addLocalBackup) {
|
|
@@ -418,9 +387,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
418
387
|
chain
|
|
419
388
|
})
|
|
420
389
|
await localBackup.migrate(backupName, randomBytesHex(33))
|
|
421
|
-
setup.localBackupStorageIdentityKey = (
|
|
422
|
-
await localBackup.makeAvailable()
|
|
423
|
-
).storageIdentityKey
|
|
390
|
+
setup.localBackupStorageIdentityKey = (await localBackup.makeAvailable()).storageIdentityKey
|
|
424
391
|
await setup.wallet.storage.addWalletStorageProvider(localBackup)
|
|
425
392
|
}
|
|
426
393
|
|
|
@@ -428,11 +395,9 @@ export abstract class TestUtilsWalletStorage {
|
|
|
428
395
|
// SETTING ACTIVE
|
|
429
396
|
// SETTING ACTIVE
|
|
430
397
|
const log = await setup.storage.setActive(
|
|
431
|
-
setActiveClient
|
|
432
|
-
? setup.clientStorageIdentityKey
|
|
433
|
-
: setup.localStorageIdentityKey
|
|
398
|
+
setActiveClient ? setup.clientStorageIdentityKey : setup.localStorageIdentityKey
|
|
434
399
|
)
|
|
435
|
-
|
|
400
|
+
logger(log)
|
|
436
401
|
|
|
437
402
|
let needsBackup = false
|
|
438
403
|
|
|
@@ -445,10 +410,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
445
410
|
}
|
|
446
411
|
})
|
|
447
412
|
)
|
|
448
|
-
if (
|
|
449
|
-
basket.minimumDesiredUTXOValue !== 5 ||
|
|
450
|
-
basket.numberOfDesiredUTXOs < 32
|
|
451
|
-
) {
|
|
413
|
+
if (basket.minimumDesiredUTXOValue !== 5 || basket.numberOfDesiredUTXOs < 32) {
|
|
452
414
|
needsBackup = true
|
|
453
415
|
await setup.activeStorage.updateOutputBasket(basket.basketId, {
|
|
454
416
|
minimumDesiredUTXOValue: 5,
|
|
@@ -490,9 +452,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
490
452
|
rootKeyHex: args.rootKeyHex
|
|
491
453
|
})
|
|
492
454
|
args.endpointUrl ||=
|
|
493
|
-
args.chain === 'main'
|
|
494
|
-
? 'https://storage.babbage.systems'
|
|
495
|
-
: 'https://staging-storage.babbage.systems'
|
|
455
|
+
args.chain === 'main' ? 'https://storage.babbage.systems' : 'https://staging-storage.babbage.systems'
|
|
496
456
|
|
|
497
457
|
const client = new StorageClient(wo.wallet, args.endpointUrl)
|
|
498
458
|
await wo.storage.addWalletStorageProvider(client)
|
|
@@ -577,9 +537,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
577
537
|
}
|
|
578
538
|
}
|
|
579
539
|
if (copyToTmp) {
|
|
580
|
-
const srcPath = p.dir
|
|
581
|
-
? path.resolve(filename)
|
|
582
|
-
: path.resolve(`./test/data/${filename}`)
|
|
540
|
+
const srcPath = p.dir ? path.resolve(filename) : path.resolve(`./test/data/${filename}`)
|
|
583
541
|
await fsp.copyFile(srcPath, dstPath)
|
|
584
542
|
}
|
|
585
543
|
return dstPath
|
|
@@ -673,9 +631,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
673
631
|
dropAll?: boolean
|
|
674
632
|
privKeyHex?: string
|
|
675
633
|
}): Promise<TestWalletNoSetup> {
|
|
676
|
-
const localSQLiteFile =
|
|
677
|
-
args.filePath ||
|
|
678
|
-
(await _tu.newTmpFile(`${args.databaseName}.sqlite`, false, false, true))
|
|
634
|
+
const localSQLiteFile = args.filePath || (await _tu.newTmpFile(`${args.databaseName}.sqlite`, false, false, true))
|
|
679
635
|
return await this.createKnexTestWallet({
|
|
680
636
|
...args,
|
|
681
637
|
knex: _tu.createLocalSQLite(localSQLiteFile)
|
|
@@ -687,12 +643,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
687
643
|
chain?: sdk.Chain
|
|
688
644
|
rootKeyHex?: string
|
|
689
645
|
}): Promise<TestWallet<TestSetup1>> {
|
|
690
|
-
const localSQLiteFile = await _tu.newTmpFile(
|
|
691
|
-
`${args.databaseName}.sqlite`,
|
|
692
|
-
false,
|
|
693
|
-
false,
|
|
694
|
-
true
|
|
695
|
-
)
|
|
646
|
+
const localSQLiteFile = await _tu.newTmpFile(`${args.databaseName}.sqlite`, false, false, true)
|
|
696
647
|
return await this.createKnexTestSetup1Wallet({
|
|
697
648
|
...args,
|
|
698
649
|
dropAll: true,
|
|
@@ -706,12 +657,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
706
657
|
chain?: sdk.Chain
|
|
707
658
|
rootKeyHex?: string
|
|
708
659
|
}): Promise<TestWallet<TestSetup2>> {
|
|
709
|
-
const localSQLiteFile = await _tu.newTmpFile(
|
|
710
|
-
`${args.databaseName}.sqlite`,
|
|
711
|
-
false,
|
|
712
|
-
false,
|
|
713
|
-
true
|
|
714
|
-
)
|
|
660
|
+
const localSQLiteFile = await _tu.newTmpFile(`${args.databaseName}.sqlite`, false, false, true)
|
|
715
661
|
return await this.createKnexTestSetup2Wallet({
|
|
716
662
|
...args,
|
|
717
663
|
dropAll: true,
|
|
@@ -773,26 +719,13 @@ export abstract class TestUtilsWalletStorage {
|
|
|
773
719
|
}
|
|
774
720
|
|
|
775
721
|
//if (await _tu.fileExists(walletFile))
|
|
776
|
-
static async createLegacyWalletSQLiteCopy(
|
|
777
|
-
databaseName
|
|
778
|
-
): Promise<TestWalletNoSetup> {
|
|
779
|
-
const walletFile = await _tu.newTmpFile(
|
|
780
|
-
`${databaseName}.sqlite`,
|
|
781
|
-
false,
|
|
782
|
-
false,
|
|
783
|
-
true
|
|
784
|
-
)
|
|
722
|
+
static async createLegacyWalletSQLiteCopy(databaseName: string): Promise<TestWalletNoSetup> {
|
|
723
|
+
const walletFile = await _tu.newTmpFile(`${databaseName}.sqlite`, false, false, true)
|
|
785
724
|
const walletKnex = _tu.createLocalSQLite(walletFile)
|
|
786
|
-
return await _tu.createLegacyWalletCopy(
|
|
787
|
-
databaseName,
|
|
788
|
-
walletKnex,
|
|
789
|
-
walletFile
|
|
790
|
-
)
|
|
725
|
+
return await _tu.createLegacyWalletCopy(databaseName, walletKnex, walletFile)
|
|
791
726
|
}
|
|
792
727
|
|
|
793
|
-
static async createLegacyWalletMySQLCopy(
|
|
794
|
-
databaseName: string
|
|
795
|
-
): Promise<TestWalletNoSetup> {
|
|
728
|
+
static async createLegacyWalletMySQLCopy(databaseName: string): Promise<TestWalletNoSetup> {
|
|
796
729
|
const walletKnex = _tu.createLocalMySQL(databaseName)
|
|
797
730
|
return await _tu.createLegacyWalletCopy(databaseName, walletKnex)
|
|
798
731
|
}
|
|
@@ -821,12 +754,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
821
754
|
})
|
|
822
755
|
}
|
|
823
756
|
|
|
824
|
-
static legacyRootKeyHex =
|
|
825
|
-
'153a3df216' +
|
|
826
|
-
'686f55b253991c' +
|
|
827
|
-
'7039da1f648' +
|
|
828
|
-
'ffc5bfe93d6ac2c25ac' +
|
|
829
|
-
'2d4070918d'
|
|
757
|
+
static legacyRootKeyHex = '153a3df216' + '686f55b253991c' + '7039da1f648' + 'ffc5bfe93d6ac2c25ac' + '2d4070918d'
|
|
830
758
|
|
|
831
759
|
static async createLegacyWalletCopy(
|
|
832
760
|
databaseName: string,
|
|
@@ -842,8 +770,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
842
770
|
}
|
|
843
771
|
const chain: sdk.Chain = 'test'
|
|
844
772
|
const rootKeyHex = _tu.legacyRootKeyHex
|
|
845
|
-
const identityKey =
|
|
846
|
-
'03ac2d10bdb0023f4145cc2eba2fcd2ad3070cb2107b0b48170c46a9440e4cc3fe'
|
|
773
|
+
const identityKey = '03ac2d10bdb0023f4145cc2eba2fcd2ad3070cb2107b0b48170c46a9440e4cc3fe'
|
|
847
774
|
const rootKey = PrivateKey.fromHex(rootKeyHex)
|
|
848
775
|
const keyDeriver = new KeyDeriver(rootKey)
|
|
849
776
|
const activeStorage = new StorageKnex({
|
|
@@ -868,23 +795,14 @@ export abstract class TestUtilsWalletStorage {
|
|
|
868
795
|
feeModel: { model: 'sat/kb', value: 1 }
|
|
869
796
|
})
|
|
870
797
|
await reader.makeAvailable()
|
|
871
|
-
await storage.syncFromReader(
|
|
872
|
-
identityKey,
|
|
873
|
-
new StorageSyncReader({ identityKey }, reader)
|
|
874
|
-
)
|
|
798
|
+
await storage.syncFromReader(identityKey, new StorageSyncReader({ identityKey }, reader))
|
|
875
799
|
await reader.destroy()
|
|
876
800
|
}
|
|
877
801
|
const services = new Services(chain)
|
|
878
|
-
const monopts = Monitor.createDefaultWalletMonitorOptions(
|
|
879
|
-
chain,
|
|
880
|
-
storage,
|
|
881
|
-
services
|
|
882
|
-
)
|
|
802
|
+
const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services)
|
|
883
803
|
const monitor = new Monitor(monopts)
|
|
884
804
|
const wallet = new Wallet({ chain, keyDeriver, storage, services, monitor })
|
|
885
|
-
const userId = verifyTruthy(
|
|
886
|
-
await activeStorage.findUserByIdentityKey(identityKey)
|
|
887
|
-
).userId
|
|
805
|
+
const userId = verifyTruthy(await activeStorage.findUserByIdentityKey(identityKey)).userId
|
|
888
806
|
const r: TestWallet<{}> = {
|
|
889
807
|
rootKey,
|
|
890
808
|
identityKey,
|
|
@@ -912,8 +830,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
912
830
|
const cert: WalletCertificate = {
|
|
913
831
|
type: Utils.toBase64(new Array(32).fill(1)),
|
|
914
832
|
serialNumber: Utils.toBase64(new Array(32).fill(2)),
|
|
915
|
-
revocationOutpoint:
|
|
916
|
-
'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.1',
|
|
833
|
+
revocationOutpoint: 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.1',
|
|
917
834
|
subject,
|
|
918
835
|
certifier: certifier.toPublicKey().toString(),
|
|
919
836
|
fields: {
|
|
@@ -1006,12 +923,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1006
923
|
return e
|
|
1007
924
|
}
|
|
1008
925
|
|
|
1009
|
-
static async insertTestCertificateField(
|
|
1010
|
-
storage: StorageProvider,
|
|
1011
|
-
c: TableCertificate,
|
|
1012
|
-
name: string,
|
|
1013
|
-
value: string
|
|
1014
|
-
) {
|
|
926
|
+
static async insertTestCertificateField(storage: StorageProvider, c: TableCertificate, name: string, value: string) {
|
|
1015
927
|
const now = new Date()
|
|
1016
928
|
const e: TableCertificateField = {
|
|
1017
929
|
created_at: now,
|
|
@@ -1036,9 +948,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1036
948
|
if (u === undefined) {
|
|
1037
949
|
user = await _tu.insertTestUser(storage)
|
|
1038
950
|
} else if (typeof u === 'number') {
|
|
1039
|
-
user = verifyOne(
|
|
1040
|
-
await storage.findUsers({ partial: { userId: u } })
|
|
1041
|
-
) as TableUser
|
|
951
|
+
user = verifyOne(await storage.findUsers({ partial: { userId: u } })) as TableUser
|
|
1042
952
|
} else {
|
|
1043
953
|
user = u
|
|
1044
954
|
}
|
|
@@ -1129,11 +1039,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1129
1039
|
return e
|
|
1130
1040
|
}
|
|
1131
1041
|
|
|
1132
|
-
static async insertTestOutputTag(
|
|
1133
|
-
storage: StorageProvider,
|
|
1134
|
-
u: TableUser,
|
|
1135
|
-
partial?: Partial<TableOutputTag>
|
|
1136
|
-
) {
|
|
1042
|
+
static async insertTestOutputTag(storage: StorageProvider, u: TableUser, partial?: Partial<TableOutputTag>) {
|
|
1137
1043
|
const now = new Date()
|
|
1138
1044
|
const e: TableOutputTag = {
|
|
1139
1045
|
created_at: now,
|
|
@@ -1148,11 +1054,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1148
1054
|
return e
|
|
1149
1055
|
}
|
|
1150
1056
|
|
|
1151
|
-
static async insertTestOutputTagMap(
|
|
1152
|
-
storage: StorageProvider,
|
|
1153
|
-
o: TableOutput,
|
|
1154
|
-
tag: TableOutputTag
|
|
1155
|
-
) {
|
|
1057
|
+
static async insertTestOutputTagMap(storage: StorageProvider, o: TableOutput, tag: TableOutputTag) {
|
|
1156
1058
|
const now = new Date()
|
|
1157
1059
|
const e: TableOutputTagMap = {
|
|
1158
1060
|
created_at: now,
|
|
@@ -1165,11 +1067,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1165
1067
|
return e
|
|
1166
1068
|
}
|
|
1167
1069
|
|
|
1168
|
-
static async insertTestTxLabel(
|
|
1169
|
-
storage: StorageProvider,
|
|
1170
|
-
u: TableUser,
|
|
1171
|
-
partial?: Partial<TableTxLabel>
|
|
1172
|
-
) {
|
|
1070
|
+
static async insertTestTxLabel(storage: StorageProvider, u: TableUser, partial?: Partial<TableTxLabel>) {
|
|
1173
1071
|
const now = new Date()
|
|
1174
1072
|
const e: TableTxLabel = {
|
|
1175
1073
|
created_at: now,
|
|
@@ -1234,10 +1132,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1234
1132
|
return e
|
|
1235
1133
|
}
|
|
1236
1134
|
|
|
1237
|
-
static async insertTestCommission(
|
|
1238
|
-
storage: StorageProvider,
|
|
1239
|
-
t: TableTransaction
|
|
1240
|
-
) {
|
|
1135
|
+
static async insertTestCommission(storage: StorageProvider, t: TableTransaction) {
|
|
1241
1136
|
const now = new Date()
|
|
1242
1137
|
const e: TableCommission = {
|
|
1243
1138
|
created_at: now,
|
|
@@ -1254,10 +1149,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1254
1149
|
return e
|
|
1255
1150
|
}
|
|
1256
1151
|
|
|
1257
|
-
static async createTestSetup1(
|
|
1258
|
-
storage: StorageProvider,
|
|
1259
|
-
u1IdentityKey?: string
|
|
1260
|
-
): Promise<TestSetup1> {
|
|
1152
|
+
static async createTestSetup1(storage: StorageProvider, u1IdentityKey?: string): Promise<TestSetup1> {
|
|
1261
1153
|
const u1 = await _tu.insertTestUser(storage, u1IdentityKey)
|
|
1262
1154
|
const u1basket1 = await _tu.insertTestOutputBasket(storage, u1)
|
|
1263
1155
|
const u1basket2 = await _tu.insertTestOutputBasket(storage, u1)
|
|
@@ -1269,43 +1161,16 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1269
1161
|
const u1comm1 = await _tu.insertTestCommission(storage, u1tx1)
|
|
1270
1162
|
const u1tx1label1 = await _tu.insertTestTxLabelMap(storage, u1tx1, u1label1)
|
|
1271
1163
|
const u1tx1label2 = await _tu.insertTestTxLabelMap(storage, u1tx1, u1label2)
|
|
1272
|
-
const u1tx1o0 = await _tu.insertTestOutput(
|
|
1273
|
-
storage,
|
|
1274
|
-
u1tx1,
|
|
1275
|
-
0,
|
|
1276
|
-
101,
|
|
1277
|
-
u1basket1
|
|
1278
|
-
)
|
|
1164
|
+
const u1tx1o0 = await _tu.insertTestOutput(storage, u1tx1, 0, 101, u1basket1)
|
|
1279
1165
|
const u1o0tag1 = await _tu.insertTestOutputTagMap(storage, u1tx1o0, u1tag1)
|
|
1280
1166
|
const u1o0tag2 = await _tu.insertTestOutputTagMap(storage, u1tx1o0, u1tag2)
|
|
1281
|
-
const u1tx1o1 = await _tu.insertTestOutput(
|
|
1282
|
-
storage,
|
|
1283
|
-
u1tx1,
|
|
1284
|
-
1,
|
|
1285
|
-
111,
|
|
1286
|
-
u1basket2
|
|
1287
|
-
)
|
|
1167
|
+
const u1tx1o1 = await _tu.insertTestOutput(storage, u1tx1, 1, 111, u1basket2)
|
|
1288
1168
|
const u1o1tag1 = await _tu.insertTestOutputTagMap(storage, u1tx1o1, u1tag1)
|
|
1289
1169
|
const u1cert1 = await _tu.insertTestCertificate(storage, u1)
|
|
1290
|
-
const u1cert1field1 = await _tu.insertTestCertificateField(
|
|
1291
|
-
|
|
1292
|
-
u1cert1,
|
|
1293
|
-
'bob',
|
|
1294
|
-
'your uncle'
|
|
1295
|
-
)
|
|
1296
|
-
const u1cert1field2 = await _tu.insertTestCertificateField(
|
|
1297
|
-
storage,
|
|
1298
|
-
u1cert1,
|
|
1299
|
-
'name',
|
|
1300
|
-
'alice'
|
|
1301
|
-
)
|
|
1170
|
+
const u1cert1field1 = await _tu.insertTestCertificateField(storage, u1cert1, 'bob', 'your uncle')
|
|
1171
|
+
const u1cert1field2 = await _tu.insertTestCertificateField(storage, u1cert1, 'name', 'alice')
|
|
1302
1172
|
const u1cert2 = await _tu.insertTestCertificate(storage, u1)
|
|
1303
|
-
const u1cert2field1 = await _tu.insertTestCertificateField(
|
|
1304
|
-
storage,
|
|
1305
|
-
u1cert2,
|
|
1306
|
-
'name',
|
|
1307
|
-
'alice'
|
|
1308
|
-
)
|
|
1173
|
+
const u1cert2field1 = await _tu.insertTestCertificateField(storage, u1cert2, 'name', 'alice')
|
|
1309
1174
|
const u1cert3 = await _tu.insertTestCertificate(storage, u1)
|
|
1310
1175
|
const u1sync1 = await _tu.insertTestSyncState(storage, u1)
|
|
1311
1176
|
|
|
@@ -1315,28 +1180,13 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1315
1180
|
const { tx: u2tx1 } = await _tu.insertTestTransaction(storage, u2, true)
|
|
1316
1181
|
const u2comm1 = await _tu.insertTestCommission(storage, u2tx1)
|
|
1317
1182
|
const u2tx1label1 = await _tu.insertTestTxLabelMap(storage, u2tx1, u2label1)
|
|
1318
|
-
const u2tx1o0 = await _tu.insertTestOutput(
|
|
1319
|
-
storage,
|
|
1320
|
-
u2tx1,
|
|
1321
|
-
0,
|
|
1322
|
-
101,
|
|
1323
|
-
u2basket1
|
|
1324
|
-
)
|
|
1183
|
+
const u2tx1o0 = await _tu.insertTestOutput(storage, u2tx1, 0, 101, u2basket1)
|
|
1325
1184
|
const { tx: u2tx2 } = await _tu.insertTestTransaction(storage, u2, true)
|
|
1326
1185
|
const u2comm2 = await _tu.insertTestCommission(storage, u2tx2)
|
|
1327
1186
|
|
|
1328
1187
|
const proven1 = await _tu.insertTestProvenTx(storage)
|
|
1329
|
-
const req1 = await _tu.insertTestProvenTxReq(
|
|
1330
|
-
|
|
1331
|
-
undefined,
|
|
1332
|
-
undefined,
|
|
1333
|
-
true
|
|
1334
|
-
)
|
|
1335
|
-
const req2 = await _tu.insertTestProvenTxReq(
|
|
1336
|
-
storage,
|
|
1337
|
-
proven1.txid,
|
|
1338
|
-
proven1.provenTxId
|
|
1339
|
-
)
|
|
1188
|
+
const req1 = await _tu.insertTestProvenTxReq(storage, undefined, undefined, true)
|
|
1189
|
+
const req2 = await _tu.insertTestProvenTxReq(storage, proven1.txid, proven1.provenTxId)
|
|
1340
1190
|
|
|
1341
1191
|
const we1 = await _tu.insertTestMonitorEvent(storage)
|
|
1342
1192
|
return {
|
|
@@ -1404,21 +1254,16 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1404
1254
|
let prevOutput = outputMap[input.sourceOutpoint]
|
|
1405
1255
|
|
|
1406
1256
|
if (!prevOutput) {
|
|
1407
|
-
const { tx: transaction } = await _tu.insertTestTransaction(
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
version: 1,
|
|
1418
|
-
inputBEEF: [1, 2, 3, 4],
|
|
1419
|
-
rawTx: [4, 3, 2, 1]
|
|
1420
|
-
}
|
|
1421
|
-
)
|
|
1257
|
+
const { tx: transaction } = await _tu.insertTestTransaction(storage, user, false, {
|
|
1258
|
+
txid: input.sourceOutpoint.split('.')[0],
|
|
1259
|
+
satoshis: input.sourceSatoshis,
|
|
1260
|
+
status: 'confirmed' as sdk.TransactionStatus,
|
|
1261
|
+
description: 'Generated transaction for input',
|
|
1262
|
+
lockTime: 0,
|
|
1263
|
+
version: 1,
|
|
1264
|
+
inputBEEF: [1, 2, 3, 4],
|
|
1265
|
+
rawTx: [4, 3, 2, 1]
|
|
1266
|
+
})
|
|
1422
1267
|
|
|
1423
1268
|
const basket = await _tu.insertTestOutputBasket(storage, user, {
|
|
1424
1269
|
name: randomBytesHex(6)
|
|
@@ -1454,21 +1299,16 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1454
1299
|
|
|
1455
1300
|
// Process transactions that spend those previous outputs
|
|
1456
1301
|
for (const action of mockData.actions) {
|
|
1457
|
-
const { tx: transaction } = await _tu.insertTestTransaction(
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
version: action.version,
|
|
1468
|
-
inputBEEF: [1, 2, 3, 4],
|
|
1469
|
-
rawTx: [4, 3, 2, 1]
|
|
1470
|
-
}
|
|
1471
|
-
)
|
|
1302
|
+
const { tx: transaction } = await _tu.insertTestTransaction(storage, user, false, {
|
|
1303
|
+
txid: `${action.txid}` || `tx_${action.satoshis}_${Date.now()}`,
|
|
1304
|
+
satoshis: action.satoshis,
|
|
1305
|
+
status: action.status as sdk.TransactionStatus,
|
|
1306
|
+
description: action.description,
|
|
1307
|
+
lockTime: action.lockTime,
|
|
1308
|
+
version: action.version,
|
|
1309
|
+
inputBEEF: [1, 2, 3, 4],
|
|
1310
|
+
rawTx: [4, 3, 2, 1]
|
|
1311
|
+
})
|
|
1472
1312
|
|
|
1473
1313
|
// Loop through action inputs and update chosen outputs
|
|
1474
1314
|
for (const input of action.inputs || []) {
|
|
@@ -1476,9 +1316,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1476
1316
|
const prevOutput = outputMap[input.sourceOutpoint]
|
|
1477
1317
|
|
|
1478
1318
|
if (!prevOutput) {
|
|
1479
|
-
throw new Error(
|
|
1480
|
-
`UTXO not found in outputMap for sourceOutpoint: ${input.sourceOutpoint}`
|
|
1481
|
-
)
|
|
1319
|
+
throw new Error(`UTXO not found in outputMap for sourceOutpoint: ${input.sourceOutpoint}`)
|
|
1482
1320
|
}
|
|
1483
1321
|
|
|
1484
1322
|
// Set correct output fields as per input fields
|
|
@@ -1535,13 +1373,10 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1535
1373
|
for (const output of action.outputs) {
|
|
1536
1374
|
if (output.tags) {
|
|
1537
1375
|
// Ensure we fetch the correct inserted output for the current transaction
|
|
1538
|
-
const insertedOutput =
|
|
1539
|
-
outputMap[`${action.txid}.${output.outputIndex}`]
|
|
1376
|
+
const insertedOutput = outputMap[`${action.txid}.${output.outputIndex}`]
|
|
1540
1377
|
|
|
1541
1378
|
if (!insertedOutput) {
|
|
1542
|
-
throw new Error(
|
|
1543
|
-
`Output not found for txid: ${action.txid}, vout: ${output.outputIndex}`
|
|
1544
|
-
)
|
|
1379
|
+
throw new Error(`Output not found for txid: ${action.txid}, vout: ${output.outputIndex}`)
|
|
1545
1380
|
}
|
|
1546
1381
|
|
|
1547
1382
|
for (const tag of output.tags) {
|
|
@@ -1556,11 +1391,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1556
1391
|
})
|
|
1557
1392
|
|
|
1558
1393
|
// Map the inserted tag to the correct output
|
|
1559
|
-
await _tu.insertTestOutputTagMap(
|
|
1560
|
-
storage,
|
|
1561
|
-
insertedOutput,
|
|
1562
|
-
insertedTag
|
|
1563
|
-
)
|
|
1394
|
+
await _tu.insertTestOutputTagMap(storage, insertedOutput, insertedTag)
|
|
1564
1395
|
}
|
|
1565
1396
|
}
|
|
1566
1397
|
}
|
|
@@ -1588,14 +1419,10 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1588
1419
|
callback: (txid: string) => Promise<sdk.GetMerklePathResult>
|
|
1589
1420
|
): void {
|
|
1590
1421
|
for (const { services } of ctxs) {
|
|
1591
|
-
services.getMerklePath = jest
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
const r = await callback(txid)
|
|
1596
|
-
return r
|
|
1597
|
-
}
|
|
1598
|
-
)
|
|
1422
|
+
services.getMerklePath = jest.fn().mockImplementation(async (txid: string): Promise<sdk.GetMerklePathResult> => {
|
|
1423
|
+
const r = await callback(txid)
|
|
1424
|
+
return r
|
|
1425
|
+
})
|
|
1599
1426
|
}
|
|
1600
1427
|
}
|
|
1601
1428
|
|
|
@@ -1642,7 +1469,9 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1642
1469
|
}> {
|
|
1643
1470
|
let destroyWallet = false
|
|
1644
1471
|
if (wallet === 'main' || wallet === 'test') {
|
|
1645
|
-
|
|
1472
|
+
const setup = await _tu.createWalletSetupEnv(wallet)
|
|
1473
|
+
wallet = setup.wallet
|
|
1474
|
+
if (!setup.storage.isActiveEnabled) await setup.storage.setActive(setup.storage.getActiveStore())
|
|
1646
1475
|
destroyWallet = true
|
|
1647
1476
|
}
|
|
1648
1477
|
|
|
@@ -1660,9 +1489,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1660
1489
|
const car = await wallet.createAction({
|
|
1661
1490
|
outputs: [
|
|
1662
1491
|
{
|
|
1663
|
-
lockingScript: t
|
|
1664
|
-
.lock(keyDeriver.rootKey.toString(), wallet.identityKey)
|
|
1665
|
-
.toHex(),
|
|
1492
|
+
lockingScript: t.lock(keyDeriver.rootKey.toString(), wallet.identityKey).toHex(),
|
|
1666
1493
|
satoshis,
|
|
1667
1494
|
outputDescription: label,
|
|
1668
1495
|
customInstructions: JSON.stringify({
|
|
@@ -1683,11 +1510,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
1683
1510
|
const txidDo = car.txid!
|
|
1684
1511
|
const outpoint = `${car.txid!}.0`
|
|
1685
1512
|
|
|
1686
|
-
const unlock = t.unlock(
|
|
1687
|
-
keyDeriver.rootKey.toString(),
|
|
1688
|
-
wallet.identityKey,
|
|
1689
|
-
satoshis
|
|
1690
|
-
)
|
|
1513
|
+
const unlock = t.unlock(keyDeriver.rootKey.toString(), wallet.identityKey, satoshis)
|
|
1691
1514
|
|
|
1692
1515
|
label = 'undoTxPair'
|
|
1693
1516
|
|
|
@@ -1835,10 +1658,7 @@ export interface TestWalletOnly {
|
|
|
1835
1658
|
wallet: Wallet
|
|
1836
1659
|
}
|
|
1837
1660
|
|
|
1838
|
-
async function insertEmptySetup(
|
|
1839
|
-
storage: StorageKnex,
|
|
1840
|
-
identityKey: string
|
|
1841
|
-
): Promise<object> {
|
|
1661
|
+
async function insertEmptySetup(storage: StorageKnex, identityKey: string): Promise<object> {
|
|
1842
1662
|
return {}
|
|
1843
1663
|
}
|
|
1844
1664
|
|
|
@@ -1856,9 +1676,7 @@ export async function expectToThrowWERR<R>(
|
|
|
1856
1676
|
} catch (eu: unknown) {
|
|
1857
1677
|
const e = sdk.WalletError.fromUnknown(eu)
|
|
1858
1678
|
if (e.name !== expectedClass.name || !e.isError)
|
|
1859
|
-
console.log(
|
|
1860
|
-
`Error name ${e.name} vs class name ${expectedClass.name}\n${e.stack}\n`
|
|
1861
|
-
)
|
|
1679
|
+
console.log(`Error name ${e.name} vs class name ${expectedClass.name}\n${e.stack}\n`)
|
|
1862
1680
|
// The output above may help debugging this situation or put a breakpoint
|
|
1863
1681
|
// on the line below and look at e.stack
|
|
1864
1682
|
expect(e.name).toBe(expectedClass.name)
|
|
@@ -1881,19 +1699,15 @@ function mockPostServices(
|
|
|
1881
1699
|
): void {
|
|
1882
1700
|
for (const { services } of ctxs) {
|
|
1883
1701
|
// Mock the services postBeef to avoid actually broadcasting new transactions.
|
|
1884
|
-
services.postBeef = jest
|
|
1885
|
-
|
|
1886
|
-
.
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
}
|
|
1894
|
-
return Promise.resolve([r])
|
|
1895
|
-
}
|
|
1896
|
-
)
|
|
1702
|
+
services.postBeef = jest.fn().mockImplementation((beef: Beef, txids: string[]): Promise<sdk.PostBeefResult[]> => {
|
|
1703
|
+
status = !callback ? status : callback(beef, txids)
|
|
1704
|
+
const r: sdk.PostBeefResult = {
|
|
1705
|
+
name: 'mock',
|
|
1706
|
+
status: 'success',
|
|
1707
|
+
txidResults: txids.map(txid => ({ txid, status }))
|
|
1708
|
+
}
|
|
1709
|
+
return Promise.resolve([r])
|
|
1710
|
+
})
|
|
1897
1711
|
}
|
|
1898
1712
|
}
|
|
1899
1713
|
|
|
@@ -1911,8 +1725,9 @@ let logEnabled: boolean = false
|
|
|
1911
1725
|
* log('Test message', someVariable);
|
|
1912
1726
|
* log('Another message with multiple params', param1, param2);
|
|
1913
1727
|
*/
|
|
1914
|
-
export const
|
|
1915
|
-
|
|
1728
|
+
export const logger = (message: string, ...optionalParams: any[]): void => {
|
|
1729
|
+
const isSingleTest = process.argv.some(arg => arg === '--testNamePattern' || arg === '-t')
|
|
1730
|
+
if (logEnabled || isSingleTest) {
|
|
1916
1731
|
console.log(message, ...optionalParams)
|
|
1917
1732
|
}
|
|
1918
1733
|
}
|
|
@@ -1925,7 +1740,7 @@ export const log = (message: string, ...optionalParams: any[]): void => {
|
|
|
1925
1740
|
*/
|
|
1926
1741
|
export const updateTable = async (updateFunction, id, testValues) => {
|
|
1927
1742
|
for (const [key, value] of Object.entries(testValues)) {
|
|
1928
|
-
|
|
1743
|
+
logger('id=', id, '[key]=', [key], 'value=', value)
|
|
1929
1744
|
await updateFunction(id, { [key]: value })
|
|
1930
1745
|
}
|
|
1931
1746
|
}
|
|
@@ -1955,9 +1770,7 @@ export const verifyValues = (
|
|
|
1955
1770
|
|
|
1956
1771
|
if (expectedValue instanceof Date) {
|
|
1957
1772
|
// Use `validateUpdateTime` for Date comparisons
|
|
1958
|
-
expect(
|
|
1959
|
-
validateUpdateTime(actualValue, expectedValue, referenceTime)
|
|
1960
|
-
).toBe(true)
|
|
1773
|
+
expect(validateUpdateTime(actualValue, expectedValue, referenceTime)).toBe(true)
|
|
1961
1774
|
} else {
|
|
1962
1775
|
// Default to strict equality for other fields
|
|
1963
1776
|
expect(actualValue).toStrictEqual(expectedValue)
|
|
@@ -1990,40 +1803,30 @@ export const validateUpdateTime = (
|
|
|
1990
1803
|
const referenceTimestamp = referenceTime.getTime()
|
|
1991
1804
|
|
|
1992
1805
|
if (logEnabled) {
|
|
1993
|
-
|
|
1806
|
+
logger(
|
|
1994
1807
|
`Validation inputs:\n`,
|
|
1995
1808
|
`Actual Time: ${actualTime.toISOString()} (Timestamp: ${actualTimestamp})\n`,
|
|
1996
1809
|
`Expected Time: ${expectedTime.toISOString()} (Timestamp: ${expectedTimestamp})\n`,
|
|
1997
1810
|
`Reference Time: ${referenceTime.toISOString()} (Timestamp: ${referenceTimestamp})`
|
|
1998
1811
|
)
|
|
1999
1812
|
}
|
|
2000
|
-
const isWithinTolerance =
|
|
2001
|
-
Math.abs(actualTimestamp - expectedTimestamp) <= toleranceMs
|
|
1813
|
+
const isWithinTolerance = Math.abs(actualTimestamp - expectedTimestamp) <= toleranceMs
|
|
2002
1814
|
const isGreaterThanReference = actualTimestamp > referenceTimestamp
|
|
2003
1815
|
const isoMatch = actualTime.toISOString() === expectedTime.toISOString()
|
|
2004
1816
|
const utcMatch = actualTime.toUTCString() === expectedTime.toUTCString()
|
|
2005
|
-
const humanReadableMatch =
|
|
2006
|
-
actualTime.toDateString() === expectedTime.toDateString()
|
|
1817
|
+
const humanReadableMatch = actualTime.toDateString() === expectedTime.toDateString()
|
|
2007
1818
|
|
|
2008
1819
|
// Updated: Allow test to pass if the difference is too large to fail
|
|
2009
|
-
if (
|
|
2010
|
-
!isWithinTolerance &&
|
|
2011
|
-
Math.abs(actualTimestamp - expectedTimestamp) > 100000000
|
|
2012
|
-
) {
|
|
1820
|
+
if (!isWithinTolerance && Math.abs(actualTimestamp - expectedTimestamp) > 100000000) {
|
|
2013
1821
|
if (logEnabled) {
|
|
2014
|
-
|
|
1822
|
+
logger(
|
|
2015
1823
|
`Skipping validation failure: The difference is unusually large (${Math.abs(actualTimestamp - expectedTimestamp)}ms). Validation passed for extreme outliers.`
|
|
2016
1824
|
)
|
|
2017
1825
|
}
|
|
2018
1826
|
return true
|
|
2019
1827
|
}
|
|
2020
1828
|
|
|
2021
|
-
const isValid =
|
|
2022
|
-
isWithinTolerance ||
|
|
2023
|
-
isGreaterThanReference ||
|
|
2024
|
-
isoMatch ||
|
|
2025
|
-
utcMatch ||
|
|
2026
|
-
humanReadableMatch
|
|
1829
|
+
const isValid = isWithinTolerance || isGreaterThanReference || isoMatch || utcMatch || humanReadableMatch
|
|
2027
1830
|
|
|
2028
1831
|
if (!isValid) {
|
|
2029
1832
|
console.error(
|
|
@@ -2040,10 +1843,7 @@ export const validateUpdateTime = (
|
|
|
2040
1843
|
)
|
|
2041
1844
|
} else {
|
|
2042
1845
|
if (logEnabled) {
|
|
2043
|
-
|
|
2044
|
-
`Validation succeeded:\n`,
|
|
2045
|
-
`Actual Time: ${actualTime.toISOString()} (Timestamp: ${actualTimestamp})`
|
|
2046
|
-
)
|
|
1846
|
+
logger(`Validation succeeded:\n`, `Actual Time: ${actualTime.toISOString()} (Timestamp: ${actualTimestamp})`)
|
|
2047
1847
|
}
|
|
2048
1848
|
}
|
|
2049
1849
|
|
|
@@ -2084,14 +1884,11 @@ export const logUniqueConstraintError = (
|
|
|
2084
1884
|
// Construct the expected error message string with the table name prefixed to each column
|
|
2085
1885
|
const expectedErrorString = `SQLITE_CONSTRAINT: UNIQUE constraint failed: ${columnNames.map(col => `${tableName}.${col}`).join(', ')}`
|
|
2086
1886
|
|
|
2087
|
-
|
|
1887
|
+
logger('expectedErrorString=', expectedErrorString)
|
|
2088
1888
|
|
|
2089
1889
|
// Check if the error message contains the expected string
|
|
2090
1890
|
if (error.message.includes(expectedErrorString)) {
|
|
2091
|
-
console.log(
|
|
2092
|
-
`Unique constraint error for columns ${columnNames.join(', ')} caught as expected:`,
|
|
2093
|
-
error.message
|
|
2094
|
-
)
|
|
1891
|
+
console.log(`Unique constraint error for columns ${columnNames.join(', ')} caught as expected:`, error.message)
|
|
2095
1892
|
} else {
|
|
2096
1893
|
console.log('Unexpected error message:', error.message)
|
|
2097
1894
|
}
|
|
@@ -2127,12 +1924,10 @@ const logForeignConstraintError = (
|
|
|
2127
1924
|
logEnabled: boolean = false
|
|
2128
1925
|
): void => {
|
|
2129
1926
|
if (logEnabled) {
|
|
2130
|
-
if (
|
|
2131
|
-
|
|
2132
|
-
) {
|
|
2133
|
-
log(`${columnName} constraint error caught as expected:`, error.message)
|
|
1927
|
+
if (error.message.includes(`SQLITE_CONSTRAINT: FOREIGN KEY constraint failed`)) {
|
|
1928
|
+
logger(`${columnName} constraint error caught as expected:`, error.message)
|
|
2134
1929
|
} else {
|
|
2135
|
-
|
|
1930
|
+
logger('Unexpected error:', error.message)
|
|
2136
1931
|
throw new Error(`Unexpected error: ${error.message}`)
|
|
2137
1932
|
}
|
|
2138
1933
|
}
|
|
@@ -2170,7 +1965,7 @@ export const triggerUniqueConstraintError = async (
|
|
|
2170
1965
|
|
|
2171
1966
|
const rows = await storage[findMethod]({})
|
|
2172
1967
|
if (logEnabled) {
|
|
2173
|
-
|
|
1968
|
+
logger('rows=', rows)
|
|
2174
1969
|
}
|
|
2175
1970
|
|
|
2176
1971
|
if (!rows || rows.length < 2) {
|
|
@@ -2180,9 +1975,7 @@ export const triggerUniqueConstraintError = async (
|
|
|
2180
1975
|
}
|
|
2181
1976
|
|
|
2182
1977
|
if (!(columnName in rows[0])) {
|
|
2183
|
-
throw new Error(
|
|
2184
|
-
`Column "${columnName}" does not exist in the table "${tableName}".`
|
|
2185
|
-
)
|
|
1978
|
+
throw new Error(`Column "${columnName}" does not exist in the table "${tableName}".`)
|
|
2186
1979
|
}
|
|
2187
1980
|
|
|
2188
1981
|
if (id === invalidValue[columnName]) {
|
|
@@ -2192,7 +1985,7 @@ export const triggerUniqueConstraintError = async (
|
|
|
2192
1985
|
}
|
|
2193
1986
|
|
|
2194
1987
|
if (logEnabled) {
|
|
2195
|
-
|
|
1988
|
+
logger('invalidValue=', invalidValue)
|
|
2196
1989
|
}
|
|
2197
1990
|
|
|
2198
1991
|
// Create columnNames from invalidValue keys before the update
|
|
@@ -2200,7 +1993,7 @@ export const triggerUniqueConstraintError = async (
|
|
|
2200
1993
|
|
|
2201
1994
|
try {
|
|
2202
1995
|
if (logEnabled) {
|
|
2203
|
-
|
|
1996
|
+
logger('update id=', id)
|
|
2204
1997
|
}
|
|
2205
1998
|
|
|
2206
1999
|
// Attempt the update with the new value that should trigger the constraint error
|
|
@@ -2254,9 +2047,7 @@ export const triggerForeignKeyConstraintError = async (
|
|
|
2254
2047
|
}
|
|
2255
2048
|
|
|
2256
2049
|
if (!(columnName in rows[0])) {
|
|
2257
|
-
throw new Error(
|
|
2258
|
-
`Column "${columnName}" does not exist in the table "${tableName}".`
|
|
2259
|
-
)
|
|
2050
|
+
throw new Error(`Column "${columnName}" does not exist in the table "${tableName}".`)
|
|
2260
2051
|
}
|
|
2261
2052
|
|
|
2262
2053
|
if (id === invalidValue[columnName]) {
|
|
@@ -2270,7 +2061,7 @@ export const triggerForeignKeyConstraintError = async (
|
|
|
2270
2061
|
try {
|
|
2271
2062
|
// Attempt the update with the invalid value that should trigger the foreign key constraint error
|
|
2272
2063
|
const r = await storage[updateMethod](id, invalidValue) // Pass the object with the column name and value
|
|
2273
|
-
|
|
2064
|
+
logger('r=', r)
|
|
2274
2065
|
return false
|
|
2275
2066
|
} catch (error: any) {
|
|
2276
2067
|
logForeignConstraintError(error, tableName, columnName, logEnabled)
|
|
@@ -2312,10 +2103,7 @@ async function cleanTransactionsUsingAbort(
|
|
|
2312
2103
|
* @param {StorageKnex} storage - The storage instance to query transactions from.
|
|
2313
2104
|
* @returns {Promise<boolean>} - Resolves to `true` if all `'nosend'` transactions were successfully aborted.
|
|
2314
2105
|
*/
|
|
2315
|
-
export async function cleanUnsentTransactionsUsingAbort(
|
|
2316
|
-
wallet: Wallet,
|
|
2317
|
-
storage: StorageKnex
|
|
2318
|
-
): Promise<boolean> {
|
|
2106
|
+
export async function cleanUnsentTransactionsUsingAbort(wallet: Wallet, storage: StorageKnex): Promise<boolean> {
|
|
2319
2107
|
const result = await cleanTransactionsUsingAbort(wallet, storage, 'nosend')
|
|
2320
2108
|
expect(result).toBe(true)
|
|
2321
2109
|
return result
|
|
@@ -2328,10 +2116,7 @@ export async function cleanUnsentTransactionsUsingAbort(
|
|
|
2328
2116
|
* @param {StorageKnex} storage - The storage instance to query transactions from.
|
|
2329
2117
|
* @returns {Promise<boolean>} - Resolves to `true` if all `'unsigned'` transactions were successfully aborted.
|
|
2330
2118
|
*/
|
|
2331
|
-
export async function cleanUnsignedTransactionsUsingAbort(
|
|
2332
|
-
wallet: Wallet,
|
|
2333
|
-
storage: StorageKnex
|
|
2334
|
-
): Promise<boolean> {
|
|
2119
|
+
export async function cleanUnsignedTransactionsUsingAbort(wallet: Wallet, storage: StorageKnex): Promise<boolean> {
|
|
2335
2120
|
const result = await cleanTransactionsUsingAbort(wallet, storage, 'unsigned')
|
|
2336
2121
|
expect(result).toBe(true)
|
|
2337
2122
|
return result
|
|
@@ -2344,15 +2129,8 @@ export async function cleanUnsignedTransactionsUsingAbort(
|
|
|
2344
2129
|
* @param {StorageKnex} storage - The storage instance to query transactions from.
|
|
2345
2130
|
* @returns {Promise<boolean>} - Resolves to `true` if all `'unprocessed'` transactions were successfully aborted.
|
|
2346
2131
|
*/
|
|
2347
|
-
export async function cleanUnprocessedTransactionsUsingAbort(
|
|
2348
|
-
wallet
|
|
2349
|
-
storage: StorageKnex
|
|
2350
|
-
): Promise<boolean> {
|
|
2351
|
-
const result = await cleanTransactionsUsingAbort(
|
|
2352
|
-
wallet,
|
|
2353
|
-
storage,
|
|
2354
|
-
'unprocessed'
|
|
2355
|
-
)
|
|
2132
|
+
export async function cleanUnprocessedTransactionsUsingAbort(wallet: Wallet, storage: StorageKnex): Promise<boolean> {
|
|
2133
|
+
const result = await cleanTransactionsUsingAbort(wallet, storage, 'unprocessed')
|
|
2356
2134
|
expect(result).toBe(true)
|
|
2357
2135
|
return result
|
|
2358
2136
|
}
|
|
@@ -2370,10 +2148,7 @@ export const normalizeDate = (value: any): string | null => {
|
|
|
2370
2148
|
return null
|
|
2371
2149
|
}
|
|
2372
2150
|
|
|
2373
|
-
export async function logTransaction(
|
|
2374
|
-
storage: StorageKnex,
|
|
2375
|
-
txid: HexString
|
|
2376
|
-
): Promise<string> {
|
|
2151
|
+
export async function logTransaction(storage: StorageKnex, txid: HexString): Promise<string> {
|
|
2377
2152
|
let amount: SatoshiValue = 0
|
|
2378
2153
|
let log = `\n==== Transaction Log ====\ntxid: ${txid}\n`
|
|
2379
2154
|
|
|
@@ -2426,10 +2201,7 @@ export async function logTransaction(
|
|
|
2426
2201
|
return log
|
|
2427
2202
|
}
|
|
2428
2203
|
|
|
2429
|
-
export async function logOutput(
|
|
2430
|
-
storage: StorageKnex,
|
|
2431
|
-
output: TableOutput
|
|
2432
|
-
): Promise<string> {
|
|
2204
|
+
export async function logOutput(storage: StorageKnex, output: TableOutput): Promise<string> {
|
|
2433
2205
|
let log = `\n-- Output --\n`
|
|
2434
2206
|
log += `Outpoint: ${output.txid}:${output.vout}\n`
|
|
2435
2207
|
log += `Satoshis: ${output.satoshis}\n`
|
|
@@ -2508,12 +2280,7 @@ export async function logInput(
|
|
|
2508
2280
|
const spentByTxid = spendingTx[0].txid
|
|
2509
2281
|
|
|
2510
2282
|
log += `${indent} ↳ Spent By TXID: ${spentByTxid}\n`
|
|
2511
|
-
log += await logInput(
|
|
2512
|
-
storage,
|
|
2513
|
-
spentByTxid!,
|
|
2514
|
-
prevOutput.vout,
|
|
2515
|
-
indentLevel + 2
|
|
2516
|
-
)
|
|
2283
|
+
log += await logInput(storage, spentByTxid!, prevOutput.vout, indentLevel + 2)
|
|
2517
2284
|
} else {
|
|
2518
2285
|
log += `${indent} ↳ Spent By TXID Unknown (transactionId: ${prevOutput.spentBy})\n`
|
|
2519
2286
|
}
|