@varla/sdk 2.15.0 → 2.16.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 +17 -0
- package/dist/leverage/deleverageExecute.d.ts +60 -2
- package/dist/leverage/deleverageExecute.d.ts.map +1 -1
- package/dist/leverage/deleverageExecute.js +49 -4
- package/dist/leverage/deleverageExecute.js.map +1 -1
- package/dist/leverage/execute.d.ts +54 -3
- package/dist/leverage/execute.d.ts.map +1 -1
- package/dist/leverage/execute.js +38 -4
- package/dist/leverage/execute.js.map +1 -1
- package/dist/leverage/index.d.ts +3 -1
- package/dist/leverage/index.d.ts.map +1 -1
- package/dist/leverage/index.js +3 -1
- package/dist/leverage/index.js.map +1 -1
- package/dist/leverage/math.d.ts +12 -0
- package/dist/leverage/math.d.ts.map +1 -1
- package/dist/leverage/math.js +66 -5
- package/dist/leverage/math.js.map +1 -1
- package/dist/leverage/receipt.d.ts +38 -0
- package/dist/leverage/receipt.d.ts.map +1 -0
- package/dist/leverage/receipt.js +95 -0
- package/dist/leverage/receipt.js.map +1 -0
- package/dist/leverage/types.d.ts +23 -0
- package/dist/leverage/types.d.ts.map +1 -1
- package/dist/leverage/types.js +21 -0
- package/dist/leverage/types.js.map +1 -1
- package/package.json +1 -1
- package/src/leverage/deleverageExecute.ts +113 -5
- package/src/leverage/execute.ts +101 -6
- package/src/leverage/index.ts +4 -0
- package/src/leverage/math.ts +92 -5
- package/src/leverage/receipt.ts +143 -0
- package/src/leverage/types.ts +39 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/leverage/math.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/leverage/math.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Robust transaction receipt waiting with exponential backoff.
|
|
3
|
+
*
|
|
4
|
+
* Polygon (and other L2s) occasionally drop RPC connections or return
|
|
5
|
+
* "receipt not found" transiently — even for successfully broadcast txs.
|
|
6
|
+
* This helper retries `waitForTransactionReceipt` so a single flaky RPC
|
|
7
|
+
* call doesn't abort a multi-step leverage/deleverage loop.
|
|
8
|
+
*/
|
|
9
|
+
import type { Hash, PublicClient, TransactionReceipt } from "viem";
|
|
10
|
+
export type ReceiptRetryOptions = {
|
|
11
|
+
/** Maximum number of retry attempts (default: 5). */
|
|
12
|
+
maxRetries?: number;
|
|
13
|
+
/** Base delay in ms for first retry (default: 2_000). */
|
|
14
|
+
baseDelayMs?: number;
|
|
15
|
+
/** Maximum delay cap in ms (default: 32_000). */
|
|
16
|
+
maxDelayMs?: number;
|
|
17
|
+
/** Multiplier applied each retry (default: 2). */
|
|
18
|
+
backoffMultiplier?: number;
|
|
19
|
+
};
|
|
20
|
+
export declare const DEFAULT_RECEIPT_RETRY: Required<ReceiptRetryOptions>;
|
|
21
|
+
/**
|
|
22
|
+
* Wait for a transaction receipt with automatic retry and exponential backoff.
|
|
23
|
+
*
|
|
24
|
+
* This wraps `publicClient.waitForTransactionReceipt` and handles the common
|
|
25
|
+
* failure modes seen on Polygon:
|
|
26
|
+
* - "Transaction receipt not found" (RPC hasn't indexed the block yet)
|
|
27
|
+
* - Timeouts and connection drops
|
|
28
|
+
* - 502/503/504 gateway errors
|
|
29
|
+
*
|
|
30
|
+
* @throws The original error after all retries are exhausted.
|
|
31
|
+
*/
|
|
32
|
+
export declare function waitForReceiptWithRetry(params: {
|
|
33
|
+
publicClient: Pick<PublicClient, "waitForTransactionReceipt">;
|
|
34
|
+
hash: Hash;
|
|
35
|
+
confirmations?: number;
|
|
36
|
+
retry?: ReceiptRetryOptions;
|
|
37
|
+
}): Promise<TransactionReceipt>;
|
|
38
|
+
//# sourceMappingURL=receipt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.d.ts","sourceRoot":"","sources":["../../src/leverage/receipt.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AAMnE,MAAM,MAAM,mBAAmB,GAAG;IAChC,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,mBAAmB,CAK/D,CAAC;AA+CF;;;;;;;;;;GAUG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,2BAA2B,CAAC,CAAC;IAC9D,IAAI,EAAE,IAAI,CAAC;IACX,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAC7B,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA8C9B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
// Note: explicit .js extension is required for Node ESM resolution.
|
|
2
|
+
export const DEFAULT_RECEIPT_RETRY = {
|
|
3
|
+
maxRetries: 5,
|
|
4
|
+
baseDelayMs: 2_000,
|
|
5
|
+
maxDelayMs: 32_000,
|
|
6
|
+
backoffMultiplier: 2,
|
|
7
|
+
};
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Helper
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
function sleep(ms) {
|
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Classify whether an error from `waitForTransactionReceipt` is transient
|
|
16
|
+
* (worth retrying) vs permanent (should be thrown immediately).
|
|
17
|
+
*/
|
|
18
|
+
function isTransientReceiptError(error) {
|
|
19
|
+
if (!(error instanceof Error))
|
|
20
|
+
return true; // unknown shape → retry
|
|
21
|
+
const msg = error.message.toLowerCase();
|
|
22
|
+
// Permanent: tx reverted on-chain → retrying won't help.
|
|
23
|
+
if (msg.includes("reverted") || msg.includes("execution reverted"))
|
|
24
|
+
return false;
|
|
25
|
+
// Transient: receipt not found, timeout, network issues.
|
|
26
|
+
if (msg.includes("not found") ||
|
|
27
|
+
msg.includes("could not be found") ||
|
|
28
|
+
msg.includes("timeout") ||
|
|
29
|
+
msg.includes("timed out") ||
|
|
30
|
+
msg.includes("econnrefused") ||
|
|
31
|
+
msg.includes("econnreset") ||
|
|
32
|
+
msg.includes("network") ||
|
|
33
|
+
msg.includes("fetch") ||
|
|
34
|
+
msg.includes("502") ||
|
|
35
|
+
msg.includes("503") ||
|
|
36
|
+
msg.includes("504") ||
|
|
37
|
+
msg.includes("rate limit")) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// Default: retry (better to retry once too many than abort a valid tx).
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Main export
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Wait for a transaction receipt with automatic retry and exponential backoff.
|
|
48
|
+
*
|
|
49
|
+
* This wraps `publicClient.waitForTransactionReceipt` and handles the common
|
|
50
|
+
* failure modes seen on Polygon:
|
|
51
|
+
* - "Transaction receipt not found" (RPC hasn't indexed the block yet)
|
|
52
|
+
* - Timeouts and connection drops
|
|
53
|
+
* - 502/503/504 gateway errors
|
|
54
|
+
*
|
|
55
|
+
* @throws The original error after all retries are exhausted.
|
|
56
|
+
*/
|
|
57
|
+
export async function waitForReceiptWithRetry(params) {
|
|
58
|
+
const { publicClient, hash, confirmations = 1 } = params;
|
|
59
|
+
const opts = { ...DEFAULT_RECEIPT_RETRY, ...params.retry };
|
|
60
|
+
let lastError;
|
|
61
|
+
for (let attempt = 0; attempt <= opts.maxRetries; attempt++) {
|
|
62
|
+
try {
|
|
63
|
+
const receipt = await publicClient.waitForTransactionReceipt({
|
|
64
|
+
hash,
|
|
65
|
+
confirmations,
|
|
66
|
+
});
|
|
67
|
+
return receipt;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
lastError = error;
|
|
71
|
+
// Don't retry permanent errors (e.g. on-chain revert).
|
|
72
|
+
if (!isTransientReceiptError(error)) {
|
|
73
|
+
throw error;
|
|
74
|
+
}
|
|
75
|
+
// Don't retry if we've exhausted attempts.
|
|
76
|
+
if (attempt >= opts.maxRetries) {
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
// Exponential backoff with cap.
|
|
80
|
+
const delay = Math.min(opts.baseDelayMs * opts.backoffMultiplier ** attempt, opts.maxDelayMs);
|
|
81
|
+
// No-op in production; useful for debugging.
|
|
82
|
+
// console.debug(`[receipt-retry] attempt ${attempt + 1}/${opts.maxRetries} for ${hash}, waiting ${delay}ms`);
|
|
83
|
+
await sleep(delay);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Wrap with a descriptive message so the caller knows retries were exhausted.
|
|
87
|
+
const cause = lastError instanceof Error ? lastError : new Error(String(lastError));
|
|
88
|
+
const wrapped = new Error(`Transaction receipt not found for ${hash} after ${opts.maxRetries + 1} attempts (${opts.maxRetries} retries). ` +
|
|
89
|
+
`The transaction was broadcast successfully — it may still confirm. ` +
|
|
90
|
+
`Original error: ${cause.message}`);
|
|
91
|
+
wrapped.cause = cause;
|
|
92
|
+
wrapped.hash = hash;
|
|
93
|
+
throw wrapped;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=receipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt.js","sourceRoot":"","sources":["../../src/leverage/receipt.ts"],"names":[],"mappings":"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"}
|
package/dist/leverage/types.d.ts
CHANGED
|
@@ -79,6 +79,10 @@ export type LeverageSummary = {
|
|
|
79
79
|
iterations: number;
|
|
80
80
|
/** Maximum theoretical leverage = 1 / (1 - LTV) as WAD. */
|
|
81
81
|
maxLeverageWad: bigint;
|
|
82
|
+
/** Assumed slippage/spread used in planning (bps). 0 if not specified. */
|
|
83
|
+
assumedSlippageBps: bigint;
|
|
84
|
+
/** Total collateral lost to slippage across all buy steps (base units). */
|
|
85
|
+
totalSlippageCost: bigint;
|
|
82
86
|
};
|
|
83
87
|
/**
|
|
84
88
|
* Complete leverage plan returned by the planner.
|
|
@@ -124,6 +128,10 @@ export type DeleveragePlan = {
|
|
|
124
128
|
tokensRemaining: bigint;
|
|
125
129
|
collateralRemaining: bigint;
|
|
126
130
|
iterations: number;
|
|
131
|
+
/** Assumed slippage/spread used in planning (bps). 0 if not specified. */
|
|
132
|
+
assumedSlippageBps: bigint;
|
|
133
|
+
/** Total collateral lost to slippage across all sell steps (base units). */
|
|
134
|
+
totalSlippageCost: bigint;
|
|
127
135
|
};
|
|
128
136
|
};
|
|
129
137
|
/**
|
|
@@ -154,4 +162,19 @@ export type OnLeverageProgress = (info: {
|
|
|
154
162
|
step: LeverageStep;
|
|
155
163
|
result: LeverageStepResult;
|
|
156
164
|
}) => void;
|
|
165
|
+
/**
|
|
166
|
+
* Thrown by executors when actual fill deviates beyond `maxSlippageBps`.
|
|
167
|
+
*/
|
|
168
|
+
export declare class SlippageExceededError extends Error {
|
|
169
|
+
readonly expected: bigint;
|
|
170
|
+
readonly actual: bigint;
|
|
171
|
+
readonly maxSlippageBps: bigint;
|
|
172
|
+
readonly side: "buy" | "sell";
|
|
173
|
+
constructor(params: {
|
|
174
|
+
expected: bigint;
|
|
175
|
+
actual: bigint;
|
|
176
|
+
maxSlippageBps: bigint;
|
|
177
|
+
side: "buy" | "sell";
|
|
178
|
+
});
|
|
179
|
+
}
|
|
157
180
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leverage/types.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAMjC,4BAA4B;AAC5B,eAAO,MAAM,GAAG,uBAA6B,CAAC;AAE9C,4CAA4C;AAC5C,eAAO,MAAM,QAAQ,aAAe,CAAC;AAErC,oDAAoD;AACpD,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,WAAa,CAAC;AAMtD,8BAA8B;AAC9B,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKvC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE1F;AAMD,2CAA2C;AAC3C,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjD;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,sEAAsE;IACtE,gBAAgB,EAAE,MAAM,CAAC;IACzB,kEAAkE;IAClE,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEN;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wEAAwE;IACxE,2BAA2B,EAAE,MAAM,CAAC;IACpC,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/leverage/types.ts"],"names":[],"mappings":"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"}
|
package/dist/leverage/types.js
CHANGED
|
@@ -40,4 +40,25 @@ export function pow10(n) {
|
|
|
40
40
|
export function collateralForDollars(params) {
|
|
41
41
|
return params.dollars * pow10(params.decimals);
|
|
42
42
|
}
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Slippage error
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/**
|
|
47
|
+
* Thrown by executors when actual fill deviates beyond `maxSlippageBps`.
|
|
48
|
+
*/
|
|
49
|
+
export class SlippageExceededError extends Error {
|
|
50
|
+
expected;
|
|
51
|
+
actual;
|
|
52
|
+
maxSlippageBps;
|
|
53
|
+
side;
|
|
54
|
+
constructor(params) {
|
|
55
|
+
const pct = (Number(params.maxSlippageBps) / 100).toFixed(2);
|
|
56
|
+
super(`Slippage exceeded on ${params.side}: expected ${params.expected}, got ${params.actual} (max ${pct}%)`);
|
|
57
|
+
this.name = "SlippageExceededError";
|
|
58
|
+
this.expected = params.expected;
|
|
59
|
+
this.actual = params.actual;
|
|
60
|
+
this.maxSlippageBps = params.maxSlippageBps;
|
|
61
|
+
this.side = params.side;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
43
64
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leverage/types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,4BAA4B;AAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,oBAA0B,CAAC;AAE9C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAY,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAU,CAAC;AAEtD,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,8BAA8B;AAC9B,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,GAAG,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA6C;IAChF,OAAO,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/leverage/types.ts"],"names":[],"mappings":"AAAA,oEAAoE;AAIpE,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,4BAA4B;AAC5B,MAAM,CAAC,MAAM,GAAG,GAAG,oBAA0B,CAAC;AAE9C,4CAA4C;AAC5C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAY,CAAC;AAErC,oDAAoD;AACpD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,QAAU,CAAC;AAEtD,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,8BAA8B;AAC9B,MAAM,UAAU,KAAK,CAAC,CAAS;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC5E,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;QAAE,GAAG,IAAI,GAAG,CAAC;IACvC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA6C;IAChF,OAAO,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACjD,CAAC;AAoKD,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,QAAQ,CAAS;IACjB,MAAM,CAAS;IACf,cAAc,CAAS;IACvB,IAAI,CAAiB;IAE9B,YAAY,MAKX;QACC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,KAAK,CACH,wBAAwB,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,CACvG,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -7,18 +7,21 @@
|
|
|
7
7
|
* to SDK action helpers and off-chain operations (sell) to a consumer callback.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import type { Address, PublicClient, WalletClient } from "viem";
|
|
10
|
+
import type { Address, Hash, PublicClient, WalletClient } from "viem";
|
|
11
11
|
|
|
12
12
|
import { prepareCoreRepay, prepareCoreWithdraw } from "../actions/core.js";
|
|
13
13
|
import { sendTx } from "../actions/tx.js";
|
|
14
|
+
import type { ReceiptRetryOptions } from "./receipt.js";
|
|
15
|
+
import { waitForReceiptWithRetry } from "./receipt.js";
|
|
14
16
|
import type { DeleveragePlan, DeleverageStep, SellResult } from "./types.js";
|
|
17
|
+
import { SlippageExceededError } from "./types.js";
|
|
15
18
|
|
|
16
19
|
export type OnDeleverageProgress = (info: {
|
|
17
20
|
completed: number;
|
|
18
21
|
total: number;
|
|
19
22
|
step: DeleverageStep;
|
|
20
23
|
// keep symmetry with leverage executor
|
|
21
|
-
hash?:
|
|
24
|
+
hash?: Hash;
|
|
22
25
|
sellResult?: SellResult;
|
|
23
26
|
}) => void;
|
|
24
27
|
|
|
@@ -33,14 +36,87 @@ export type RunDeleverageLoopParams = {
|
|
|
33
36
|
onSellStep: (step: Extract<DeleverageStep, { kind: "sell" }>) => Promise<SellResult>;
|
|
34
37
|
onProgress?: OnDeleverageProgress;
|
|
35
38
|
confirmations?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Maximum acceptable slippage for sell fills (bps).
|
|
41
|
+
* If `actualCollateral < expectedCollateral * (10_000 - maxSlippageBps) / 10_000`,
|
|
42
|
+
* the loop aborts with a `SlippageExceededError`.
|
|
43
|
+
*/
|
|
44
|
+
maxSlippageBps?: bigint;
|
|
45
|
+
|
|
46
|
+
// --- NEW: reliability & hooks ------------------------------------------------
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Receipt retry options for `waitForTransactionReceipt`.
|
|
50
|
+
*
|
|
51
|
+
* By default the executor retries up to 5 times with exponential backoff
|
|
52
|
+
* (2s → 4s → 8s → 16s → 32s). Set `{ maxRetries: 0 }` to disable retries.
|
|
53
|
+
*/
|
|
54
|
+
receiptRetry?: ReceiptRetryOptions;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Hook called after each successful withdraw step (receipt confirmed),
|
|
58
|
+
* before the next sell step. Use this to refresh CLOB position caches, etc.
|
|
59
|
+
*
|
|
60
|
+
* @param info Withdraw step details and tx hash.
|
|
61
|
+
*/
|
|
62
|
+
onPostWithdraw?: (info: {
|
|
63
|
+
step: Extract<DeleverageStep, { kind: "withdraw" }>;
|
|
64
|
+
hash: Hash;
|
|
65
|
+
}) => Promise<void>;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Milliseconds to sleep after each withdraw confirmation before proceeding
|
|
69
|
+
* to the next sell step. Gives the CLOB server time to re-index on-chain
|
|
70
|
+
* token balance changes.
|
|
71
|
+
*
|
|
72
|
+
* Applied AFTER `onPostWithdraw` (if provided). Default: 0 (no delay).
|
|
73
|
+
*/
|
|
74
|
+
postWithdrawDelayMs?: number;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Resume a previously failed execution by skipping steps before this index.
|
|
78
|
+
*
|
|
79
|
+
* When a previous call returned `{ failedAtStep: N }`, pass `startFromStep: N`
|
|
80
|
+
* to resume from exactly where it left off.
|
|
81
|
+
*
|
|
82
|
+
* Default: 0 (run all steps from the beginning).
|
|
83
|
+
*/
|
|
84
|
+
startFromStep?: number;
|
|
36
85
|
};
|
|
37
86
|
|
|
38
87
|
export type RunDeleverageLoopResult = {
|
|
39
88
|
completed: boolean;
|
|
89
|
+
/** If execution stopped early, the index of the failed step (absolute). */
|
|
40
90
|
failedAtStep?: number;
|
|
41
91
|
error?: unknown;
|
|
42
92
|
};
|
|
43
93
|
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Helpers
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
|
|
98
|
+
function sleep(ms: number): Promise<void> {
|
|
99
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// Executor
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Execute a deleverage (unwind) loop plan step-by-step.
|
|
108
|
+
*
|
|
109
|
+
* For each step:
|
|
110
|
+
* - "withdraw": prepares + sends `VarlaCore.withdraw()` tx
|
|
111
|
+
* - "sell": delegates to `onSellStep` callback (off-chain CLOB trade)
|
|
112
|
+
* - "repay": prepares + sends `VarlaCore.repay()` tx
|
|
113
|
+
*
|
|
114
|
+
* **Reliability features (v2):**
|
|
115
|
+
* - `receiptRetry`: configurable exponential backoff for receipt polling
|
|
116
|
+
* - `onPostWithdraw`: hook for CLOB cache refresh after each withdraw
|
|
117
|
+
* - `postWithdrawDelayMs`: sleep after withdraw for CLOB indexer sync
|
|
118
|
+
* - `startFromStep`: resume from a previously failed step index
|
|
119
|
+
*/
|
|
44
120
|
export async function runDeleverageLoop(
|
|
45
121
|
params: RunDeleverageLoopParams,
|
|
46
122
|
): Promise<RunDeleverageLoopResult> {
|
|
@@ -54,6 +130,11 @@ export async function runDeleverageLoop(
|
|
|
54
130
|
onSellStep,
|
|
55
131
|
onProgress,
|
|
56
132
|
confirmations = 1,
|
|
133
|
+
maxSlippageBps,
|
|
134
|
+
receiptRetry,
|
|
135
|
+
onPostWithdraw,
|
|
136
|
+
postWithdrawDelayMs = 0,
|
|
137
|
+
startFromStep = 0,
|
|
57
138
|
} = params;
|
|
58
139
|
|
|
59
140
|
const total = plan.steps.length;
|
|
@@ -61,7 +142,7 @@ export async function runDeleverageLoop(
|
|
|
61
142
|
// Track actual collateral proceeds from the most recent sell step.
|
|
62
143
|
let lastSellActualCollateral: bigint | undefined;
|
|
63
144
|
|
|
64
|
-
for (let i =
|
|
145
|
+
for (let i = startFromStep; i < total; i++) {
|
|
65
146
|
const step = plan.steps[i]!;
|
|
66
147
|
try {
|
|
67
148
|
if (step.kind === "withdraw") {
|
|
@@ -73,13 +154,39 @@ export async function runDeleverageLoop(
|
|
|
73
154
|
amounts: [step.amount],
|
|
74
155
|
});
|
|
75
156
|
const hash = await sendTx({ walletClient: walletClient as any, request: sim.request });
|
|
76
|
-
await (publicClient
|
|
157
|
+
await waitForReceiptWithRetry({ publicClient, hash, confirmations, retry: receiptRetry });
|
|
158
|
+
|
|
77
159
|
onProgress?.({ completed: i + 1, total, step, hash });
|
|
160
|
+
|
|
161
|
+
// Post-withdraw hook — let consumer refresh CLOB token balance cache, etc.
|
|
162
|
+
if (onPostWithdraw) {
|
|
163
|
+
await onPostWithdraw({ step, hash });
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Post-withdraw delay — give CLOB server time to re-index.
|
|
167
|
+
if (postWithdrawDelayMs > 0) {
|
|
168
|
+
await sleep(postWithdrawDelayMs);
|
|
169
|
+
}
|
|
170
|
+
|
|
78
171
|
continue;
|
|
79
172
|
}
|
|
80
173
|
|
|
81
174
|
if (step.kind === "sell") {
|
|
82
175
|
const res = await onSellStep(step);
|
|
176
|
+
|
|
177
|
+
// Slippage guard: reject fills that deviate too far from expected.
|
|
178
|
+
if (maxSlippageBps !== undefined && step.expectedCollateral > 0n) {
|
|
179
|
+
const minAcceptable = (step.expectedCollateral * (10_000n - maxSlippageBps)) / 10_000n;
|
|
180
|
+
if (res.actualCollateral < minAcceptable) {
|
|
181
|
+
throw new SlippageExceededError({
|
|
182
|
+
expected: step.expectedCollateral,
|
|
183
|
+
actual: res.actualCollateral,
|
|
184
|
+
maxSlippageBps,
|
|
185
|
+
side: "sell",
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
83
190
|
lastSellActualCollateral = res.actualCollateral;
|
|
84
191
|
onProgress?.({ completed: i + 1, total, step, sellResult: res });
|
|
85
192
|
continue;
|
|
@@ -96,7 +203,8 @@ export async function runDeleverageLoop(
|
|
|
96
203
|
amount: repayAmount,
|
|
97
204
|
});
|
|
98
205
|
const hash = await sendTx({ walletClient: walletClient as any, request: sim.request });
|
|
99
|
-
await (publicClient
|
|
206
|
+
await waitForReceiptWithRetry({ publicClient, hash, confirmations, retry: receiptRetry });
|
|
207
|
+
|
|
100
208
|
onProgress?.({ completed: i + 1, total, step, hash });
|
|
101
209
|
continue;
|
|
102
210
|
}
|
package/src/leverage/execute.ts
CHANGED
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
* callback.
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import type { Address, PublicClient, WalletClient } from "viem";
|
|
11
|
+
import type { Address, Hash, PublicClient, WalletClient } from "viem";
|
|
12
12
|
|
|
13
13
|
import { prepareCoreBorrow, prepareCoreDeposit } from "../actions/core.js";
|
|
14
14
|
import { sendTx } from "../actions/tx.js";
|
|
15
|
+
import type { ReceiptRetryOptions } from "./receipt.js";
|
|
16
|
+
import { waitForReceiptWithRetry } from "./receipt.js";
|
|
15
17
|
import type {
|
|
16
18
|
BuyResult,
|
|
17
19
|
LeveragePlan,
|
|
@@ -19,6 +21,7 @@ import type {
|
|
|
19
21
|
LeverageStepResult,
|
|
20
22
|
OnLeverageProgress,
|
|
21
23
|
} from "./types.js";
|
|
24
|
+
import { SlippageExceededError } from "./types.js";
|
|
22
25
|
|
|
23
26
|
// ---------------------------------------------------------------------------
|
|
24
27
|
// Types
|
|
@@ -48,19 +51,75 @@ export type RunLeverageLoopParams = {
|
|
|
48
51
|
onProgress?: OnLeverageProgress;
|
|
49
52
|
/** Number of block confirmations to wait per tx (default: 1). */
|
|
50
53
|
confirmations?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Maximum acceptable slippage for buy fills (bps).
|
|
56
|
+
* If `actualTokens < expectedTokens * (10_000 - maxSlippageBps) / 10_000`,
|
|
57
|
+
* the loop aborts with a `SlippageExceededError`.
|
|
58
|
+
*/
|
|
59
|
+
maxSlippageBps?: bigint;
|
|
60
|
+
|
|
61
|
+
// --- NEW: reliability & hooks ------------------------------------------------
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Receipt retry options for `waitForTransactionReceipt`.
|
|
65
|
+
*
|
|
66
|
+
* By default the executor retries up to 5 times with exponential backoff
|
|
67
|
+
* (2s → 4s → 8s → 16s → 32s). Set `{ maxRetries: 0 }` to disable retries.
|
|
68
|
+
*/
|
|
69
|
+
receiptRetry?: ReceiptRetryOptions;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Hook called after each successful borrow step (receipt confirmed),
|
|
73
|
+
* before the next buy step. Use this to refresh CLOB balance caches,
|
|
74
|
+
* wait for off-chain indexers, etc.
|
|
75
|
+
*
|
|
76
|
+
* @param info Borrow step details and tx hash.
|
|
77
|
+
*/
|
|
78
|
+
onPostBorrow?: (info: {
|
|
79
|
+
step: Extract<LeverageStep, { kind: "borrow" }>;
|
|
80
|
+
hash: Hash;
|
|
81
|
+
}) => Promise<void>;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Milliseconds to sleep after each borrow confirmation before proceeding
|
|
85
|
+
* to the next buy step. Gives the CLOB server time to re-index on-chain
|
|
86
|
+
* balance changes.
|
|
87
|
+
*
|
|
88
|
+
* Applied AFTER `onPostBorrow` (if provided). Default: 0 (no delay).
|
|
89
|
+
*/
|
|
90
|
+
postBorrowDelayMs?: number;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Resume a previously failed execution by skipping steps before this index.
|
|
94
|
+
*
|
|
95
|
+
* When a previous call returned `{ failedAtStep: N }`, pass `startFromStep: N`
|
|
96
|
+
* to resume from exactly where it left off. Steps before `startFromStep` are
|
|
97
|
+
* skipped (their results are NOT included in the returned array).
|
|
98
|
+
*
|
|
99
|
+
* Default: 0 (run all steps from the beginning).
|
|
100
|
+
*/
|
|
101
|
+
startFromStep?: number;
|
|
51
102
|
};
|
|
52
103
|
|
|
53
104
|
export type RunLeverageLoopResult = {
|
|
54
|
-
/** Results for each step
|
|
105
|
+
/** Results for each step executed (starting from `startFromStep`). */
|
|
55
106
|
results: LeverageStepResult[];
|
|
56
107
|
/** Whether all steps completed successfully. */
|
|
57
108
|
completed: boolean;
|
|
58
|
-
/** If execution stopped early, the index of the failed step. */
|
|
109
|
+
/** If execution stopped early, the index of the failed step (absolute, relative to plan). */
|
|
59
110
|
failedAtStep?: number;
|
|
60
111
|
/** If execution stopped early, the error. */
|
|
61
112
|
error?: unknown;
|
|
62
113
|
};
|
|
63
114
|
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
// Helpers
|
|
117
|
+
// ---------------------------------------------------------------------------
|
|
118
|
+
|
|
119
|
+
function sleep(ms: number): Promise<void> {
|
|
120
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
121
|
+
}
|
|
122
|
+
|
|
64
123
|
// ---------------------------------------------------------------------------
|
|
65
124
|
// Executor
|
|
66
125
|
// ---------------------------------------------------------------------------
|
|
@@ -78,6 +137,12 @@ export type RunLeverageLoopResult = {
|
|
|
78
137
|
* for slippage.
|
|
79
138
|
*
|
|
80
139
|
* If any step fails, execution stops and returns partial results.
|
|
140
|
+
*
|
|
141
|
+
* **Reliability features (v2):**
|
|
142
|
+
* - `receiptRetry`: configurable exponential backoff for receipt polling
|
|
143
|
+
* - `onPostBorrow`: hook for CLOB balance cache refresh after each borrow
|
|
144
|
+
* - `postBorrowDelayMs`: sleep after borrow for CLOB indexer sync
|
|
145
|
+
* - `startFromStep`: resume from a previously failed step index
|
|
81
146
|
*/
|
|
82
147
|
export async function runLeverageLoop(
|
|
83
148
|
params: RunLeverageLoopParams,
|
|
@@ -92,6 +157,11 @@ export async function runLeverageLoop(
|
|
|
92
157
|
onBuyStep,
|
|
93
158
|
onProgress,
|
|
94
159
|
confirmations = 1,
|
|
160
|
+
maxSlippageBps,
|
|
161
|
+
receiptRetry,
|
|
162
|
+
onPostBorrow,
|
|
163
|
+
postBorrowDelayMs = 0,
|
|
164
|
+
startFromStep = 0,
|
|
95
165
|
} = params;
|
|
96
166
|
|
|
97
167
|
const results: LeverageStepResult[] = [];
|
|
@@ -100,12 +170,26 @@ export async function runLeverageLoop(
|
|
|
100
170
|
// Track actual tokens from the most recent buy (for slippage-aware deposits).
|
|
101
171
|
let lastBuyActualTokens: bigint | undefined;
|
|
102
172
|
|
|
103
|
-
for (let i =
|
|
173
|
+
for (let i = startFromStep; i < totalSteps; i++) {
|
|
104
174
|
const step = plan.steps[i]!;
|
|
105
175
|
|
|
106
176
|
try {
|
|
107
177
|
if (step.kind === "buy") {
|
|
108
178
|
const buyResult = await onBuyStep(step);
|
|
179
|
+
|
|
180
|
+
// Slippage guard: reject fills that deviate too far from expected.
|
|
181
|
+
if (maxSlippageBps !== undefined && step.expectedTokens > 0n) {
|
|
182
|
+
const minAcceptable = (step.expectedTokens * (10_000n - maxSlippageBps)) / 10_000n;
|
|
183
|
+
if (buyResult.actualTokens < minAcceptable) {
|
|
184
|
+
throw new SlippageExceededError({
|
|
185
|
+
expected: step.expectedTokens,
|
|
186
|
+
actual: buyResult.actualTokens,
|
|
187
|
+
maxSlippageBps,
|
|
188
|
+
side: "buy",
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
109
193
|
lastBuyActualTokens = buyResult.actualTokens;
|
|
110
194
|
|
|
111
195
|
const result: LeverageStepResult = { step, buyResult };
|
|
@@ -129,7 +213,7 @@ export async function runLeverageLoop(
|
|
|
129
213
|
});
|
|
130
214
|
|
|
131
215
|
const hash = await sendTx({ walletClient: walletClient as any, request: sim.request });
|
|
132
|
-
await (publicClient
|
|
216
|
+
await waitForReceiptWithRetry({ publicClient, hash, confirmations, retry: receiptRetry });
|
|
133
217
|
|
|
134
218
|
const result: LeverageStepResult = { step, hash };
|
|
135
219
|
results.push(result);
|
|
@@ -147,12 +231,23 @@ export async function runLeverageLoop(
|
|
|
147
231
|
});
|
|
148
232
|
|
|
149
233
|
const hash = await sendTx({ walletClient: walletClient as any, request: sim.request });
|
|
150
|
-
await (publicClient
|
|
234
|
+
await waitForReceiptWithRetry({ publicClient, hash, confirmations, retry: receiptRetry });
|
|
151
235
|
|
|
152
236
|
const result: LeverageStepResult = { step, hash };
|
|
153
237
|
results.push(result);
|
|
154
238
|
|
|
155
239
|
onProgress?.({ completed: i + 1, total: totalSteps, step, result });
|
|
240
|
+
|
|
241
|
+
// Post-borrow hook — let consumer refresh CLOB balance cache, etc.
|
|
242
|
+
if (onPostBorrow) {
|
|
243
|
+
await onPostBorrow({ step, hash });
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Post-borrow delay — give CLOB server time to re-index.
|
|
247
|
+
if (postBorrowDelayMs > 0) {
|
|
248
|
+
await sleep(postBorrowDelayMs);
|
|
249
|
+
}
|
|
250
|
+
|
|
156
251
|
continue;
|
|
157
252
|
}
|
|
158
253
|
|