@antseed/node 0.2.155 → 0.2.157
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/dist/discovery/announcer.d.ts +13 -1
- package/dist/discovery/announcer.d.ts.map +1 -1
- package/dist/discovery/announcer.js +64 -9
- package/dist/discovery/announcer.js.map +1 -1
- package/dist/discovery/http-metadata-resolver.d.ts +1 -1
- package/dist/discovery/http-metadata-resolver.d.ts.map +1 -1
- package/dist/discovery/http-metadata-resolver.js +7 -1
- package/dist/discovery/http-metadata-resolver.js.map +1 -1
- package/dist/discovery/index.d.ts +3 -2
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +2 -1
- package/dist/discovery/index.js.map +1 -1
- package/dist/discovery/metadata/define-version.d.ts +40 -0
- package/dist/discovery/metadata/define-version.d.ts.map +1 -0
- package/dist/discovery/metadata/define-version.js +104 -0
- package/dist/discovery/metadata/define-version.js.map +1 -0
- package/dist/discovery/metadata/field.d.ts +26 -0
- package/dist/discovery/metadata/field.d.ts.map +1 -0
- package/dist/discovery/metadata/field.js +2 -0
- package/dist/discovery/metadata/field.js.map +1 -0
- package/dist/discovery/metadata/fields/offerings.d.ts +7 -0
- package/dist/discovery/metadata/fields/offerings.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/offerings.js +52 -0
- package/dist/discovery/metadata/fields/offerings.js.map +1 -0
- package/dist/discovery/metadata/fields/on-chain-stats.d.ts +6 -0
- package/dist/discovery/metadata/fields/on-chain-stats.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/on-chain-stats.js +30 -0
- package/dist/discovery/metadata/fields/on-chain-stats.js.map +1 -0
- package/dist/discovery/metadata/fields/peer-capabilities.d.ts +4 -0
- package/dist/discovery/metadata/fields/peer-capabilities.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/peer-capabilities.js +21 -0
- package/dist/discovery/metadata/fields/peer-capabilities.js.map +1 -0
- package/dist/discovery/metadata/fields/peer-profile.d.ts +11 -0
- package/dist/discovery/metadata/fields/peer-profile.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/peer-profile.js +58 -0
- package/dist/discovery/metadata/fields/peer-profile.js.map +1 -0
- package/dist/discovery/metadata/fields/provider-basics.d.ts +12 -0
- package/dist/discovery/metadata/fields/provider-basics.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/provider-basics.js +87 -0
- package/dist/discovery/metadata/fields/provider-basics.js.map +1 -0
- package/dist/discovery/metadata/fields/service-api-protocols.d.ts +4 -0
- package/dist/discovery/metadata/fields/service-api-protocols.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/service-api-protocols.js +40 -0
- package/dist/discovery/metadata/fields/service-api-protocols.js.map +1 -0
- package/dist/discovery/metadata/fields/service-capabilities.d.ts +7 -0
- package/dist/discovery/metadata/fields/service-capabilities.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/service-capabilities.js +229 -0
- package/dist/discovery/metadata/fields/service-capabilities.js.map +1 -0
- package/dist/discovery/metadata/fields/service-categories.d.ts +4 -0
- package/dist/discovery/metadata/fields/service-categories.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/service-categories.js +37 -0
- package/dist/discovery/metadata/fields/service-categories.js.map +1 -0
- package/dist/discovery/metadata/fields/service-health.d.ts +7 -0
- package/dist/discovery/metadata/fields/service-health.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/service-health.js +90 -0
- package/dist/discovery/metadata/fields/service-health.js.map +1 -0
- package/dist/discovery/metadata/fields/service-unit-billing.d.ts +8 -0
- package/dist/discovery/metadata/fields/service-unit-billing.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/service-unit-billing.js +81 -0
- package/dist/discovery/metadata/fields/service-unit-billing.js.map +1 -0
- package/dist/discovery/metadata/fields/verifications.d.ts +7 -0
- package/dist/discovery/metadata/fields/verifications.d.ts.map +1 -0
- package/dist/discovery/metadata/fields/verifications.js +96 -0
- package/dist/discovery/metadata/fields/verifications.js.map +1 -0
- package/dist/discovery/metadata/index.d.ts +27 -0
- package/dist/discovery/metadata/index.d.ts.map +1 -0
- package/dist/discovery/metadata/index.js +55 -0
- package/dist/discovery/metadata/index.js.map +1 -0
- package/dist/discovery/metadata/versions/v10.d.ts +5 -0
- package/dist/discovery/metadata/versions/v10.d.ts.map +1 -0
- package/dist/discovery/metadata/versions/v10.js +32 -0
- package/dist/discovery/metadata/versions/v10.js.map +1 -0
- package/dist/discovery/metadata/versions/v11.d.ts +5 -0
- package/dist/discovery/metadata/versions/v11.d.ts.map +1 -0
- package/dist/discovery/metadata/versions/v11.js +11 -0
- package/dist/discovery/metadata/versions/v11.js.map +1 -0
- package/dist/discovery/metadata/versions/v12.d.ts +5 -0
- package/dist/discovery/metadata/versions/v12.d.ts.map +1 -0
- package/dist/discovery/metadata/versions/v12.js +66 -0
- package/dist/discovery/metadata/versions/v12.js.map +1 -0
- package/dist/discovery/metadata/versions/v13.d.ts +5 -0
- package/dist/discovery/metadata/versions/v13.d.ts.map +1 -0
- package/dist/discovery/metadata/versions/v13.js +16 -0
- package/dist/discovery/metadata/versions/v13.js.map +1 -0
- package/dist/discovery/metadata/wire.d.ts +54 -0
- package/dist/discovery/metadata/wire.d.ts.map +1 -0
- package/dist/discovery/metadata/wire.js +149 -0
- package/dist/discovery/metadata/wire.js.map +1 -0
- package/dist/discovery/metadata-codec.d.ts +1 -38
- package/dist/discovery/metadata-codec.d.ts.map +1 -1
- package/dist/discovery/metadata-codec.js +3 -1154
- package/dist/discovery/metadata-codec.js.map +1 -1
- package/dist/discovery/metadata-server.d.ts +3 -2
- package/dist/discovery/metadata-server.d.ts.map +1 -1
- package/dist/discovery/metadata-server.js +4 -1
- package/dist/discovery/metadata-server.js.map +1 -1
- package/dist/discovery/metadata-validator.d.ts.map +1 -1
- package/dist/discovery/metadata-validator.js +62 -1
- package/dist/discovery/metadata-validator.js.map +1 -1
- package/dist/discovery/service-catalog.d.ts +13 -2
- package/dist/discovery/service-catalog.d.ts.map +1 -1
- package/dist/discovery/service-catalog.js +6 -1
- package/dist/discovery/service-catalog.js.map +1 -1
- package/dist/health/gas-auto-refuel.d.ts +138 -0
- package/dist/health/gas-auto-refuel.d.ts.map +1 -0
- package/dist/health/gas-auto-refuel.js +216 -0
- package/dist/health/gas-auto-refuel.js.map +1 -0
- package/dist/health/gas-health-monitor.d.ts +4 -0
- package/dist/health/gas-health-monitor.d.ts.map +1 -1
- package/dist/health/gas-health-monitor.js +13 -0
- package/dist/health/gas-health-monitor.js.map +1 -1
- package/dist/health/model-health-checker.d.ts +58 -33
- package/dist/health/model-health-checker.d.ts.map +1 -1
- package/dist/health/model-health-checker.js +250 -121
- package/dist/health/model-health-checker.js.map +1 -1
- package/dist/health/self-health-error.d.ts +20 -0
- package/dist/health/self-health-error.d.ts.map +1 -0
- package/dist/health/self-health-error.js +60 -0
- package/dist/health/self-health-error.js.map +1 -0
- package/dist/health/seller-events.d.ts +1 -1
- package/dist/health/seller-events.d.ts.map +1 -1
- package/dist/health/seller-events.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/seller-provider.d.ts +11 -5
- package/dist/interfaces/seller-provider.d.ts.map +1 -1
- package/dist/node.d.ts +8 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +36 -89
- package/dist/node.js.map +1 -1
- package/dist/p2p/connection-manager.d.ts +5 -1
- package/dist/p2p/connection-manager.d.ts.map +1 -1
- package/dist/p2p/connection-manager.js +48 -13
- package/dist/p2p/connection-manager.js.map +1 -1
- package/dist/payments/chain-config.d.ts +11 -0
- package/dist/payments/chain-config.d.ts.map +1 -1
- package/dist/payments/chain-config.js +7 -0
- package/dist/payments/chain-config.js.map +1 -1
- package/dist/payments/evm/usdc-eth-swap-client.d.ts +45 -0
- package/dist/payments/evm/usdc-eth-swap-client.d.ts.map +1 -0
- package/dist/payments/evm/usdc-eth-swap-client.js +83 -0
- package/dist/payments/evm/usdc-eth-swap-client.js.map +1 -0
- package/dist/payments/index.d.ts +2 -0
- package/dist/payments/index.d.ts.map +1 -1
- package/dist/payments/index.js +2 -0
- package/dist/payments/index.js.map +1 -1
- package/dist/seller-request-handler.d.ts +9 -0
- package/dist/seller-request-handler.d.ts.map +1 -1
- package/dist/seller-request-handler.js +78 -12
- package/dist/seller-request-handler.js.map +1 -1
- package/dist/types/peer.d.ts +4 -2
- package/dist/types/peer.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/** Refuel once the wallet holds less than this (10× the default pause minimum). */
|
|
2
|
+
export declare const DEFAULT_REFUEL_TRIGGER_WEI = 500000000000000n;
|
|
3
|
+
/** USDC swapped per refuel (10 USDC, base units). */
|
|
4
|
+
export declare const DEFAULT_REFUEL_SWAP_USDC_UNITS = 10000000n;
|
|
5
|
+
/** Most USDC swapped in any 24 hours (30 USDC, base units), so a gas leak cannot drain earnings. */
|
|
6
|
+
export declare const DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS = 30000000n;
|
|
7
|
+
export declare const DEFAULT_REFUEL_SLIPPAGE_BPS = 100;
|
|
8
|
+
/** Smallest swap worth making (1 USDC); below this the refuel is skipped. */
|
|
9
|
+
export declare const MIN_REFUEL_SWAP_USDC_UNITS = 1000000n;
|
|
10
|
+
/** Wait after a refuel before another, so a balance read that lags the swap does not trigger a second one. */
|
|
11
|
+
export declare const REFUEL_SUCCESS_COOLDOWN_MS: number;
|
|
12
|
+
/** First retry delay after a failed refuel; doubles per failure up to the max. */
|
|
13
|
+
export declare const REFUEL_FAILURE_BACKOFF_MS: number;
|
|
14
|
+
export declare const REFUEL_MAX_BACKOFF_MS: number;
|
|
15
|
+
/** A refuel, kept for the daily cap (and persisted by the caller across restarts). */
|
|
16
|
+
export interface GasRefuelRecord {
|
|
17
|
+
at: number;
|
|
18
|
+
usdcUnits: string;
|
|
19
|
+
/** Empty while `pending`. */
|
|
20
|
+
txHash: string;
|
|
21
|
+
/**
|
|
22
|
+
* Saved before the swap is sent and replaced once it is mined (or dropped if it
|
|
23
|
+
* fails). One left behind by a process that exited mid-swap still counts toward
|
|
24
|
+
* the daily cap, since the swap may have gone through.
|
|
25
|
+
*/
|
|
26
|
+
pending?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export type GasRefuelSkipReason = 'daily_cap' | 'insufficient_usdc' | 'insufficient_eth';
|
|
29
|
+
export type GasRefuelEvent = {
|
|
30
|
+
status: 'refueled';
|
|
31
|
+
address: string;
|
|
32
|
+
record: GasRefuelRecord;
|
|
33
|
+
expectedEthWei: bigint;
|
|
34
|
+
balanceWei: bigint;
|
|
35
|
+
} | {
|
|
36
|
+
status: 'failed';
|
|
37
|
+
address: string;
|
|
38
|
+
error: string;
|
|
39
|
+
balanceWei: bigint;
|
|
40
|
+
retryAt: number;
|
|
41
|
+
} | {
|
|
42
|
+
status: 'skipped';
|
|
43
|
+
address: string;
|
|
44
|
+
reason: GasRefuelSkipReason;
|
|
45
|
+
balanceWei: bigint;
|
|
46
|
+
detail: string;
|
|
47
|
+
};
|
|
48
|
+
export interface GasRefuelSnapshot {
|
|
49
|
+
address: string;
|
|
50
|
+
triggerBalanceWei: bigint;
|
|
51
|
+
swapUsdcUnits: bigint;
|
|
52
|
+
maxUsdcPerDayUnits: bigint;
|
|
53
|
+
usdcLast24hUnits: bigint;
|
|
54
|
+
inFlight: boolean;
|
|
55
|
+
lastRefuel: GasRefuelRecord | null;
|
|
56
|
+
lastError: string | null;
|
|
57
|
+
/** Why the last refuel attempt was skipped, until one goes through. */
|
|
58
|
+
skipped: GasRefuelSkipReason | null;
|
|
59
|
+
nextAttemptAt: number | null;
|
|
60
|
+
}
|
|
61
|
+
/** The chain operations a refuel needs (implemented by `UsdcEthSwapClient`). */
|
|
62
|
+
export interface GasRefuelSwapper {
|
|
63
|
+
quote(amountIn: bigint): Promise<bigint>;
|
|
64
|
+
usdcBalance(address: string): Promise<bigint>;
|
|
65
|
+
maxSwapCostWei(): Promise<bigint>;
|
|
66
|
+
swap(amountIn: bigint, minEthOut: bigint): Promise<string>;
|
|
67
|
+
}
|
|
68
|
+
export interface GasAutoRefuelConfig {
|
|
69
|
+
/** Seller wallet: pays the swap's gas and receives the ETH. */
|
|
70
|
+
address: string;
|
|
71
|
+
swapper: GasRefuelSwapper;
|
|
72
|
+
triggerBalanceWei?: bigint;
|
|
73
|
+
swapUsdcUnits?: bigint;
|
|
74
|
+
maxUsdcPerDayUnits?: bigint;
|
|
75
|
+
slippageBps?: number;
|
|
76
|
+
/** Earlier refuels (e.g. loaded from disk) so the daily cap survives restarts. */
|
|
77
|
+
history?: GasRefuelRecord[];
|
|
78
|
+
/**
|
|
79
|
+
* Persist the last 24 hours of refuels: before each swap is sent (with it as
|
|
80
|
+
* `pending`) and after it settles, even after `stop()`, so the daily cap still
|
|
81
|
+
* counts it after a restart.
|
|
82
|
+
*/
|
|
83
|
+
saveHistory?: (records: GasRefuelRecord[]) => Promise<void>;
|
|
84
|
+
onEvent?: (event: GasRefuelEvent) => void | Promise<void>;
|
|
85
|
+
now?: () => number;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Tops the seller wallet up with ETH before it runs out: when a balance
|
|
89
|
+
* reading is under the trigger, swap some of the wallet's own USDC (its
|
|
90
|
+
* earnings) for ETH, paying gas from the ETH still there. Swaps are capped per
|
|
91
|
+
* day, spaced by a cooldown, and backed off after failures. Feed it every
|
|
92
|
+
* balance reading via `onBalance` (e.g. from `GasHealthMonitor`).
|
|
93
|
+
*/
|
|
94
|
+
export declare class GasAutoRefueler {
|
|
95
|
+
private readonly _address;
|
|
96
|
+
private readonly _swapper;
|
|
97
|
+
private readonly _triggerBalanceWei;
|
|
98
|
+
private readonly _swapUsdcUnits;
|
|
99
|
+
private readonly _maxUsdcPerDayUnits;
|
|
100
|
+
private readonly _slippageBps;
|
|
101
|
+
private readonly _onEvent;
|
|
102
|
+
private readonly _saveHistory;
|
|
103
|
+
private readonly _now;
|
|
104
|
+
private _history;
|
|
105
|
+
private _inFlight;
|
|
106
|
+
private _nextAttemptAt;
|
|
107
|
+
private _failures;
|
|
108
|
+
private _lastError;
|
|
109
|
+
private _skipped;
|
|
110
|
+
private _stopped;
|
|
111
|
+
constructor(config: GasAutoRefuelConfig);
|
|
112
|
+
/**
|
|
113
|
+
* No more refuels after this. One already running finishes and its history is
|
|
114
|
+
* still saved, but it reports nothing; the returned promise settles when it is done.
|
|
115
|
+
*/
|
|
116
|
+
stop(): Promise<void>;
|
|
117
|
+
/** Every refuel in the last 24 hours (what the daily cap counts). */
|
|
118
|
+
get recentHistory(): GasRefuelRecord[];
|
|
119
|
+
getSnapshot(): GasRefuelSnapshot;
|
|
120
|
+
/**
|
|
121
|
+
* A fresh balance reading. Starts a refuel when it is under the trigger and
|
|
122
|
+
* none is running or cooling down. Resolves when that refuel is done.
|
|
123
|
+
*/
|
|
124
|
+
onBalance(balanceWei: bigint): Promise<void>;
|
|
125
|
+
private _refuel;
|
|
126
|
+
/** Save the history; a failure is logged, or thrown when `required` (the reservation before a swap). */
|
|
127
|
+
private _persist;
|
|
128
|
+
/** Report a skip once per reason, not on every reading while it lasts. */
|
|
129
|
+
private _skip;
|
|
130
|
+
private _emit;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Whether a swap error proves no USDC left the wallet: it reverted (in gas
|
|
134
|
+
* estimation or on-chain), the node refused to broadcast it, or another tx took
|
|
135
|
+
* its nonce. A timeout or lost RPC response proves nothing.
|
|
136
|
+
*/
|
|
137
|
+
export declare function swapCertainlyNotSpent(err: unknown): boolean;
|
|
138
|
+
//# sourceMappingURL=gas-auto-refuel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gas-auto-refuel.d.ts","sourceRoot":"","sources":["../../src/health/gas-auto-refuel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
import { formatEther, formatUnits } from 'ethers';
|
|
2
|
+
import { debugLog, debugWarn } from '../utils/debug.js';
|
|
3
|
+
/** Refuel once the wallet holds less than this (10× the default pause minimum). */
|
|
4
|
+
export const DEFAULT_REFUEL_TRIGGER_WEI = 500000000000000n;
|
|
5
|
+
/** USDC swapped per refuel (10 USDC, base units). */
|
|
6
|
+
export const DEFAULT_REFUEL_SWAP_USDC_UNITS = 10000000n;
|
|
7
|
+
/** Most USDC swapped in any 24 hours (30 USDC, base units), so a gas leak cannot drain earnings. */
|
|
8
|
+
export const DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS = 30000000n;
|
|
9
|
+
export const DEFAULT_REFUEL_SLIPPAGE_BPS = 100;
|
|
10
|
+
/** Smallest swap worth making (1 USDC); below this the refuel is skipped. */
|
|
11
|
+
export const MIN_REFUEL_SWAP_USDC_UNITS = 1000000n;
|
|
12
|
+
/** Wait after a refuel before another, so a balance read that lags the swap does not trigger a second one. */
|
|
13
|
+
export const REFUEL_SUCCESS_COOLDOWN_MS = 10 * 60_000;
|
|
14
|
+
/** First retry delay after a failed refuel; doubles per failure up to the max. */
|
|
15
|
+
export const REFUEL_FAILURE_BACKOFF_MS = 5 * 60_000;
|
|
16
|
+
export const REFUEL_MAX_BACKOFF_MS = 6 * 60 * 60_000;
|
|
17
|
+
const DAY_MS = 24 * 60 * 60_000;
|
|
18
|
+
/**
|
|
19
|
+
* Tops the seller wallet up with ETH before it runs out: when a balance
|
|
20
|
+
* reading is under the trigger, swap some of the wallet's own USDC (its
|
|
21
|
+
* earnings) for ETH, paying gas from the ETH still there. Swaps are capped per
|
|
22
|
+
* day, spaced by a cooldown, and backed off after failures. Feed it every
|
|
23
|
+
* balance reading via `onBalance` (e.g. from `GasHealthMonitor`).
|
|
24
|
+
*/
|
|
25
|
+
export class GasAutoRefueler {
|
|
26
|
+
_address;
|
|
27
|
+
_swapper;
|
|
28
|
+
_triggerBalanceWei;
|
|
29
|
+
_swapUsdcUnits;
|
|
30
|
+
_maxUsdcPerDayUnits;
|
|
31
|
+
_slippageBps;
|
|
32
|
+
_onEvent;
|
|
33
|
+
_saveHistory;
|
|
34
|
+
_now;
|
|
35
|
+
_history;
|
|
36
|
+
_inFlight = null;
|
|
37
|
+
_nextAttemptAt = 0;
|
|
38
|
+
_failures = 0;
|
|
39
|
+
_lastError = null;
|
|
40
|
+
_skipped = null;
|
|
41
|
+
_stopped = false;
|
|
42
|
+
constructor(config) {
|
|
43
|
+
this._address = config.address;
|
|
44
|
+
this._swapper = config.swapper;
|
|
45
|
+
this._triggerBalanceWei = config.triggerBalanceWei ?? DEFAULT_REFUEL_TRIGGER_WEI;
|
|
46
|
+
this._swapUsdcUnits = config.swapUsdcUnits ?? DEFAULT_REFUEL_SWAP_USDC_UNITS;
|
|
47
|
+
this._maxUsdcPerDayUnits = config.maxUsdcPerDayUnits ?? DEFAULT_REFUEL_MAX_USDC_PER_DAY_UNITS;
|
|
48
|
+
this._slippageBps = BigInt(config.slippageBps ?? DEFAULT_REFUEL_SLIPPAGE_BPS);
|
|
49
|
+
this._onEvent = config.onEvent;
|
|
50
|
+
this._saveHistory = config.saveHistory;
|
|
51
|
+
this._now = config.now ?? Date.now;
|
|
52
|
+
this._history = [...(config.history ?? [])];
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* No more refuels after this. One already running finishes and its history is
|
|
56
|
+
* still saved, but it reports nothing; the returned promise settles when it is done.
|
|
57
|
+
*/
|
|
58
|
+
stop() {
|
|
59
|
+
this._stopped = true;
|
|
60
|
+
return this._inFlight ?? Promise.resolve();
|
|
61
|
+
}
|
|
62
|
+
/** Every refuel in the last 24 hours (what the daily cap counts). */
|
|
63
|
+
get recentHistory() {
|
|
64
|
+
const since = this._now() - DAY_MS;
|
|
65
|
+
return this._history.filter((record) => record.at > since);
|
|
66
|
+
}
|
|
67
|
+
getSnapshot() {
|
|
68
|
+
const recent = this.recentHistory;
|
|
69
|
+
return {
|
|
70
|
+
address: this._address,
|
|
71
|
+
triggerBalanceWei: this._triggerBalanceWei,
|
|
72
|
+
swapUsdcUnits: this._swapUsdcUnits,
|
|
73
|
+
maxUsdcPerDayUnits: this._maxUsdcPerDayUnits,
|
|
74
|
+
usdcLast24hUnits: recent.reduce((sum, record) => sum + BigInt(record.usdcUnits), 0n),
|
|
75
|
+
inFlight: this._inFlight !== null,
|
|
76
|
+
lastRefuel: this._history.filter((record) => !record.pending).at(-1) ?? null,
|
|
77
|
+
lastError: this._lastError,
|
|
78
|
+
skipped: this._skipped,
|
|
79
|
+
nextAttemptAt: this._nextAttemptAt > this._now() ? this._nextAttemptAt : null,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* A fresh balance reading. Starts a refuel when it is under the trigger and
|
|
84
|
+
* none is running or cooling down. Resolves when that refuel is done.
|
|
85
|
+
*/
|
|
86
|
+
onBalance(balanceWei) {
|
|
87
|
+
if (this._stopped)
|
|
88
|
+
return Promise.resolve();
|
|
89
|
+
if (balanceWei >= this._triggerBalanceWei) {
|
|
90
|
+
// Funded (by a refuel or by hand): a later shortfall reports its skip reason afresh.
|
|
91
|
+
this._skipped = null;
|
|
92
|
+
return Promise.resolve();
|
|
93
|
+
}
|
|
94
|
+
if (this._inFlight)
|
|
95
|
+
return this._inFlight;
|
|
96
|
+
if (this._now() < this._nextAttemptAt)
|
|
97
|
+
return Promise.resolve();
|
|
98
|
+
this._inFlight = this._refuel(balanceWei).finally(() => {
|
|
99
|
+
this._inFlight = null;
|
|
100
|
+
});
|
|
101
|
+
return this._inFlight;
|
|
102
|
+
}
|
|
103
|
+
async _refuel(balanceWei) {
|
|
104
|
+
let reservation = null;
|
|
105
|
+
try {
|
|
106
|
+
const recent = this.recentHistory;
|
|
107
|
+
const usedToday = recent.reduce((sum, record) => sum + BigInt(record.usdcUnits), 0n);
|
|
108
|
+
const leftToday = this._maxUsdcPerDayUnits - usedToday;
|
|
109
|
+
if (leftToday < MIN_REFUEL_SWAP_USDC_UNITS) {
|
|
110
|
+
// Try again once the oldest refuel in the window ages out.
|
|
111
|
+
this._nextAttemptAt = (recent[0]?.at ?? this._now()) + DAY_MS;
|
|
112
|
+
this._skip('daily_cap', balanceWei, `swapped ${formatUnits(usedToday, 6)} USDC in the last 24h (cap ${formatUnits(this._maxUsdcPerDayUnits, 6)})`);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const usdcBalance = await this._swapper.usdcBalance(this._address);
|
|
116
|
+
const amount = [this._swapUsdcUnits, leftToday, usdcBalance].reduce((a, b) => (b < a ? b : a));
|
|
117
|
+
if (amount < MIN_REFUEL_SWAP_USDC_UNITS) {
|
|
118
|
+
this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
|
|
119
|
+
this._skip('insufficient_usdc', balanceWei, `wallet holds ${formatUnits(usdcBalance, 6)} USDC`);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
const maxCost = await this._swapper.maxSwapCostWei();
|
|
123
|
+
if (balanceWei < maxCost) {
|
|
124
|
+
this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
|
|
125
|
+
this._skip('insufficient_eth', balanceWei, `a swap can cost up to ${formatEther(maxCost)} ETH; wallet holds ${formatEther(balanceWei)} ETH`);
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
const expected = await this._swapper.quote(amount);
|
|
129
|
+
const minOut = (expected * (10000n - this._slippageBps)) / 10000n;
|
|
130
|
+
debugLog(`[GasRefuel] ${this._address} at ${formatEther(balanceWei)} ETH: swapping ${formatUnits(amount, 6)} USDC for ~${formatEther(expected)} ETH`);
|
|
131
|
+
// Reserve the spend on disk first: if the process exits before the swap is mined, a restart still counts it.
|
|
132
|
+
const pending = { at: this._now(), usdcUnits: amount.toString(), txHash: '', pending: true };
|
|
133
|
+
this._history = [...this.recentHistory, pending];
|
|
134
|
+
try {
|
|
135
|
+
await this._persist({ required: true });
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
// Without the reservation on disk a restart could not count this swap, so it is not sent.
|
|
139
|
+
this._history = this._history.filter((entry) => entry !== pending);
|
|
140
|
+
throw new Error(`could not save the refuel reservation, so no swap was sent: ${err instanceof Error ? err.message : err}`);
|
|
141
|
+
}
|
|
142
|
+
reservation = pending;
|
|
143
|
+
const txHash = await this._swapper.swap(amount, minOut);
|
|
144
|
+
const record = { at: this._now(), usdcUnits: amount.toString(), txHash };
|
|
145
|
+
this._history = [...this.recentHistory.filter((entry) => entry !== reservation), record];
|
|
146
|
+
reservation = null;
|
|
147
|
+
await this._persist();
|
|
148
|
+
this._failures = 0;
|
|
149
|
+
this._lastError = null;
|
|
150
|
+
this._skipped = null;
|
|
151
|
+
this._nextAttemptAt = this._now() + REFUEL_SUCCESS_COOLDOWN_MS;
|
|
152
|
+
void this._emit({ status: 'refueled', address: this._address, record, expectedEthWei: expected, balanceWei });
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
// Release the reservation only when the swap certainly spent nothing. Otherwise (a timeout, a lost
|
|
156
|
+
// RPC response) it may still be mined, so the pending spend keeps counting until it ages out.
|
|
157
|
+
if (reservation && swapCertainlyNotSpent(err)) {
|
|
158
|
+
const dropped = reservation;
|
|
159
|
+
this._history = this._history.filter((entry) => entry !== dropped);
|
|
160
|
+
await this._persist();
|
|
161
|
+
}
|
|
162
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
163
|
+
this._failures += 1;
|
|
164
|
+
const backoff = Math.min(REFUEL_MAX_BACKOFF_MS, REFUEL_FAILURE_BACKOFF_MS * 2 ** (this._failures - 1));
|
|
165
|
+
this._nextAttemptAt = this._now() + backoff;
|
|
166
|
+
this._lastError = error;
|
|
167
|
+
debugWarn(`[GasRefuel] ${this._address} refuel failed: ${error}`);
|
|
168
|
+
void this._emit({ status: 'failed', address: this._address, error, balanceWei, retryAt: this._nextAttemptAt });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/** Save the history; a failure is logged, or thrown when `required` (the reservation before a swap). */
|
|
172
|
+
async _persist(options = {}) {
|
|
173
|
+
if (!this._saveHistory)
|
|
174
|
+
return;
|
|
175
|
+
try {
|
|
176
|
+
await this._saveHistory(this.recentHistory);
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
if (options.required)
|
|
180
|
+
throw err;
|
|
181
|
+
debugWarn(`[GasRefuel] could not save refuel history: ${err instanceof Error ? err.message : err}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** Report a skip once per reason, not on every reading while it lasts. */
|
|
185
|
+
_skip(reason, balanceWei, detail) {
|
|
186
|
+
if (this._skipped === reason)
|
|
187
|
+
return;
|
|
188
|
+
this._skipped = reason;
|
|
189
|
+
debugLog(`[GasRefuel] ${this._address} refuel skipped (${reason}): ${detail}`);
|
|
190
|
+
void this._emit({ status: 'skipped', address: this._address, reason, balanceWei, detail });
|
|
191
|
+
}
|
|
192
|
+
async _emit(event) {
|
|
193
|
+
if (this._stopped || !this._onEvent)
|
|
194
|
+
return;
|
|
195
|
+
try {
|
|
196
|
+
await this._onEvent(event);
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
debugWarn(`[GasRefuel] onEvent failed: ${err instanceof Error ? err.message : err}`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/** ethers codes for a transaction the node refused before broadcasting it. */
|
|
204
|
+
const NOT_BROADCAST_CODES = new Set(['INSUFFICIENT_FUNDS', 'NONCE_EXPIRED', 'REPLACEMENT_UNDERPRICED']);
|
|
205
|
+
/**
|
|
206
|
+
* Whether a swap error proves no USDC left the wallet: it reverted (in gas
|
|
207
|
+
* estimation or on-chain), the node refused to broadcast it, or another tx took
|
|
208
|
+
* its nonce. A timeout or lost RPC response proves nothing.
|
|
209
|
+
*/
|
|
210
|
+
export function swapCertainlyNotSpent(err) {
|
|
211
|
+
const { code, message } = (err ?? {});
|
|
212
|
+
return code === 'CALL_EXCEPTION'
|
|
213
|
+
|| (typeof code === 'string' && NOT_BROADCAST_CODES.has(code))
|
|
214
|
+
|| message === 'Transaction was dropped or replaced';
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=gas-auto-refuel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gas-auto-refuel.js","sourceRoot":"","sources":["../../src/health/gas-auto-refuel.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,6 +49,8 @@ export interface GasHealthMonitorConfig {
|
|
|
49
49
|
* `node.pauseAdvertising(...)` / `node.resumeAdvertising()`).
|
|
50
50
|
*/
|
|
51
51
|
onChange?: (event: GasHealthEvent) => void | Promise<void>;
|
|
52
|
+
/** Invoked with every successful reading (e.g. `GasAutoRefueler.onBalance`). */
|
|
53
|
+
onBalance?: (balanceWei: bigint) => void | Promise<void>;
|
|
52
54
|
}
|
|
53
55
|
/**
|
|
54
56
|
* Periodically reads the seller wallet's ETH balance and reports when it drops
|
|
@@ -70,6 +72,7 @@ export declare class GasHealthMonitor {
|
|
|
70
72
|
private readonly _relaxedBalanceFactor;
|
|
71
73
|
private readonly _minBalanceWei;
|
|
72
74
|
private readonly _onChange;
|
|
75
|
+
private readonly _onBalance;
|
|
73
76
|
private _timer;
|
|
74
77
|
private _stopped;
|
|
75
78
|
private _checkInFlight;
|
|
@@ -87,6 +90,7 @@ export declare class GasHealthMonitor {
|
|
|
87
90
|
/** Read the balance once and emit a change event on a threshold crossing. */
|
|
88
91
|
checkNow(): Promise<void>;
|
|
89
92
|
private _check;
|
|
93
|
+
private _notifyBalance;
|
|
90
94
|
private _emitChange;
|
|
91
95
|
}
|
|
92
96
|
//# sourceMappingURL=gas-health-monitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas-health-monitor.d.ts","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,kBAAsB,CAAC;AAC/D,iDAAiD;AACjD,eAAO,MAAM,qCAAqC,QAAa,CAAC;AAChE,0HAA0H;AAC1H,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"gas-health-monitor.d.ts","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,eAAO,MAAM,6BAA6B,QAAS,CAAC;AACpD;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,kBAAsB,CAAC;AAC/D,iDAAiD;AACjD,eAAO,MAAM,qCAAqC,QAAa,CAAC;AAChE,0HAA0H;AAC1H,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,2GAA2G;AAC3G,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,UAAU,CAAC;IAChC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,2FAA2F;IAC3F,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gFAAgF;IAChF,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;IACnE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAC/D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,MAAM,CAA+C;IAC7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,cAAc,CAAuB;gBAEjC,MAAM,EAAE,sBAAsB;IAW1C,uEAAuE;IACvE,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;IASZ,OAAO,CAAC,QAAQ;IAIhB,mEAAmE;IACnE,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,WAAW,IAAI,iBAAiB;IAUhC,6EAA6E;IACvE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAQjB,MAAM;YAyBN,cAAc;IAS5B,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -35,6 +35,7 @@ export class GasHealthMonitor {
|
|
|
35
35
|
_relaxedBalanceFactor;
|
|
36
36
|
_minBalanceWei;
|
|
37
37
|
_onChange;
|
|
38
|
+
_onBalance;
|
|
38
39
|
_timer = null;
|
|
39
40
|
_stopped = false;
|
|
40
41
|
_checkInFlight = null;
|
|
@@ -49,6 +50,7 @@ export class GasHealthMonitor {
|
|
|
49
50
|
this._minBalanceWei = config.minBalanceWei ?? DEFAULT_MIN_GAS_BALANCE_WEI;
|
|
50
51
|
this._relaxedBalanceFactor = config.relaxedBalanceFactor ?? RELAXED_BALANCE_FACTOR;
|
|
51
52
|
this._onChange = config.onChange;
|
|
53
|
+
this._onBalance = config.onBalance;
|
|
52
54
|
}
|
|
53
55
|
/** Start periodic checks. The first check runs immediately (async). */
|
|
54
56
|
start() {
|
|
@@ -111,6 +113,7 @@ export class GasHealthMonitor {
|
|
|
111
113
|
return;
|
|
112
114
|
this._lastBalanceWei = balanceWei;
|
|
113
115
|
this._lastCheckedAt = Date.now();
|
|
116
|
+
void this._notifyBalance(balanceWei);
|
|
114
117
|
const depleted = balanceWei < this._minBalanceWei;
|
|
115
118
|
if (depleted === this._depleted)
|
|
116
119
|
return;
|
|
@@ -122,6 +125,16 @@ export class GasHealthMonitor {
|
|
|
122
125
|
minBalanceWei: this._minBalanceWei,
|
|
123
126
|
});
|
|
124
127
|
}
|
|
128
|
+
async _notifyBalance(balanceWei) {
|
|
129
|
+
if (!this._onBalance)
|
|
130
|
+
return;
|
|
131
|
+
try {
|
|
132
|
+
await this._onBalance(balanceWei);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
debugWarn(`[GasHealth] onBalance failed: ${err instanceof Error ? err.message : err}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
125
138
|
_emitChange(event) {
|
|
126
139
|
debugLog(`[GasHealth] ${event.address} ${event.status} `
|
|
127
140
|
+ `(${formatEther(event.balanceWei)} ETH, minimum ${formatEther(event.minBalanceWei)} ETH)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gas-health-monitor.js","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAExD,gFAAgF;AAChF,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC;AACpD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,eAAmB,CAAC;AAC/D,iDAAiD;AACjD,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,GAAG,MAAM,CAAC;AAChE,0HAA0H;AAC1H,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAC/C,2GAA2G;AAC3G,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"gas-health-monitor.js","sourceRoot":"","sources":["../../src/health/gas-health-monitor.ts"],"names":[],"mappings":"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"}
|