@bsv/wallet-toolbox 2.6.5 → 2.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -8
- package/README.md +68 -18
- package/docs/action-batch-planning.md +80 -37
- package/docs/managed-change-liquidity.md +251 -0
- package/out/src/Setup.d.ts +9 -0
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +2 -0
- package/out/src/Setup.js.map +1 -1
- package/out/src/SetupClient.d.ts +3 -0
- package/out/src/SetupClient.d.ts.map +1 -1
- package/out/src/SetupClient.js +1 -0
- package/out/src/SetupClient.js.map +1 -1
- package/out/src/SetupWallet.d.ts +3 -0
- package/out/src/SetupWallet.d.ts.map +1 -1
- package/out/src/Wallet.d.ts +4 -3
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +4 -3
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +5 -8
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/mockchain/MockServices.d.ts.map +1 -1
- package/out/src/mockchain/MockServices.js +2 -6
- package/out/src/mockchain/MockServices.js.map +1 -1
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +5 -4
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.d.ts +4 -1
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.js +92 -65
- package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.d.ts +25 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js +181 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js.map +1 -0
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +15 -3
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +29 -2
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.js +155 -7
- package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
- package/out/src/monitor/tasks/index.all.d.ts +1 -0
- package/out/src/monitor/tasks/index.all.d.ts.map +1 -1
- package/out/src/monitor/tasks/index.all.js +1 -0
- package/out/src/monitor/tasks/index.all.js.map +1 -1
- package/out/src/sdk/ActionBatch.interfaces.d.ts +19 -0
- package/out/src/sdk/ActionBatch.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts +23 -0
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js +44 -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 +7 -21
- 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 +9 -1
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +14 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +3 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/types.d.ts +3 -2
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +3 -2
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +73 -15
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/classifyOutputUtxo.d.ts +25 -0
- package/out/src/services/classifyOutputUtxo.d.ts.map +1 -0
- package/out/src/services/classifyOutputUtxo.js +87 -0
- package/out/src/services/classifyOutputUtxo.js.map +1 -0
- package/out/src/services/createDefaultWalletServicesOptions.d.ts +16 -3
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +38 -8
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/services/providers/ArcSSEClient.d.ts +13 -4
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +30 -7
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/services/providers/Arcade.d.ts +10 -1
- package/out/src/services/providers/Arcade.d.ts.map +1 -1
- package/out/src/services/providers/Arcade.js +63 -0
- package/out/src/services/providers/Arcade.js.map +1 -1
- package/out/src/services/providers/arcadeStatus.d.ts +18 -0
- package/out/src/services/providers/arcadeStatus.d.ts.map +1 -0
- package/out/src/services/providers/arcadeStatus.js +56 -0
- package/out/src/services/providers/arcadeStatus.js.map +1 -0
- package/out/src/signer/actionBatch/ActionBatchPlanner.d.ts.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchPlanner.js +25 -3
- package/out/src/signer/actionBatch/ActionBatchPlanner.js.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts +2 -0
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.js +135 -16
- package/out/src/signer/actionBatch/ActionBatchWorkspace.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +2 -0
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +24 -1
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +1 -1
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +4 -4
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +18 -2
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +45 -14
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +3 -2
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +12 -0
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +22 -2
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts +2 -0
- package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminServer.js +25 -8
- package/out/src/storage/adminServer/adminServer.js.map +1 -1
- package/out/src/storage/adminServer/adminUi.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminUi.js +32 -9
- package/out/src/storage/adminServer/adminUi.js.map +1 -1
- package/out/src/storage/adminServer/reviewUtxos.d.ts +27 -0
- package/out/src/storage/adminServer/reviewUtxos.d.ts.map +1 -0
- package/out/src/storage/adminServer/reviewUtxos.js +62 -0
- package/out/src/storage/adminServer/reviewUtxos.js.map +1 -0
- package/out/src/storage/index.all.d.ts +1 -0
- package/out/src/storage/index.all.d.ts.map +1 -1
- package/out/src/storage/index.all.js +1 -0
- package/out/src/storage/index.all.js.map +1 -1
- package/out/src/storage/index.client.d.ts +1 -0
- package/out/src/storage/index.client.d.ts.map +1 -1
- package/out/src/storage/index.client.js +1 -0
- package/out/src/storage/index.client.js.map +1 -1
- package/out/src/storage/index.mobile.d.ts +1 -0
- package/out/src/storage/index.mobile.d.ts.map +1 -1
- package/out/src/storage/index.mobile.js +1 -0
- package/out/src/storage/index.mobile.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +4 -44
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/actionBatch.d.ts +9 -2
- package/out/src/storage/methods/actionBatch.d.ts.map +1 -1
- package/out/src/storage/methods/actionBatch.js +258 -66
- package/out/src/storage/methods/actionBatch.js.map +1 -1
- package/out/src/storage/methods/actionBatchBlobs.js +7 -4
- package/out/src/storage/methods/actionBatchBlobs.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +2 -66
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/availableManagedChange.d.ts +8 -1
- package/out/src/storage/methods/availableManagedChange.d.ts.map +1 -1
- package/out/src/storage/methods/availableManagedChange.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +176 -58
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts +13 -1
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +169 -12
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +4 -0
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js +4 -0
- package/out/src/storage/methods/listActionsKnex.js.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.js +2 -1
- package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/out/src/storage/methods/managedChangePolicy.d.ts +44 -0
- package/out/src/storage/methods/managedChangePolicy.d.ts.map +1 -0
- package/out/src/storage/methods/managedChangePolicy.js +58 -0
- package/out/src/storage/methods/managedChangePolicy.js.map +1 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts +26 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts.map +1 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.js +124 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.js.map +1 -0
- package/out/src/storage/methods/reviewUtxoOutputs.d.ts +37 -0
- package/out/src/storage/methods/reviewUtxoOutputs.d.ts.map +1 -0
- package/out/src/storage/methods/reviewUtxoOutputs.js +150 -0
- package/out/src/storage/methods/reviewUtxoOutputs.js.map +1 -0
- package/out/src/storage/portable/index.d.ts.map +1 -1
- package/out/src/storage/portable/index.js +4 -2
- package/out/src/storage/portable/index.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +2 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.js +3 -0
- package/out/src/storage/remoting/StorageClientBase.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +4 -1
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts +1 -0
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +29 -3
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.js +5 -2
- package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
- package/out/src/utility/brc153ReferenceLabels.d.ts +21 -0
- package/out/src/utility/brc153ReferenceLabels.d.ts.map +1 -0
- package/out/src/utility/brc153ReferenceLabels.js +45 -0
- package/out/src/utility/brc153ReferenceLabels.js.map +1 -0
- package/out/src/utility/index.all.d.ts +1 -0
- package/out/src/utility/index.all.d.ts.map +1 -1
- package/out/src/utility/index.all.js +1 -0
- package/out/src/utility/index.all.js.map +1 -1
- package/out/src/utility/index.client.d.ts +1 -0
- package/out/src/utility/index.client.d.ts.map +1 -1
- package/out/src/utility/index.client.js +1 -0
- package/out/src/utility/index.client.js.map +1 -1
- package/out/src/utility/utilityHelpers.d.ts +1 -1
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +2 -1
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TaskReconcilePendingTransactions = void 0;
|
|
4
|
+
const entities_1 = require("../../storage/schema/entities");
|
|
5
|
+
const reconcileFailedTransactionInputs_1 = require("../../storage/methods/reconcileFailedTransactionInputs");
|
|
6
|
+
const Monitor_1 = require("../Monitor");
|
|
7
|
+
const WalletMonitorTask_1 = require("./WalletMonitorTask");
|
|
8
|
+
const REVIEW_STATUSES = ['callback', 'unmined', 'sending', 'unknown', 'unconfirmed'];
|
|
9
|
+
/**
|
|
10
|
+
* Poll durable transaction lifecycle state for aged, non-terminal requests.
|
|
11
|
+
* This closes the gap where an Arcade rejection event was missed before the
|
|
12
|
+
* monitor subscribed or while it was offline. Unknown/provider-error results
|
|
13
|
+
* never mutate storage; only a provider's explicit terminal verdict does.
|
|
14
|
+
*/
|
|
15
|
+
class TaskReconcilePendingTransactions extends WalletMonitorTask_1.WalletMonitorTask {
|
|
16
|
+
triggerMsecs;
|
|
17
|
+
reviewLimit;
|
|
18
|
+
minAgeMinutes;
|
|
19
|
+
triggerQuickMsecs;
|
|
20
|
+
static taskName = 'ReconcilePendingTransactions';
|
|
21
|
+
triggerNextMsecs;
|
|
22
|
+
constructor(monitor, triggerMsecs = Monitor_1.Monitor.oneMinute * 12, reviewLimit = 100, minAgeMinutes = 60, triggerQuickMsecs = Monitor_1.Monitor.oneMinute) {
|
|
23
|
+
super(monitor, TaskReconcilePendingTransactions.taskName);
|
|
24
|
+
this.triggerMsecs = triggerMsecs;
|
|
25
|
+
this.reviewLimit = reviewLimit;
|
|
26
|
+
this.minAgeMinutes = minAgeMinutes;
|
|
27
|
+
this.triggerQuickMsecs = triggerQuickMsecs;
|
|
28
|
+
this.triggerNextMsecs = this.triggerQuickMsecs;
|
|
29
|
+
}
|
|
30
|
+
trigger(nowMsecsSinceEpoch) {
|
|
31
|
+
return {
|
|
32
|
+
run: this.triggerNextMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerNextMsecs
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
async getCheckpoint() {
|
|
36
|
+
let events = [];
|
|
37
|
+
await this.storage.runAsStorageProvider(async (sp) => {
|
|
38
|
+
events = await sp.findMonitorEvents({
|
|
39
|
+
partial: { event: TaskReconcilePendingTransactions.taskName },
|
|
40
|
+
orderDescending: true,
|
|
41
|
+
paged: { limit: 5 }
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
for (const event of events) {
|
|
45
|
+
if (!event.details)
|
|
46
|
+
continue;
|
|
47
|
+
try {
|
|
48
|
+
const parsed = JSON.parse(event.details);
|
|
49
|
+
if (parsed.cycleComplete === true)
|
|
50
|
+
return undefined;
|
|
51
|
+
if (typeof parsed.resumeOffset === 'number') {
|
|
52
|
+
return {
|
|
53
|
+
resumeOffset: parsed.resumeOffset,
|
|
54
|
+
expectedProvenTxReqId: parsed.expectedProvenTxReqId
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
async runTask() {
|
|
65
|
+
const checkpoint = await this.getCheckpoint();
|
|
66
|
+
const updatedBefore = new Date(Date.now() - this.minAgeMinutes * 60 * 1000);
|
|
67
|
+
const reqs = await this.findReqsToReview(checkpoint);
|
|
68
|
+
const eligible = reqs.filter(req => req.updated_at <= updatedBefore);
|
|
69
|
+
const provider = eligible.length === 0 ? undefined : await this.monitor.services.getStatusForTxids(eligible.map(req => req.txid));
|
|
70
|
+
const results = new Map(provider?.results.map(result => [result.txid, result]) ?? []);
|
|
71
|
+
let reconciled = 0;
|
|
72
|
+
let inputConflicts = 0;
|
|
73
|
+
let reviewLog = '';
|
|
74
|
+
const retained = [];
|
|
75
|
+
for (const req of reqs) {
|
|
76
|
+
const result = results.get(req.txid);
|
|
77
|
+
if (req.updated_at > updatedBefore || provider?.status !== 'success' || result?.terminal !== true) {
|
|
78
|
+
retained.push(req);
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const applied = await this.applyTerminalVerdict(req, result, provider.name);
|
|
82
|
+
if (!applied) {
|
|
83
|
+
retained.push(req);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
reconciled++;
|
|
87
|
+
if (result.inputConflict === true)
|
|
88
|
+
inputConflicts++;
|
|
89
|
+
reviewLog +=
|
|
90
|
+
`reconciled ${req.provenTxReqId} ${req.txid} ${result.providerStatus ?? 'terminal'} ` +
|
|
91
|
+
`=> ${result.inputConflict === true ? 'doubleSpend' : 'invalid'}\n`;
|
|
92
|
+
}
|
|
93
|
+
const fullPage = reqs.length >= this.reviewLimit;
|
|
94
|
+
this.triggerNextMsecs = fullPage ? this.triggerQuickMsecs : this.triggerMsecs;
|
|
95
|
+
let resumeOffset;
|
|
96
|
+
let expectedProvenTxReqId;
|
|
97
|
+
if (fullPage) {
|
|
98
|
+
if (retained.length === 0) {
|
|
99
|
+
resumeOffset = reqs.sourceOffset ?? 0;
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
resumeOffset = (reqs.sourceOffset ?? 0) + retained.length - 1;
|
|
103
|
+
expectedProvenTxReqId = retained.at(-1)?.provenTxReqId;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return JSON.stringify({
|
|
107
|
+
reviewed: eligible.length,
|
|
108
|
+
reconciled,
|
|
109
|
+
inputConflicts,
|
|
110
|
+
retained: retained.length,
|
|
111
|
+
reviewLimit: this.reviewLimit,
|
|
112
|
+
minAgeMinutes: this.minAgeMinutes,
|
|
113
|
+
cycleComplete: !fullPage,
|
|
114
|
+
...(resumeOffset != null ? { resumeOffset } : {}),
|
|
115
|
+
...(expectedProvenTxReqId != null ? { expectedProvenTxReqId } : {}),
|
|
116
|
+
reviewLog
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
async findReqsToReview(checkpoint) {
|
|
120
|
+
let offset = checkpoint?.resumeOffset ?? 0;
|
|
121
|
+
if (checkpoint?.expectedProvenTxReqId != null) {
|
|
122
|
+
const verify = await this.storage.findProvenTxReqs({
|
|
123
|
+
partial: {},
|
|
124
|
+
status: [...REVIEW_STATUSES],
|
|
125
|
+
paged: { limit: 1, offset }
|
|
126
|
+
});
|
|
127
|
+
offset = verify[0]?.provenTxReqId === checkpoint.expectedProvenTxReqId ? offset + 1 : 0;
|
|
128
|
+
}
|
|
129
|
+
const reqs = (await this.storage.findProvenTxReqs({
|
|
130
|
+
partial: {},
|
|
131
|
+
status: [...REVIEW_STATUSES],
|
|
132
|
+
paged: { limit: this.reviewLimit, offset }
|
|
133
|
+
}));
|
|
134
|
+
reqs.sourceOffset = offset;
|
|
135
|
+
return reqs;
|
|
136
|
+
}
|
|
137
|
+
async applyTerminalVerdict(reqApi, result, provider) {
|
|
138
|
+
let applied = false;
|
|
139
|
+
await this.storage.runAsStorageProvider(async (sp) => {
|
|
140
|
+
await sp.transaction(async (trx) => {
|
|
141
|
+
const req = new entities_1.EntityProvenTxReq(reqApi);
|
|
142
|
+
await req.refreshFromStorage(sp, trx);
|
|
143
|
+
if (!REVIEW_STATUSES.includes(req.status))
|
|
144
|
+
return;
|
|
145
|
+
req.status = result.inputConflict === true ? 'doubleSpend' : 'invalid';
|
|
146
|
+
req.addHistoryNote({
|
|
147
|
+
when: new Date().toISOString(),
|
|
148
|
+
what: 'proactiveTerminalReconciliation',
|
|
149
|
+
provider,
|
|
150
|
+
providerStatus: result.providerStatus,
|
|
151
|
+
statusCode: result.statusCode,
|
|
152
|
+
description: result.description,
|
|
153
|
+
inputConflict: result.inputConflict === true,
|
|
154
|
+
competingTxs: result.competingTxs?.join(',')
|
|
155
|
+
});
|
|
156
|
+
await req.updateStorageDynamicProperties(sp, trx);
|
|
157
|
+
if (req.notify.transactionIds != null) {
|
|
158
|
+
await sp.updateTransactionsStatus(req.notify.transactionIds, 'failed', trx);
|
|
159
|
+
}
|
|
160
|
+
if (result.inputConflict === true) {
|
|
161
|
+
const quarantined = await (0, reconcileFailedTransactionInputs_1.quarantineReqInputs)(req, sp, trx);
|
|
162
|
+
req.addHistoryNote({
|
|
163
|
+
when: new Date().toISOString(),
|
|
164
|
+
what: 'proactiveInputQuarantine',
|
|
165
|
+
checked: quarantined.checked,
|
|
166
|
+
confirmed: quarantined.staleConfirmed,
|
|
167
|
+
...(quarantined.staleOutpoints.length > 0 ? { outpoints: quarantined.staleOutpoints.join(',') } : {})
|
|
168
|
+
});
|
|
169
|
+
await req.updateStorageDynamicProperties(sp, trx);
|
|
170
|
+
}
|
|
171
|
+
applied = true;
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
if (applied) {
|
|
175
|
+
this.monitor.callOnTransactionStatusChanged(reqApi.txid, result.providerStatus ?? 'REJECTED');
|
|
176
|
+
}
|
|
177
|
+
return applied;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.TaskReconcilePendingTransactions = TaskReconcilePendingTransactions;
|
|
181
|
+
//# sourceMappingURL=TaskReconcilePendingTransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TaskReconcilePendingTransactions.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReconcilePendingTransactions.ts"],"names":[],"mappings":";;;AACA,4DAAiE;AAEjE,6GAA4F;AAC5F,wCAAoC;AACpC,2DAAuD;AAEvD,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAU,CAAA;AAe7F;;;;;GAKG;AACH,sCAA8C,SAAQ,qCAAiB;IAO5D,YAAY;IACZ,WAAW;IACX,aAAa;IACb,iBAAiB;IAT1B,MAAM,CAAU,QAAQ,GAAG,8BAA8B,CAAA;IAEzD,gBAAgB,CAAQ;IAExB,YACE,OAAgB,EACT,YAAY,GAAG,iBAAO,CAAC,SAAS,GAAG,EAAE,EACrC,WAAW,GAAG,GAAG,EACjB,aAAa,GAAG,EAAE,EAClB,iBAAiB,GAAG,iBAAO,CAAC,SAAS;QAE5C,KAAK,CAAC,OAAO,EAAE,gCAAgC,CAAC,QAAQ,CAAC,CAAA;4BALlD,YAAY;2BACZ,WAAW;6BACX,aAAa;iCACb,iBAAiB;QAGxB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAA;IAChD,CAAC;IAED,OAAO,CAAC,kBAA0B;QAChC,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,gBAAgB,GAAG,CAAC,IAAI,kBAAkB,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,gBAAgB;SAC3G,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,aAAa;QAOzB,IAAI,MAAM,GAAgC,EAAE,CAAA;QAC5C,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACjD,MAAM,GAAG,MAAM,EAAE,CAAC,iBAAiB,CAAC;gBAClC,OAAO,EAAE,EAAE,KAAK,EAAE,gCAAgC,CAAC,QAAQ,EAAE;gBAC7D,eAAe,EAAE,IAAI;gBACrB,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aACpB,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC,OAAO;gBAAE,SAAQ;YAC5B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAwC,CAAA;gBAC/E,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;oBAAE,OAAO,SAAS,CAAA;gBACnD,IAAI,OAAO,MAAM,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;oBAC5C,OAAO;wBACL,YAAY,EAAE,MAAM,CAAC,YAAY;wBACjC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;qBACpD,CAAA;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAQ;YACV,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAA;QAC7C,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QAC3E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,aAAa,CAAC,CAAA;QACpE,MAAM,QAAQ,GACZ,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;QAClH,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;QAErF,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,IAAI,SAAS,GAAG,EAAE,CAAA;QAClB,MAAM,QAAQ,GAAuB,EAAE,CAAA;QACvC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,GAAG,CAAC,UAAU,GAAG,aAAa,IAAI,QAAQ,EAAE,MAAM,KAAK,SAAS,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAClG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC3E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,SAAQ;YACV,CAAC;YACD,UAAU,EAAE,CAAA;YACZ,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI;gBAAE,cAAc,EAAE,CAAA;YACnD,SAAS;gBACP,cAAc,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,IAAI,UAAU,GAAG;oBACrF,MAAM,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,IAAI,CAAA;QACvE,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAA;QAChD,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAA;QAC7E,IAAI,YAAgC,CAAA;QACpC,IAAI,qBAAyC,CAAA;QAC7C,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,CAAC,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAA;gBAC7D,qBAAqB,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,CAAA;YACxD,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,UAAU;YACV,cAAc;YACd,QAAQ,EAAE,QAAQ,CAAC,MAAM;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,CAAC,QAAQ;YACxB,GAAG,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,SAAS;SAC2B,CAAC,CAAA;IACzC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,UAAgF;QAEhF,IAAI,MAAM,GAAG,UAAU,EAAE,YAAY,IAAI,CAAC,CAAA;QAC1C,IAAI,UAAU,EAAE,qBAAqB,IAAI,IAAI,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBACjD,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC;gBAC5B,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE;aAC5B,CAAC,CAAA;YACF,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACzF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YAChD,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,CAAC,GAAG,eAAe,CAAC;YAC5B,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE;SAC3C,CAAC,CAAmD,CAAA;QACrD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAA;QAC1B,OAAO,IAAI,CAAA;IACb,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,MAAwB,EACxB,MAA2B,EAC3B,QAAgB;QAEhB,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACjD,MAAM,EAAE,CAAC,WAAW,CAAC,KAAK,EAAC,GAAG,EAAC,EAAE;gBAC/B,MAAM,GAAG,GAAG,IAAI,4BAAiB,CAAC,MAAM,CAAC,CAAA;gBACzC,MAAM,GAAG,CAAC,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACrC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,MAA0C,CAAC;oBAAE,OAAM;gBAErF,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAA;gBACtE,GAAG,CAAC,cAAc,CAAC;oBACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBAC9B,IAAI,EAAE,iCAAiC;oBACvC,QAAQ;oBACR,cAAc,EAAE,MAAM,CAAC,cAAc;oBACrC,UAAU,EAAE,MAAM,CAAC,UAAU;oBAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;oBAC/B,aAAa,EAAE,MAAM,CAAC,aAAa,KAAK,IAAI;oBAC5C,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC;iBAC7C,CAAC,CAAA;gBACF,MAAM,GAAG,CAAC,8BAA8B,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACjD,IAAI,GAAG,CAAC,MAAM,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;oBACtC,MAAM,EAAE,CAAC,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAA;gBAC7E,CAAC;gBACD,IAAI,MAAM,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAClC,MAAM,WAAW,GAAG,MAAM,IAAA,sDAAmB,EAAC,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC,CAAA;oBAC3D,GAAG,CAAC,cAAc,CAAC;wBACjB,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;wBAC9B,IAAI,EAAE,0BAA0B;wBAChC,OAAO,EAAE,WAAW,CAAC,OAAO;wBAC5B,SAAS,EAAE,WAAW,CAAC,cAAc;wBACrC,GAAG,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACtG,CAAC,CAAA;oBACF,MAAM,GAAG,CAAC,8BAA8B,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;gBACnD,CAAC;gBACD,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,OAAO,CAAC,8BAA8B,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,cAAc,IAAI,UAAU,CAAC,CAAA;QAC/F,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskReviewDoubleSpends.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewDoubleSpends.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"TaskReviewDoubleSpends.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewDoubleSpends.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAyBvD;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,iBAAiB;IAWlD,YAAY;IACZ,WAAW;IACX,aAAa;IACb,iBAAiB;IAb1B,MAAM,CAAC,QAAQ,CAAC,QAAQ,wBAAuB;IAE/C,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAQ;IACxC,MAAM,KAAK,QAAQ,IAAK,OAAO,CAAkC;IACjE,MAAM,KAAK,QAAQ,CAAE,KAAK,EAAE,OAAO,EAAoC;IAEvE,gBAAgB,EAAE,MAAM,CAAA;IAExB,YACE,OAAO,EAAE,OAAO,EACT,YAAY,SAAyB,EACrC,WAAW,SAAM,EACjB,aAAa,SAAK,EAClB,iBAAiB,SAAwB,EAIjD;IAED,OAAO,CAAE,kBAAkB,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,CAMrD;IAEK,yBAAyB,IAAK,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,qBAAqB,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CA0BhH;IAEK,OAAO,IAAK,OAAO,CAAC,MAAM,CAAC,CAmDhC;YAEa,gBAAgB;CA0B/B"}
|
|
@@ -3,6 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TaskReviewDoubleSpends = void 0;
|
|
4
4
|
const Monitor_1 = require("../Monitor");
|
|
5
5
|
const WalletMonitorTask_1 = require("./WalletMonitorTask");
|
|
6
|
+
function hasDurableInputConflict(req) {
|
|
7
|
+
try {
|
|
8
|
+
const history = JSON.parse(req.history);
|
|
9
|
+
return history.notes?.some(note => note.inputConflict === true || note.what === 'arcSSEInputQuarantine') === true;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
// Malformed legacy history must never weaken a terminal decision.
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
6
16
|
/**
|
|
7
17
|
* Review recent reqs in terminal 'doubleSpend' state and move any false positives
|
|
8
18
|
* back to 'unfail' so existing recovery handling can re-process them.
|
|
@@ -75,15 +85,17 @@ class TaskReviewDoubleSpends extends WalletMonitorTask_1.WalletMonitorTask {
|
|
|
75
85
|
let retainedDoubleSpendCount = 0;
|
|
76
86
|
for (const req of reqs) {
|
|
77
87
|
const gsr = await this.monitor.services.getStatusForTxids([req.txid]);
|
|
78
|
-
const status = gsr.results[0]?.status;
|
|
88
|
+
const status = gsr.status === 'success' ? gsr.results[0]?.status : undefined;
|
|
89
|
+
const durableInputConflict = hasDurableInputConflict(req);
|
|
79
90
|
reviewed.push(req);
|
|
80
|
-
|
|
91
|
+
const canUnfail = status === 'mined' || (status === 'known' && !durableInputConflict);
|
|
92
|
+
if (!canUnfail) {
|
|
81
93
|
lastRetainedDoubleSpendIndex = reviewed.length - 1;
|
|
82
94
|
retainedDoubleSpendCount += 1;
|
|
83
95
|
}
|
|
84
96
|
else {
|
|
85
97
|
unfails.push(req.provenTxReqId);
|
|
86
|
-
log += `unfail ${req.provenTxReqId} ${req.txid} status:${status}\n`;
|
|
98
|
+
log += `unfail ${req.provenTxReqId} ${req.txid} status:${status} durableInputConflict:${String(durableInputConflict)}\n`;
|
|
87
99
|
}
|
|
88
100
|
}
|
|
89
101
|
if (unfails.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskReviewDoubleSpends.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewDoubleSpends.ts"],"names":[],"mappings":";;;AACA,wCAAoC;AACpC,2DAAuD;
|
|
1
|
+
{"version":3,"file":"TaskReviewDoubleSpends.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewDoubleSpends.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
import { UtxoReviewDiagnostics } from '../../storage/methods/reviewUtxoOutputs';
|
|
1
2
|
import { Monitor } from '../Monitor';
|
|
2
3
|
import { WalletMonitorTask } from './WalletMonitorTask';
|
|
4
|
+
export interface TaskReviewUtxosPageResult extends UtxoReviewDiagnostics {
|
|
5
|
+
found: boolean;
|
|
6
|
+
userId?: number;
|
|
7
|
+
identityKey: string;
|
|
8
|
+
mode: 'all' | 'change';
|
|
9
|
+
release: boolean;
|
|
10
|
+
offset: number;
|
|
11
|
+
pageLimit: number;
|
|
12
|
+
sourceScanned: number;
|
|
13
|
+
complete: boolean;
|
|
14
|
+
nextOffset?: number;
|
|
15
|
+
log: string;
|
|
16
|
+
}
|
|
3
17
|
/**
|
|
4
|
-
* Use the reviewByIdentityKey method to
|
|
18
|
+
* Use the reviewByIdentityKey method to scan the UTXOs of a specific user by
|
|
19
|
+
* identity key. The scan is read-only unless the caller explicitly requests
|
|
20
|
+
* release, and release remains blocked if any provider result is inconclusive.
|
|
21
|
+
* Operator UIs should use reviewPageByIdentityKey: it bounds each provider
|
|
22
|
+
* round-trip and may explicitly release only the conclusive spent subset while
|
|
23
|
+
* reporting unknowns.
|
|
5
24
|
*
|
|
6
25
|
* The task itself is disabled and will not run on a schedule; review must be triggered manually by calling reviewByIdentityKey.
|
|
7
26
|
*/
|
|
@@ -19,7 +38,15 @@ export declare class TaskReviewUtxos extends WalletMonitorTask {
|
|
|
19
38
|
run: boolean;
|
|
20
39
|
};
|
|
21
40
|
runTask(): Promise<string>;
|
|
22
|
-
reviewByIdentityKey(identityKey: string, mode?: 'all' | 'change'): Promise<string>;
|
|
41
|
+
reviewByIdentityKey(identityKey: string, mode?: 'all' | 'change', release?: boolean): Promise<string>;
|
|
42
|
+
reviewPageByIdentityKey(identityKey: string, mode?: 'all' | 'change', release?: boolean, pageLimit?: number, offset?: number): Promise<TaskReviewUtxosPageResult>;
|
|
43
|
+
private emptyPage;
|
|
44
|
+
/**
|
|
45
|
+
* Report managed-change liquidity without changing it. Monitor deliberately
|
|
46
|
+
* has no signing authority; progressive migration occurs only during a
|
|
47
|
+
* caller-authorized createAction.
|
|
48
|
+
*/
|
|
49
|
+
reviewManagedChangeByIdentityKey(identityKey: string): Promise<string>;
|
|
23
50
|
private toUserLog;
|
|
24
51
|
}
|
|
25
52
|
//# sourceMappingURL=TaskReviewUtxos.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskReviewUtxos.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewUtxos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TaskReviewUtxos.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewUtxos.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,qBAAqB,EAAE,MAAM,yCAAyC,CAAA;AAElG,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAKvD,MAAM,WAAW,yBAA0B,SAAQ,qBAAqB;IACtE,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED;;;;;;;;;GASG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IAa3C,YAAY;IACZ,SAAS;IACT,UAAU;IACV,IAAI,EAAE,MAAM,EAAE;IAfvB,MAAM,CAAC,QAAQ,CAAC,QAAQ,iBAAgB;IAExC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAQ;IACxC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAE7B;IACD,MAAM,KAAK,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IAED,YACE,OAAO,EAAE,OAAO,EACT,YAAY,SAAI,EAChB,SAAS,SAAK,EACd,UAAU,SAAI,EACd,IAAI,GAAE,MAAM,EAAY,EAGhC;IAED,OAAO,CAAC,mBAAmB,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,OAAO,CAAA;KAAE,CAIrD;IAEK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAG/B;IAEK,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,KAAK,GAAG,QAAgB,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC/G;IAEK,uBAAuB,CAC3B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,KAAK,GAAG,QAAgB,EAC9B,OAAO,UAAQ,EACf,SAAS,SAA4B,EACrC,MAAM,SAAI,GACT,OAAO,CAAC,yBAAyB,CAAC,CAsFpC;IAED,OAAO,CAAC,SAAS;IA+BjB;;;;OAIG;IACG,gCAAgC,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8B3E;IAED,OAAO,CAAC,SAAS;CAelB"}
|
|
@@ -2,9 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskReviewUtxos = void 0;
|
|
4
4
|
const sdk_1 = require("../../sdk");
|
|
5
|
+
const managedChange_1 = require("../../storage/methods/managedChange");
|
|
6
|
+
const reviewUtxoOutputs_1 = require("../../storage/methods/reviewUtxoOutputs");
|
|
7
|
+
const utilityHelpers_1 = require("../../utility/utilityHelpers");
|
|
5
8
|
const WalletMonitorTask_1 = require("./WalletMonitorTask");
|
|
9
|
+
const REVIEW_PAGE_DEFAULT_LIMIT = 20;
|
|
10
|
+
const REVIEW_PAGE_MAX_LIMIT = 250;
|
|
6
11
|
/**
|
|
7
|
-
* Use the reviewByIdentityKey method to
|
|
12
|
+
* Use the reviewByIdentityKey method to scan the UTXOs of a specific user by
|
|
13
|
+
* identity key. The scan is read-only unless the caller explicitly requests
|
|
14
|
+
* release, and release remains blocked if any provider result is inconclusive.
|
|
15
|
+
* Operator UIs should use reviewPageByIdentityKey: it bounds each provider
|
|
16
|
+
* round-trip and may explicitly release only the conclusive spent subset while
|
|
17
|
+
* reporting unknowns.
|
|
8
18
|
*
|
|
9
19
|
* The task itself is disabled and will not run on a schedule; review must be triggered manually by calling reviewByIdentityKey.
|
|
10
20
|
*/
|
|
@@ -15,9 +25,13 @@ class TaskReviewUtxos extends WalletMonitorTask_1.WalletMonitorTask {
|
|
|
15
25
|
tags;
|
|
16
26
|
static taskName = 'ReviewUtxos';
|
|
17
27
|
static checkNowRequested = false;
|
|
18
|
-
static get checkNow() {
|
|
19
|
-
|
|
20
|
-
|
|
28
|
+
static get checkNow() {
|
|
29
|
+
return this.checkNowRequested;
|
|
30
|
+
}
|
|
31
|
+
static set checkNow(value) {
|
|
32
|
+
this.checkNowRequested = value;
|
|
33
|
+
}
|
|
34
|
+
constructor(monitor, triggerMsecs = 0, userLimit = 10, userOffset = 0, tags = ['all']) {
|
|
21
35
|
super(monitor, TaskReviewUtxos.taskName);
|
|
22
36
|
this.triggerMsecs = triggerMsecs;
|
|
23
37
|
this.userLimit = userLimit;
|
|
@@ -33,8 +47,8 @@ class TaskReviewUtxos extends WalletMonitorTask_1.WalletMonitorTask {
|
|
|
33
47
|
TaskReviewUtxos.checkNow = false;
|
|
34
48
|
return 'TaskReviewUtxos is disabled; use reviewByIdentityKey instead.\n';
|
|
35
49
|
}
|
|
36
|
-
async reviewByIdentityKey(identityKey, mode = 'all') {
|
|
37
|
-
const tags = ['release', ...(mode === 'all' ? ['all'] : [])];
|
|
50
|
+
async reviewByIdentityKey(identityKey, mode = 'all', release = false) {
|
|
51
|
+
const tags = [...(release ? ['release'] : []), ...(mode === 'all' ? ['all'] : [])];
|
|
38
52
|
const vargs = {
|
|
39
53
|
basket: sdk_1.specOpInvalidChange,
|
|
40
54
|
tags,
|
|
@@ -63,8 +77,142 @@ class TaskReviewUtxos extends WalletMonitorTask_1.WalletMonitorTask {
|
|
|
63
77
|
return this.toUserLog(user, result.outputs, result.totalOutputs, total, tags);
|
|
64
78
|
});
|
|
65
79
|
}
|
|
80
|
+
async reviewPageByIdentityKey(identityKey, mode = 'all', release = false, pageLimit = REVIEW_PAGE_DEFAULT_LIMIT, offset = 0) {
|
|
81
|
+
pageLimit = Math.min(Math.max(Math.trunc(pageLimit), 1), REVIEW_PAGE_MAX_LIMIT);
|
|
82
|
+
offset = Math.max(Math.trunc(offset), 0);
|
|
83
|
+
return await this.storage.runAsStorageProvider(async (sp) => {
|
|
84
|
+
const user = (await sp.findUsers({ partial: { identityKey } }))[0];
|
|
85
|
+
if (!user) {
|
|
86
|
+
return {
|
|
87
|
+
found: false,
|
|
88
|
+
identityKey,
|
|
89
|
+
mode,
|
|
90
|
+
release,
|
|
91
|
+
offset,
|
|
92
|
+
pageLimit,
|
|
93
|
+
sourceScanned: 0,
|
|
94
|
+
complete: true,
|
|
95
|
+
checked: 0,
|
|
96
|
+
confirmedUnspent: 0,
|
|
97
|
+
confirmedSpent: 0,
|
|
98
|
+
unknown: 0,
|
|
99
|
+
confirmedSpentSatoshis: 0,
|
|
100
|
+
released: 0,
|
|
101
|
+
releasedSatoshis: 0,
|
|
102
|
+
providers: [],
|
|
103
|
+
providerCount: 0,
|
|
104
|
+
providersTruncated: false,
|
|
105
|
+
log: `identityKey ${identityKey} was not found\n`
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
let basketId;
|
|
109
|
+
if (mode === 'change') {
|
|
110
|
+
basketId = (await sp.findOutputBaskets({
|
|
111
|
+
partial: { userId: user.userId, name: 'default' }
|
|
112
|
+
}))[0]?.basketId;
|
|
113
|
+
if (basketId == null) {
|
|
114
|
+
return this.emptyPage(user, mode, release, pageLimit, offset);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
const sourceOutputs = await sp.findOutputs({
|
|
118
|
+
partial: {
|
|
119
|
+
userId: user.userId,
|
|
120
|
+
spendable: true,
|
|
121
|
+
...(basketId != null ? { basketId } : {})
|
|
122
|
+
},
|
|
123
|
+
txStatus: ['completed', 'unproven', 'nosend', 'sending'],
|
|
124
|
+
noScript: true,
|
|
125
|
+
paged: { limit: pageLimit, offset }
|
|
126
|
+
});
|
|
127
|
+
const candidates = sourceOutputs.filter(output => output.basketId != null);
|
|
128
|
+
const auth = { userId: user.userId, identityKey: user.identityKey };
|
|
129
|
+
const review = await (0, reviewUtxoOutputs_1.reviewUtxoOutputs)(sp, auth, candidates, release ? 'conclusive' : 'none');
|
|
130
|
+
const complete = sourceOutputs.length < pageLimit;
|
|
131
|
+
const nextOffset = complete ? undefined : offset + sourceOutputs.length - review.diagnostics.released;
|
|
132
|
+
const target = mode === 'all' ? 'spendable utxos' : 'spendable change utxos';
|
|
133
|
+
const action = release ? 'released' : 'found';
|
|
134
|
+
let log = `userId ${user.userId}: page checked ${review.diagnostics.checked} ${target}; ` +
|
|
135
|
+
`${review.diagnostics.confirmedSpent} confirmed spent, ${review.diagnostics.confirmedUnspent} confirmed unspent, ` +
|
|
136
|
+
`${review.diagnostics.unknown} unknown; ${action} ${review.diagnostics.released}, ${user.identityKey}\n`;
|
|
137
|
+
for (const output of review.confirmedSpentOutputs) {
|
|
138
|
+
log += ` ${output.txid}.${output.vout} ${output.satoshis} now ${output.spendable ? 'spendable' : 'spent'}\n`;
|
|
139
|
+
}
|
|
140
|
+
if (review.unknownOutputs.length > 0) {
|
|
141
|
+
log += ` ${review.unknownOutputs.length} output(s) quarantined from release pending a conclusive provider result\n`;
|
|
142
|
+
}
|
|
143
|
+
if (nextOffset != null)
|
|
144
|
+
log += ` continue at offset ${nextOffset}\n`;
|
|
145
|
+
return {
|
|
146
|
+
found: true,
|
|
147
|
+
userId: user.userId,
|
|
148
|
+
identityKey: user.identityKey,
|
|
149
|
+
mode,
|
|
150
|
+
release,
|
|
151
|
+
offset,
|
|
152
|
+
pageLimit,
|
|
153
|
+
sourceScanned: sourceOutputs.length,
|
|
154
|
+
complete,
|
|
155
|
+
...(nextOffset != null ? { nextOffset } : {}),
|
|
156
|
+
...review.diagnostics,
|
|
157
|
+
log
|
|
158
|
+
};
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
emptyPage(user, mode, release, pageLimit, offset) {
|
|
162
|
+
return {
|
|
163
|
+
found: true,
|
|
164
|
+
userId: user.userId,
|
|
165
|
+
identityKey: user.identityKey,
|
|
166
|
+
mode,
|
|
167
|
+
release,
|
|
168
|
+
offset,
|
|
169
|
+
pageLimit,
|
|
170
|
+
sourceScanned: 0,
|
|
171
|
+
complete: true,
|
|
172
|
+
checked: 0,
|
|
173
|
+
confirmedUnspent: 0,
|
|
174
|
+
confirmedSpent: 0,
|
|
175
|
+
unknown: 0,
|
|
176
|
+
confirmedSpentSatoshis: 0,
|
|
177
|
+
released: 0,
|
|
178
|
+
releasedSatoshis: 0,
|
|
179
|
+
providers: [],
|
|
180
|
+
providerCount: 0,
|
|
181
|
+
providersTruncated: false,
|
|
182
|
+
log: `userId ${user.userId}: no invalid utxos found, ${user.identityKey}\n`
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Report managed-change liquidity without changing it. Monitor deliberately
|
|
187
|
+
* has no signing authority; progressive migration occurs only during a
|
|
188
|
+
* caller-authorized createAction.
|
|
189
|
+
*/
|
|
190
|
+
async reviewManagedChangeByIdentityKey(identityKey) {
|
|
191
|
+
return await this.storage.runAsStorageProvider(async (sp) => {
|
|
192
|
+
const user = (await sp.findUsers({ partial: { identityKey } }))[0];
|
|
193
|
+
if (user == null)
|
|
194
|
+
return `identityKey ${identityKey} was not found\n`;
|
|
195
|
+
const basket = (0, utilityHelpers_1.verifyOne)(await sp.findOutputBaskets({ partial: { userId: user.userId, name: 'default' } }));
|
|
196
|
+
const outputs = (await sp.findOutputs({
|
|
197
|
+
partial: { userId: user.userId, basketId: basket.basketId, spendable: true, ...managedChange_1.managedChangeOutputFields },
|
|
198
|
+
txStatus: ['completed', 'unproven', 'sending'],
|
|
199
|
+
noScript: true
|
|
200
|
+
})).filter(managedChange_1.isAutoSpendableChangeOutput);
|
|
201
|
+
const reserved = new Set(await sp.findReservedActionBatchOutputIds(outputs.map(output => output.outputId)));
|
|
202
|
+
const statuses = await sp.findTransactionStatusesByIds(user.userId, outputs.map(output => output.transactionId));
|
|
203
|
+
const preferred = Math.max(1, basket.minimumDesiredUTXOValue);
|
|
204
|
+
const healthy = outputs.filter(output => output.satoshis >= preferred);
|
|
205
|
+
const undersized = outputs.filter(output => output.satoshis < preferred);
|
|
206
|
+
const countStatus = (status) => outputs.filter(output => statuses.get(output.transactionId) === status).length;
|
|
207
|
+
const satoshis = outputs.reduce((sum, output) => sum + output.satoshis, 0);
|
|
208
|
+
return (`userId ${user.userId}: managed change ${outputs.length}/${basket.numberOfDesiredUTXOs}, ` +
|
|
209
|
+
`healthy ${healthy.length}, undersized ${undersized.length}, reserved ${reserved.size}, ` +
|
|
210
|
+
`completed ${countStatus('completed')}, unproven ${countStatus('unproven')}, ` +
|
|
211
|
+
`sending ${countStatus('sending')}, satoshis ${satoshis}, preferred minimum ${preferred}\n`);
|
|
212
|
+
});
|
|
213
|
+
}
|
|
66
214
|
toUserLog(user, outputs, totalOutputs, total, tags) {
|
|
67
|
-
const action = tags.includes('release') ? 'updated to unspendable' : '
|
|
215
|
+
const action = tags.includes('release') ? 'confirmed spent and updated to unspendable' : 'confirmed spent';
|
|
68
216
|
const target = tags.includes('all') ? 'spendable utxos' : 'spendable change utxos';
|
|
69
217
|
let log = `userId ${user.userId}: ${totalOutputs} ${target} ${action}, total ${total}, ${user.identityKey}\n`;
|
|
70
218
|
for (const output of outputs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskReviewUtxos.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewUtxos.ts"],"names":[],"mappings":";;;AACA,mCAA+C;
|
|
1
|
+
{"version":3,"file":"TaskReviewUtxos.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/TaskReviewUtxos.ts"],"names":[],"mappings":";;;AACA,mCAA+C;AAC/C,uEAA4G;AAE5G,+EAAkG;AAClG,iEAAwD;AAExD,2DAAuD;AAEvD,MAAM,yBAAyB,GAAG,EAAE,CAAA;AACpC,MAAM,qBAAqB,GAAG,GAAG,CAAA;AAgBjC;;;;;;;;;GASG;AACH,qBAA6B,SAAQ,qCAAiB;IAa3C,YAAY;IACZ,SAAS;IACT,UAAU;IACV,IAAI;IAfb,MAAM,CAAU,QAAQ,GAAG,aAAa,CAAA;IAEhC,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAA;IACxC,MAAM,KAAK,QAAQ;QACjB,OAAO,IAAI,CAAC,iBAAiB,CAAA;IAC/B,CAAC;IACD,MAAM,KAAK,QAAQ,CAAC,KAAc;QAChC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAA;IAChC,CAAC;IAED,YACE,OAAgB,EACT,YAAY,GAAG,CAAC,EAChB,SAAS,GAAG,EAAE,EACd,UAAU,GAAG,CAAC,EACd,IAAI,GAAa,CAAC,KAAK,CAAC;QAE/B,KAAK,CAAC,OAAO,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAA;4BALjC,YAAY;yBACZ,SAAS;0BACT,UAAU;oBACV,IAAI;IAGb,CAAC;IAED,OAAO,CAAC,mBAA2B;QACjC,OAAO;YACL,GAAG,EAAE,KAAK;SACX,CAAA;IACH,CAAC;IAED,KAAK,CAAC,OAAO;QACX,eAAe,CAAC,QAAQ,GAAG,KAAK,CAAA;QAChC,OAAO,iEAAiE,CAAA;IAC1E,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,IAAI,GAAqB,KAAK,EAAE,OAAO,GAAG,KAAK;QAC5F,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAClF,MAAM,KAAK,GAAoC;YAC7C,MAAM,EAAE,yBAAmB;YAC3B,IAAI;YACJ,YAAY,EAAE,KAAK;YACnB,qBAAqB,EAAE,KAAK;YAC5B,mBAAmB,EAAE,KAAK;YAC1B,yBAAyB,EAAE,KAAK;YAChC,WAAW,EAAE,KAAK;YAClB,aAAa,EAAE,KAAK;YACpB,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,cAAc,EAAE,KAAK;YACrB,UAAU,EAAE,EAAE;SACf,CAAA;QAED,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACxD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,eAAe,WAAW,kBAAkB,CAAA;YACrD,CAAC;YAED,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAA;YACnE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;YAChD,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,UAAU,IAAI,CAAC,MAAM,6BAA6B,IAAI,CAAC,WAAW,IAAI,CAAA;YAC/E,CAAC;YAED,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC9E,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,WAAmB,EACnB,IAAI,GAAqB,KAAK,EAC9B,OAAO,GAAG,KAAK,EACf,SAAS,GAAG,yBAAyB,EACrC,MAAM,GAAG,CAAC;QAEV,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAA;QAC/E,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;QAExC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACxD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO;oBACL,KAAK,EAAE,KAAK;oBACZ,WAAW;oBACX,IAAI;oBACJ,OAAO;oBACP,MAAM;oBACN,SAAS;oBACT,aAAa,EAAE,CAAC;oBAChB,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,CAAC;oBACV,gBAAgB,EAAE,CAAC;oBACnB,cAAc,EAAE,CAAC;oBACjB,OAAO,EAAE,CAAC;oBACV,sBAAsB,EAAE,CAAC;oBACzB,QAAQ,EAAE,CAAC;oBACX,gBAAgB,EAAE,CAAC;oBACnB,SAAS,EAAE,EAAE;oBACb,aAAa,EAAE,CAAC;oBAChB,kBAAkB,EAAE,KAAK;oBACzB,GAAG,EAAE,eAAe,WAAW,kBAAkB;iBAClD,CAAA;YACH,CAAC;YAED,IAAI,QAA4B,CAAA;YAChC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,QAAQ,GAAG,CACT,MAAM,EAAE,CAAC,iBAAiB,CAAC;oBACzB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE;iBAClD,CAAC,CACH,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAA;gBACd,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;oBACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;gBAC/D,CAAC;YACH,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,EAAE,CAAC,WAAW,CAAC;gBACzC,OAAO,EAAE;oBACP,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,SAAS,EAAE,IAAI;oBACf,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1C;gBACD,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC;gBACxD,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;aACpC,CAAC,CAAA;YACF,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAA;YAC1E,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAA;YACnE,MAAM,MAAM,GAAG,MAAM,IAAA,qCAAiB,EAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAC7F,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,GAAG,SAAS,CAAA;YACjD,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAA;YACrG,MAAM,MAAM,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAA;YAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAA;YAC7C,IAAI,GAAG,GACL,UAAU,IAAI,CAAC,MAAM,kBAAkB,MAAM,CAAC,WAAW,CAAC,OAAO,IAAI,MAAM,IAAI;gBAC/E,GAAG,MAAM,CAAC,WAAW,CAAC,cAAc,qBAAqB,MAAM,CAAC,WAAW,CAAC,gBAAgB,sBAAsB;gBAClH,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,aAAa,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,CAAA;YAC1G,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBAClD,GAAG,IAAI,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA;YAC/G,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,GAAG,IAAI,KAAK,MAAM,CAAC,cAAc,CAAC,MAAM,4EAA4E,CAAA;YACtH,CAAC;YACD,IAAI,UAAU,IAAI,IAAI;gBAAE,GAAG,IAAI,wBAAwB,UAAU,IAAI,CAAA;YAErE,OAAO;gBACL,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,SAAS;gBACT,aAAa,EAAE,aAAa,CAAC,MAAM;gBACnC,QAAQ;gBACR,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7C,GAAG,MAAM,CAAC,WAAW;gBACrB,GAAG;aACJ,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,SAAS,CACf,IAAe,EACf,IAAsB,EACtB,OAAgB,EAChB,SAAiB,EACjB,MAAc;QAEd,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI;YACJ,OAAO;YACP,MAAM;YACN,SAAS;YACT,aAAa,EAAE,CAAC;YAChB,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,CAAC;YACV,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;YACV,sBAAsB,EAAE,CAAC;YACzB,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,CAAC;YACnB,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,CAAC;YAChB,kBAAkB,EAAE,KAAK;YACzB,GAAG,EAAE,UAAU,IAAI,CAAC,MAAM,6BAA6B,IAAI,CAAC,WAAW,IAAI;SAC5E,CAAA;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gCAAgC,CAAC,WAAmB;QACxD,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACxD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAClE,IAAI,IAAI,IAAI,IAAI;gBAAE,OAAO,eAAe,WAAW,kBAAkB,CAAA;YACrE,MAAM,MAAM,GAAG,IAAA,0BAAS,EAAC,MAAM,EAAE,CAAC,iBAAiB,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;YAC3G,MAAM,OAAO,GAAG,CACd,MAAM,EAAE,CAAC,WAAW,CAAC;gBACnB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,yCAAyB,EAAE;gBAC1G,QAAQ,EAAE,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC;gBAC9C,QAAQ,EAAE,IAAI;aACf,CAAC,CACH,CAAC,MAAM,CAAC,2CAA2B,CAAC,CAAA;YACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC,gCAAgC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAC3G,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,4BAA4B,CACpD,IAAI,CAAC,MAAM,EACX,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAC5C,CAAA;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,uBAAuB,CAAC,CAAA;YAC7D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,CAAA;YACtE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAA;YACxE,MAAM,WAAW,GAAG,CAAC,MAA4C,EAAU,EAAE,CAC3E,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;YAChF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC1E,OAAO,CACL,UAAU,IAAI,CAAC,MAAM,oBAAoB,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,oBAAoB,IAAI;gBAC1F,WAAW,OAAO,CAAC,MAAM,gBAAgB,UAAU,CAAC,MAAM,cAAc,QAAQ,CAAC,IAAI,IAAI;gBACzF,aAAa,WAAW,CAAC,WAAW,CAAC,cAAc,WAAW,CAAC,UAAU,CAAC,IAAI;gBAC9E,WAAW,WAAW,CAAC,SAAS,CAAC,cAAc,QAAQ,uBAAuB,SAAS,IAAI,CAC5F,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,SAAS,CACf,IAAe,EACf,OAAuB,EACvB,YAAoB,EACpB,KAAa,EACb,IAAc;QAEd,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC,iBAAiB,CAAA;QAC1G,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB,CAAA;QAClF,IAAI,GAAG,GAAG,UAAU,IAAI,CAAC,MAAM,KAAK,YAAY,IAAI,MAAM,IAAI,MAAM,WAAW,KAAK,KAAK,IAAI,CAAC,WAAW,IAAI,CAAA;QAC7G,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,GAAG,IAAI,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,QAAQ,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,IAAI,CAAA;QACpG,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;CACF"}
|
|
@@ -11,6 +11,7 @@ export * from './TaskNewHeader';
|
|
|
11
11
|
export * from './TaskPurge';
|
|
12
12
|
export * from './TaskReorg';
|
|
13
13
|
export * from './TaskReviewDoubleSpends';
|
|
14
|
+
export * from './TaskReconcilePendingTransactions';
|
|
14
15
|
export * from './TaskReviewProvenTxs';
|
|
15
16
|
export * from './TaskReviewStatus';
|
|
16
17
|
export * from './TaskReviewUtxos';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.all.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/index.all.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.all.d.ts","sourceRoot":"","sources":["../../../../src/monitor/tasks/index.all.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AACnC,cAAc,cAAc,CAAA;AAC5B,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,0BAA0B,CAAA;AACxC,cAAc,oCAAoC,CAAA;AAClD,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA"}
|
|
@@ -27,6 +27,7 @@ __exportStar(require("./TaskNewHeader"), exports);
|
|
|
27
27
|
__exportStar(require("./TaskPurge"), exports);
|
|
28
28
|
__exportStar(require("./TaskReorg"), exports);
|
|
29
29
|
__exportStar(require("./TaskReviewDoubleSpends"), exports);
|
|
30
|
+
__exportStar(require("./TaskReconcilePendingTransactions"), exports);
|
|
30
31
|
__exportStar(require("./TaskReviewProvenTxs"), exports);
|
|
31
32
|
__exportStar(require("./TaskReviewStatus"), exports);
|
|
32
33
|
__exportStar(require("./TaskReviewUtxos"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.all.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/index.all.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,+CAA4B;AAC5B,uDAAoC;AACpC,qDAAkC;AAClC,6DAA0C;AAC1C,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,2DAAwC;AACxC,kDAA+B;AAC/B,8CAA2B;AAC3B,8CAA2B;AAC3B,2DAAwC;AACxC,wDAAqC;AACrC,qDAAkC;AAClC,oDAAiC;AACjC,oDAAiC;AACjC,qDAAkC;AAClC,+CAA4B"}
|
|
1
|
+
{"version":3,"file":"index.all.js","sourceRoot":"","sources":["../../../../src/monitor/tasks/index.all.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmC;AACnC,+CAA4B;AAC5B,uDAAoC;AACpC,qDAAkC;AAClC,6DAA0C;AAC1C,8CAA2B;AAC3B,sDAAmC;AACnC,kDAA+B;AAC/B,2DAAwC;AACxC,kDAA+B;AAC/B,8CAA2B;AAC3B,8CAA2B;AAC3B,2DAAwC;AACxC,qEAAkD;AAClD,wDAAqC;AACrC,qDAAkC;AAClC,oDAAiC;AACjC,oDAAiC;AACjC,qDAAkC;AAClC,+CAA4B"}
|
|
@@ -20,6 +20,10 @@ export interface StorageCapabilities {
|
|
|
20
20
|
manifestVersion?: 2;
|
|
21
21
|
/** A prepared compact manifest may be committed by its semantic digest. */
|
|
22
22
|
commitByDigest?: boolean;
|
|
23
|
+
/** Expired workspaces can atomically reacquire their exact external inputs. */
|
|
24
|
+
resume?: boolean;
|
|
25
|
+
/** Maximum number of persisted outputs one workspace may reserve at once. */
|
|
26
|
+
maxReservedOutputs?: number;
|
|
23
27
|
/** Multiple logical blobs may share one authenticated binary request. */
|
|
24
28
|
packedUploads?: {
|
|
25
29
|
version: 1;
|
|
@@ -53,6 +57,11 @@ export interface BeginActionBatchResult {
|
|
|
53
57
|
commissionSatoshis: number;
|
|
54
58
|
commissionPubKeyHex?: string;
|
|
55
59
|
availableChangeCount: number;
|
|
60
|
+
/** Internal planner policy; absent on older providers, which use defaults. */
|
|
61
|
+
managedChangePolicy?: {
|
|
62
|
+
maxOutputsPerAction: number;
|
|
63
|
+
migrationInputsPerAction: number;
|
|
64
|
+
};
|
|
56
65
|
reservedOutputs: ActionBatchFundingOutput[];
|
|
57
66
|
explicitOutputs: ActionBatchFundingOutput[];
|
|
58
67
|
inputBeef?: number[] | Uint8Array;
|
|
@@ -76,6 +85,16 @@ export interface ExtendActionBatchResult {
|
|
|
76
85
|
export interface RenewActionBatchResult {
|
|
77
86
|
expiresAt: string;
|
|
78
87
|
}
|
|
88
|
+
export interface ResumeActionBatchArgs {
|
|
89
|
+
batchId: string;
|
|
90
|
+
/** Exact persisted outputs still held by the client workspace. */
|
|
91
|
+
outpoints: Array<{
|
|
92
|
+
txid: string;
|
|
93
|
+
vout: number;
|
|
94
|
+
}>;
|
|
95
|
+
}
|
|
96
|
+
export interface ResumeActionBatchResult extends RenewActionBatchResult {
|
|
97
|
+
}
|
|
79
98
|
export interface ActionBatchCommitMetadata {
|
|
80
99
|
description: string;
|
|
81
100
|
labels: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionBatch.interfaces.d.ts","sourceRoot":"","sources":["../../../src/sdk/ActionBatch.interfaces.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionBatch.interfaces.d.ts","sourceRoot":"","sources":["../../../src/sdk/ActionBatch.interfaces.ts"],"names":[],"mappings":"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"}
|