@dfm-fi/agent 0.2.1083 → 0.2.1085
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -10
- package/dist/api-client.d.ts +28 -10
- package/dist/api-client.d.ts.map +1 -1
- package/dist/api-client.js +48 -14
- package/dist/api-client.js.map +1 -1
- package/dist/control-flow.test.d.ts +2 -0
- package/dist/control-flow.test.d.ts.map +1 -0
- package/dist/control-flow.test.js +259 -0
- package/dist/control-flow.test.js.map +1 -0
- package/dist/create-flow.d.ts +0 -2
- package/dist/create-flow.d.ts.map +1 -1
- package/dist/create-flow.js +3 -3
- package/dist/create-flow.js.map +1 -1
- package/dist/examples/launch-deposit-redeem.js +4 -5
- package/dist/examples/launch-deposit-redeem.js.map +1 -1
- package/dist/keyless.d.ts +2 -1
- package/dist/keyless.d.ts.map +1 -1
- package/dist/keyless.js.map +1 -1
- package/dist/manager-flow.d.ts +52 -17
- package/dist/manager-flow.d.ts.map +1 -1
- package/dist/manager-flow.js +177 -4
- package/dist/manager-flow.js.map +1 -1
- package/dist/mcp-server.d.ts.map +1 -1
- package/dist/mcp-server.js +152 -62
- package/dist/mcp-server.js.map +1 -1
- package/dist/money-path.test.js +12 -0
- package/dist/money-path.test.js.map +1 -1
- package/dist/types.d.ts +18 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/zap-v2-flow.d.ts.map +1 -1
- package/dist/zap-v2-flow.js +13 -1
- package/dist/zap-v2-flow.js.map +1 -1
- package/dist/zap-v2-flow.pending.test.js +28 -0
- package/dist/zap-v2-flow.pending.test.js.map +1 -1
- package/package.json +2 -2
- package/skills.md +42 -16
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ full DFM v2 **launch → deposit → redeem** DTF flow against the **live API**
|
|
|
17
17
|
(`https://n2-api.dfm.finance/api/v2`) programmatically — no web-UI clicking.
|
|
18
18
|
|
|
19
19
|
This is a **test harness for the founder + partner**: point your own AI agent
|
|
20
|
-
(Claude Desktop / Claude Code / any MCP client) at the live
|
|
20
|
+
(Claude Desktop / Claude Code / any MCP client) at the live mainnet API,
|
|
21
21
|
authenticate with your **own test-wallet keypair loaded locally**, and run the
|
|
22
22
|
whole vault lifecycle — create a DTF, deposit USDC, redeem back to USDC — from
|
|
23
23
|
the agent.
|
|
@@ -81,6 +81,10 @@ The WRITE flows then follow **prepare → sign locally → submit → (confirm/p
|
|
|
81
81
|
`/zap-v2/status` until the backend orchestrator has cranked all swap legs →
|
|
82
82
|
`/zap-…-v2/close/prepare` → sign → submit. The agent signs **only** the two
|
|
83
83
|
user-side boundary transactions; the backend cranks the permissionless legs.
|
|
84
|
+
- **admin acceptance / policy**: acceptance signs one transaction and then calls
|
|
85
|
+
its verification endpoint; policy creates once or amends with ordered
|
|
86
|
+
propose → accept transactions. Both return success only after the API re-reads
|
|
87
|
+
chain state and reconciles its database shadow.
|
|
84
88
|
|
|
85
89
|
## Tools
|
|
86
90
|
|
|
@@ -96,12 +100,14 @@ The WRITE flows then follow **prepare → sign locally → submit → (confirm/p
|
|
|
96
100
|
| `redeem` | **write (gated)** | `zap-out-v2 open/close` | Full zap-out lifecycle. RAW 6dp shares. Resumes an open escrow. |
|
|
97
101
|
| `zap_v2_cancel` | **write (gated)** | `zap-v2/cancel/prepare` | Return a stalled escrow's holdings to the wallet, as-is. |
|
|
98
102
|
| `zap_v2_update_envelope` | **write (gated)** | `zap-v2/update-envelope/prepare` | Loosen the pinned floors (auto-derived from the live escrow) to unstick a crank. |
|
|
99
|
-
| `update_vault_assets` | **write (gated)** | `assets/prepare + confirm` | MANAGER: full-replace a vault's basket (sums to 10000, ≤10, no dupes
|
|
103
|
+
| `update_vault_assets` | **write (gated)** | `assets/prepare + confirm` | MANAGER: full-replace a vault's target basket (sums to 10000, ≤10, no dupes). A held asset must be drained before removal. Your own vault only. |
|
|
100
104
|
| `transfer_admin` | **write (gated)** | `:address/transfer-admin` | ⚠️ MANAGER, HIGH-SENSITIVITY: initiate handing vault control to another key (the new admin must ACCEPT). Your own vault only. |
|
|
105
|
+
| `accept_admin_transfer` | **write (gated)** | `transfer-admin/accept/prepare + confirm` | ⚠️ Explicit-human-only. Local signer completes a pending handoff and reports success only after post-chain verification. Keyless can reconcile a supplied landed signature but cannot sign a new acceptance. |
|
|
106
|
+
| `update_vault_policy` | **write (gated)** | `policy/:vault/onchain/*` | ⚠️ Explicit-human-only. Create or propose → accept constitutional limits, with `maxAssets ≤ 10`; local and keyless paths reconcile from chain before completion. |
|
|
101
107
|
| `init_rebalancer` | **write (gated)** | `POST /rebalance/:address/init/prepare` | MANAGER: enable rebalancing (create the vault's `RebalancerConfig`, creator pays rent). Bundled into `launch_vault` automatically — only needed for older/opt-out/oversized vaults. Your own vault only. |
|
|
102
|
-
| `
|
|
108
|
+
| `rebalance_to_targets` | **write (gated)** | `POST /rebalance/:address/to-targets/prepare` | MANAGER: derive and execute the swaps needed to converge holdings to the current target config. On-chain delegate guards include measured `min_out`, ≤50%/tx, ≥5s spacing, ≤48/day, and in-basket mints. Your own vault only. |
|
|
103
109
|
|
|
104
|
-
> There is **no fee tool**: entry/exit fees are **factory-global
|
|
110
|
+
> There is **no fee tool**: entry/exit fees and their split are **factory-global**, set by the protocol and returned live by the read endpoints. Creators can't set or change them, and management/performance fees don't exist.
|
|
105
111
|
|
|
106
112
|
### Prompt-injection / safety model
|
|
107
113
|
|
|
@@ -110,8 +116,9 @@ The harness is **boxed in by design**, so a prompt-injected agent (tricked by ma
|
|
|
110
116
|
- **Every write only touches a vault/wallet the signed-in test wallet OWNS or ADMINS** (the API enforces `vault.admin == caller`), and amounts/slippage are capped by the on-chain guards (≤10% slippage, per-leg `min_outs`, the drain-guard, ≤10 assets, factory-global fees no agent can change) plus the API-side $10 first-deposit floor.
|
|
111
117
|
- **The keypair never enters the agent's context** (only the pubkey), so injection can't exfiltrate it; the write-gate (`DFM_AGENT_WRITE_ENABLED`) is a hard local kill-switch.
|
|
112
118
|
- So the worst a hijacked agent can do is make *you* mis-spend *your own* money within the contract limits — **never the protocol, never other users, never key theft.** The two actions to watch — only ever invoke them from an explicit human ask, never inferred from a vault's name/description or other untrusted text:
|
|
113
|
-
- `transfer_admin`
|
|
114
|
-
- `
|
|
119
|
+
- `transfer_admin` / `accept_admin_transfer` — initiate or complete a vault-control handoff.
|
|
120
|
+
- `update_vault_policy` — changes the enforced constitutional limits for a vault.
|
|
121
|
+
- `update_vault_assets` — full-replaces your own vault's target basket with eligible mints + weights (open universe; no oracle feed required); on the next rebalance the vault's value migrates into them. Bounded to your own vault and ≤10 assets, but it IS a basket-redirection an injected agent could trigger.
|
|
115
122
|
|
|
116
123
|
## Install
|
|
117
124
|
|
|
@@ -300,8 +307,8 @@ npx tsx src/examples/launch-deposit-redeem.ts
|
|
|
300
307
|
→ returns { vault: "<address>", signature, ... }. Note the vault address.
|
|
301
308
|
(No fee fields: entry/exit fees are factory-global — 0.75%/0.75%, split
|
|
302
309
|
50/50 creator/platform — and creators can't set them. These two mints are
|
|
303
|
-
|
|
304
|
-
|
|
310
|
+
established mainnet mints; listing is open + feed-free. Live factory/fund-tier
|
|
311
|
+
rules decide eligibility, and freeze authority is surfaced as issuer-lock risk.)
|
|
305
312
|
|
|
306
313
|
3. deposit
|
|
307
314
|
{ "vault": "<address from step 2>", "usdcAmount": "12000000" } // $12 raw (6dp)
|
|
@@ -362,7 +369,7 @@ Notes:
|
|
|
362
369
|
| `DFM_API_URL` | No | `https://n2-api.dfm.finance` | API base (the `/api/v2` prefix is auto-appended). |
|
|
363
370
|
| `DFM_AGENT_KEYPAIR_PATH` | For auth | — | Path to a Solana secret-key JSON file (preferred). Use a dedicated wallet funded with USDC + a little SOL. |
|
|
364
371
|
| `DFM_AGENT_KEYPAIR_JSON` | For auth | — | The secret-key JSON array inline (alternative; e.g. injected from a secret manager). |
|
|
365
|
-
| `DFM_AGENT_WRITE_ENABLED` | No | `false` | Master kill-switch for
|
|
372
|
+
| `DFM_AGENT_WRITE_ENABLED` | No | `false` | Master kill-switch for all write tools. |
|
|
366
373
|
| `HELIUS_RPC_URL` / `DFM_RPC_URL` | No (optional) | — | OPTIONAL override — submit through your OWN RPC instead of the backend broadcast (`POST /tx/submit`). Writes need NO client RPC by default; mainnet never uses the rate-limited public RPC. |
|
|
367
374
|
| `SOLANA_CLUSTER` | No | `mainnet-beta` | `mainnet-beta` or `devnet`. |
|
|
368
375
|
|
|
@@ -394,7 +401,7 @@ does **not** crank legs and does **not** hold the protocol key.
|
|
|
394
401
|
|
|
395
402
|
| File | Role |
|
|
396
403
|
|------|------|
|
|
397
|
-
| `src/mcp-server.ts` | MCP stdio server; registers the
|
|
404
|
+
| `src/mcp-server.ts` | MCP stdio server; registers the tools and enforces the write gate. |
|
|
398
405
|
| `src/config.ts` | Env → `AgentConfig` (API URL, cluster, RPC, write flag, keypair source). |
|
|
399
406
|
| `src/session.ts` | SIWS sign-in → Bearer session; in-flight dedup; transparent re-auth on 401. |
|
|
400
407
|
| `src/signing.ts` | The signing boundary — loads the local keypair, signs SIWS + v0 txs. Refuses the protocol wallet; never logs key material. |
|
|
@@ -403,6 +410,7 @@ does **not** crank legs and does **not** hold the protocol key.
|
|
|
403
410
|
| `src/create-flow.ts` | `launch_vault` driver: prepare → sign → submit → confirm (+ ghost-vault recovery). |
|
|
404
411
|
| `src/zap-v2-flow.ts` | `deposit` / `redeem` lifecycle drivers (resume-aware, close-retry). |
|
|
405
412
|
| `src/recovery-flow.ts` | `zap_v2_cancel` + `zap_v2_update_envelope` (floors auto-derived from the live escrow). |
|
|
413
|
+
| `src/manager-flow.ts` | Basket, rebalance, admin-transfer, and constitutional-policy control flows. |
|
|
406
414
|
| `src/types.ts` | Response shapes mirrored against the live API. |
|
|
407
415
|
|
|
408
416
|
## What remains for the parent to review/enable
|
package/dist/api-client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AgentConfig } from './config.js';
|
|
2
2
|
import { SiwsSession } from './session.js';
|
|
3
|
-
import type { VaultListResponse, VaultDetailResponse, ZapV2Status, ZapV2PrepareResponse, ZapV2SingleTxResponse, CreateAssetInput, CreatePrepareResponse, CreateConfirmResponse, RebalanceToTargetsResponse, ReconfigureResponse, ReconfigureTargetInput } from './types.js';
|
|
3
|
+
import type { VaultListResponse, VaultDetailResponse, ZapV2Status, ZapV2PrepareResponse, ZapV2SingleTxResponse, CreateAssetInput, CreatePrepareResponse, CreateConfirmResponse, RebalanceToTargetsResponse, ReconfigureResponse, ReconfigureTargetInput, OnchainPolicySnapshot, VaultPolicyInput } from './types.js';
|
|
4
4
|
export declare class DfmApiClient {
|
|
5
5
|
private readonly session;
|
|
6
6
|
private readonly baseUrl;
|
|
@@ -13,15 +13,12 @@ export declare class DfmApiClient {
|
|
|
13
13
|
*
|
|
14
14
|
* ⚠️ The names here are load-bearing. The API validates this query with
|
|
15
15
|
* `VaultListQueryDto` under a global `forbidNonWhitelisted` pipe, so an
|
|
16
|
-
* unknown param is a hard 400, not an ignored hint.
|
|
17
|
-
*
|
|
18
|
-
* coerces to a number and rejects NaN) — every filtered `list_dtfs` call
|
|
19
|
-
* 400'd, and only the bare no-argument call ever worked. `sortBy` is an enum
|
|
16
|
+
* unknown param is a hard 400, not an ignored hint. `category` is coerced to a
|
|
17
|
+
* number and rejects NaN; `sortBy` is an enum
|
|
20
18
|
* and `limit` is capped at 50 server-side; both are mirrored in the tool
|
|
21
19
|
* schema so a bad value fails locally with a readable message.
|
|
22
20
|
*/
|
|
23
21
|
listVaults(params?: {
|
|
24
|
-
type?: string;
|
|
25
22
|
category?: number;
|
|
26
23
|
sortBy?: string;
|
|
27
24
|
sortDir?: 'asc' | 'desc';
|
|
@@ -85,7 +82,7 @@ export declare class DfmApiClient {
|
|
|
85
82
|
* applies and why it never falls back to local signing.
|
|
86
83
|
*/
|
|
87
84
|
executeViaOperatingWallet(tool: string, args: Record<string, unknown>): Promise<{
|
|
88
|
-
signature
|
|
85
|
+
signature?: string;
|
|
89
86
|
status: string;
|
|
90
87
|
note?: string;
|
|
91
88
|
}>;
|
|
@@ -149,7 +146,7 @@ export declare class DfmApiClient {
|
|
|
149
146
|
prepareCreateVault(params: {
|
|
150
147
|
name: string;
|
|
151
148
|
symbol: string;
|
|
152
|
-
dtfType:
|
|
149
|
+
dtfType: 'index';
|
|
153
150
|
category: number;
|
|
154
151
|
assets: CreateAssetInput[];
|
|
155
152
|
description?: string;
|
|
@@ -166,8 +163,8 @@ export declare class DfmApiClient {
|
|
|
166
163
|
/**
|
|
167
164
|
* `POST /vaults/:address/assets/prepare` (vault admin) — build an
|
|
168
165
|
* `update_vault_assets` FULL-REPLACE basket tx. The API enforces the same
|
|
169
|
-
* guards as the chain (manual mode,
|
|
170
|
-
* ≤
|
|
166
|
+
* guards as the chain (manual mode, config timing, Σ bps == 10000, no dupes,
|
|
167
|
+
* ≤10 in the current product) → clean 4xx instead of a chain revert.
|
|
171
168
|
*/
|
|
172
169
|
prepareUpdateAssets(vaultAddress: string, assets: CreateAssetInput[]): Promise<ZapV2SingleTxResponse>;
|
|
173
170
|
/** `POST /vaults/:address/assets/confirm` — record the basket change post-broadcast. */
|
|
@@ -188,6 +185,27 @@ export declare class DfmApiClient {
|
|
|
188
185
|
* sensitivity — gates the agent's `transfer_admin` tool.
|
|
189
186
|
*/
|
|
190
187
|
prepareTransferAdmin(vaultAddress: string, newAdmin: string): Promise<ZapV2SingleTxResponse>;
|
|
188
|
+
/** Build the transaction signed by the pending admin to complete a handoff. */
|
|
189
|
+
prepareAcceptAdminTransfer(vaultAddress: string): Promise<ZapV2SingleTxResponse>;
|
|
190
|
+
/** Verify a landed acceptance and reconcile the authoritative admin into Mongo. */
|
|
191
|
+
confirmAcceptAdminTransfer(vaultAddress: string, signature: string): Promise<{
|
|
192
|
+
status: string;
|
|
193
|
+
signature: string;
|
|
194
|
+
vaultAdmin: string;
|
|
195
|
+
}>;
|
|
196
|
+
/** Read the live on-chain policy; null means a legacy vault has no policy PDA. */
|
|
197
|
+
getOnchainPolicy(vaultAddress: string): Promise<OnchainPolicySnapshot | null>;
|
|
198
|
+
prepareCreateVaultPolicy(vaultAddress: string, policy: VaultPolicyInput): Promise<ZapV2SingleTxResponse>;
|
|
199
|
+
prepareProposeVaultPolicy(vaultAddress: string, policy: VaultPolicyInput & {
|
|
200
|
+
effectiveAt: number;
|
|
201
|
+
}): Promise<ZapV2SingleTxResponse>;
|
|
202
|
+
prepareAcceptVaultPolicy(vaultAddress: string, policy: VaultPolicyInput & {
|
|
203
|
+
effectiveAt: number;
|
|
204
|
+
}): Promise<ZapV2SingleTxResponse>;
|
|
205
|
+
/** Re-read chain state and reconcile the Mongo policy shadow. Safe to retry. */
|
|
206
|
+
confirmVaultPolicy(vaultAddress: string, signature: string): Promise<Record<string, unknown> & {
|
|
207
|
+
onChain: true;
|
|
208
|
+
}>;
|
|
191
209
|
/**
|
|
192
210
|
* `POST /rebalance/:vault/init/prepare` — prepare a creator-signed
|
|
193
211
|
* `initialize_rebalancer` TX for a vault the test wallet ADMINS. Enables
|
package/dist/api-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/api-client.js
CHANGED
|
@@ -111,17 +111,13 @@ export class DfmApiClient {
|
|
|
111
111
|
*
|
|
112
112
|
* ⚠️ The names here are load-bearing. The API validates this query with
|
|
113
113
|
* `VaultListQueryDto` under a global `forbidNonWhitelisted` pipe, so an
|
|
114
|
-
* unknown param is a hard 400, not an ignored hint.
|
|
115
|
-
*
|
|
116
|
-
* coerces to a number and rejects NaN) — every filtered `list_dtfs` call
|
|
117
|
-
* 400'd, and only the bare no-argument call ever worked. `sortBy` is an enum
|
|
114
|
+
* unknown param is a hard 400, not an ignored hint. `category` is coerced to a
|
|
115
|
+
* number and rejects NaN; `sortBy` is an enum
|
|
118
116
|
* and `limit` is capped at 50 server-side; both are mirrored in the tool
|
|
119
117
|
* schema so a bad value fails locally with a readable message.
|
|
120
118
|
*/
|
|
121
119
|
async listVaults(params) {
|
|
122
120
|
const q = new URLSearchParams();
|
|
123
|
-
if (params?.type)
|
|
124
|
-
q.set('type', params.type);
|
|
125
121
|
if (params?.category !== undefined)
|
|
126
122
|
q.set('category', String(params.category));
|
|
127
123
|
if (params?.sortBy)
|
|
@@ -204,7 +200,7 @@ export class DfmApiClient {
|
|
|
204
200
|
});
|
|
205
201
|
// Finished inside the server's inline window — the shape this method has
|
|
206
202
|
// always returned.
|
|
207
|
-
if ('
|
|
203
|
+
if (!('jobId' in first))
|
|
208
204
|
return first;
|
|
209
205
|
// 202: the write outlives the gateway timeout and is still running. This is
|
|
210
206
|
// the ONLY correct response to that — retrying the POST would execute the
|
|
@@ -227,9 +223,9 @@ export class DfmApiClient {
|
|
|
227
223
|
const job = await this.authRequest(`/agent/operating/execute/${jobId}`);
|
|
228
224
|
if (job.jobStatus === 'running')
|
|
229
225
|
continue;
|
|
230
|
-
if (job.jobStatus === 'done'
|
|
226
|
+
if (job.jobStatus === 'done') {
|
|
231
227
|
return {
|
|
232
|
-
signature: job.signature,
|
|
228
|
+
...(job.signature ? { signature: job.signature } : {}),
|
|
233
229
|
status: job.execStatus ?? 'complete',
|
|
234
230
|
...(job.note ? { note: job.note } : {}),
|
|
235
231
|
};
|
|
@@ -342,14 +338,12 @@ export class DfmApiClient {
|
|
|
342
338
|
idempotencyKey: `createconfirm-${signature.slice(0, 60)}`,
|
|
343
339
|
});
|
|
344
340
|
}
|
|
345
|
-
// ─── WRITE (vault
|
|
346
|
-
// Each requires the signed-in wallet to be the vault ADMIN (API-enforced).
|
|
347
|
-
// Same prepare → sign → submit pattern. REVIEW: control path — parent reviews.
|
|
341
|
+
// ─── WRITE (vault manager actions) ─────────────────────────────────────
|
|
348
342
|
/**
|
|
349
343
|
* `POST /vaults/:address/assets/prepare` (vault admin) — build an
|
|
350
344
|
* `update_vault_assets` FULL-REPLACE basket tx. The API enforces the same
|
|
351
|
-
* guards as the chain (manual mode,
|
|
352
|
-
* ≤
|
|
345
|
+
* guards as the chain (manual mode, config timing, Σ bps == 10000, no dupes,
|
|
346
|
+
* ≤10 in the current product) → clean 4xx instead of a chain revert.
|
|
353
347
|
*/
|
|
354
348
|
async prepareUpdateAssets(vaultAddress, assets) {
|
|
355
349
|
requireBase58(vaultAddress, 'vault address');
|
|
@@ -387,6 +381,46 @@ export class DfmApiClient {
|
|
|
387
381
|
requireBase58(newAdmin, 'new admin wallet');
|
|
388
382
|
return this.authRequest(`/vaults/${vaultAddress}/transfer-admin`, { method: 'POST', body: JSON.stringify({ newAdmin }) });
|
|
389
383
|
}
|
|
384
|
+
/** Build the transaction signed by the pending admin to complete a handoff. */
|
|
385
|
+
async prepareAcceptAdminTransfer(vaultAddress) {
|
|
386
|
+
requireBase58(vaultAddress, 'vault address');
|
|
387
|
+
return this.authRequest(`/vaults/${vaultAddress}/transfer-admin/accept/prepare`, { method: 'POST', body: JSON.stringify({}) });
|
|
388
|
+
}
|
|
389
|
+
/** Verify a landed acceptance and reconcile the authoritative admin into Mongo. */
|
|
390
|
+
async confirmAcceptAdminTransfer(vaultAddress, signature) {
|
|
391
|
+
requireBase58(vaultAddress, 'vault address');
|
|
392
|
+
return this.authRequest(`/vaults/${vaultAddress}/transfer-admin/accept/confirm`, {
|
|
393
|
+
method: 'POST',
|
|
394
|
+
body: JSON.stringify({ signature }),
|
|
395
|
+
idempotencyKey: `adminacceptconfirm-${signature.slice(0, 60)}`,
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/** Read the live on-chain policy; null means a legacy vault has no policy PDA. */
|
|
399
|
+
async getOnchainPolicy(vaultAddress) {
|
|
400
|
+
requireBase58(vaultAddress, 'vault address');
|
|
401
|
+
return this.authRequest(`/policy/${vaultAddress}/onchain`, { method: 'GET' });
|
|
402
|
+
}
|
|
403
|
+
async prepareCreateVaultPolicy(vaultAddress, policy) {
|
|
404
|
+
requireBase58(vaultAddress, 'vault address');
|
|
405
|
+
return this.authRequest(`/policy/${vaultAddress}/onchain/create/prepare`, { method: 'POST', body: JSON.stringify(policy) });
|
|
406
|
+
}
|
|
407
|
+
async prepareProposeVaultPolicy(vaultAddress, policy) {
|
|
408
|
+
requireBase58(vaultAddress, 'vault address');
|
|
409
|
+
return this.authRequest(`/policy/${vaultAddress}/onchain/amendment/propose/prepare`, { method: 'POST', body: JSON.stringify(policy) });
|
|
410
|
+
}
|
|
411
|
+
async prepareAcceptVaultPolicy(vaultAddress, policy) {
|
|
412
|
+
requireBase58(vaultAddress, 'vault address');
|
|
413
|
+
return this.authRequest(`/policy/${vaultAddress}/onchain/amendment/accept/prepare`, { method: 'POST', body: JSON.stringify(policy) });
|
|
414
|
+
}
|
|
415
|
+
/** Re-read chain state and reconcile the Mongo policy shadow. Safe to retry. */
|
|
416
|
+
async confirmVaultPolicy(vaultAddress, signature) {
|
|
417
|
+
requireBase58(vaultAddress, 'vault address');
|
|
418
|
+
return this.authRequest(`/policy/${vaultAddress}/onchain/confirm`, {
|
|
419
|
+
method: 'POST',
|
|
420
|
+
body: JSON.stringify({ signature }),
|
|
421
|
+
idempotencyKey: `policyconfirm-${signature.slice(0, 60)}`,
|
|
422
|
+
});
|
|
423
|
+
}
|
|
390
424
|
/**
|
|
391
425
|
* `POST /rebalance/:vault/init/prepare` — prepare a creator-signed
|
|
392
426
|
* `initialize_rebalancer` TX for a vault the test wallet ADMINS. Enables
|
package/dist/api-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control-flow.test.d.ts","sourceRoot":"","sources":["../src/control-flow.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { runAcceptAdminTransfer, reconcileKeylessUpdateVaultPolicy, runUpdateVaultPolicy, validateVaultPolicy, } from './manager-flow.js';
|
|
2
|
+
let failures = 0;
|
|
3
|
+
function assert(condition, message) {
|
|
4
|
+
if (condition) {
|
|
5
|
+
console.log(` ✓ ${message}`);
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
console.error(` ✗ ${message}`);
|
|
9
|
+
failures++;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
async function expectReject(operation, expected, message) {
|
|
13
|
+
try {
|
|
14
|
+
await operation();
|
|
15
|
+
assert(false, `${message} (did not reject)`);
|
|
16
|
+
}
|
|
17
|
+
catch (thrownObject) {
|
|
18
|
+
const reason = thrownObject instanceof Error ? thrownObject.message : String(thrownObject);
|
|
19
|
+
assert(expected.test(reason), `${message} (${reason})`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function expectValidationReject(policy, expected, message) {
|
|
23
|
+
try {
|
|
24
|
+
validateVaultPolicy(policy);
|
|
25
|
+
assert(false, `${message} (did not reject)`);
|
|
26
|
+
}
|
|
27
|
+
catch (thrownObject) {
|
|
28
|
+
const reason = thrownObject instanceof Error ? thrownObject.message : String(thrownObject);
|
|
29
|
+
assert(expected.test(reason), `${message} (${reason})`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const config = {};
|
|
33
|
+
const vault = 'Vau1t1111111111111111111111111111111111111';
|
|
34
|
+
const signatureOne = '5'.repeat(88);
|
|
35
|
+
const signatureTwo = '6'.repeat(88);
|
|
36
|
+
const prepared = (transaction) => ({
|
|
37
|
+
transaction,
|
|
38
|
+
blockhash: `blockhash-${transaction}`,
|
|
39
|
+
lastValidBlockHeight: 123,
|
|
40
|
+
preparedTxId: `prepared-${transaction}`,
|
|
41
|
+
});
|
|
42
|
+
const policy = {
|
|
43
|
+
assetMode: 0,
|
|
44
|
+
maxAssetBps: 6_000,
|
|
45
|
+
minAssetBps: 500,
|
|
46
|
+
maxRebalanceBps: 2_000,
|
|
47
|
+
minRebalanceIntervalSecs: 300,
|
|
48
|
+
maxRebalancesPerDay: 5,
|
|
49
|
+
maxRebalancesPerWeek: 15,
|
|
50
|
+
launchBlackoutSecs: 3_600,
|
|
51
|
+
minAssets: 2,
|
|
52
|
+
maxAssets: 10,
|
|
53
|
+
};
|
|
54
|
+
const signingDependencies = (signatures, sequence) => ({
|
|
55
|
+
signBase64Transaction: (_config, transaction) => {
|
|
56
|
+
sequence.push(`sign:${transaction}`);
|
|
57
|
+
return `signed:${transaction}`;
|
|
58
|
+
},
|
|
59
|
+
submitSignedTx: async (_config, signedTransaction) => {
|
|
60
|
+
sequence.push(`submit:${signedTransaction}`);
|
|
61
|
+
const signature = signatures.shift();
|
|
62
|
+
if (!signature)
|
|
63
|
+
throw new Error('missing test signature');
|
|
64
|
+
return signature;
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
console.log('case: policy bounds reject every out-of-range integer and invalid relation');
|
|
68
|
+
validateVaultPolicy(policy);
|
|
69
|
+
const invalidPolicies = [
|
|
70
|
+
[{ ...policy, assetMode: 4 }, /assetMode/, 'assetMode > 3'],
|
|
71
|
+
[{ ...policy, maxAssetBps: 10_001 }, /maxAssetBps/, 'maxAssetBps > 10000'],
|
|
72
|
+
[{ ...policy, minAssetBps: -1 }, /minAssetBps/, 'minAssetBps < 0'],
|
|
73
|
+
[{ ...policy, maxRebalanceBps: 0.5 }, /maxRebalanceBps/, 'fractional maxRebalanceBps'],
|
|
74
|
+
[
|
|
75
|
+
{ ...policy, minRebalanceIntervalSecs: Number.MAX_SAFE_INTEGER + 1 },
|
|
76
|
+
/minRebalanceIntervalSecs/,
|
|
77
|
+
'unsafe minRebalanceIntervalSecs',
|
|
78
|
+
],
|
|
79
|
+
[{ ...policy, maxRebalancesPerDay: 11 }, /maxRebalancesPerDay/, 'daily cap > 10'],
|
|
80
|
+
[{ ...policy, maxRebalancesPerWeek: 31 }, /maxRebalancesPerWeek/, 'weekly cap > 30'],
|
|
81
|
+
[{ ...policy, launchBlackoutSecs: 2_592_001 }, /launchBlackoutSecs/, 'blackout > 30d'],
|
|
82
|
+
[{ ...policy, minAssets: 11 }, /minAssets/, 'minAssets > product cap 10'],
|
|
83
|
+
[{ ...policy, maxAssets: 11 }, /maxAssets/, 'maxAssets > product cap 10'],
|
|
84
|
+
[
|
|
85
|
+
{ ...policy, minAssetBps: 6_001, maxAssetBps: 6_000 },
|
|
86
|
+
/minAssetBps cannot exceed/,
|
|
87
|
+
'minimum weight exceeds maximum',
|
|
88
|
+
],
|
|
89
|
+
[
|
|
90
|
+
{ ...policy, minAssets: 8, maxAssets: 7 },
|
|
91
|
+
/minAssets cannot exceed/,
|
|
92
|
+
'minimum asset count exceeds maximum',
|
|
93
|
+
],
|
|
94
|
+
];
|
|
95
|
+
for (const [invalidPolicy, expected, message] of invalidPolicies) {
|
|
96
|
+
expectValidationReject(invalidPolicy, expected, message);
|
|
97
|
+
}
|
|
98
|
+
console.log('case: local admin acceptance signs, lands, then confirms before success');
|
|
99
|
+
{
|
|
100
|
+
const sequence = [];
|
|
101
|
+
const api = {
|
|
102
|
+
prepareAcceptAdminTransfer: async () => {
|
|
103
|
+
sequence.push('prepare');
|
|
104
|
+
return prepared('accept');
|
|
105
|
+
},
|
|
106
|
+
confirmAcceptAdminTransfer: async (_vault, signature) => {
|
|
107
|
+
sequence.push(`confirm:${signature}`);
|
|
108
|
+
return { status: 'confirmed', signature, vaultAdmin: 'NewAdmin11111111111111111111111111111111111' };
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
const result = await runAcceptAdminTransfer(config, api, vault, undefined, signingDependencies([signatureOne], sequence));
|
|
112
|
+
assert(result.reconciled === true, 'success is marked reconciled');
|
|
113
|
+
assert(sequence.join('|') ===
|
|
114
|
+
`prepare|sign:accept|submit:signed:accept|confirm:${signatureOne}`, 'post-chain confirm runs after submit');
|
|
115
|
+
}
|
|
116
|
+
console.log('case: local admin acceptance never reports success when confirm fails');
|
|
117
|
+
{
|
|
118
|
+
const api = {
|
|
119
|
+
prepareAcceptAdminTransfer: async () => prepared('accept'),
|
|
120
|
+
confirmAcceptAdminTransfer: async () => {
|
|
121
|
+
throw new Error('indexer unavailable');
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
await expectReject(() => runAcceptAdminTransfer(config, api, vault, undefined, signingDependencies([signatureOne], [])), new RegExp(`transaction ${signatureOne} landed.*Do not submit another`, 'i'), 'landed acceptance with failed reconciliation is an error with recovery guidance');
|
|
125
|
+
}
|
|
126
|
+
console.log('case: landed admin signature retries confirm only');
|
|
127
|
+
{
|
|
128
|
+
let prepareCalls = 0;
|
|
129
|
+
let confirmedSignature = '';
|
|
130
|
+
const api = {
|
|
131
|
+
prepareAcceptAdminTransfer: async () => {
|
|
132
|
+
prepareCalls++;
|
|
133
|
+
return prepared('must-not-run');
|
|
134
|
+
},
|
|
135
|
+
confirmAcceptAdminTransfer: async (_vault, signature) => {
|
|
136
|
+
confirmedSignature = signature;
|
|
137
|
+
return { status: 'confirmed', signature, vaultAdmin: 'NewAdmin11111111111111111111111111111111111' };
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
await runAcceptAdminTransfer(config, api, vault, signatureOne);
|
|
141
|
+
assert(prepareCalls === 0, 'recovery does not prepare or submit another acceptance');
|
|
142
|
+
assert(confirmedSignature === signatureOne, 'recovery confirms the supplied landed signature');
|
|
143
|
+
}
|
|
144
|
+
console.log('case: legacy policy creates one transaction and reconciles it');
|
|
145
|
+
{
|
|
146
|
+
const sequence = [];
|
|
147
|
+
const api = {
|
|
148
|
+
getOnchainPolicy: async () => null,
|
|
149
|
+
prepareCreateVaultPolicy: async () => {
|
|
150
|
+
sequence.push('prepare:create');
|
|
151
|
+
return prepared('create');
|
|
152
|
+
},
|
|
153
|
+
confirmVaultPolicy: async (_vault, signature) => {
|
|
154
|
+
sequence.push(`confirm:${signature}`);
|
|
155
|
+
return { onChain: true };
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureOne], sequence));
|
|
159
|
+
assert(result.mode === 'create' && result.reconciled, 'legacy policy returns reconciled create');
|
|
160
|
+
assert(sequence.at(-1) === `confirm:${signatureOne}`, 'create is reconciled after landing');
|
|
161
|
+
}
|
|
162
|
+
console.log('case: existing policy proposes then accepts in order and confirms final signature');
|
|
163
|
+
{
|
|
164
|
+
const sequence = [];
|
|
165
|
+
let proposedEffectiveAt = 0;
|
|
166
|
+
let acceptedEffectiveAt = 0;
|
|
167
|
+
const api = {
|
|
168
|
+
getOnchainPolicy: async () => ({ pendingProposedAt: 0, pendingEffectiveAt: 0 }),
|
|
169
|
+
prepareProposeVaultPolicy: async (_vault, amendment) => {
|
|
170
|
+
proposedEffectiveAt = amendment.effectiveAt;
|
|
171
|
+
sequence.push('prepare:propose');
|
|
172
|
+
return prepared('propose');
|
|
173
|
+
},
|
|
174
|
+
prepareAcceptVaultPolicy: async (_vault, amendment) => {
|
|
175
|
+
acceptedEffectiveAt = amendment.effectiveAt;
|
|
176
|
+
sequence.push('prepare:accept');
|
|
177
|
+
return prepared('accept');
|
|
178
|
+
},
|
|
179
|
+
confirmVaultPolicy: async (_vault, signature) => {
|
|
180
|
+
sequence.push(`confirm:${signature}`);
|
|
181
|
+
return { onChain: true };
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureOne, signatureTwo], sequence));
|
|
185
|
+
assert(result.mode === 'amend', 'existing policy chooses amendment mode');
|
|
186
|
+
assert(proposedEffectiveAt > 0 && proposedEffectiveAt === acceptedEffectiveAt, 'proposal and acceptance commit the same effectiveAt');
|
|
187
|
+
assert(sequence.join('|') ===
|
|
188
|
+
`prepare:propose|prepare:accept|sign:propose|submit:signed:propose|sign:accept|submit:signed:accept|confirm:${signatureTwo}`, 'ordered proposal and acceptance reconcile only after the final signature');
|
|
189
|
+
}
|
|
190
|
+
console.log('case: pending policy prepares only acceptance with chain-pinned effectiveAt');
|
|
191
|
+
{
|
|
192
|
+
let proposeCalls = 0;
|
|
193
|
+
let acceptedEffectiveAt = 0;
|
|
194
|
+
const api = {
|
|
195
|
+
getOnchainPolicy: async () => ({ pendingProposedAt: 99, pendingEffectiveAt: 123_456 }),
|
|
196
|
+
prepareProposeVaultPolicy: async () => {
|
|
197
|
+
proposeCalls++;
|
|
198
|
+
return prepared('must-not-run');
|
|
199
|
+
},
|
|
200
|
+
prepareAcceptVaultPolicy: async (_vault, amendment) => {
|
|
201
|
+
acceptedEffectiveAt = amendment.effectiveAt;
|
|
202
|
+
return prepared('accept');
|
|
203
|
+
},
|
|
204
|
+
confirmVaultPolicy: async () => ({ onChain: true }),
|
|
205
|
+
};
|
|
206
|
+
const result = await runUpdateVaultPolicy(config, api, vault, policy, undefined, signingDependencies([signatureTwo], []));
|
|
207
|
+
assert(result.mode === 'accept', 'pending proposal chooses accept mode');
|
|
208
|
+
assert(proposeCalls === 0, 'pending recovery never proposes a second policy');
|
|
209
|
+
assert(acceptedEffectiveAt === 123_456, 'acceptance uses chain-pinned effectiveAt');
|
|
210
|
+
}
|
|
211
|
+
console.log('case: partial amendment reports landed proposal and does not confirm');
|
|
212
|
+
{
|
|
213
|
+
let submitCalls = 0;
|
|
214
|
+
let confirmCalls = 0;
|
|
215
|
+
const api = {
|
|
216
|
+
getOnchainPolicy: async () => ({ pendingProposedAt: 0, pendingEffectiveAt: 0 }),
|
|
217
|
+
prepareProposeVaultPolicy: async () => prepared('propose'),
|
|
218
|
+
prepareAcceptVaultPolicy: async () => prepared('accept'),
|
|
219
|
+
confirmVaultPolicy: async () => {
|
|
220
|
+
confirmCalls++;
|
|
221
|
+
return { onChain: true };
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
await expectReject(() => runUpdateVaultPolicy(config, api, vault, policy, undefined, {
|
|
225
|
+
signBase64Transaction: (_config, transaction) => transaction,
|
|
226
|
+
submitSignedTx: async () => {
|
|
227
|
+
submitCalls++;
|
|
228
|
+
if (submitCalls === 1)
|
|
229
|
+
return signatureOne;
|
|
230
|
+
throw new Error('second transaction rejected');
|
|
231
|
+
},
|
|
232
|
+
}), new RegExp(`proposal ${signatureOne} landed.*exact same policy values`, 'i'), 'partial amendment cannot be mistaken for no change');
|
|
233
|
+
assert(confirmCalls === 0, 'a partial proposal is not reported as reconciled completion');
|
|
234
|
+
}
|
|
235
|
+
console.log('case: keyless policy confirms complete writes and preserves pending status');
|
|
236
|
+
{
|
|
237
|
+
let confirmCalls = 0;
|
|
238
|
+
const completeApi = {
|
|
239
|
+
confirmVaultPolicy: async () => {
|
|
240
|
+
confirmCalls++;
|
|
241
|
+
return { onChain: true };
|
|
242
|
+
},
|
|
243
|
+
};
|
|
244
|
+
const complete = await reconcileKeylessUpdateVaultPolicy(completeApi, vault, policy, { signature: signatureTwo, status: 'complete' });
|
|
245
|
+
assert(complete.reconciled && confirmCalls === 1, 'keyless completion is independently reconciled');
|
|
246
|
+
const pendingApi = {
|
|
247
|
+
confirmVaultPolicy: async () => {
|
|
248
|
+
throw new Error('must not report a partial proposal as complete');
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
const pending = await reconcileKeylessUpdateVaultPolicy(pendingApi, vault, policy, { signature: signatureOne, status: 'pending', note: 'proposal landed' });
|
|
252
|
+
assert(pending.status === 'pending' && pending.reconciled === false, 'keyless partial proposal remains pending and unreconciled');
|
|
253
|
+
}
|
|
254
|
+
if (failures > 0) {
|
|
255
|
+
console.error(`\n${failures} control-flow assertion(s) FAILED`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
}
|
|
258
|
+
console.log('\ncontrol-flow: all assertions passed');
|
|
259
|
+
//# sourceMappingURL=control-flow.test.js.map
|