dexbot 1.1.13 → 1.2.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/README.md +1 -0
- package/dist/market_adapter/market_adapter.js +1 -1
- package/dist/market_adapter/market_adapter.js.map +1 -1
- package/dist/modules/bitshares-native/lru_cache.d.ts +20 -0
- package/dist/modules/bitshares-native/lru_cache.d.ts.map +1 -0
- package/dist/modules/bitshares-native/lru_cache.js +45 -0
- package/dist/modules/bitshares-native/lru_cache.js.map +1 -0
- package/dist/modules/bitshares-native/resolvers.d.ts +2 -18
- package/dist/modules/bitshares-native/resolvers.d.ts.map +1 -1
- package/dist/modules/bitshares-native/resolvers.js +2 -41
- package/dist/modules/bitshares-native/resolvers.js.map +1 -1
- package/dist/modules/bitshares-native/serial/chain_constants.d.ts +1 -0
- package/dist/modules/bitshares-native/serial/chain_constants.d.ts.map +1 -1
- package/dist/modules/bitshares-native/serial/chain_constants.js +3 -0
- package/dist/modules/bitshares-native/serial/chain_constants.js.map +1 -1
- package/dist/modules/bitshares-native/signing_client.d.ts.map +1 -1
- package/dist/modules/bitshares-native/signing_client.js +12 -1
- package/dist/modules/bitshares-native/signing_client.js.map +1 -1
- package/dist/modules/bitshares-native/subscriptions.d.ts.map +1 -1
- package/dist/modules/bitshares-native/subscriptions.js +42 -3
- package/dist/modules/bitshares-native/subscriptions.js.map +1 -1
- package/dist/modules/bitshares-native/transport.d.ts.map +1 -1
- package/dist/modules/bitshares-native/transport.js +77 -27
- package/dist/modules/bitshares-native/transport.js.map +1 -1
- package/dist/modules/bitshares-native/tx/builder.d.ts.map +1 -1
- package/dist/modules/bitshares-native/tx/builder.js +26 -16
- package/dist/modules/bitshares-native/tx/builder.js.map +1 -1
- package/dist/modules/bitshares-native/tx/tx_cache.d.ts +17 -0
- package/dist/modules/bitshares-native/tx/tx_cache.d.ts.map +1 -0
- package/dist/modules/bitshares-native/tx/tx_cache.js +62 -0
- package/dist/modules/bitshares-native/tx/tx_cache.js.map +1 -0
- package/dist/modules/bot_settings.d.ts.map +1 -1
- package/dist/modules/bot_settings.js +2 -1
- package/dist/modules/bot_settings.js.map +1 -1
- package/dist/modules/chain_orders.d.ts +4 -1
- package/dist/modules/chain_orders.d.ts.map +1 -1
- package/dist/modules/chain_orders.js +30 -1
- package/dist/modules/chain_orders.js.map +1 -1
- package/dist/modules/config.d.ts +6 -0
- package/dist/modules/config.d.ts.map +1 -1
- package/dist/modules/config.js +11 -0
- package/dist/modules/config.js.map +1 -1
- package/dist/modules/constants.d.ts +17 -1
- package/dist/modules/constants.d.ts.map +1 -1
- package/dist/modules/constants.js +84 -18
- package/dist/modules/constants.js.map +1 -1
- package/dist/modules/credit_runtime.d.ts.map +1 -1
- package/dist/modules/credit_runtime.js +40 -29
- package/dist/modules/credit_runtime.js.map +1 -1
- package/dist/modules/dexbot_class.d.ts +16 -12
- package/dist/modules/dexbot_class.d.ts.map +1 -1
- package/dist/modules/dexbot_class.js +183 -78
- package/dist/modules/dexbot_class.js.map +1 -1
- package/dist/modules/dexbot_credential_client.d.ts +1 -0
- package/dist/modules/dexbot_credential_client.d.ts.map +1 -1
- package/dist/modules/dexbot_credential_client.js +15 -6
- package/dist/modules/dexbot_credential_client.js.map +1 -1
- package/dist/modules/dexbot_maintenance_runtime.d.ts +1 -5
- package/dist/modules/dexbot_maintenance_runtime.d.ts.map +1 -1
- package/dist/modules/dexbot_maintenance_runtime.js +78 -42
- package/dist/modules/dexbot_maintenance_runtime.js.map +1 -1
- package/dist/modules/key_store.d.ts.map +1 -1
- package/dist/modules/key_store.js +2 -0
- package/dist/modules/key_store.js.map +1 -1
- package/dist/modules/launcher/child_env.d.ts.map +1 -1
- package/dist/modules/launcher/child_env.js +1 -0
- package/dist/modules/launcher/child_env.js.map +1 -1
- package/dist/modules/launcher/launch_modes.d.ts +2 -0
- package/dist/modules/launcher/launch_modes.d.ts.map +1 -1
- package/dist/modules/launcher/launch_modes.js +7 -6
- package/dist/modules/launcher/launch_modes.js.map +1 -1
- package/dist/modules/node_manager.d.ts +9 -0
- package/dist/modules/node_manager.d.ts.map +1 -1
- package/dist/modules/node_manager.js +35 -17
- package/dist/modules/node_manager.js.map +1 -1
- package/dist/modules/order/accounting.d.ts.map +1 -1
- package/dist/modules/order/accounting.js +56 -13
- package/dist/modules/order/accounting.js.map +1 -1
- package/dist/modules/order/async_lock.d.ts +33 -4
- package/dist/modules/order/async_lock.d.ts.map +1 -1
- package/dist/modules/order/async_lock.js +69 -7
- package/dist/modules/order/async_lock.js.map +1 -1
- package/dist/modules/order/grid.d.ts +435 -450
- package/dist/modules/order/grid.d.ts.map +1 -1
- package/dist/modules/order/grid.js +1621 -1548
- package/dist/modules/order/grid.js.map +1 -1
- package/dist/modules/order/grid_reconcile.d.ts +3 -73
- package/dist/modules/order/grid_reconcile.d.ts.map +1 -1
- package/dist/modules/order/grid_reconcile.js +11 -843
- package/dist/modules/order/grid_reconcile.js.map +1 -1
- package/dist/modules/order/grid_reconcile_internal.d.ts +8 -0
- package/dist/modules/order/grid_reconcile_internal.d.ts.map +1 -0
- package/dist/modules/order/grid_reconcile_internal.js +771 -0
- package/dist/modules/order/grid_reconcile_internal.js.map +1 -0
- package/dist/modules/order/logger.d.ts +1 -1
- package/dist/modules/order/logger.d.ts.map +1 -1
- package/dist/modules/order/logger.js +26 -2
- package/dist/modules/order/logger.js.map +1 -1
- package/dist/modules/order/manager.d.ts +40 -3
- package/dist/modules/order/manager.d.ts.map +1 -1
- package/dist/modules/order/manager.js +97 -15
- package/dist/modules/order/manager.js.map +1 -1
- package/dist/modules/order/runner.js +2 -2
- package/dist/modules/order/runner.js.map +1 -1
- package/dist/modules/order/strategy.js +3 -3
- package/dist/modules/order/strategy.js.map +1 -1
- package/dist/modules/order/sync_engine.d.ts +1 -1
- package/dist/modules/order/sync_engine.d.ts.map +1 -1
- package/dist/modules/order/sync_engine.js +121 -29
- package/dist/modules/order/sync_engine.js.map +1 -1
- package/dist/modules/order/utils/order.d.ts +17 -0
- package/dist/modules/order/utils/order.d.ts.map +1 -1
- package/dist/modules/order/utils/order.js +56 -19
- package/dist/modules/order/utils/order.js.map +1 -1
- package/dist/modules/order/utils/system.js +4 -4
- package/dist/modules/order/utils/system.js.map +1 -1
- package/dist/modules/order/utils/validate.d.ts.map +1 -1
- package/dist/modules/order/utils/validate.js +6 -8
- package/dist/modules/order/utils/validate.js.map +1 -1
- package/dist/scripts/print_grid.js +3 -3
- package/dist/scripts/print_grid.js.map +1 -1
- package/dist/scripts/test-credit-renewal.js +1 -1
- package/dist/scripts/test-credit-renewal.js.map +1 -1
- package/dist/unlock.d.ts.map +1 -1
- package/dist/unlock.js +26 -12
- package/dist/unlock.js.map +1 -1
- package/package.json +14 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dexbot_credential_client.d.ts","sourceRoot":"","sources":["../../modules/dexbot_credential_client.ts"],"names":[],"mappings":"AAmBA,UAAU,8BAA8B;IACpC,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,uBAAuB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"dexbot_credential_client.d.ts","sourceRoot":"","sources":["../../modules/dexbot_credential_client.ts"],"names":[],"mappings":"AAmBA,UAAU,8BAA8B;IACpC,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED,UAAU,uBAAuB;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED,UAAU,oBAAoB;IAC1B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,UAAU,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,wBAAwB;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC;CAC7B;AAkBD;;;;;;;;;;;;;;GAcG;AACH,cAAM,uBAAwB,SAAQ,KAAK;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,GAAG,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEb,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,8BAAmC;CAU5E;AAMD,iBAAS,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,oBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAmE5J;AAMD,iBAAS,uBAAuB,CAAC,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAW/E;AAED,iBAAe,uBAAuB,CAAC,SAAS,GAAE,MAAgC,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CAYxI;AAMD,iBAAe,oCAAoC,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,OAAO,GAAE,uBAA4B,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAgGpK;;;;;;;;;;;AAED,kBASE"}
|
|
@@ -176,6 +176,10 @@ async function executeOperationsViaCredentialDaemon(accountName, operations, opt
|
|
|
176
176
|
const fallbackNodes = Array.isArray(options.fallbackNodes) ? options.fallbackNodes : [];
|
|
177
177
|
const maxAttempts = 1 + fallbackNodes.length;
|
|
178
178
|
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
179
|
+
// attempt 0 uses options.nodeUrl (typically undefined, meaning the daemon's
|
|
180
|
+
// default node list); subsequent attempts cycle through fallbackNodes[].
|
|
181
|
+
// onNodeFailed is only invoked when nodeUrl is truthy, so the primary
|
|
182
|
+
// node is never reported through this callback — only the named fallbacks.
|
|
179
183
|
const nodeUrl = attempt === 0 ? (options.nodeUrl || undefined) : fallbackNodes[attempt - 1];
|
|
180
184
|
const payload = { type: 'execute-operations', accountName, operations };
|
|
181
185
|
const sessionId = options.sessionId || null;
|
|
@@ -226,12 +230,17 @@ async function executeOperationsViaCredentialDaemon(accountName, operations, opt
|
|
|
226
230
|
throw new Error(errMsg);
|
|
227
231
|
}
|
|
228
232
|
catch (err) {
|
|
229
|
-
if (err instanceof BroadcastUncertainError
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
233
|
+
if (err instanceof BroadcastUncertainError) {
|
|
234
|
+
if (typeof options.onNodeFailed === 'function' && nodeUrl) {
|
|
235
|
+
options.onNodeFailed(nodeUrl);
|
|
236
|
+
}
|
|
237
|
+
if (attempt < maxAttempts - 1) {
|
|
238
|
+
const label = extractHostname(nodeUrl || '') || 'primary';
|
|
239
|
+
const nextHost = extractHostname(fallbackNodes[attempt]);
|
|
240
|
+
console.warn(`[cred-daemon-client] BROADCAST_DEADLINE on ${label}, retrying fallback ${nextHost}...`);
|
|
241
|
+
await new Promise((resolve) => setTimeout(resolve, TIMING.BLOCKCHAIN_SETTLE_DELAY_MS));
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
235
244
|
}
|
|
236
245
|
throw err;
|
|
237
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dexbot_credential_client.js","sourceRoot":"","sources":["../../modules/dexbot_credential_client.ts"],"names":[],"mappings":";AAAA,kFAAkF;AAClF,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;AAClC,IAAI,GAAG,CAAC;AACR,IAAI,CAAC;IACD,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACjD,CAAC;AAAC,MAAM,CAAC;IACL,uEAAuE;AAC3E,CAAC;AACD,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAC5C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;AAC7B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;AAChD,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AACxD,MAAM,EACF,0BAA0B,EAC1B,uBAAuB,EACvB,mBAAmB,GACtB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dexbot_credential_client.js","sourceRoot":"","sources":["../../modules/dexbot_credential_client.ts"],"names":[],"mappings":"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"}
|
|
@@ -206,13 +206,11 @@ declare function executeMaintenanceLogic(bot: any, context: any): Promise<void>;
|
|
|
206
206
|
* @param {Object} [options] - Dust cancellation options
|
|
207
207
|
* @param {import('./types').Order[]} [options.buy=[]] - Buy-side dust orders
|
|
208
208
|
* @param {import('./types').Order[]} [options.sell=[]] - Sell-side dust orders
|
|
209
|
-
* @param {boolean} [options.fillLockAlreadyHeld=false] - Skip fill-processing lock re-entry (caller already holds it)
|
|
210
209
|
* @returns {Promise<{cancelledCount: number, batchResult: {aborted: boolean}|null}>}
|
|
211
210
|
*/
|
|
212
|
-
declare function cancelDustOrders(bot: any, { buy: buyDust, sell: sellDust
|
|
211
|
+
declare function cancelDustOrders(bot: any, { buy: buyDust, sell: sellDust }?: {
|
|
213
212
|
buy?: any[];
|
|
214
213
|
sell?: any[];
|
|
215
|
-
fillLockAlreadyHeld?: boolean;
|
|
216
214
|
}): Promise<{
|
|
217
215
|
cancelledCount: number;
|
|
218
216
|
batchResult: {
|
|
@@ -225,12 +223,10 @@ declare function cancelDustOrders(bot: any, { buy: buyDust, sell: sellDust, fill
|
|
|
225
223
|
* @param {import('./dexbot_class').DEXBot} bot
|
|
226
224
|
* @param {string} [context='periodic'] - Context label for logging
|
|
227
225
|
* @param {Object} [options] - Maintenance options
|
|
228
|
-
* @param {boolean} [options.fillLockAlreadyHeld=false] - Skip fill lock acquisition if already held
|
|
229
226
|
* @param {boolean} [options.skipIdle=false] - Skip idle delay check
|
|
230
227
|
* @returns {Promise<void>}
|
|
231
228
|
*/
|
|
232
229
|
declare function runGridMaintenance(bot: any, context?: string, options?: {
|
|
233
|
-
fillLockAlreadyHeld?: boolean;
|
|
234
230
|
skipIdle?: boolean;
|
|
235
231
|
}): Promise<void>;
|
|
236
232
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dexbot_maintenance_runtime.d.ts","sourceRoot":"","sources":["../../modules/dexbot_maintenance_runtime.ts"],"names":[],"mappings":"AAyEA;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,GAAG,KAAA,WAG5B;AAED;;;;;;GAMG;AACH,iBAAS,+BAA+B,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,OAaxD;AAED;;;;;GAKG;AACH,iBAAS,+BAA+B,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,WAMxD;
|
|
1
|
+
{"version":3,"file":"dexbot_maintenance_runtime.d.ts","sourceRoot":"","sources":["../../modules/dexbot_maintenance_runtime.ts"],"names":[],"mappings":"AAyEA;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,GAAG,KAAA,WAG5B;AAED;;;;;;GAMG;AACH,iBAAS,+BAA+B,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,OAaxD;AAED;;;;;GAKG;AACH,iBAAS,+BAA+B,CAAC,QAAQ,KAAA,EAAE,MAAM,KAAA,WAMxD;AA6HD;;;GAGG;AACH,iBAAS,sBAAsB;;;;;;;;;;;;EAgC9B;AAuGD;;;GAGG;AACH,iBAAe,oBAAoB,kBAElC;AAED;;;;;;GAMG;AACH,iBAAe,sCAAsC,CAAC,GAAG,KAAA,EAAE,OAAO,SAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4I9E;AAED;;;;;;GAMG;AACH,iBAAS,gCAAgC,CAAC,GAAG,KAAA,EAAE,OAAO,SAAY;;;;;;;;;;EA+DjE;AAyHD;;;;;;;GAOG;AACH,iBAAS,0BAA0B,CAAC,MAAM,KAAA,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,OA0BnG;AAED;;;;;;GAMG;AACH,iBAAS,iBAAiB,CAAC,GAAG,KAAA,EAAE,OAAO,GAAE;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;CACnB,oBAqGL;AAED;;;;;GAKG;AACH,iBAAe,yBAAyB,CAAC,GAAG,KAAA,oBAkB3C;AAED;;;;;GAKG;AACH,iBAAe,yBAAyB,CAAC,GAAG,KAAA,iBAkD3C;AAED;;;;;GAKG;AACH,iBAAe,yBAAyB,CAAC,GAAG,KAAA,iBAM3C;AAED;;;;GAIG;AACH,iBAAS,2BAA2B,CAAC,GAAG,KAAA,WAKvC;AAED;;;;GAIG;AACH,iBAAS,uBAAuB,CAAC,GAAG,KAAA,QA0DnC;AAED;;;;GAIG;AACH,iBAAe,sBAAsB,CAAC,GAAG,KAAA,iBAKxC;AAED;;;;GAIG;AACH,iBAAS,4BAA4B,CAAC,GAAG,KAAA,QAsHxC;AAED;;;GAGG;AACH,iBAAS,2BAA2B,CAAC,GAAG,KAAA,QAMvC;AAED;;;;;;;GAOG;AACH,iBAAe,2BAA2B,CAAC,GAAG,KAAA,EAAE,KAAK,KAAA,EAAE,OAAO,SAAa,gBAiB1E;AAID;;;;;GAKG;AACH,iBAAS,wBAAwB,CAAC,OAAO,KAAA,EAAE,OAAO,KAAA,WAYjD;AAmGD;;;;;;;GAOG;AACH,iBAAe,uBAAuB,CAAC,GAAG,KAAA,EAAE,OAAO,KAAA,iBAoMlD;AA2CD;;;;;;;;;;GAUG;AACH,iBAAe,gBAAgB,CAAC,GAAG,KAAA,EAAE,EAAE,GAAG,EAAE,OAAY,EAAE,IAAI,EAAE,QAAa,EAAE;;;CAAK;;;;;GAyCnF;AAED;;;;;;;;GAQG;AACH,iBAAe,kBAAkB,CAC7B,GAAG,KAAA,EACH,OAAO,SAAa,EACpB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,iBAmCvC;AAID;;;;;;GAMG;AACH,iBAAe,yBAAyB,CAAC,GAAG,KAAA,iBAoD3C;AAED;;;;;;GAMG;AACH,iBAAe,UAAU,CAAC,GAAG,KAAA,EAAE,OAAO,KAAA,iBAmFrC;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,kBAyBE"}
|
|
@@ -8,7 +8,7 @@ const { BitShares, getNodeManager } = require('./bitshares_client');
|
|
|
8
8
|
const chainOrders = require('./chain_orders');
|
|
9
9
|
const { BroadcastUncertainError } = require('./dexbot_credential_client');
|
|
10
10
|
const { Config, hasOpenOrdersSyncLoopMsSet, getOpenOrdersSyncLoopMs } = require('./config');
|
|
11
|
-
const
|
|
11
|
+
const { isGridBloated, isGridBloatGraceActive, clearGridBloatFlag, loadGrid, recalculateGrid, monitorDivergence } = require('./order/grid');
|
|
12
12
|
const { ORDER_STATES, ORDER_TYPES, TIMING, BTS_PRECISION, NATIVE_CLIENT } = require('./constants');
|
|
13
13
|
const { PATHS } = require('./paths');
|
|
14
14
|
const { buildRuntimeScriptPath, isDistCodeRoot } = require('./launcher/runtime_entry');
|
|
@@ -21,7 +21,7 @@ const { parseJsonWithComments } = require('./order/utils/system');
|
|
|
21
21
|
const { cloneWeightDistribution, calculateOrderCreationFees, calculateSwapInAmount, floatToBlockchainInt, blockchainToFloat } = require('./order/utils/math');
|
|
22
22
|
const { updateDynamicGridSnapshotSync } = require('../market_adapter/utils/dynamic_grid_snapshot');
|
|
23
23
|
const { reconcileGridOrders } = require('./order/grid_reconcile');
|
|
24
|
-
const { formatUnmatchedChainOrder, getSideBudget, correctAllPriceMismatches } = require('./order/utils/order');
|
|
24
|
+
const { formatUnmatchedChainOrder, getSideBudget, correctAllPriceMismatches, isOrderOnChain } = require('./order/utils/order');
|
|
25
25
|
const { getStorage } = require('./storage');
|
|
26
26
|
const storage = getStorage();
|
|
27
27
|
const { ensureDir, safeUnlink } = require('./utils/fs_utils');
|
|
@@ -205,7 +205,6 @@ async function maybeRunTargetedDriftReconciliation(bot, context) {
|
|
|
205
205
|
privateKey: bot.privateKey,
|
|
206
206
|
chainOrders,
|
|
207
207
|
chainOpenOrders: openOrders,
|
|
208
|
-
fillLockAlreadyHeld: true,
|
|
209
208
|
});
|
|
210
209
|
await bot._executeBatchIfNeeded(reconcileResult, `targeted ${context} reconcile`);
|
|
211
210
|
}
|
|
@@ -738,7 +737,7 @@ function performGridResync(bot, options = {}) {
|
|
|
738
737
|
refreshDynamicWeightDistribution(self, 'grid resync');
|
|
739
738
|
}
|
|
740
739
|
const readFn = () => chainOrders.readOpenOrders(self.accountId);
|
|
741
|
-
await
|
|
740
|
+
await recalculateGrid(self.manager, {
|
|
742
741
|
readOpenOrdersFn: readFn,
|
|
743
742
|
chainOrders,
|
|
744
743
|
account: self.account,
|
|
@@ -763,7 +762,6 @@ function performGridResync(bot, options = {}) {
|
|
|
763
762
|
await cancelDustOrders(self, {
|
|
764
763
|
buy: resyncHealth.buyDustOrders,
|
|
765
764
|
sell: resyncHealth.sellDustOrders,
|
|
766
|
-
fillLockAlreadyHeld: true,
|
|
767
765
|
});
|
|
768
766
|
}
|
|
769
767
|
catch (_dustErr) {
|
|
@@ -869,10 +867,10 @@ async function setupTriggerFileDetection(bot) {
|
|
|
869
867
|
*/
|
|
870
868
|
async function performPeriodicGridChecks(bot) {
|
|
871
869
|
if (typeof bot._runGridMaintenance === 'function') {
|
|
872
|
-
await bot._runGridMaintenance('periodic'
|
|
870
|
+
await bot._runGridMaintenance('periodic');
|
|
873
871
|
}
|
|
874
872
|
else {
|
|
875
|
-
await runGridMaintenance(bot, 'periodic'
|
|
873
|
+
await runGridMaintenance(bot, 'periodic');
|
|
876
874
|
}
|
|
877
875
|
}
|
|
878
876
|
/**
|
|
@@ -914,7 +912,7 @@ function startOpenOrdersSyncLoop(bot) {
|
|
|
914
912
|
bot.manager._fillProcessingLock.getQueueLength() === 0) {
|
|
915
913
|
await bot.manager._fillProcessingLock.acquire(async () => {
|
|
916
914
|
const chainOpenOrders = await readOpenOrdersFn.call(chainOrders, bot.accountId);
|
|
917
|
-
const syncResult = await bot.manager.synchronizeWithChain(chainOpenOrders, 'readOpenOrders'
|
|
915
|
+
const syncResult = await bot.manager.synchronizeWithChain(chainOpenOrders, 'readOpenOrders');
|
|
918
916
|
if (syncResult?.filledOrders && syncResult.filledOrders.length > 0) {
|
|
919
917
|
bot._log(`Open-orders sync loop: ${syncResult.filledOrders.length} grid order(s) found filled on-chain. Triggering rebalance.`, 'info');
|
|
920
918
|
bot._markGridActivity?.('open-orders sync fill');
|
|
@@ -1031,7 +1029,7 @@ function setupBlockchainFetchInterval(bot) {
|
|
|
1031
1029
|
if (!bot.config.dryRun) {
|
|
1032
1030
|
try {
|
|
1033
1031
|
chainOpenOrders = await chainOrders.readOpenOrders(bot.accountId);
|
|
1034
|
-
const syncResult = await bot.manager.synchronizeWithChain(chainOpenOrders, 'periodicBlockchainFetch'
|
|
1032
|
+
const syncResult = await bot.manager.synchronizeWithChain(chainOpenOrders, 'periodicBlockchainFetch');
|
|
1035
1033
|
if (syncResult.filledOrders && syncResult.filledOrders.length > 0) {
|
|
1036
1034
|
bot._log(`Periodic sync: ${syncResult.filledOrders.length} grid order(s) found filled on-chain. Triggering rebalance.`, 'info');
|
|
1037
1035
|
bot._markGridActivity?.('periodic sync fill rebalance');
|
|
@@ -1158,14 +1156,8 @@ function scheduleMaintenanceAfterIdle(ctx, context, options = {}) {
|
|
|
1158
1156
|
const delayMs = getMaintenanceIdleDelayMs(ctx);
|
|
1159
1157
|
if (!(delayMs > 0))
|
|
1160
1158
|
return;
|
|
1161
|
-
// The caller will have returned (and released _fillProcessingLock, if it
|
|
1162
|
-
// was held) by the time this deferred callback fires, so the deferred
|
|
1163
|
-
// run must always acquire the lock itself. Override any caller-supplied
|
|
1164
|
-
// fillLockAlreadyHeld=true so the deferred path can't deadlock against
|
|
1165
|
-
// a lock the caller no longer owns.
|
|
1166
1159
|
const timerOptions = {
|
|
1167
1160
|
...(options || {}),
|
|
1168
|
-
fillLockAlreadyHeld: false,
|
|
1169
1161
|
};
|
|
1170
1162
|
ctx._maintenanceIdleTimer = setTimeout(() => {
|
|
1171
1163
|
ctx._maintenanceIdleTimer = null;
|
|
@@ -1254,6 +1246,61 @@ async function executeMaintenanceLogic(bot, context) {
|
|
|
1254
1246
|
bot._log(`[MAINT-COOLDOWN] Skipping ${context} maintenance after hard-abort recovery sync (remaining=${bot._maintenanceCooldownCycles})`, 'warn');
|
|
1255
1247
|
return;
|
|
1256
1248
|
}
|
|
1249
|
+
// Grid bloat re-check: if a previous loadGrid detected bloat and set
|
|
1250
|
+
// _gridBloatDetectedAt, verify the grid is still oversized after a grace
|
|
1251
|
+
// period. If it hasn't resolved and no structural resync is in flight,
|
|
1252
|
+
// trigger one. This catches bloat that occurred during startup (before
|
|
1253
|
+
// requestStructuralGridResync was wired) or bloat that survived a prior
|
|
1254
|
+
// resync attempt.
|
|
1255
|
+
if (bot.manager._gridBloatDetectedAt && typeof bot.manager.requestStructuralGridResync === 'function') {
|
|
1256
|
+
const grace = isGridBloatGraceActive(bot.manager);
|
|
1257
|
+
if (!grace.active) {
|
|
1258
|
+
const bloatResult = isGridBloated(bot.manager, bot.manager.orders);
|
|
1259
|
+
if (bloatResult.bloated) {
|
|
1260
|
+
const d = bloatResult.details;
|
|
1261
|
+
bot._log(`[GRID-BLOAT] Grid size ${d.gridSize} still exceeds expected maximum ${d.maxAllowed} ` +
|
|
1262
|
+
`after grace period (${grace.graceMs}ms). Triggering structural resync.`, 'warn');
|
|
1263
|
+
bot.manager.requestStructuralGridResync('grid-bloat-persistent', { reason: `Grid size ${d.gridSize} still exceeds max ${d.maxAllowed} after grace` }).catch((err) => {
|
|
1264
|
+
bot.manager?.logger?.log?.(`[GRID-BLOAT] Structural resync request failed: ${err.message}`, 'error');
|
|
1265
|
+
});
|
|
1266
|
+
}
|
|
1267
|
+
else {
|
|
1268
|
+
clearGridBloatFlag(bot.manager);
|
|
1269
|
+
bot._log('[GRID-BLOAT] Grid size returned to normal. Clearing bloat flag.', 'info');
|
|
1270
|
+
}
|
|
1271
|
+
}
|
|
1272
|
+
}
|
|
1273
|
+
// Gap 4: Periodic lightweight consistency check. Fetches open order count
|
|
1274
|
+
// from chain and compares to grid active order count. Triggers a targeted
|
|
1275
|
+
// sync when significant divergence is detected. Runs at most once per
|
|
1276
|
+
// LIGHTWEIGHT_SYNC_CHECK_INTERVAL_MS to limit blockchain query load.
|
|
1277
|
+
// Skip if the COW pipeline has active CREATEs in flight to avoid racing
|
|
1278
|
+
// with batch broadcasts — transient mismatches are expected during a COW cycle.
|
|
1279
|
+
if (!bot._batchInFlight &&
|
|
1280
|
+
!(bot.manager?._pendingBroadcasts?.size > 0) &&
|
|
1281
|
+
(bot._lightweightSyncCheckAt == null || Date.now() - bot._lightweightSyncCheckAt >= TIMING.LIGHTWEIGHT_SYNC_CHECK_INTERVAL_MS)) {
|
|
1282
|
+
bot._lightweightSyncCheckAt = Date.now();
|
|
1283
|
+
try {
|
|
1284
|
+
const chainOpenOrdersResult = await chainOrders.readOpenOrders(bot.accountId);
|
|
1285
|
+
const chainOrdersCount = chainOpenOrdersResult.length;
|
|
1286
|
+
const gridActive = Array.from(bot.manager.orders.values()).filter((o) => isOrderOnChain(o)).length;
|
|
1287
|
+
const diff = Math.abs(chainOrdersCount - gridActive);
|
|
1288
|
+
if (diff > 2) {
|
|
1289
|
+
bot._log(`[LIGHTWEIGHT-SYNC] Order count mismatch: chain=${chainOrdersCount}, grid=${gridActive} ` +
|
|
1290
|
+
`(diff=${diff}). Triggering targeted sync to reconcile.`, 'warn');
|
|
1291
|
+
if (bot.manager?.synchronizeWithChain) {
|
|
1292
|
+
await bot.manager.synchronizeWithChain(chainOpenOrdersResult, 'readOpenOrders');
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
else if (diff > 0) {
|
|
1296
|
+
bot._log(`[LIGHTWEIGHT-SYNC] Order count mismatch: chain=${chainOrdersCount}, grid=${gridActive} ` +
|
|
1297
|
+
`(diff=${diff}). Minor divergence — expected during normal operation.`, 'debug');
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
catch (e) {
|
|
1301
|
+
bot._log(`[LIGHTWEIGHT-SYNC] Check failed: ${e.message}`, 'debug');
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1257
1304
|
// Process any price corrections queued by prior sync operations before
|
|
1258
1305
|
// the pipeline gate. Pending corrections block isPipelineEmpty, and no
|
|
1259
1306
|
// other code path clears them outside of _consumeFillQueue (which only
|
|
@@ -1284,7 +1331,6 @@ async function executeMaintenanceLogic(bot, context) {
|
|
|
1284
1331
|
const dustCancelResult = await cancelDustOrders(bot, {
|
|
1285
1332
|
buy: healthResult.buyDustOrders,
|
|
1286
1333
|
sell: healthResult.sellDustOrders,
|
|
1287
|
-
fillLockAlreadyHeld: true,
|
|
1288
1334
|
});
|
|
1289
1335
|
if (dustCancelResult?.batchResult?.aborted) {
|
|
1290
1336
|
return;
|
|
@@ -1292,7 +1338,7 @@ async function executeMaintenanceLogic(bot, context) {
|
|
|
1292
1338
|
try {
|
|
1293
1339
|
const persistedGridData = bot.accountOrders.loadGrid(true) || [];
|
|
1294
1340
|
const calculatedGrid = Array.from(bot.manager.orders.values());
|
|
1295
|
-
const divergence = await
|
|
1341
|
+
const divergence = await monitorDivergence(bot.manager, calculatedGrid, persistedGridData);
|
|
1296
1342
|
if (divergence.needsUpdate) {
|
|
1297
1343
|
const hasRmsDivergence = !!(divergence.buy.rms || divergence.sell.rms);
|
|
1298
1344
|
if (divergence.buy.ratio || divergence.sell.ratio) {
|
|
@@ -1359,9 +1405,17 @@ async function executeMaintenanceLogic(bot, context) {
|
|
|
1359
1405
|
*/
|
|
1360
1406
|
async function cancelOrderWithNodeFallback(bot, order) {
|
|
1361
1407
|
try {
|
|
1362
|
-
const
|
|
1408
|
+
const nodeManager = getNodeManager();
|
|
1409
|
+
const nodes = nodeManager.getHealthyNodes();
|
|
1363
1410
|
const fallbackNodes = nodes.length > 1 ? nodes.slice(1) : undefined;
|
|
1364
|
-
return await chainOrders.cancelOrder(bot.account, bot.privateKey, order.orderId, fallbackNodes
|
|
1411
|
+
return await chainOrders.cancelOrder(bot.account, bot.privateKey, order.orderId, fallbackNodes
|
|
1412
|
+
? {
|
|
1413
|
+
fallbackNodes,
|
|
1414
|
+
onNodeFailed: (nodeUrl) => {
|
|
1415
|
+
nodeManager.reportNodeFailure(nodeUrl, 'BROADCAST_DEADLINE', 'broadcast');
|
|
1416
|
+
},
|
|
1417
|
+
}
|
|
1418
|
+
: {});
|
|
1365
1419
|
}
|
|
1366
1420
|
catch (err) {
|
|
1367
1421
|
if (err instanceof BroadcastUncertainError) {
|
|
@@ -1379,10 +1433,9 @@ async function cancelOrderWithNodeFallback(bot, order) {
|
|
|
1379
1433
|
* @param {Object} [options] - Dust cancellation options
|
|
1380
1434
|
* @param {import('./types').Order[]} [options.buy=[]] - Buy-side dust orders
|
|
1381
1435
|
* @param {import('./types').Order[]} [options.sell=[]] - Sell-side dust orders
|
|
1382
|
-
* @param {boolean} [options.fillLockAlreadyHeld=false] - Skip fill-processing lock re-entry (caller already holds it)
|
|
1383
1436
|
* @returns {Promise<{cancelledCount: number, batchResult: {aborted: boolean}|null}>}
|
|
1384
1437
|
*/
|
|
1385
|
-
async function cancelDustOrders(bot, { buy: buyDust = [], sell: sellDust = []
|
|
1438
|
+
async function cancelDustOrders(bot, { buy: buyDust = [], sell: sellDust = [] } = {}) {
|
|
1386
1439
|
const allDust = [...buyDust, ...sellDust];
|
|
1387
1440
|
if (allDust.length === 0)
|
|
1388
1441
|
return { cancelledCount: 0, batchResult: null };
|
|
@@ -1396,10 +1449,10 @@ async function cancelDustOrders(bot, { buy: buyDust = [], sell: sellDust = [], f
|
|
|
1396
1449
|
if (cancelResult?.verifiedAfterFailure) {
|
|
1397
1450
|
const accountRef = bot.accountId || bot.account;
|
|
1398
1451
|
const chainOpenOrders = await chainOrders.readOpenOrders(accountRef);
|
|
1399
|
-
await bot.manager.synchronizeWithChain(chainOpenOrders, 'readOpenOrders'
|
|
1452
|
+
await bot.manager.synchronizeWithChain(chainOpenOrders, 'readOpenOrders');
|
|
1400
1453
|
}
|
|
1401
1454
|
else {
|
|
1402
|
-
await bot.manager.synchronizeWithChain({ orderId: order.orderId, clearSize: true }, 'cancelOrder'
|
|
1455
|
+
await bot.manager.synchronizeWithChain({ orderId: order.orderId, clearSize: true }, 'cancelOrder');
|
|
1403
1456
|
}
|
|
1404
1457
|
}
|
|
1405
1458
|
catch (refetchErr) {
|
|
@@ -1433,15 +1486,10 @@ async function cancelDustOrders(bot, { buy: buyDust = [], sell: sellDust = [], f
|
|
|
1433
1486
|
* @param {import('./dexbot_class').DEXBot} bot
|
|
1434
1487
|
* @param {string} [context='periodic'] - Context label for logging
|
|
1435
1488
|
* @param {Object} [options] - Maintenance options
|
|
1436
|
-
* @param {boolean} [options.fillLockAlreadyHeld=false] - Skip fill lock acquisition if already held
|
|
1437
1489
|
* @param {boolean} [options.skipIdle=false] - Skip idle delay check
|
|
1438
1490
|
* @returns {Promise<void>}
|
|
1439
1491
|
*/
|
|
1440
1492
|
async function runGridMaintenance(bot, context = 'periodic', options = {}) {
|
|
1441
|
-
if (options === null || typeof options !== 'object' || Array.isArray(options)) {
|
|
1442
|
-
throw new TypeError('Grid maintenance options must be an object');
|
|
1443
|
-
}
|
|
1444
|
-
const fillLockAlreadyHeld = options.fillLockAlreadyHeld === true;
|
|
1445
1493
|
const skipIdle = options.skipIdle === true;
|
|
1446
1494
|
if (!skipIdle) {
|
|
1447
1495
|
const idleDelayMs = getMaintenanceIdleDelayMs(bot);
|
|
@@ -1455,13 +1503,6 @@ async function runGridMaintenance(bot, context = 'periodic', options = {}) {
|
|
|
1455
1503
|
try {
|
|
1456
1504
|
if (!bot.manager)
|
|
1457
1505
|
return;
|
|
1458
|
-
// Lock-ordering contract:
|
|
1459
|
-
// - When fillLockAlreadyHeld=false this function acquires
|
|
1460
|
-
// _fillProcessingLock first, then _divergenceLock (canonical order).
|
|
1461
|
-
// - When fillLockAlreadyHeld=true the caller must already hold
|
|
1462
|
-
// _fillProcessingLock; only _divergenceLock is acquired here.
|
|
1463
|
-
// AsyncLock is NOT reentrant — acquiring in the reverse order anywhere
|
|
1464
|
-
// else in the bot would deadlock against the path above.
|
|
1465
1506
|
const runWithDivergenceLock = async () => {
|
|
1466
1507
|
// Re-check orders size under the divergence lock to avoid a TOCTOU
|
|
1467
1508
|
// race with concurrent order mutations. The previous placement
|
|
@@ -1471,14 +1512,9 @@ async function runGridMaintenance(bot, context = 'periodic', options = {}) {
|
|
|
1471
1512
|
return;
|
|
1472
1513
|
await executeMaintenanceLogic(bot, context);
|
|
1473
1514
|
};
|
|
1474
|
-
|
|
1515
|
+
await bot.manager._fillProcessingLock.acquire(async () => {
|
|
1475
1516
|
await bot.manager._divergenceLock.acquire(runWithDivergenceLock);
|
|
1476
|
-
}
|
|
1477
|
-
else {
|
|
1478
|
-
await bot.manager._fillProcessingLock.acquire(async () => {
|
|
1479
|
-
await bot.manager._divergenceLock.acquire(runWithDivergenceLock);
|
|
1480
|
-
});
|
|
1481
|
-
}
|
|
1517
|
+
});
|
|
1482
1518
|
}
|
|
1483
1519
|
catch (err) {
|
|
1484
1520
|
bot._warn(`Error during ${context} grid maintenance: ${err.message}`);
|