@temporalabs/treasury 0.1.1 → 0.1.3
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/NOTICE +4 -2
- package/README.md +100 -44
- package/THIRD_PARTY_NOTICES.connect-page.md +7836 -0
- package/THIRD_PARTY_NOTICES.md +543 -162
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +243 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +366 -239
- package/dist/client.js +202 -25
- package/dist/client.js.map +1 -1
- package/dist/config/earn.d.ts +48 -12
- package/dist/config/earn.js +48 -12
- package/dist/config/earn.js.map +1 -1
- package/dist/connect/ack.d.ts +76 -0
- package/dist/connect/ack.js +147 -0
- package/dist/connect/ack.js.map +1 -0
- package/dist/connect/commands.d.ts +81 -0
- package/dist/connect/commands.js +555 -0
- package/dist/connect/commands.js.map +1 -0
- package/dist/connect/config.d.ts +24 -0
- package/dist/connect/config.js +35 -0
- package/dist/connect/config.js.map +1 -0
- package/dist/connect/gate-solana.d.ts +8 -0
- package/dist/connect/gate-solana.js +147 -0
- package/dist/connect/gate-solana.js.map +1 -0
- package/dist/connect/gate.d.ts +37 -0
- package/dist/connect/gate.js +115 -0
- package/dist/connect/gate.js.map +1 -0
- package/dist/connect/http.d.ts +60 -0
- package/dist/connect/http.js +235 -0
- package/dist/connect/http.js.map +1 -0
- package/dist/connect/open.d.ts +2 -0
- package/dist/connect/open.js +35 -0
- package/dist/connect/open.js.map +1 -0
- package/dist/connect/page.d.ts +5 -0
- package/dist/connect/page.js +69 -0
- package/dist/connect/page.js.map +1 -0
- package/dist/connect/session.d.ts +39 -0
- package/dist/connect/session.js +198 -0
- package/dist/connect/session.js.map +1 -0
- package/dist/connect/solana.d.ts +73 -0
- package/dist/connect/solana.js +267 -0
- package/dist/connect/solana.js.map +1 -0
- package/dist/connect/verify.d.ts +37 -0
- package/dist/connect/verify.js +89 -0
- package/dist/connect/verify.js.map +1 -0
- package/dist/connect-page.js +5143 -0
- package/dist/disclosures.d.ts +22 -6
- package/dist/disclosures.js +34 -8
- package/dist/disclosures.js.map +1 -1
- package/dist/earn/commands.d.ts +46 -0
- package/dist/earn/commands.js +556 -0
- package/dist/earn/commands.js.map +1 -0
- package/dist/earn/solana.d.ts +278 -0
- package/dist/earn/solana.js +302 -0
- package/dist/earn/solana.js.map +1 -0
- package/dist/guide.d.ts +15 -0
- package/dist/guide.js +50 -0
- package/dist/guide.js.map +1 -0
- package/dist/links.d.ts +2 -0
- package/dist/links.js +40 -14
- package/dist/links.js.map +1 -1
- package/dist/position.d.ts +9 -6
- package/dist/position.js +39 -19
- package/dist/position.js.map +1 -1
- package/dist/preflight.d.ts +9 -0
- package/dist/preflight.js +14 -3
- package/dist/preflight.js.map +1 -1
- package/dist/quote.js +24 -7
- package/dist/quote.js.map +1 -1
- package/dist/redact.d.ts +3 -3
- package/dist/redact.js +3 -3
- package/dist/redact.js.map +1 -1
- package/dist/registry-schema.d.ts +82 -5
- package/dist/registry-schema.js +105 -15
- package/dist/registry-schema.js.map +1 -1
- package/dist/registry.d.ts +50 -7
- package/dist/registry.js +122 -21
- package/dist/registry.js.map +1 -1
- package/dist/solana/constants.d.ts +49 -0
- package/dist/solana/constants.js +50 -0
- package/dist/solana/constants.js.map +1 -0
- package/dist/solana/kvault.d.ts +99 -0
- package/dist/solana/kvault.js +192 -0
- package/dist/solana/kvault.js.map +1 -0
- package/dist/solana/layout.d.ts +143 -0
- package/dist/solana/layout.js +209 -0
- package/dist/solana/layout.js.map +1 -0
- package/dist/solana/rpc.d.ts +24 -0
- package/dist/solana/rpc.js +66 -0
- package/dist/solana/rpc.js.map +1 -0
- package/dist/solana/vault.d.ts +153 -0
- package/dist/solana/vault.js +324 -0
- package/dist/solana/vault.js.map +1 -0
- package/dist/{mcp-server.mjs → treasury.mjs} +41101 -49486
- package/dist/version.js +5 -10
- package/dist/version.js.map +1 -1
- package/llms.txt +621 -0
- package/package.json +12 -9
- package/registry/vaults.json +218 -4
- package/dist/mcp/server.d.ts +0 -8
- package/dist/mcp/server.js +0 -368
- package/dist/mcp/server.js.map +0 -1
package/dist/guide.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pointer from `treasury --help` to the guide, `llms.txt`.
|
|
3
|
+
*
|
|
4
|
+
* An agent that runs the CLI without the plugin never sees the rules in the earn skill (ask which chain,
|
|
5
|
+
* show the full terms before a first deposit, post the acknowledgement word for word). A guide that is
|
|
6
|
+
* only in the package or the README is not found: measured on 0.1.2, agents read it 0 times in 9 when it
|
|
7
|
+
* was merely there and 9 times in 9 when `--help` named it. So `--help` names it, here, on the top level
|
|
8
|
+
* and on each skill's command list.
|
|
9
|
+
*
|
|
10
|
+
* Not from the plugin: its Earn skill is the same text and is already loaded, and a pointer there would send
|
|
11
|
+
* every plugin user to re-read it. The plugin folder is recognised by the manifest that sits at its root.
|
|
12
|
+
*
|
|
13
|
+
* `llms.txt` is generated from the skill and the command descriptions by `scripts/llms-txt.ts`, and CI
|
|
14
|
+
* fails when the committed file differs.
|
|
15
|
+
*/
|
|
16
|
+
import { existsSync, realpathSync } from "node:fs";
|
|
17
|
+
import { dirname, resolve } from "node:path";
|
|
18
|
+
import { fileURLToPath } from "node:url";
|
|
19
|
+
import { PACKAGE_VERSION } from "./version.js";
|
|
20
|
+
/**
|
|
21
|
+
* The public copy for THIS version: the file at its release tag, so the guide an agent reads describes the
|
|
22
|
+
* CLI it is running. The default branch does not: it moves with each release, and before v0.1.3 it had no
|
|
23
|
+
* llms.txt at all. A tag exists only once the release is cut, so an unreleased build's URL resolves then.
|
|
24
|
+
*/
|
|
25
|
+
export const GUIDE_URL = `https://raw.githubusercontent.com/TemporaLabs/treasury/v${PACKAGE_VERSION}/llms.txt`;
|
|
26
|
+
/** The folder above this module: the package root for dist/treasury.mjs, plugin/ for the plugin's copy. */
|
|
27
|
+
function root() {
|
|
28
|
+
try {
|
|
29
|
+
return resolve(dirname(realpathSync(fileURLToPath(import.meta.url))), "..");
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The `guide` field of the top-level and per-skill `--help`; undefined when this is the plugin's copy.
|
|
37
|
+
* Only the existence of `llms.txt` beside the CLI is checked, to name its path; nothing in the CLI reads it.
|
|
38
|
+
*/
|
|
39
|
+
export function guidePointer() {
|
|
40
|
+
const base = root();
|
|
41
|
+
if (base !== undefined && (existsSync(resolve(base, ".claude-plugin/plugin.json")) || existsSync(resolve(base, ".codex-plugin/plugin.json"))))
|
|
42
|
+
return undefined;
|
|
43
|
+
const file = base !== undefined && existsSync(resolve(base, "llms.txt")) ? resolve(base, "llms.txt") : undefined;
|
|
44
|
+
return {
|
|
45
|
+
read_first: `Read the guide before you run any command: it carries the rules for using treasury safely (which questions to ask the operator, what to show before a first deposit, what to post word for word). ${file ? `It is the file at "file" below, or at "url".` : `It is at "url".`}`,
|
|
46
|
+
...(file ? { file } : {}),
|
|
47
|
+
url: GUIDE_URL,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=guide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guide.js","sourceRoot":"","sources":["../src/guide.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,2DAA2D,eAAe,WAAW,CAAC;AAE/G,2GAA2G;AAC3G,SAAS,IAAI;IACX,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC9E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;IACpB,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,4BAA4B,CAAC,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,2BAA2B,CAAC,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IAChK,MAAM,IAAI,GAAG,IAAI,KAAK,SAAS,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjH,OAAO;QACL,UAAU,EAAE,qMAAqM,IAAI,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,iBAAiB,EAAE;QAC5R,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzB,GAAG,EAAE,SAAS;KACf,CAAC;AACJ,CAAC"}
|
package/dist/links.d.ts
CHANGED
|
@@ -19,3 +19,5 @@ export interface VaultLinks {
|
|
|
19
19
|
app?: string;
|
|
20
20
|
}
|
|
21
21
|
export declare function linksFor(vault: Pick<VaultEntry, "chainId" | "address" | "chassis">): VaultLinks;
|
|
22
|
+
/** A transaction on the chain's block explorer, from the same table as the address links. */
|
|
23
|
+
export declare function explorerTxUrl(chainId: VaultEntry["chainId"], hash: string): string;
|
package/dist/links.js
CHANGED
|
@@ -1,32 +1,58 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Block explorers, by chain.
|
|
3
3
|
*
|
|
4
|
-
* 🔴 THIS MAP MAY NOT
|
|
5
|
-
* URL — `undefined0x040f…` — which is a well-formed string,
|
|
6
|
-
*
|
|
7
|
-
* schema
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* without adding its row below reintroduces the broken link**, silently. Add the row in the same
|
|
12
|
-
* change, or make the lookup fail loudly instead.
|
|
4
|
+
* 🔴 THIS MAP MAY NOT MISS A CHAIN, and the lookup below throws if it does. An unknown `chainId`
|
|
5
|
+
* used to interpolate `undefined` into the URL — `undefined0x040f…` — which is a well-formed string,
|
|
6
|
+
* so nothing threw and the caller received a link that goes nowhere. That was unreachable only
|
|
7
|
+
* while the registry schema pinned one chain. It now accepts several, so the safety is the throw:
|
|
8
|
+
* a chain added to the schema without a row here does not compile (the map is typed by the schema's
|
|
9
|
+
* own chain ids), and a value that reaches here from outside the schema throws.
|
|
10
|
+
* `registry.test.ts` builds a link for every chain the schema accepts.
|
|
13
11
|
*/
|
|
14
12
|
const EXPLORER = {
|
|
15
13
|
8453: "https://basescan.org/address/",
|
|
14
|
+
42161: "https://arbiscan.io/address/",
|
|
15
|
+
4663: "https://robinhoodchain.blockscout.com/address/",
|
|
16
|
+
1: "https://etherscan.io/address/",
|
|
17
|
+
143: "https://monadscan.com/address/",
|
|
16
18
|
};
|
|
17
19
|
/**
|
|
18
|
-
* The protocol's own front end, where one exists
|
|
19
|
-
* entry gets no link rather than a guessed one — a wrong app URL sends an
|
|
20
|
-
* else's vault, which is worse than sending them nowhere
|
|
20
|
+
* The protocol's own front end, where one exists, the URL shape is known, AND the page resolves. A
|
|
21
|
+
* chassis or chain with no entry gets no link rather than a guessed one — a wrong app URL sends an
|
|
22
|
+
* operator to someone else's vault, which is worse than sending them nowhere, and a dead one teaches
|
|
23
|
+
* them the links are not worth opening.
|
|
24
|
+
*
|
|
25
|
+
* Morpho's app: Base only, and only for vaults it lists. Measured 2026-10-02:
|
|
26
|
+
* `app.morpho.org/arbitrum/vault/<address>` answers 404 for the Arbitrum vault in the registry, and
|
|
27
|
+
* Morpho's API does not know that address on chain 42161; Test 2B on Base is absent the same way.
|
|
28
|
+
* Test 2's Base page and API both resolve.
|
|
21
29
|
*/
|
|
30
|
+
const MORPHO_APP_CHAIN = { 8453: "base" };
|
|
31
|
+
/**
|
|
32
|
+
* Vaults Morpho's app is KNOWN to list, by address. A chain slug alone is not enough: Morpho's app
|
|
33
|
+
* and API list only some Vault V2 vaults, and the registry's Tempora Labs vaults are not all among them
|
|
34
|
+
* (measured 2026-10-02: Test 2 resolves; Test 2B answers 404 and is absent from Morpho's API).
|
|
35
|
+
* Add an address here once its page resolves — never before.
|
|
36
|
+
*/
|
|
37
|
+
const MORPHO_LISTED = new Set(["0x040fCA12673778FEED5DA7b2ccFbbAb0cc0134Cf"]);
|
|
22
38
|
const APP = {
|
|
23
|
-
"morpho-v2": (chainId, address) =>
|
|
39
|
+
"morpho-v2": (chainId, address) => MORPHO_APP_CHAIN[chainId] && MORPHO_LISTED.has(address) ? `https://app.morpho.org/${MORPHO_APP_CHAIN[chainId]}/vault/${address}` : undefined,
|
|
24
40
|
};
|
|
25
41
|
export function linksFor(vault) {
|
|
26
|
-
const
|
|
42
|
+
const explorer = EXPLORER[vault.chainId];
|
|
43
|
+
if (explorer === undefined)
|
|
44
|
+
throw new Error(`no block explorer is recorded for chain ${vault.chainId}; add it to EXPLORER in src/links.ts`);
|
|
45
|
+
const links = { explorer: `${explorer}${vault.address}` };
|
|
27
46
|
const app = APP[vault.chassis]?.(vault.chainId, vault.address);
|
|
28
47
|
if (app)
|
|
29
48
|
links.app = app;
|
|
30
49
|
return links;
|
|
31
50
|
}
|
|
51
|
+
/** A transaction on the chain's block explorer, from the same table as the address links. */
|
|
52
|
+
export function explorerTxUrl(chainId, hash) {
|
|
53
|
+
const explorer = EXPLORER[chainId];
|
|
54
|
+
if (explorer === undefined)
|
|
55
|
+
throw new Error(`no block explorer is recorded for chain ${chainId}; add it to EXPLORER in src/links.ts`);
|
|
56
|
+
return `${explorer.replace(/address\/$/, "tx/")}${hash}`;
|
|
57
|
+
}
|
|
32
58
|
//# sourceMappingURL=links.js.map
|
package/dist/links.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAeA
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../src/links.ts"],"names":[],"mappings":"AAeA;;;;;;;;;;GAUG;AACH,MAAM,QAAQ,GAA0C;IACtD,IAAI,EAAE,+BAA+B;IACrC,KAAK,EAAE,8BAA8B;IACrC,IAAI,EAAE,gDAAgD;IACtD,CAAC,EAAE,+BAA+B;IAClC,GAAG,EAAE,gCAAgC;CACtC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,gBAAgB,GAA2B,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAClE;;;;;GAKG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,4CAA4C,CAAC,CAAC,CAAC;AAC9E,MAAM,GAAG,GAA6E;IACpF,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAChC,gBAAgB,CAAC,OAAO,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,0BAA0B,gBAAgB,CAAC,OAAO,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;CAC/I,CAAC;AASF,MAAM,UAAU,QAAQ,CAAC,KAA0D;IACjF,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,KAAK,CAAC,OAAO,sCAAsC,CAAC,CAAC;IAC5I,MAAM,KAAK,GAAe,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;IACtE,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,IAAI,GAAG;QAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;IACzB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,aAAa,CAAC,OAA8B,EAAE,IAAY;IACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,IAAI,QAAQ,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,OAAO,sCAAsC,CAAC,CAAC;IACtI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,IAAI,EAAE,CAAC;AAC3D,CAAC"}
|
package/dist/position.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Address } from "viem";
|
|
2
2
|
import { type VaultEntry } from "./registry-schema.js";
|
|
3
|
-
import type
|
|
3
|
+
import { type ReadClient } from "./client.js";
|
|
4
4
|
/** The value `entryBasisUsdc` / `accruedYieldUsdc` carry when the event scan failed outright: not a number. */
|
|
5
5
|
export declare const UNKNOWN_AFTER_SCAN_FAILURE = "unknown \u2014 event scan failed; see scan.note";
|
|
6
6
|
/**
|
|
@@ -45,7 +45,7 @@ export interface Position {
|
|
|
45
45
|
sharePriceInAssets: string;
|
|
46
46
|
/**
|
|
47
47
|
* `source` names which RPC served the event scan, never its URL: `"logs rpc"` (the configured one)
|
|
48
|
-
* or `"fallback"` (the endpoint `TREASURY_LOGS_FALLBACK` names,
|
|
48
|
+
* or `"fallback"` (the endpoint `TREASURY_LOGS_FALLBACK` names, the chain's public one by default, used
|
|
49
49
|
* when the configured one could not cover the range). 🔴 `complete` is only a RECONCILIATION and is
|
|
50
50
|
* vacuously true for an empty window — `wholeHistory` is the coverage claim, and the note is written
|
|
51
51
|
* from it.
|
|
@@ -99,8 +99,9 @@ export interface PositionArgs {
|
|
|
99
99
|
* A second read client for the event scan, used only when `client` cannot cover the range: its
|
|
100
100
|
* eth_getLogs error is one no window can be sized from (measured 2026-09-14: publicnode refuses any
|
|
101
101
|
* range older than ~2,000 blocks with "Archive requests require a personal token"), or its window
|
|
102
|
-
* would need more than `maxLogRequests` requests (Alchemy free tier: 10 blocks). The
|
|
103
|
-
*
|
|
102
|
+
* would need more than `maxLogRequests` requests (Alchemy free tier: 10 blocks). The CLI passes
|
|
103
|
+
* the chain's public endpoint: Base's, whose 2,000-block window serves history, or Arbitrum One's,
|
|
104
|
+
* which served an 800,000-block range in one request (measured 2026-10-02). Omitted ⇒ no fallback.
|
|
104
105
|
*/
|
|
105
106
|
fallbackClient?: ReadClient;
|
|
106
107
|
/**
|
|
@@ -117,8 +118,10 @@ export interface PositionArgs {
|
|
|
117
118
|
}
|
|
118
119
|
/**
|
|
119
120
|
* Parses the provider's stated maximum range out of its error, e.g. "limited to a 2,000 range" /
|
|
120
|
-
* "up to a 10 block range"
|
|
121
|
-
*
|
|
121
|
+
* "up to a 10 block range" / "range 798952 exceeds limit of 10000" (Infura on Arbitrum One, measured
|
|
122
|
+
* 2026-10-02) / "query exceeds max block range 100000" (Ethereum's public endpoint, measured
|
|
123
|
+
* 2026-10-11). `undefined` means the failure is NOT a window refusal — a caller must rethrow
|
|
124
|
+
* rather than narrow, or a dead provider and an empty result become the same answer.
|
|
122
125
|
* Exported for `tests/access.ts`, which walks a different contract's logs and needs the same
|
|
123
126
|
* distinction; NOT re-exported from index.ts.
|
|
124
127
|
*/
|
package/dist/position.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { parseAbiItem } from "viem";
|
|
2
2
|
import { erc4626Abi } from "./abi/erc4626.js";
|
|
3
3
|
import { describeError } from "./redact.js";
|
|
4
|
+
import { isRevert } from "./preflight.js";
|
|
4
5
|
import { formatAmount } from "./units.js";
|
|
6
|
+
import { CHAIN_INFO } from "./client.js";
|
|
5
7
|
/** ERC-4626's own events — the only durable record of what an account put in and took out. */
|
|
6
8
|
const depositEvent = parseAbiItem("event Deposit(address indexed sender, address indexed owner, uint256 assets, uint256 shares)");
|
|
7
9
|
const withdrawEvent = parseAbiItem("event Withdraw(address indexed sender, address indexed receiver, address indexed owner, uint256 assets, uint256 shares)");
|
|
@@ -17,13 +19,18 @@ export const UNKNOWN_AFTER_SCAN_FAILURE = "unknown — event scan failed; see sc
|
|
|
17
19
|
export const UNKNOWN_INCOMPLETE_SCAN = "unknown — the scan did not cover this position's history; see scan.note";
|
|
18
20
|
/**
|
|
19
21
|
* Parses the provider's stated maximum range out of its error, e.g. "limited to a 2,000 range" /
|
|
20
|
-
* "up to a 10 block range"
|
|
21
|
-
*
|
|
22
|
+
* "up to a 10 block range" / "range 798952 exceeds limit of 10000" (Infura on Arbitrum One, measured
|
|
23
|
+
* 2026-10-02) / "query exceeds max block range 100000" (Ethereum's public endpoint, measured
|
|
24
|
+
* 2026-10-11). `undefined` means the failure is NOT a window refusal — a caller must rethrow
|
|
25
|
+
* rather than narrow, or a dead provider and an empty result become the same answer.
|
|
22
26
|
* Exported for `tests/access.ts`, which walks a different contract's logs and needs the same
|
|
23
27
|
* distinction; NOT re-exported from index.ts.
|
|
24
28
|
*/
|
|
25
29
|
export function rangeLimitFromError(e) {
|
|
26
|
-
const
|
|
30
|
+
const text = String(e).replace(/,/g, "");
|
|
31
|
+
const m = text.match(/(?:limited to a|up to a)\s+(\d+)\s*(?:block)?\s*range/i) ??
|
|
32
|
+
text.match(/range\s+\d+\s+exceeds limit of\s+(\d+)/i) ??
|
|
33
|
+
text.match(/exceeds max block range\s+(\d+)/i);
|
|
27
34
|
return m ? BigInt(m[1]) : undefined;
|
|
28
35
|
}
|
|
29
36
|
async function scanLogs(client, address, event, owner, from, to, maxRequests, refuseIfCapped, deadline, now) {
|
|
@@ -93,17 +100,6 @@ function txsOf(logs, decimals, symbol) {
|
|
|
93
100
|
amountUsdc: `${formatAmount(l.args.assets ?? 0n, decimals)} ${symbol}`,
|
|
94
101
|
}));
|
|
95
102
|
}
|
|
96
|
-
/**
|
|
97
|
-
* Did the CHAIN refuse this, or did the RPC fail to ask it? Every failure used to read as "cannot pay",
|
|
98
|
-
* so one HTTP 502 on the first simulation reported a fully-exitable position as unexitable AND blamed
|
|
99
|
-
* the vault for it (measured through a proxy that failed exactly one call: one attempt made, the vault
|
|
100
|
-
* never asked, `exitableNow: "unknown"`, note "the refusal is the vault's").
|
|
101
|
-
* viem's own error chain separates them: a real revert carries a ContractFunctionRevertedError or an
|
|
102
|
-
* ExecutionRevertedError; a transport failure does not.
|
|
103
|
-
*/
|
|
104
|
-
function isRevert(e) {
|
|
105
|
-
return e instanceof BaseError && e.walk((x) => x instanceof ContractFunctionRevertedError || x instanceof ExecutionRevertedError) !== null;
|
|
106
|
-
}
|
|
107
103
|
/**
|
|
108
104
|
* At most two simulated withdrawals — the whole position, then the vault's own liquid balance — and the
|
|
109
105
|
* answer is whichever the chain accepts. Simulation rather than arithmetic because the ceiling is
|
|
@@ -184,6 +180,19 @@ async function measureExit(a) {
|
|
|
184
180
|
// must NOT happen is describing it as something it was not: the note says what was
|
|
185
181
|
// asked, and a success is believed whatever bound produced it.
|
|
186
182
|
const boundedByLiquid = liquid < value;
|
|
183
|
+
// A liquid bound of 0 is no withdrawal to ask about: say it was not tried, never count it as a refusal.
|
|
184
|
+
if (liquid === 0n) {
|
|
185
|
+
return {
|
|
186
|
+
exitableNow: "unknown",
|
|
187
|
+
measuredAs: "refused, size unknown",
|
|
188
|
+
instantLiquidity: liquidText,
|
|
189
|
+
maxWithdrawSays: maxText,
|
|
190
|
+
// Whether a smaller amount can pass depends on the chassis, as in the liquid-bound note below.
|
|
191
|
+
note: `the vault REFUSED a full-position withdrawal at this block. Its liquid balance is ${liquidText}, so no smaller withdrawal bounded by it was tried. ${vault.chassis === "fusion"
|
|
192
|
+
? "This chassis pays withdrawals from the vault's own balance unless the fund has instant-withdrawal fuses, so a smaller amount is likely to be refused too until the fund unwinds"
|
|
193
|
+
: "This chassis also pays out of its markets, so a smaller amount may still pass"} — quote one with \`earn quote --direction withdraw\`. The refusal came from the vault, but it is not a shortfall this client could size.${advisory}`,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
187
196
|
const askedFor = boundedByLiquid ? liquid : value;
|
|
188
197
|
const bounded = await attempt(askedFor);
|
|
189
198
|
if (bounded === "paid" && boundedByLiquid) {
|
|
@@ -192,7 +201,13 @@ async function measureExit(a) {
|
|
|
192
201
|
measuredAs: "vault's liquid balance",
|
|
193
202
|
instantLiquidity: liquidText,
|
|
194
203
|
maxWithdrawSays: maxText,
|
|
195
|
-
|
|
204
|
+
// Only Fusion pays a withdrawal from the vault's own balance, so only there is the idle balance the
|
|
205
|
+
// ceiling and "the rest needs an unwind" the explanation. A Morpho Vault V2 also pays through its
|
|
206
|
+
// liquidity adapter: there the idle balance is a bound that was probed and paid, not the most that can
|
|
207
|
+
// come out (#78; sizing the rest is #69).
|
|
208
|
+
note: vault.chassis === "fusion"
|
|
209
|
+
? `the whole position does NOT come out at this block: this chassis pays withdrawals from the vault's own balance, and the rest is deployed. ${fmt(liquid)} of ${fmt(value)} is payable now; the remainder needs the fund to unwind first.${advisory}`
|
|
210
|
+
: `the whole position does NOT come out at this block; a withdrawal of ${fmt(liquid)}, the vault's idle balance, simulates OK. This chassis also pays out of its markets, so more than that may be withdrawable now; the larger amount was not sized.${advisory}`,
|
|
196
211
|
};
|
|
197
212
|
}
|
|
198
213
|
// 🔴 A success is a success whatever bound produced it. The old gate reused the ATTEMPT condition as
|
|
@@ -314,6 +329,11 @@ export async function getPosition(args) {
|
|
|
314
329
|
// confident "0 USDC"). `!wholeHistory` subsumes both, including the honest zero.
|
|
315
330
|
const basisUnknown = !wholeHistory;
|
|
316
331
|
const fmtA = (x) => `${formatAmount(x, vault.asset.decimals)} ${vault.asset.symbol}`;
|
|
332
|
+
// The notes name the variable an operator would set, and that differs by chain.
|
|
333
|
+
const chain = CHAIN_INFO[vault.chainId];
|
|
334
|
+
const logsEnv = chain.logsRpcEnv;
|
|
335
|
+
// TREASURY_LOGS_FALLBACK can NAME a fallback on Base only; elsewhere it can only forbid one.
|
|
336
|
+
const fallbackNamedBy = vault.chainId === 8453 ? `TREASURY_LOGS_FALLBACK, ${chain.name}'s public endpoint by default` : `${chain.name}'s public endpoint; TREASURY_LOGS_FALLBACK=off forbids it`;
|
|
317
337
|
return {
|
|
318
338
|
vault: vault.symbol,
|
|
319
339
|
principal,
|
|
@@ -338,12 +358,12 @@ export async function getPosition(args) {
|
|
|
338
358
|
...(providerWindow !== undefined ? { providerWindow: providerWindow.toString() } : {}),
|
|
339
359
|
source,
|
|
340
360
|
wholeHistory,
|
|
341
|
-
note: (handover && !scanFailure ? `the configured logs RPC could not cover this range (${handover}), so the fallback endpoint (
|
|
342
|
-
? `event scan FAILED (${scanFailure}): the provider's eth_getLogs error was not one this client can size a window from, so no history was read — basis and yield are unknown, not zero. Set
|
|
361
|
+
note: (handover && !scanFailure ? `the configured logs RPC could not cover this range (${handover}), so the fallback endpoint (${fallbackNamedBy}) served the scan. ` : "") + (scanFailure
|
|
362
|
+
? `event scan FAILED (${scanFailure}): the provider's eth_getLogs error was not one this client can size a window from, so no history was read — basis and yield are unknown, not zero. Set ${logsEnv} to a provider with a known window (Alchemy, Infura, ${chain.name} public), or use the agent's own deposit receipts.`
|
|
343
363
|
: wholeHistory
|
|
344
364
|
? "the scan covered every block from the vault's deployment, and shares in − shares out reconciles to the balance: the basis covers this position's whole history"
|
|
345
365
|
: capped
|
|
346
|
-
? `the scan was CUT SHORT — ${block - fromBlock + 1n} of the ${block - (deployed ?? 0n) + 1n} blocks since deployment, at the provider's ${providerWindow ?? "?"}-block eth_getLogs window and ${timedOut ? `a ${Math.round((args.budgetMs ?? 30_000) / 1000)}s time budget` : `${maxReq} requests`}; covering the rest needs about ${providerWindow ? (block - (deployed ?? 0n) + providerWindow) / providerWindow : BigInt(maxReq)} requests per event. ${complete ? "Shares in − shares out happens to reconcile over that window, which an empty window does vacuously — it is NOT evidence the history was covered." : "Basis and yield are unknown, not bounds."} Set
|
|
366
|
+
? `the scan was CUT SHORT — ${block - fromBlock + 1n} of the ${block - (deployed ?? 0n) + 1n} blocks since deployment, at the provider's ${providerWindow ?? "?"}-block eth_getLogs window and ${timedOut ? `a ${Math.round((args.budgetMs ?? 30_000) / 1000)}s time budget` : `${maxReq} requests`}; covering the rest needs about ${providerWindow ? (block - (deployed ?? 0n) + providerWindow) / providerWindow : BigInt(maxReq)} requests per event. ${complete ? "Shares in − shares out happens to reconcile over that window, which an empty window does vacuously — it is NOT evidence the history was covered." : "Basis and yield are unknown, not bounds."} Set ${logsEnv} to a provider with a wide eth_getLogs range${timedOut ? "" : ", raise max_log_requests"}, or use the agent's own deposit receipts.`
|
|
347
367
|
: complete
|
|
348
368
|
? `shares in − shares out reconciles over the ${block - fromBlock + 1n} blocks scanned, but the scan started at block ${fromBlock}${deployed === undefined ? " and the registry does not record when this vault was deployed" : `, after the vault's deployment block ${deployed}`} — deposits and withdrawals before it cancel out unseen, so this is a WINDOW, NOT the whole history. Omit lookback_blocks to scan from deployment.`
|
|
349
369
|
: "shares in − shares out ≠ balance: history predates the window or shares moved by transfer — basis and yield are unknown, not totals"),
|
package/dist/position.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"position.js","sourceRoot":"","sources":["../src/position.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,YAAY,EAAgB,MAAM,MAAM,CAAC;AACpH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG1C,8FAA8F;AAC9F,MAAM,YAAY,GAAG,YAAY,CAAC,8FAA8F,CAAC,CAAC;AAClI,MAAM,aAAa,GAAG,YAAY,CAChC,yHAAyH,CAC1H,CAAC;AAEF,+GAA+G;AAC/G,MAAM,CAAC,MAAM,0BAA0B,GAAG,4CAA4C,CAAC;AAEvF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,yEAAyE,CAAC;AA8GjH;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAU;IAC5C,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;IACtG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvC,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,MAAkB,EAClB,OAAgB,EAChB,KAAQ,EACR,KAAc,EACd,IAAY,EACZ,EAAU,EACV,WAAmB,EACnB,cAAuB,EACvB,QAAgB,EAChB,GAAiB;IAEjB,MAAM,UAAU,GAAG,EAAE,KAAK,EAAW,CAAC;IACtC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACjE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,CAAC;QACrB,yFAAyF;QACzF,6FAA6F;QAC7F,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;QAC7C,IAAI,cAAc,IAAI,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9F,sGAAsG;QACtG,MAAM,GAAG,GAAkD,EAAW,CAAC;QACvE,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,EAAE,IAAI,IAAI,IAAI,QAAQ,GAAG,WAAW,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAChE,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACpG,GAAiB,CAAC,IAAI,CAAC,GAAI,KAAmB,CAAC,CAAC;YACjD,QAAQ,IAAI,CAAC,CAAC;YACd,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACf,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;IACnF,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,eAAgB,SAAQ,KAAK;IAEtB;IACA;IAFX,YACW,MAAc,EACd,MAAc;QAEvB,KAAK,CAAC,kBAAkB,MAAM,mCAAmC,MAAM,0BAA0B,CAAC,CAAC;QAH1F,WAAM,GAAN,MAAM,CAAQ;QACd,WAAM,GAAN,MAAM,CAAQ;IAGzB,CAAC;CACF;AAyBD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC;AAEhC;;;;;;GAMG;AACH,SAAS,KAAK,CAAC,IAAgB,EAAE,QAAgB,EAAE,MAAc;IAC/D,MAAM,GAAG,GAAG,CAAC,CAAW,EAAoB,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC;IACxF,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,CAAC,eAAe;QACzB,WAAW,EAAE,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE;QACrE,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,EAAE;KACvE,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,CAAC,YAAY,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,6BAA6B,IAAI,CAAC,YAAY,sBAAsB,CAAC,KAAK,IAAI,CAAC;AAC7I,CAAC;AAED;;;;;;;;GAQG;AACH,KAAK,UAAU,WAAW,CAAC,CAQ1B;IACC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IACtD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAE5F,mFAAmF;IACnF,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;QAClB,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,IAAI,EAAE,8BAA8B,EAAE,CAAC;IACtK,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,EAAE,EAAyB,EAAqE,EAAE;QAClH,IAAI,CAAC;YACH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;QAClD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAoB,CAAC;QACvJ,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAoB,CAAC;KAChJ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC;IAChC,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5I,MAAM,OAAO,GACX,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtI,iGAAiG;IACjG,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,uBAAuB,OAAO,4DAA4D,CAAC,CAAC,CAAC,EAAE,CAAC;IAErK,yEAAyE;IACzE,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO;YACL,WAAW,EAAE,GAAG,CAAC,EAAE,CAAC;YACpB,UAAU,EAAE,qBAAqB;YACjC,gBAAgB,EAAE,UAAU;YAC5B,eAAe,EAAE,OAAO;YACxB,IAAI,EAAE,qBAAqB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,+EAA+E;SACpK,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,EAAE,MAAc,EAA8C,EAAE;QACnF,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,QAAQ;YAAE,OAAO,YAAY,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/J,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QAChD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,IAAY,EAAoB,EAAE,CAAC,CAAC;QACtD,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,cAAc;QAC1B,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,OAAO;QACxB,IAAI,EAAE,GAAG,IAAI,2HAA2H,QAAQ,EAAE;KACnJ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,iEAAiE,QAAQ,EAAE,EAAE,CAAC;IAC7M,CAAC;IACD,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC,+DAA+D,CAAC,CAAC;IAE9G,sGAAsG;IACtG,iGAAiG;IACjG,sCAAsC;IACtC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,+FAA+F,CAAC,CAAC;IAC7I,+FAA+F;IAC/F,0FAA0F;IAC1F,sGAAsG;IACtG,mFAAmF;IACnF,+DAA+D;IAC/D,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,CAAC;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,OAAO,KAAK,MAAM,IAAI,eAAe,EAAE,CAAC;QAC1C,OAAO;YACL,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC;YACxB,UAAU,EAAE,wBAAwB;YACpC,gBAAgB,EAAE,UAAU;YAC5B,eAAe,EAAE,OAAO;YACxB,IAAI,EAAE,6IAA6I,GAAG,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,iEAAiE,QAAQ,EAAE;SAC3P,CAAC;IACJ,CAAC;IACD,qGAAqG;IACrG,sGAAsG;IACtG,gGAAgG;IAChG,wCAAwC;IACxC,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,IAAI,EAAE,iNAAiN,QAAQ,EAAE,EAAE,CAAC;IAC7V,CAAC;IACD,IAAI,OAAO,KAAK,YAAY;QAAE,OAAO,UAAU,CAAC,yFAAyF,CAAC,CAAC;IAC3I,OAAO;QACL,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,uBAAuB;QACnC,gBAAgB,EAAE,UAAU;QAC5B,eAAe,EAAE,OAAO;QACxB,kGAAkG;QAClG,6FAA6F;QAC7F,+BAA+B;QAC/B,IAAI,EAAE,qBAAqB,eAAe,CAAC,CAAC,CAAC,qEAAqE,UAAU,GAAG,CAAC,CAAC,CAAC,2DAA2D,UAAU,qEAAqE,+HAA+H,QAAQ,EAAE;KACtZ,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAkB;IAClD,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,IAAI,QAAU,CAAC;IACnD,MAAM,QAAQ,GAAG,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAEpD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1D,MAAM,CAAC,cAAc,EAAE;QACvB,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9G,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;KACpH,CAAC,CAAC;IACH,MAAM,KAAK,GACT,MAAM,KAAK,EAAE;QACX,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,YAAY,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAE9H,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACjC,iHAAiH;IACjH,mGAAmG;IACnG,yGAAyG;IACzG,qGAAqG;IACrG,uBAAuB;IACvB,MAAM,YAAY,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC;IACzG,MAAM,QAAQ,GAAG,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,CAAC;IAEnD,kGAAkG;IAClG,mGAAmG;IACnG,gDAAgD;IAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IACjG,MAAM,UAAU,GAAG,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,MAAM,GACV,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;IACrI,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,IAAI,GAAG,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC;IAErC,mGAAmG;IACnG,iEAAiE;IACjE,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAa,EAAE,cAAuB,EAAyB,EAAE;QACvF,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC1H,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3H,OAAO,CAAC,CAAoB,EAAE,CAAoB,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,8FAA8F;IAC9F,qGAAqG;IACrG,yEAAyE;IACzE,kGAAkG;IAClG,+FAA+F;IAC/F,yEAAyE;IACzE,IAAI,WAA+B,CAAC;IACpC,IAAI,MAAM,GAA4B,UAAU,CAAC;IACjD,IAAI,QAA4B,CAAC;IACjC,MAAM,KAAK,GAAS,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACtF,IAAI,MAAoB,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,QAAQ,KAAK,SAAS,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,YAAqB,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,WAAW,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;YAC1C,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,YAAY,YAAY,eAAe,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC;YACtI,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACzC,6FAA6F;gBAC7F,2CAA2C;gBAC3C,MAAM,GAAG,UAAU,CAAC;YACtB,CAAC;YAAC,OAAO,aAAsB,EAAE,CAAC;gBAChC,WAAW,GAAG,aAAa,QAAQ,eAAe,aAAa,CAAC,aAAa,CAAC,EAAE,CAAC;gBACjF,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACpB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;IACnB,MAAM,SAAS,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IAChF,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,GAAG,EAAE,IAAI,QAAQ,CAAC;IAC7C,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,eAAe,GAAG,eAAe,CAAC;IAChD,iGAAiG;IACjG,sFAAsF;IACtF,MAAM,QAAQ,GAAG,eAAe,GAAG,eAAe,KAAK,MAAM,CAAC;IAC9D,8FAA8F;IAC9F,qGAAqG;IACrG,iGAAiG;IACjG,oFAAoF;IACpF,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,SAAS,IAAI,QAAQ,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC;IAC5F,4FAA4F;IAC5F,kGAAkG;IAClG,mEAAmE;IACnE,gGAAgG;IAChG,gGAAgG;IAChG,yFAAyF;IACzF,gGAAgG;IAChG,iFAAiF;IACjF,MAAM,YAAY,GAAG,CAAC,YAAY,CAAC;IAEnC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC7F,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,MAAM;QACnB,SAAS;QACT,WAAW,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QACtD,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;QACtE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC;QACtB,IAAI;QACJ,kGAAkG;QAClG,0EAA0E;QAC1E,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/G,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACzH,kBAAkB,EAAE,GAAG,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,YAAY;QAC7G,IAAI,EAAE;YACJ,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC/B,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;YACzB,QAAQ,EAAE,IAAI,CAAC,MAAM;YACrB,WAAW,EAAE,GAAG,CAAC,MAAM;YACvB,UAAU,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACjE,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YACjE,QAAQ;YACR,MAAM;YACN,GAAG,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,MAAM;YACN,YAAY;YACZ,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,uDAAuD,QAAQ,2GAA2G,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW;gBAC/N,CAAC,CAAC,sBAAsB,WAAW,mRAAmR;gBACtT,CAAC,CAAC,YAAY;oBACZ,CAAC,CAAC,gKAAgK;oBAClK,CAAC,CAAC,MAAM;wBACN,CAAC,CAAC,4BAA4B,KAAK,GAAG,SAAS,GAAG,EAAE,WAAW,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,EAAE,+CAA+C,cAAc,IAAI,GAAG,iCAAiC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,mCAAmC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,QAAQ,CAAC,CAAC,CAAC,kJAAkJ,CAAC,CAAC,CAAC,0CAA0C,0EAA0E,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,4CAA4C;wBACtyB,CAAC,CAAC,QAAQ;4BACR,CAAC,CAAC,8CAA8C,KAAK,GAAG,SAAS,GAAG,EAAE,kDAAkD,SAAS,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,wCAAwC,QAAQ,EAAE,oJAAoJ;4BACta,CAAC,CAAC,qIAAqI,CAAC;SACjJ;QACD,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC;KAC/B,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"position.js","sourceRoot":"","sources":["../src/position.ts"],"names":[],"mappings":"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"}
|
package/dist/preflight.d.ts
CHANGED
|
@@ -27,6 +27,15 @@ export declare function classifyRevert(obs: RevertObservation): {
|
|
|
27
27
|
status: PreflightStatus;
|
|
28
28
|
note: string;
|
|
29
29
|
};
|
|
30
|
+
/**
|
|
31
|
+
* Did the CHAIN refuse this, or did the RPC fail to ask it? Every failure used to read as "cannot pay",
|
|
32
|
+
* so one HTTP 502 on the first simulation reported a fully-exitable position as unexitable AND blamed
|
|
33
|
+
* the vault for it (measured through a proxy that failed exactly one call: one attempt made, the vault
|
|
34
|
+
* never asked, `exitableNow: "unknown"`, note "the refusal is the vault's").
|
|
35
|
+
* viem's own error chain separates them: a real revert carries a ContractFunctionRevertedError or an
|
|
36
|
+
* ExecutionRevertedError; a transport failure does not.
|
|
37
|
+
*/
|
|
38
|
+
export declare function isRevert(e: unknown): boolean;
|
|
30
39
|
/** Pulls the revert payload out of viem's error chain. Returns undefined for anything that is not a definite revert. */
|
|
31
40
|
export declare function extractRevert(err: unknown): RevertObservation | undefined;
|
|
32
41
|
export interface PreflightResult {
|
package/dist/preflight.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BaseError, ContractFunctionRevertedError, } from "viem";
|
|
1
|
+
import { BaseError, ContractFunctionRevertedError, ExecutionRevertedError, } from "viem";
|
|
2
2
|
import { erc4626Abi, knownRevertSelectors } from "./abi/erc4626.js";
|
|
3
3
|
import { erc4626Chassis } from "./registry-schema.js";
|
|
4
4
|
import { describeError } from "./redact.js";
|
|
@@ -34,6 +34,17 @@ export function classifyRevert(obs) {
|
|
|
34
34
|
`insufficient asset balance at the depositor; a chassis-specific gate this client has not seen. Raw: ${obs.raw ?? "n/a"}.`,
|
|
35
35
|
};
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Did the CHAIN refuse this, or did the RPC fail to ask it? Every failure used to read as "cannot pay",
|
|
39
|
+
* so one HTTP 502 on the first simulation reported a fully-exitable position as unexitable AND blamed
|
|
40
|
+
* the vault for it (measured through a proxy that failed exactly one call: one attempt made, the vault
|
|
41
|
+
* never asked, `exitableNow: "unknown"`, note "the refusal is the vault's").
|
|
42
|
+
* viem's own error chain separates them: a real revert carries a ContractFunctionRevertedError or an
|
|
43
|
+
* ExecutionRevertedError; a transport failure does not.
|
|
44
|
+
*/
|
|
45
|
+
export function isRevert(e) {
|
|
46
|
+
return e instanceof BaseError && e.walk((x) => x instanceof ContractFunctionRevertedError || x instanceof ExecutionRevertedError) !== null;
|
|
47
|
+
}
|
|
37
48
|
/** Pulls the revert payload out of viem's error chain. Returns undefined for anything that is not a definite revert. */
|
|
38
49
|
export function extractRevert(err) {
|
|
39
50
|
if (!(err instanceof BaseError))
|
|
@@ -127,8 +138,8 @@ export async function preflightDeposit(args) {
|
|
|
127
138
|
const previewShares = await client.readContract({ address: vault.address, abi: erc4626Abi, functionName: "previewDeposit", args: [assets] });
|
|
128
139
|
quotes.previewShares = `${formatAmount(previewShares, vault.shareDecimals)} ${vault.symbol}`;
|
|
129
140
|
}
|
|
130
|
-
catch {
|
|
131
|
-
findings.push("previewDeposit() reverted; no shares quote");
|
|
141
|
+
catch (e) {
|
|
142
|
+
findings.push(isRevert(e) ? "previewDeposit() reverted; no shares quote" : `previewDeposit() could not be read, so no shares quote (the RPC failed, not the vault): ${describeError(e)}`);
|
|
132
143
|
}
|
|
133
144
|
// The verdict: simulate the real call from the real depositor.
|
|
134
145
|
try {
|
package/dist/preflight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,6BAA6B,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"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"}
|
package/dist/quote.js
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
import { erc4626Abi } from "./abi/erc4626.js";
|
|
2
2
|
import { describeError } from "./redact.js";
|
|
3
3
|
import { parseAmount, formatAmount } from "./units.js";
|
|
4
|
-
import { preflightDeposit, extractRevert } from "./preflight.js";
|
|
4
|
+
import { preflightDeposit, extractRevert, isRevert } from "./preflight.js";
|
|
5
5
|
export async function quoteDeposit(args) {
|
|
6
6
|
const { vault, depositor, client } = args;
|
|
7
7
|
const assets = parseAmount(args.assetsHuman, vault.asset.decimals, `deposit amount (${vault.asset.symbol})`);
|
|
8
8
|
const pre = await preflightDeposit({ vault, depositor, assetsHuman: args.assetsHuman, client });
|
|
9
|
+
let previewError;
|
|
9
10
|
const [previewShares, oneShareInAssets] = await Promise.all([
|
|
10
|
-
client.readContract({ address: vault.address, abi: erc4626Abi, functionName: "previewDeposit", args: [assets] }).catch(() =>
|
|
11
|
+
client.readContract({ address: vault.address, abi: erc4626Abi, functionName: "previewDeposit", args: [assets] }).catch((e) => {
|
|
12
|
+
previewError = e;
|
|
13
|
+
return undefined;
|
|
14
|
+
}),
|
|
11
15
|
client.readContract({ address: vault.address, abi: erc4626Abi, functionName: "convertToAssets", args: [10n ** BigInt(vault.shareDecimals)] }),
|
|
12
16
|
]);
|
|
13
17
|
const q = {
|
|
14
18
|
vault: vault.symbol,
|
|
15
19
|
depositor,
|
|
16
20
|
amountUsdc: `${formatAmount(assets, vault.asset.decimals)} ${vault.asset.symbol}`,
|
|
17
|
-
expectedShares: previewShares
|
|
21
|
+
expectedShares: previewShares !== undefined
|
|
22
|
+
? `${formatAmount(previewShares, vault.shareDecimals)} ${vault.symbol}`
|
|
23
|
+
: isRevert(previewError)
|
|
24
|
+
? "unavailable (previewDeposit reverted)"
|
|
25
|
+
: `unavailable (previewDeposit could not be read; the RPC failed, not the vault: ${describeError(previewError)})`,
|
|
18
26
|
sharePriceInAssets: `${formatAmount(oneShareInAssets, vault.asset.decimals)} ${vault.asset.symbol} per share`,
|
|
19
27
|
preflight: pre,
|
|
20
28
|
canProceed: pre.canDeposit,
|
|
@@ -49,14 +57,23 @@ export async function quoteWithdraw(args) {
|
|
|
49
57
|
// "approve first" wording is wrong here (it was reused, and told an agent to approve USDC
|
|
50
58
|
// when the vault simply had 0.80 USDC liquid — measured 2026-09-13 on a Fusion vault).
|
|
51
59
|
const reason = obs.reason ?? "";
|
|
60
|
+
const said = reason || obs.selector || "no reason returned";
|
|
52
61
|
if (toBurn !== undefined && held < toBurn) {
|
|
53
|
-
note = `withdraw() reverted: the owner holds ${formatAmount(held, vault.shareDecimals)} ${vault.symbol} against ${formatAmount(toBurn, vault.shareDecimals)} needed — insufficient shares. (${
|
|
62
|
+
note = `withdraw() reverted: the owner holds ${formatAmount(held, vault.shareDecimals)} ${vault.symbol} against ${formatAmount(toBurn, vault.shareDecimals)} needed — insufficient shares. (${said})`;
|
|
54
63
|
}
|
|
55
|
-
else if (/transfer amount exceeds balance|ERC20InsufficientBalance/i.test(reason) || liquid < assets) {
|
|
56
|
-
|
|
64
|
+
else if (vault.chassis === "fusion" && (/transfer amount exceeds balance|ERC20InsufficientBalance/i.test(reason) || liquid < assets)) {
|
|
65
|
+
// Only Fusion pays a withdrawal from the vault's own balance (and, where it has them, its
|
|
66
|
+
// instant-withdrawal fuses), so only there does idle balance below the amount explain a revert.
|
|
67
|
+
// A Morpho Vault V2 holds almost no idle asset and pays out of its markets: reading
|
|
68
|
+
// `liquid < assets` there reported every revert as this note and hid the real one (#78).
|
|
69
|
+
note = `withdraw() reverted ("${said}"): the vault holds ${formatAmount(liquid, vault.asset.decimals)} ${vault.asset.symbol} liquid against ${formatAmount(assets, vault.asset.decimals)} requested — this chassis pays withdrawals from its own balance in the same block; the rest is deployed and needs the fund to unwind first. Up to the liquid amount can come out now: ask the operator whether to withdraw that, another amount, or wait. maxWithdraw() (${maxW === undefined ? "reverted" : formatAmount(maxW, vault.asset.decimals)}) does not know this.`;
|
|
70
|
+
}
|
|
71
|
+
else if (vault.chassis === "morpho-v2") {
|
|
72
|
+
const shares = toBurn === undefined ? "previewWithdraw reverted, so the shares needed are unknown" : `the owner holds enough shares (${formatAmount(held, vault.shareDecimals)} against ${formatAmount(toBurn, vault.shareDecimals)} needed)`;
|
|
73
|
+
note = `withdraw() reverted "${said}" for ${formatAmount(assets, vault.asset.decimals)} ${vault.asset.symbol}; ${shares}. A Morpho Vault V2 pays a withdrawal from its idle ${vault.asset.symbol} and then through its liquidity adapter, so the revert can come from the vault or from a market it withdraws from; the reason above is the chain's own. A smaller amount may still pass: say so, and quote only an amount the operator names.`;
|
|
57
74
|
}
|
|
58
75
|
else {
|
|
59
|
-
note = `withdraw() reverted "${
|
|
76
|
+
note = `withdraw() reverted "${said}" — not a balance or liquidity shortfall; treat as a vault-side refusal.`;
|
|
60
77
|
}
|
|
61
78
|
}
|
|
62
79
|
else {
|
package/dist/quote.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAwB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"quote.js","sourceRoot":"","sources":["../src/quote.ts"],"names":[],"mappings":"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"}
|
package/dist/redact.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* `Request body:` / `http(s)://…` content masked → the error's name.
|
|
14
14
|
*/
|
|
15
15
|
export declare function describeError(e: unknown, max?: number): string;
|
|
16
|
-
/** Register the source of known-secret values. Called by
|
|
16
|
+
/** Register the source of known-secret values. Called by `buildCommands()` before any command runs. */
|
|
17
17
|
export declare function registerSecretSource(f: () => readonly string[]): void;
|
|
18
18
|
/**
|
|
19
19
|
* Mask literal secret VALUES wherever they appear, in any shape.
|
|
@@ -34,8 +34,8 @@ export declare function registerSecretSource(f: () => readonly string[]): void;
|
|
|
34
34
|
* split across whitespace. No implementation can, and attempting it would over-redact wildly; those
|
|
35
35
|
* are the residual the shape rules below exist for (review).
|
|
36
36
|
*
|
|
37
|
-
* ⚠️ VALUE MASKING IS A PROPERTY OF THE
|
|
38
|
-
* called
|
|
37
|
+
* ⚠️ VALUE MASKING IS A PROPERTY OF THE COMMANDS, NOT OF THIS LIBRARY. `registerSecretSource` is
|
|
38
|
+
* called in `buildCommands()`. A consumer importing `describeError`/`redactEndpoints`
|
|
39
39
|
* directly gets `secretSource = () => []` and therefore the shape rules only — which degrades safely
|
|
40
40
|
* and is the documented backstop, but is not inherited.
|
|
41
41
|
*/
|
package/dist/redact.js
CHANGED
|
@@ -35,7 +35,7 @@ export function describeError(e, max = 200) {
|
|
|
35
35
|
* process (tests do it), and a snapshot taken at import time would go stale.
|
|
36
36
|
*/
|
|
37
37
|
let secretSource = () => [];
|
|
38
|
-
/** Register the source of known-secret values. Called by
|
|
38
|
+
/** Register the source of known-secret values. Called by `buildCommands()` before any command runs. */
|
|
39
39
|
export function registerSecretSource(f) {
|
|
40
40
|
secretSource = f;
|
|
41
41
|
}
|
|
@@ -58,8 +58,8 @@ export function registerSecretSource(f) {
|
|
|
58
58
|
* split across whitespace. No implementation can, and attempting it would over-redact wildly; those
|
|
59
59
|
* are the residual the shape rules below exist for (review).
|
|
60
60
|
*
|
|
61
|
-
* ⚠️ VALUE MASKING IS A PROPERTY OF THE
|
|
62
|
-
* called
|
|
61
|
+
* ⚠️ VALUE MASKING IS A PROPERTY OF THE COMMANDS, NOT OF THIS LIBRARY. `registerSecretSource` is
|
|
62
|
+
* called in `buildCommands()`. A consumer importing `describeError`/`redactEndpoints`
|
|
63
63
|
* directly gets `secretSource = () => []` and therefore the shape rules only — which degrades safely
|
|
64
64
|
* and is the documented backstop, but is not inherited.
|
|
65
65
|
*/
|