@oobe-protocol-labs/synapse-sap-sdk 0.12.8 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/modules/base.js +61 -0
- package/dist/cjs/modules/base.js.map +1 -1
- package/dist/cjs/modules/escrow-v2.js +250 -0
- package/dist/cjs/modules/escrow-v2.js.map +1 -1
- package/dist/cjs/modules/escrow.js +36 -0
- package/dist/cjs/modules/escrow.js.map +1 -1
- package/dist/cjs/modules/staking.js +35 -0
- package/dist/cjs/modules/staking.js.map +1 -1
- package/dist/cjs/modules/tools.js +26 -0
- package/dist/cjs/modules/tools.js.map +1 -1
- package/dist/cjs/modules/vault.js +17 -0
- package/dist/cjs/modules/vault.js.map +1 -1
- package/dist/cjs/utils/anchor-errors.js +453 -0
- package/dist/cjs/utils/anchor-errors.js.map +1 -0
- package/dist/cjs/utils/index.js +12 -1
- package/dist/cjs/utils/index.js.map +1 -1
- package/dist/cjs/utils/volume-curve.js +117 -0
- package/dist/cjs/utils/volume-curve.js.map +1 -0
- package/dist/esm/modules/base.js +61 -0
- package/dist/esm/modules/base.js.map +1 -1
- package/dist/esm/modules/escrow-v2.js +250 -0
- package/dist/esm/modules/escrow-v2.js.map +1 -1
- package/dist/esm/modules/escrow.js +36 -0
- package/dist/esm/modules/escrow.js.map +1 -1
- package/dist/esm/modules/staking.js +35 -0
- package/dist/esm/modules/staking.js.map +1 -1
- package/dist/esm/modules/tools.js +26 -0
- package/dist/esm/modules/tools.js.map +1 -1
- package/dist/esm/modules/vault.js +17 -0
- package/dist/esm/modules/vault.js.map +1 -1
- package/dist/esm/utils/anchor-errors.js +447 -0
- package/dist/esm/utils/anchor-errors.js.map +1 -0
- package/dist/esm/utils/index.js +4 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/volume-curve.js +114 -0
- package/dist/esm/utils/volume-curve.js.map +1 -0
- package/dist/types/modules/base.d.ts +35 -0
- package/dist/types/modules/base.d.ts.map +1 -1
- package/dist/types/modules/escrow-v2.d.ts +98 -1
- package/dist/types/modules/escrow-v2.d.ts.map +1 -1
- package/dist/types/modules/escrow.d.ts.map +1 -1
- package/dist/types/modules/staking.d.ts.map +1 -1
- package/dist/types/modules/tools.d.ts.map +1 -1
- package/dist/types/modules/vault.d.ts.map +1 -1
- package/dist/types/utils/anchor-errors.d.ts +61 -0
- package/dist/types/utils/anchor-errors.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +3 -0
- package/dist/types/utils/index.d.ts.map +1 -1
- package/dist/types/utils/volume-curve.d.ts +60 -0
- package/dist/types/utils/volume-curve.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/modules/base.ts +89 -0
- package/src/modules/escrow-v2.ts +327 -1
- package/src/modules/escrow.ts +56 -0
- package/src/modules/staking.ts +66 -0
- package/src/modules/tools.ts +43 -0
- package/src/modules/vault.ts +25 -0
- package/src/utils/anchor-errors.ts +461 -0
- package/src/utils/index.ts +16 -0
- package/src/utils/volume-curve.ts +131 -0
package/dist/cjs/modules/base.js
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.BaseModule = void 0;
|
|
15
15
|
const anchor_1 = require("@coral-xyz/anchor");
|
|
16
|
+
const anchor_errors_1 = require("../utils/anchor-errors");
|
|
16
17
|
/**
|
|
17
18
|
* @name BaseModule
|
|
18
19
|
* @description Abstract base module inherited by every domain module in the SDK.
|
|
@@ -123,6 +124,66 @@ class BaseModule {
|
|
|
123
124
|
return value;
|
|
124
125
|
return new anchor_1.BN(value.toString());
|
|
125
126
|
}
|
|
127
|
+
// ── v0.13.0 preflight helpers ─────────────────────────
|
|
128
|
+
/**
|
|
129
|
+
* @name requireAccountExists
|
|
130
|
+
* @description Fetch a required account; throw a {@link SapPreflightError}
|
|
131
|
+
* with an actionable message if it does not exist.
|
|
132
|
+
* @typeParam T - Expected account type.
|
|
133
|
+
* @param accountName - Anchor account discriminator name.
|
|
134
|
+
* @param address - PDA to fetch.
|
|
135
|
+
* @param onMissing - `{ predicted, hint }` describing the on-chain rejection
|
|
136
|
+
* that would otherwise occur.
|
|
137
|
+
* @protected
|
|
138
|
+
* @since v0.13.0
|
|
139
|
+
*/
|
|
140
|
+
async requireAccountExists(accountName, address, onMissing) {
|
|
141
|
+
const acc = await this.fetchAccountNullable(accountName, address);
|
|
142
|
+
if (acc == null) {
|
|
143
|
+
(0, anchor_errors_1.throwPredicted)(onMissing.predicted, onMissing.hint ?? `${accountName} ${address.toBase58()} not found`);
|
|
144
|
+
}
|
|
145
|
+
return acc;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @name requireAccountAbsent
|
|
149
|
+
* @description Verify a PDA does not yet exist on-chain. Used before any
|
|
150
|
+
* `init` instruction to catch `account already in use` early.
|
|
151
|
+
* @protected
|
|
152
|
+
* @since v0.13.0
|
|
153
|
+
*/
|
|
154
|
+
async requireAccountAbsent(accountName, address, hint) {
|
|
155
|
+
const acc = await this.provider.connection.getAccountInfo(address);
|
|
156
|
+
if (acc !== null) {
|
|
157
|
+
throw new anchor_errors_1.SapPreflightError(`${accountName} ${address.toBase58()} already exists. ${hint}`, 0, "AccountAlreadyInUse", hint);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* @name simulateOrThrow
|
|
162
|
+
* @description Run `simulate()` on a method builder. If the simulation
|
|
163
|
+
* reports a SAP program error, throw it as a {@link SapPreflightError}
|
|
164
|
+
* with the decoded name + friendly hint *before* the user pays fees.
|
|
165
|
+
* Returns the simulation logs on success for inspection.
|
|
166
|
+
* @protected
|
|
167
|
+
* @since v0.13.0
|
|
168
|
+
*/
|
|
169
|
+
async simulateOrThrow(
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
171
|
+
builder, label) {
|
|
172
|
+
try {
|
|
173
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
|
|
174
|
+
const sim = await builder.simulate();
|
|
175
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
|
|
176
|
+
const logs = (sim?.raw ?? sim?.logs ?? []);
|
|
177
|
+
return logs;
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
const decoded = (0, anchor_errors_1.decodeAnchorError)(err);
|
|
181
|
+
if (decoded) {
|
|
182
|
+
throw new anchor_errors_1.SapPreflightError(`[${label}] simulation failed: ${decoded.friendly}`, decoded.code, decoded.name, decoded.logs?.slice(0, 6).join(" | "));
|
|
183
|
+
}
|
|
184
|
+
throw err;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
126
187
|
}
|
|
127
188
|
exports.BaseModule = BaseModule;
|
|
128
189
|
//# sourceMappingURL=base.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/modules/base.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAEH,8CAA0E;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/modules/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,8 @@ const base_1 = require("./base");
|
|
|
17
17
|
const pda_1 = require("../pda");
|
|
18
18
|
const priority_fee_1 = require("../utils/priority-fee");
|
|
19
19
|
const payments_1 = require("../constants/payments");
|
|
20
|
+
const anchor_errors_1 = require("../utils/anchor-errors");
|
|
21
|
+
const volume_curve_1 = require("../utils/volume-curve");
|
|
20
22
|
/**
|
|
21
23
|
* @name EscrowV2Module
|
|
22
24
|
* @description Manages V2 escrow accounts with settlement security modes,
|
|
@@ -143,6 +145,18 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
143
145
|
async deposit(agentWallet, nonce, amount, splAccounts = []) {
|
|
144
146
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
145
147
|
const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
|
|
148
|
+
// v0.13.0 preflights — escrow exists, token shape matches, amount > 0
|
|
149
|
+
const escrow = await this.requireAccountExists("escrowAccountV2", escrowPda, { predicted: "NotAuthority", hint: "Escrow V2 PDA not found — call createEscrow first" });
|
|
150
|
+
const want = BigInt(this.bn(amount).toString());
|
|
151
|
+
if (want <= 0n)
|
|
152
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", "Deposit amount must be > 0");
|
|
153
|
+
const isSpl = escrow.tokenMint != null;
|
|
154
|
+
if (isSpl && splAccounts.length < 4) {
|
|
155
|
+
(0, anchor_errors_1.throwPredicted)("SplTokenRequired", "Pass [depositorAta, escrowAta, tokenMint, tokenProgram]");
|
|
156
|
+
}
|
|
157
|
+
if (!isSpl && splAccounts.length > 0) {
|
|
158
|
+
(0, anchor_errors_1.throwPredicted)("InvalidTokenAccount", "SOL escrow does not accept splAccounts");
|
|
159
|
+
}
|
|
146
160
|
return this.methods
|
|
147
161
|
.depositEscrowV2(this.bn(nonce), this.bn(amount))
|
|
148
162
|
.accounts({
|
|
@@ -153,6 +167,43 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
153
167
|
.remainingAccounts(splAccounts)
|
|
154
168
|
.rpc();
|
|
155
169
|
}
|
|
170
|
+
/**
|
|
171
|
+
* Settle a batch of calls against a V2 escrow.
|
|
172
|
+
*
|
|
173
|
+
* **v0.13.0 — Auto-bundle DisputeWindow:** when the escrow's
|
|
174
|
+
* `settlementSecurity` is `DisputeWindow`, this method now bundles
|
|
175
|
+
* **`settleCallsV2` + `createPendingSettlement`** into the SAME
|
|
176
|
+
* transaction. This eliminates the foot-gun where a caller would call
|
|
177
|
+
* `createPendingSettlement` directly without a preceding `settleCallsV2`,
|
|
178
|
+
* leaving `escrow.pending_amount = 0` and causing `finalizeSettlement`
|
|
179
|
+
* to abort with `ArithmeticOverflow` (6075).
|
|
180
|
+
*
|
|
181
|
+
* Flow per security mode:
|
|
182
|
+
* - **CoSigned** — single IX (`settleCallsV2`) with co-signer in
|
|
183
|
+
* remaining accounts; funds move immediately.
|
|
184
|
+
* - **DisputeWindow** — two IXs in one tx:
|
|
185
|
+
* 1. `settleCallsV2` — bumps `pending_amount` and `settlement_index`
|
|
186
|
+
* 2. `createPendingSettlement(idx)` — locks the dispute tracker PDA
|
|
187
|
+
*
|
|
188
|
+
* After this tx confirms, wait `escrow.disputeWindowSlots` slots and
|
|
189
|
+
* call {@link finalizeSettlement} with the index returned via
|
|
190
|
+
* `SettlementPendingEvent` or readable from `escrow.settlement_index - 1`.
|
|
191
|
+
*
|
|
192
|
+
* Pass `opts.skipAutoPending = true` to opt out of the auto-bundle (e.g.
|
|
193
|
+
* if you want to drive `createPendingSettlement` separately for advanced
|
|
194
|
+
* flows like batched off-chain receipt aggregation).
|
|
195
|
+
*
|
|
196
|
+
* @param depositorWallet - Depositor of the escrow being settled.
|
|
197
|
+
* @param nonce - Escrow nonce (default 0 for the canonical escrow).
|
|
198
|
+
* @param callsToSettle - Number of calls to settle in this batch.
|
|
199
|
+
* @param serviceHash - 32-byte sha256 of the service payload.
|
|
200
|
+
* @param splAccounts - Optional remaining accounts (SPL transfer + co-signer).
|
|
201
|
+
* @param opts - Priority-fee + auto-pending options.
|
|
202
|
+
* @param coSigner - Required for CoSigned escrows.
|
|
203
|
+
* @returns The transaction signature.
|
|
204
|
+
* @since v0.7.0 — initial release
|
|
205
|
+
* @since v0.13.0 — auto-bundles `createPendingSettlement` for DisputeWindow
|
|
206
|
+
*/
|
|
156
207
|
async settle(depositorWallet, nonce, callsToSettle, serviceHash, splAccounts = [], opts, coSigner) {
|
|
157
208
|
const [agentPda] = (0, pda_1.deriveAgent)(this.walletPubkey);
|
|
158
209
|
const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
|
|
@@ -170,6 +221,20 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
170
221
|
{ pubkey: coSigner.publicKey, isSigner: true, isWritable: false },
|
|
171
222
|
]
|
|
172
223
|
: splAccounts;
|
|
224
|
+
// ── v0.13.0 preflight: fetch escrow once to drive both branches ──
|
|
225
|
+
// We need it to (a) detect DisputeWindow vs CoSigned, (b) read the
|
|
226
|
+
// current `settlement_index` to feed `createPendingSettlement`, and
|
|
227
|
+
// (c) compute `amount` via the volume curve so the bundled IX matches
|
|
228
|
+
// what `settle_calls_v2` will compute on-chain.
|
|
229
|
+
const escrowAcc = await this.fetchAccountNullable("escrowAccountV2", escrowPda);
|
|
230
|
+
if (!escrowAcc) {
|
|
231
|
+
throw new Error(`escrowV2.settle: escrow PDA ${escrowPda.toBase58()} not found on-chain ` +
|
|
232
|
+
`(agent=${agentPda.toBase58()}, depositor=${depositorWallet.toBase58()}, nonce=${this.bn(nonce).toString()}). ` +
|
|
233
|
+
`Did the depositor call escrowV2.create() yet?`);
|
|
234
|
+
}
|
|
235
|
+
const isDisputeWindow = typeof escrowAcc.settlementSecurity === "object" &&
|
|
236
|
+
escrowAcc.settlementSecurity !== null &&
|
|
237
|
+
"disputeWindow" in escrowAcc.settlementSecurity;
|
|
173
238
|
let builder = this.methods
|
|
174
239
|
.settleCallsV2(this.bn(nonce), this.bn(callsToSettle), serviceHash)
|
|
175
240
|
.accountsPartial({
|
|
@@ -187,6 +252,52 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
187
252
|
if (preIxs.length > 0) {
|
|
188
253
|
builder = builder.preInstructions(preIxs);
|
|
189
254
|
}
|
|
255
|
+
// ── v0.13.0: auto-bundle createPendingSettlement on DisputeWindow ──
|
|
256
|
+
// The on-chain `settle_calls_v2_handler` (DisputeWindow branch) only
|
|
257
|
+
// bumps `escrow.pending_amount` and `escrow.settlement_index` — it
|
|
258
|
+
// does NOT create the PendingSettlement PDA. Without the followup
|
|
259
|
+
// `createPendingSettlement` IX in the SAME tx, a buggy caller can
|
|
260
|
+
// (a) call `createPendingSettlement` later with a stale index, or
|
|
261
|
+
// (b) skip `settleCallsV2` entirely on a fresh escrow → orphan PDA
|
|
262
|
+
// whose `amount > escrow.pending_amount` → finalize aborts forever
|
|
263
|
+
// with `ArithmeticOverflow` (6075). Bundling is the only way to
|
|
264
|
+
// make that race impossible.
|
|
265
|
+
const skipAutoPending = opts?.skipAutoPending === true;
|
|
266
|
+
if (isDisputeWindow && !skipAutoPending) {
|
|
267
|
+
// PRE-increment settlement_index — settle_calls_v2 will bump it
|
|
268
|
+
// to (current + 1) AFTER our IX runs, but the PDA seed used by
|
|
269
|
+
// create_pending_settlement is the PRE-increment value (matches
|
|
270
|
+
// `SettlementPendingEvent.settlement_index`).
|
|
271
|
+
const settlementIndex = escrowAcc.settlementIndex;
|
|
272
|
+
// Mirror the on-chain volume-curve math so `pending.amount`
|
|
273
|
+
// matches what `escrow.pending_amount` was bumped by.
|
|
274
|
+
const totalCallsBefore = escrowAcc.totalCallsSettled.add(escrowAcc.pendingCalls);
|
|
275
|
+
const amount = (0, volume_curve_1.calculateSettleAmount)(escrowAcc.pricePerCall, escrowAcc.volumeCurve, totalCallsBefore, this.bn(callsToSettle));
|
|
276
|
+
const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
|
|
277
|
+
// Defensive: if a stale pending PDA exists at this index (orphan
|
|
278
|
+
// from an aborted prior run), refuse to send — otherwise the IX
|
|
279
|
+
// will fail with `Allocate: account already in use` (custom 0x0).
|
|
280
|
+
const existing = await this.provider.connection.getAccountInfo(pendingPda);
|
|
281
|
+
if (existing) {
|
|
282
|
+
throw new Error(`escrowV2.settle (auto-bundle): pending PDA ${pendingPda.toBase58()} ` +
|
|
283
|
+
`already exists for settlementIndex=${settlementIndex.toString()}. ` +
|
|
284
|
+
`An earlier run created it but did not finalize. Either finalize ` +
|
|
285
|
+
`that index first or skip it permanently. (Pass skipAutoPending=true ` +
|
|
286
|
+
`to bypass this guard and emit only settleCallsV2.)`);
|
|
287
|
+
}
|
|
288
|
+
const receiptMerkleRoot = opts?.receiptMerkleRoot ?? new Array(32).fill(0);
|
|
289
|
+
const pendingIx = await this.methods
|
|
290
|
+
.createPendingSettlement(settlementIndex, this.bn(callsToSettle), amount, serviceHash, receiptMerkleRoot)
|
|
291
|
+
.accounts({
|
|
292
|
+
wallet: this.walletPubkey,
|
|
293
|
+
agent: agentPda,
|
|
294
|
+
escrow: escrowPda,
|
|
295
|
+
pendingSettlement: pendingPda,
|
|
296
|
+
systemProgram: web3_js_1.SystemProgram.programId,
|
|
297
|
+
})
|
|
298
|
+
.instruction();
|
|
299
|
+
builder = builder.postInstructions([pendingIx]);
|
|
300
|
+
}
|
|
190
301
|
return builder.rpc(rpcOpts);
|
|
191
302
|
}
|
|
192
303
|
/**
|
|
@@ -211,6 +322,24 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
211
322
|
}
|
|
212
323
|
return BigInt(escrow.settlementIndex.toString());
|
|
213
324
|
}
|
|
325
|
+
/**
|
|
326
|
+
* Create the PendingSettlement PDA for a DisputeWindow batch.
|
|
327
|
+
*
|
|
328
|
+
* **v0.13.0 NOTE:** in almost all cases you should call
|
|
329
|
+
* {@link settle} instead — it auto-bundles `settleCallsV2 +
|
|
330
|
+
* createPendingSettlement` in a single transaction so the two
|
|
331
|
+
* cannot drift out of sync. Use this method standalone ONLY when
|
|
332
|
+
* you intentionally pass `skipAutoPending: true` to `settle()`
|
|
333
|
+
* (e.g. batched receipt-merkle aggregation across multiple
|
|
334
|
+
* `settleCallsV2` runs).
|
|
335
|
+
*
|
|
336
|
+
* Calling this without a preceding `settleCallsV2` (which bumps
|
|
337
|
+
* `escrow.pending_amount`) creates an orphan PDA whose
|
|
338
|
+
* `pending.amount > escrow.pending_amount` — `finalizeSettlement`
|
|
339
|
+
* will then abort with `ArithmeticOverflow` (6075) forever.
|
|
340
|
+
*
|
|
341
|
+
* @since v0.7.0
|
|
342
|
+
*/
|
|
214
343
|
async createPendingSettlement(agentWallet, depositorWallet, nonce, settlementIndex, callsToSettle, amount, serviceHash, receiptMerkleRoot = new Array(32).fill(0)) {
|
|
215
344
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
216
345
|
const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
|
|
@@ -247,6 +376,42 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
247
376
|
const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
|
|
248
377
|
const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
|
|
249
378
|
const [statsPda] = (0, pda_1.deriveAgentStats)(agentPda);
|
|
379
|
+
// v0.12.9: preflight against ArithmeticOverflow at finalize.
|
|
380
|
+
//
|
|
381
|
+
// The on-chain handler subtracts `pending_settlement.amount` from BOTH
|
|
382
|
+
// `escrow.balance` AND `escrow.pending_amount`. If the PendingSettlement
|
|
383
|
+
// PDA was created without a preceding `settle_calls_v2` (orphan PDA from
|
|
384
|
+
// legacy probe loops, or a buggy caller that skipped the settle step),
|
|
385
|
+
// `escrow.pending_amount` is smaller than `pending_settlement.amount`
|
|
386
|
+
// and the program aborts with ArithmeticOverflow (error 6075) at
|
|
387
|
+
// escrow_v2.rs:633. Each retry burns ~5 000 lamports of base fee.
|
|
388
|
+
//
|
|
389
|
+
// Detect this BEFORE signing and throw with a clear, actionable message
|
|
390
|
+
// pointing at the orphan-recovery path.
|
|
391
|
+
const [escrowAcc, pendingAcc] = await Promise.all([
|
|
392
|
+
this.fetchAccountNullable("escrowAccountV2", escrowPda),
|
|
393
|
+
this.fetchAccountNullable("pendingSettlement", pendingPda),
|
|
394
|
+
]);
|
|
395
|
+
if (!escrowAcc) {
|
|
396
|
+
throw new Error(`finalizeSettlement: escrow PDA ${escrowPda.toBase58()} not found on-chain.`);
|
|
397
|
+
}
|
|
398
|
+
if (!pendingAcc) {
|
|
399
|
+
throw new Error(`finalizeSettlement: pending PDA ${pendingPda.toBase58()} not found on-chain ` +
|
|
400
|
+
`(settlementIndex=${settlementIndex.toString()}). Nothing to finalize.`);
|
|
401
|
+
}
|
|
402
|
+
const psAmount = BigInt(pendingAcc.amount.toString());
|
|
403
|
+
const escrowPendingAmount = BigInt(escrowAcc.pendingAmount.toString());
|
|
404
|
+
const escrowBalance = BigInt(escrowAcc.balance.toString());
|
|
405
|
+
if (psAmount > escrowPendingAmount || psAmount > escrowBalance) {
|
|
406
|
+
throw new Error(`finalizeSettlement: orphan/inconsistent PendingSettlement detected ` +
|
|
407
|
+
`at ${pendingPda.toBase58()} (settlementIndex=${settlementIndex.toString()}). ` +
|
|
408
|
+
`pending.amount=${psAmount} but escrow.pending_amount=${escrowPendingAmount}, ` +
|
|
409
|
+
`escrow.balance=${escrowBalance}. The on-chain finalize would abort with ` +
|
|
410
|
+
`ArithmeticOverflow (6075). This PDA was almost certainly created by a ` +
|
|
411
|
+
`caller that skipped settle_calls_v2 (legacy probe loop). It cannot be ` +
|
|
412
|
+
`finalized and cannot be closed (close_pending_settlement requires ` +
|
|
413
|
+
`is_finalized=true). Skip this index permanently in your settle queue.`);
|
|
414
|
+
}
|
|
250
415
|
return this.methods
|
|
251
416
|
.finalizeSettlement()
|
|
252
417
|
.accounts({
|
|
@@ -258,6 +423,67 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
258
423
|
})
|
|
259
424
|
.rpc();
|
|
260
425
|
}
|
|
426
|
+
/**
|
|
427
|
+
* Identify orphan PendingSettlement PDAs that cannot be finalized.
|
|
428
|
+
*
|
|
429
|
+
* @returns `null` if the PDA is finalizable (or already finalized / disputed).
|
|
430
|
+
* Otherwise an object describing the inconsistency, suitable for
|
|
431
|
+
* logging or feeding into a quarantine list. Use this from a
|
|
432
|
+
* recovery script to scan a range of `settlement_index` values:
|
|
433
|
+
*
|
|
434
|
+
* ```ts
|
|
435
|
+
* for (let idx = 0n; idx < currentIdx; idx++) {
|
|
436
|
+
* const orphan = await sap.escrowV2.diagnoseOrphanPending(
|
|
437
|
+
* agentWallet, depositorWallet, nonce, idx,
|
|
438
|
+
* );
|
|
439
|
+
* if (orphan) log.warn({ idx, ...orphan }, "skip orphan");
|
|
440
|
+
* }
|
|
441
|
+
* ```
|
|
442
|
+
*
|
|
443
|
+
* @since v0.12.9
|
|
444
|
+
*/
|
|
445
|
+
async diagnoseOrphanPending(agentWallet, depositorWallet, nonce, settlementIndex) {
|
|
446
|
+
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
447
|
+
const [escrowPda] = this.deriveEscrow(agentPda, depositorWallet, nonce);
|
|
448
|
+
const [pendingPda] = this.derivePendingSettlement(escrowPda, settlementIndex);
|
|
449
|
+
const [escrowAcc, pendingAcc] = await Promise.all([
|
|
450
|
+
this.fetchAccountNullable("escrowAccountV2", escrowPda),
|
|
451
|
+
this.fetchAccountNullable("pendingSettlement", pendingPda),
|
|
452
|
+
]);
|
|
453
|
+
if (!escrowAcc)
|
|
454
|
+
return null;
|
|
455
|
+
if (!pendingAcc) {
|
|
456
|
+
return {
|
|
457
|
+
pendingPda,
|
|
458
|
+
psAmount: 0n,
|
|
459
|
+
escrowPendingAmount: BigInt(escrowAcc.pendingAmount.toString()),
|
|
460
|
+
escrowBalance: BigInt(escrowAcc.balance.toString()),
|
|
461
|
+
isFinalized: false,
|
|
462
|
+
isDisputed: false,
|
|
463
|
+
reason: "missing",
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
const psAmount = BigInt(pendingAcc.amount.toString());
|
|
467
|
+
const escrowPendingAmount = BigInt(escrowAcc.pendingAmount.toString());
|
|
468
|
+
const escrowBalance = BigInt(escrowAcc.balance.toString());
|
|
469
|
+
const base = {
|
|
470
|
+
pendingPda,
|
|
471
|
+
psAmount,
|
|
472
|
+
escrowPendingAmount,
|
|
473
|
+
escrowBalance,
|
|
474
|
+
isFinalized: pendingAcc.isFinalized,
|
|
475
|
+
isDisputed: pendingAcc.isDisputed,
|
|
476
|
+
};
|
|
477
|
+
if (pendingAcc.isFinalized)
|
|
478
|
+
return { ...base, reason: "already_finalized" };
|
|
479
|
+
if (pendingAcc.isDisputed)
|
|
480
|
+
return { ...base, reason: "disputed" };
|
|
481
|
+
if (psAmount > escrowPendingAmount)
|
|
482
|
+
return { ...base, reason: "amount_exceeds_pending" };
|
|
483
|
+
if (psAmount > escrowBalance)
|
|
484
|
+
return { ...base, reason: "amount_exceeds_balance" };
|
|
485
|
+
return null;
|
|
486
|
+
}
|
|
261
487
|
async fileDispute(agentWallet, nonce, settlementIndex, evidenceHash, disputeType = 0) {
|
|
262
488
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
263
489
|
const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
|
|
@@ -303,6 +529,18 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
303
529
|
async withdraw(agentWallet, nonce, amount) {
|
|
304
530
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
305
531
|
const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
|
|
532
|
+
// v0.13.0 preflight — amount must fit (balance - pendingAmount); the
|
|
533
|
+
// on-chain handler subtracts pending_amount from withdrawable funds.
|
|
534
|
+
const escrow = await this.requireAccountExists("escrowAccountV2", escrowPda, { predicted: "NotAuthority", hint: "Escrow V2 PDA not found" });
|
|
535
|
+
const want = BigInt(this.bn(amount).toString());
|
|
536
|
+
if (want <= 0n)
|
|
537
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", "Withdraw amount must be > 0");
|
|
538
|
+
const balance = BigInt(escrow.balance.toString());
|
|
539
|
+
const pending = BigInt(escrow.pendingAmount.toString());
|
|
540
|
+
const free = balance > pending ? balance - pending : 0n;
|
|
541
|
+
if (want > free) {
|
|
542
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", `requested ${want}, withdrawable ${free} (balance ${balance} − pending ${pending})`);
|
|
543
|
+
}
|
|
306
544
|
return this.methods
|
|
307
545
|
.withdrawEscrowV2(this.bn(amount))
|
|
308
546
|
.accounts({
|
|
@@ -314,6 +552,18 @@ class EscrowV2Module extends base_1.BaseModule {
|
|
|
314
552
|
async close(agentWallet, nonce = 0) {
|
|
315
553
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
316
554
|
const [escrowPda] = this.deriveEscrow(agentPda, undefined, nonce);
|
|
555
|
+
// v0.13.0 preflight — close fails if balance != 0 OR pending_amount != 0.
|
|
556
|
+
// Pending != 0 commonly indicates orphan PendingSettlement PDAs;
|
|
557
|
+
// run diagnoseOrphanPending() across the index range to identify them.
|
|
558
|
+
const escrow = await this.requireAccountExists("escrowAccountV2", escrowPda, { predicted: "NotAuthority", hint: "Escrow V2 PDA already closed" });
|
|
559
|
+
const balance = BigInt(escrow.balance.toString());
|
|
560
|
+
const pending = BigInt(escrow.pendingAmount.toString());
|
|
561
|
+
if (balance !== 0n) {
|
|
562
|
+
(0, anchor_errors_1.throwPredicted)("EscrowNotEmpty", `balance ${balance} > 0 — withdraw first`);
|
|
563
|
+
}
|
|
564
|
+
if (pending !== 0n) {
|
|
565
|
+
(0, anchor_errors_1.throwPredicted)("EscrowNotClosed", `pending_amount ${pending} > 0 — finalize all PendingSettlements first or quarantine orphans via diagnoseOrphanPending`);
|
|
566
|
+
}
|
|
317
567
|
return this.methods
|
|
318
568
|
.closeEscrowV2()
|
|
319
569
|
.accounts({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow-v2.js","sourceRoot":"","sources":["../../../src/modules/escrow-v2.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"escrow-v2.js","sourceRoot":"","sources":["../../../src/modules/escrow-v2.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,7 @@ const pda_1 = require("../pda");
|
|
|
19
19
|
const priority_fee_1 = require("../utils/priority-fee");
|
|
20
20
|
const hash_1 = require("../utils/hash");
|
|
21
21
|
const payments_1 = require("../constants/payments");
|
|
22
|
+
const anchor_errors_1 = require("../utils/anchor-errors");
|
|
22
23
|
/**
|
|
23
24
|
* @name EscrowModule
|
|
24
25
|
* @description Manages x402-compatible escrow accounts for agent micropayments.
|
|
@@ -111,6 +112,19 @@ class EscrowModule extends base_1.BaseModule {
|
|
|
111
112
|
async deposit(agentWallet, amount, splAccounts = []) {
|
|
112
113
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
113
114
|
const [escrowPda] = this.deriveEscrow(agentPda);
|
|
115
|
+
// v0.13.0 preflight — escrow must exist; SPL deposits must include the
|
|
116
|
+
// 4 expected remaining accounts; SOL deposits must NOT include them.
|
|
117
|
+
const escrow = await this.requireAccountExists("escrowAccount", escrowPda, { predicted: "NotAuthority", hint: "Escrow PDA not found — call createEscrow first" });
|
|
118
|
+
const isSpl = escrow.tokenMint != null;
|
|
119
|
+
if (isSpl && splAccounts.length < 4) {
|
|
120
|
+
(0, anchor_errors_1.throwPredicted)("SplTokenRequired", "Pass [depositorAta, escrowAta, tokenMint, tokenProgram] in splAccounts");
|
|
121
|
+
}
|
|
122
|
+
if (!isSpl && splAccounts.length > 0) {
|
|
123
|
+
(0, anchor_errors_1.throwPredicted)("InvalidTokenAccount", "SOL escrow does not accept splAccounts; pass an empty array");
|
|
124
|
+
}
|
|
125
|
+
if (BigInt(this.bn(amount).toString()) <= 0n) {
|
|
126
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", "Deposit amount must be > 0");
|
|
127
|
+
}
|
|
114
128
|
return this.methods
|
|
115
129
|
.depositEscrow(this.bn(amount))
|
|
116
130
|
.accounts({
|
|
@@ -169,6 +183,23 @@ class EscrowModule extends base_1.BaseModule {
|
|
|
169
183
|
async withdraw(agentWallet, amount, splAccounts = []) {
|
|
170
184
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
171
185
|
const [escrowPda] = this.deriveEscrow(agentPda);
|
|
186
|
+
// v0.13.0 preflight — verify balance covers amount, token program shape
|
|
187
|
+
// matches, and depositor matches the on-chain depositor.
|
|
188
|
+
const escrow = await this.requireAccountExists("escrowAccount", escrowPda, { predicted: "NotAuthority", hint: "Escrow PDA not found" });
|
|
189
|
+
const wantBN = this.bn(amount);
|
|
190
|
+
const want = BigInt(wantBN.toString());
|
|
191
|
+
if (want <= 0n)
|
|
192
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", "Withdraw amount must be > 0");
|
|
193
|
+
if (want > BigInt(escrow.balance.toString())) {
|
|
194
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientEscrowBalance", `requested ${want}, escrow.balance ${escrow.balance.toString()}`);
|
|
195
|
+
}
|
|
196
|
+
const isSpl = escrow.tokenMint != null;
|
|
197
|
+
if (isSpl && splAccounts.length < 4) {
|
|
198
|
+
(0, anchor_errors_1.throwPredicted)("SplTokenRequired", "Pass [depositorAta, escrowAta, tokenMint, tokenProgram]");
|
|
199
|
+
}
|
|
200
|
+
if (!isSpl && splAccounts.length > 0) {
|
|
201
|
+
(0, anchor_errors_1.throwPredicted)("InvalidTokenAccount", "SOL escrow does not accept splAccounts");
|
|
202
|
+
}
|
|
172
203
|
return this.methods
|
|
173
204
|
.withdrawEscrow(this.bn(amount))
|
|
174
205
|
.accounts({
|
|
@@ -189,6 +220,11 @@ class EscrowModule extends base_1.BaseModule {
|
|
|
189
220
|
async close(agentWallet) {
|
|
190
221
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
191
222
|
const [escrowPda] = this.deriveEscrow(agentPda);
|
|
223
|
+
// v0.13.0 preflight — close fails on-chain if balance != 0.
|
|
224
|
+
const escrow = await this.requireAccountExists("escrowAccount", escrowPda, { predicted: "NotAuthority", hint: "Escrow PDA already closed or never created" });
|
|
225
|
+
if (BigInt(escrow.balance.toString()) !== 0n) {
|
|
226
|
+
(0, anchor_errors_1.throwPredicted)("EscrowNotEmpty", `balance ${escrow.balance.toString()} > 0 — withdraw remaining funds first`);
|
|
227
|
+
}
|
|
192
228
|
return this.methods
|
|
193
229
|
.closeEscrow()
|
|
194
230
|
.accounts({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../src/modules/escrow.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,6CAKyB;AAEzB,iCAAoC;AACpC,gCAMgB;AAMhB,wDAI+B;AAE/B,wCAA8D;AAC9D,oDAA+D;
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../src/modules/escrow.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ const web3_js_1 = require("@solana/web3.js");
|
|
|
14
14
|
const base_1 = require("./base");
|
|
15
15
|
const pda_1 = require("../pda");
|
|
16
16
|
const payments_1 = require("../constants/payments");
|
|
17
|
+
const anchor_errors_1 = require("../utils/anchor-errors");
|
|
17
18
|
/**
|
|
18
19
|
* @name StakingModule
|
|
19
20
|
* @description Manages agent stake accounts — init, deposit, unstake, and fetch.
|
|
@@ -31,6 +32,12 @@ class StakingModule extends base_1.BaseModule {
|
|
|
31
32
|
async initStake(agentWallet, initialDeposit) {
|
|
32
33
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
33
34
|
const [stakePda] = this.deriveStake(agentPda);
|
|
35
|
+
// v0.13.0 preflights
|
|
36
|
+
const want = BigInt(this.bn(initialDeposit).toString());
|
|
37
|
+
if (want < payments_1.MIN_AGENT_STAKE_LAMPORTS) {
|
|
38
|
+
(0, anchor_errors_1.throwPredicted)("StakeBelowMinimum", `initial deposit ${want} < MIN_AGENT_STAKE_LAMPORTS ${payments_1.MIN_AGENT_STAKE_LAMPORTS}`);
|
|
39
|
+
}
|
|
40
|
+
await this.requireAccountAbsent("agentStake", stakePda, "Stake already initialized — use depositStake to top up");
|
|
34
41
|
return this.methods
|
|
35
42
|
.initStake(this.bn(initialDeposit))
|
|
36
43
|
.accounts({
|
|
@@ -44,6 +51,11 @@ class StakingModule extends base_1.BaseModule {
|
|
|
44
51
|
async deposit(agentWallet, amount) {
|
|
45
52
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
46
53
|
const [stakePda] = this.deriveStake(agentPda);
|
|
54
|
+
// v0.13.0 preflight — stake must already exist; amount > 0
|
|
55
|
+
if (BigInt(this.bn(amount).toString()) <= 0n) {
|
|
56
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientStake", "Deposit amount must be > 0");
|
|
57
|
+
}
|
|
58
|
+
await this.requireAccountExists("agentStake", stakePda, { predicted: "NoStakeAccount", hint: "Call initStake first" });
|
|
47
59
|
return this.methods
|
|
48
60
|
.depositStake(this.bn(amount))
|
|
49
61
|
.accounts({
|
|
@@ -57,6 +69,18 @@ class StakingModule extends base_1.BaseModule {
|
|
|
57
69
|
async requestUnstake(agentWallet, amount) {
|
|
58
70
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
59
71
|
const [stakePda] = this.deriveStake(agentPda);
|
|
72
|
+
// v0.13.0 preflight — enforce MIN_STAKE floor + no double-pending
|
|
73
|
+
const stake = await this.requireAccountExists("agentStake", stakePda, { predicted: "NoStakeAccount", hint: "No stake account to unstake from" });
|
|
74
|
+
const want = BigInt(this.bn(amount).toString());
|
|
75
|
+
if (want <= 0n)
|
|
76
|
+
(0, anchor_errors_1.throwPredicted)("InsufficientStake", "Unstake amount must be > 0");
|
|
77
|
+
const max = this.getMaxUnstakeLamports(stake);
|
|
78
|
+
if (want > max) {
|
|
79
|
+
(0, anchor_errors_1.throwPredicted)("StakeBelowMinimum", `requested ${want} would drop stake below MIN_AGENT_STAKE_LAMPORTS (max unstake = ${max})`);
|
|
80
|
+
}
|
|
81
|
+
if (BigInt(stake.unstakeAmount.toString()) > 0n) {
|
|
82
|
+
(0, anchor_errors_1.throwPredicted)("UnstakeAlreadyPending", "A pending unstake already exists — completeUnstake first or wait for cooldown");
|
|
83
|
+
}
|
|
60
84
|
return this.methods
|
|
61
85
|
.requestUnstake(this.bn(amount))
|
|
62
86
|
.accounts({
|
|
@@ -69,6 +93,17 @@ class StakingModule extends base_1.BaseModule {
|
|
|
69
93
|
async completeUnstake(agentWallet) {
|
|
70
94
|
const [agentPda] = (0, pda_1.deriveAgent)(agentWallet);
|
|
71
95
|
const [stakePda] = this.deriveStake(agentPda);
|
|
96
|
+
// v0.13.0 preflight — cooldown must have elapsed and an unstake must be pending
|
|
97
|
+
const stake = await this.requireAccountExists("agentStake", stakePda, { predicted: "NoStakeAccount", hint: "No stake account" });
|
|
98
|
+
const pending = BigInt(stake.unstakeAmount.toString());
|
|
99
|
+
if (pending === 0n) {
|
|
100
|
+
(0, anchor_errors_1.throwPredicted)("NoUnstakePending", "Call requestUnstake first");
|
|
101
|
+
}
|
|
102
|
+
const availableAt = BigInt(stake.unstakeAvailableAt.toString());
|
|
103
|
+
const nowSec = BigInt(Math.floor(Date.now() / 1000));
|
|
104
|
+
if (nowSec < availableAt) {
|
|
105
|
+
(0, anchor_errors_1.throwPredicted)("UnstakeCooldownNotMet", `available at unix ${availableAt}, now ${nowSec} (Δ ${availableAt - nowSec}s)`);
|
|
106
|
+
}
|
|
72
107
|
return this.methods
|
|
73
108
|
.completeUnstake()
|
|
74
109
|
.accounts({
|