@intent-engine/cli 0.1.22 → 0.1.26
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/src/admin-commands.d.ts +12 -0
- package/dist/src/admin-commands.js +140 -0
- package/dist/src/admin-commands.js.map +1 -0
- package/dist/src/agent/actions.d.ts +2 -0
- package/dist/src/agent/actions.js +1 -1
- package/dist/src/agent/actions.js.map +1 -1
- package/dist/src/agent/claims.js +13 -12
- package/dist/src/agent/claims.js.map +1 -1
- package/dist/src/agent/create.d.ts +1 -0
- package/dist/src/agent/create.js +18 -4
- package/dist/src/agent/create.js.map +1 -1
- package/dist/src/agent/mandate-agent.d.ts +2 -0
- package/dist/src/agent/mandate-agent.js +136 -0
- package/dist/src/agent/mandate-agent.js.map +1 -0
- package/dist/src/agent/mandate-grant.d.ts +2 -0
- package/dist/src/agent/mandate-grant.js +192 -0
- package/dist/src/agent/mandate-grant.js.map +1 -0
- package/dist/src/agent/mandate-revoke.d.ts +1 -0
- package/dist/src/agent/mandate-revoke.js +142 -0
- package/dist/src/agent/mandate-revoke.js.map +1 -0
- package/dist/src/agent/mandate-state.d.ts +33 -0
- package/dist/src/agent/mandate-state.js +85 -0
- package/dist/src/agent/mandate-state.js.map +1 -0
- package/dist/src/agent/mandate.d.ts +4 -26
- package/dist/src/agent/mandate.js +4 -479
- package/dist/src/agent/mandate.js.map +1 -1
- package/dist/src/agent/mcp.js +10 -5
- package/dist/src/agent/mcp.js.map +1 -1
- package/dist/src/agent/prepare.js +1 -1
- package/dist/src/agent/prepare.js.map +1 -1
- package/dist/src/agent/problems.d.ts +15 -1
- package/dist/src/agent/problems.js +38 -2
- package/dist/src/agent/problems.js.map +1 -1
- package/dist/src/agent/read.d.ts +13 -0
- package/dist/src/agent/read.js +56 -7
- package/dist/src/agent/read.js.map +1 -1
- package/dist/src/agent/registry.js +8 -2
- package/dist/src/agent/registry.js.map +1 -1
- package/dist/src/agent/relay.d.ts +2 -0
- package/dist/src/agent/relay.js +11 -3
- package/dist/src/agent/relay.js.map +1 -1
- package/dist/src/agent/sales.d.ts +29 -0
- package/dist/src/agent/sales.js +248 -0
- package/dist/src/agent/sales.js.map +1 -0
- package/dist/src/agent/signed-prepare.d.ts +1 -0
- package/dist/src/agent/signed-prepare.js +141 -0
- package/dist/src/agent/signed-prepare.js.map +1 -0
- package/dist/src/agent/signed-relay.d.ts +25 -0
- package/dist/src/agent/signed-relay.js +68 -0
- package/dist/src/agent/signed-relay.js.map +1 -0
- package/dist/src/agent/signed-submit.d.ts +2 -0
- package/dist/src/agent/signed-submit.js +137 -0
- package/dist/src/agent/signed-submit.js.map +1 -0
- package/dist/src/agent/signed-terms.d.ts +85 -0
- package/dist/src/agent/signed-terms.js +84 -0
- package/dist/src/agent/signed-terms.js.map +1 -0
- package/dist/src/agent/signed.d.ts +4 -13
- package/dist/src/agent/signed.js +4 -361
- package/dist/src/agent/signed.js.map +1 -1
- package/dist/src/agent/wallet/account.d.ts +4 -0
- package/dist/src/agent/wallet/account.js +84 -0
- package/dist/src/agent/wallet/account.js.map +1 -0
- package/dist/src/agent/wallet/attest.d.ts +4 -0
- package/dist/src/agent/wallet/attest.js +178 -0
- package/dist/src/agent/wallet/attest.js.map +1 -0
- package/dist/src/agent/wallet/delivery.d.ts +13 -0
- package/dist/src/agent/wallet/delivery.js +171 -0
- package/dist/src/agent/wallet/delivery.js.map +1 -0
- package/dist/src/agent/wallet/escrow.d.ts +7 -0
- package/dist/src/agent/wallet/escrow.js +164 -0
- package/dist/src/agent/wallet/escrow.js.map +1 -0
- package/dist/src/agent/wallet/fills.d.ts +27 -0
- package/dist/src/agent/wallet/fills.js +80 -0
- package/dist/src/agent/wallet/fills.js.map +1 -0
- package/dist/src/agent/wallet/guard.d.ts +57 -0
- package/dist/src/agent/wallet/guard.js +205 -0
- package/dist/src/agent/wallet/guard.js.map +1 -0
- package/dist/src/agent/wallet/offer.d.ts +50 -0
- package/dist/src/agent/wallet/offer.js +80 -0
- package/dist/src/agent/wallet/offer.js.map +1 -0
- package/dist/src/agent/wallet/receipt.d.ts +42 -0
- package/dist/src/agent/wallet/receipt.js +102 -0
- package/dist/src/agent/wallet/receipt.js.map +1 -0
- package/dist/src/agent/wallet/record.d.ts +31 -0
- package/dist/src/agent/wallet/record.js +178 -0
- package/dist/src/agent/wallet/record.js.map +1 -0
- package/dist/src/agent/wallet/releases.d.ts +40 -0
- package/dist/src/agent/wallet/releases.js +236 -0
- package/dist/src/agent/wallet/releases.js.map +1 -0
- package/dist/src/agent/wallet/split.d.ts +10 -0
- package/dist/src/agent/wallet/split.js +271 -0
- package/dist/src/agent/wallet/split.js.map +1 -0
- package/dist/src/agent/wallet/trade.d.ts +14 -0
- package/dist/src/agent/wallet/trade.js +243 -0
- package/dist/src/agent/wallet/trade.js.map +1 -0
- package/dist/src/agent/wallet/wait.d.ts +5 -0
- package/dist/src/agent/wallet/wait.js +99 -0
- package/dist/src/agent/wallet/wait.js.map +1 -0
- package/dist/src/agent/wallet.d.ts +18 -72
- package/dist/src/agent/wallet.js +26 -1216
- package/dist/src/agent/wallet.js.map +1 -1
- package/dist/src/arg-options.d.ts +333 -0
- package/dist/src/arg-options.js +310 -0
- package/dist/src/arg-options.js.map +1 -0
- package/dist/src/arg-usage.d.ts +7 -0
- package/dist/src/arg-usage.js +53 -0
- package/dist/src/arg-usage.js.map +1 -0
- package/dist/src/arg-values.d.ts +47 -0
- package/dist/src/arg-values.js +280 -0
- package/dist/src/arg-values.js.map +1 -0
- package/dist/src/args.d.ts +7 -487
- package/dist/src/args.js +89 -880
- package/dist/src/args.js.map +1 -1
- package/dist/src/artifact.d.ts +22 -0
- package/dist/src/artifact.js +89 -0
- package/dist/src/artifact.js.map +1 -0
- package/dist/src/check-process.d.ts +39 -0
- package/dist/src/check-process.js +338 -0
- package/dist/src/check-process.js.map +1 -0
- package/dist/src/command-builders.d.ts +37 -0
- package/dist/src/command-builders.js +216 -0
- package/dist/src/command-builders.js.map +1 -0
- package/dist/src/command-types.d.ts +227 -0
- package/dist/src/command-types.js +2 -0
- package/dist/src/command-types.js.map +1 -0
- package/dist/src/commands.d.ts +7 -43
- package/dist/src/commands.js +67 -426
- package/dist/src/commands.js.map +1 -1
- package/dist/src/event-feed.d.ts +13 -0
- package/dist/src/event-feed.js +46 -0
- package/dist/src/event-feed.js.map +1 -0
- package/dist/src/flow-commands.d.ts +8 -0
- package/dist/src/flow-commands.js +116 -0
- package/dist/src/flow-commands.js.map +1 -0
- package/dist/src/flows.d.ts +6 -0
- package/dist/src/flows.js +84 -10
- package/dist/src/flows.js.map +1 -1
- package/dist/src/job-commands.d.ts +9 -0
- package/dist/src/job-commands.js +89 -0
- package/dist/src/job-commands.js.map +1 -0
- package/dist/src/judge-errors.d.ts +12 -0
- package/dist/src/judge-errors.js +16 -0
- package/dist/src/judge-errors.js.map +1 -0
- package/dist/src/judge.d.ts +28 -0
- package/dist/src/judge.js +169 -0
- package/dist/src/judge.js.map +1 -0
- package/dist/src/main.d.ts +4 -1
- package/dist/src/main.js +26 -10
- package/dist/src/main.js.map +1 -1
- package/dist/src/order-builders.d.ts +10 -0
- package/dist/src/order-builders.js +172 -0
- package/dist/src/order-builders.js.map +1 -0
- package/dist/src/render.d.ts +1 -0
- package/dist/src/render.js +9 -0
- package/dist/src/render.js.map +1 -1
- package/dist/src/runtime.d.ts +22 -0
- package/dist/src/runtime.js +2 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/solve-commands.d.ts +25 -0
- package/dist/src/solve-commands.js +171 -0
- package/dist/src/solve-commands.js.map +1 -0
- package/dist/src/tokens.js +2 -1
- package/dist/src/tokens.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/wallet.d.ts +4 -1
- package/dist/src/wallet.js +25 -5
- package/dist/src/wallet.js.map +1 -1
- package/package.json +16 -7
- package/dist/src/events.d.ts +0 -8
- package/dist/src/events.js +0 -43
- package/dist/src/events.js.map +0 -1
- package/dist/src/transport.d.ts +0 -208
- package/dist/src/transport.js +0 -441
- package/dist/src/transport.js.map +0 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { AccountRole, getAddressDecoder, getBase16Decoder } from "@solana/kit";
|
|
3
|
+
import { attestedFillMessage, attestedProofMessage, buildFillAttested, decodeParams, feeBpsFor, findIntentPda, formatAmount, getIntentDecoder, IntentStatus, Kind, NATIVE_MINT, releaseMemo, signEd25519Instruction, splitFees, settlementWarnings, } from "@intent-engine/core";
|
|
4
|
+
import { chainTime, deliveryRecord, firstDelivery, loadConfig, MEMO_PROGRAM_ADDRESS, mintOf, tokenAccountIfMissing } from "@intent-engine/client";
|
|
5
|
+
import { TOKEN_NAMES } from "../../tokens.js";
|
|
6
|
+
import { define } from "../actions.js";
|
|
7
|
+
import { WRAPPED } from "../create.js";
|
|
8
|
+
import { tool } from "../names.js";
|
|
9
|
+
import { AgentRefusal } from "../problems.js";
|
|
10
|
+
import { InvalidInput, account, amount, flag, integer, list, object, optional, text } from "../schema.js";
|
|
11
|
+
import { preparedView } from "../shapes.js";
|
|
12
|
+
import { walletRecipient } from "../owner.js";
|
|
13
|
+
import { prepare } from "../prepare.js";
|
|
14
|
+
import { STATUS } from "../../accounts.js";
|
|
15
|
+
import { signerOf, sent, sha256Of } from "./guard.js";
|
|
16
|
+
import { notEarliest, DELIVERED_NEEDED, ATTEST_PAGES, MAX_ATTEST_PAGES, MAX_PAGES_INPUT, HISTORY_TOO_LONG, notAttestor } from "./delivery.js";
|
|
17
|
+
export const PAYEE_MOVED = "this wallet's token account for the escrowed token now belongs to someone else, so a release would not reach it; ask the payee for another wallet";
|
|
18
|
+
export const RELEASE_CHANGED = "this release differs from its preview: the payee, amount, result, fee or the escrow itself changed, or no approval was given; preview it again and show the user";
|
|
19
|
+
export const approvalOf = (message, memo = "") => createHash("sha256").update(message).update(memo).digest("hex").slice(0, 16);
|
|
20
|
+
export const walletAttest = define({
|
|
21
|
+
name: tool("wallet_attest"),
|
|
22
|
+
title: "Release an escrow as its attestor",
|
|
23
|
+
description: `As the attestor an escrow names, sign that it pays pay_to and settle it on chain from this server's wallet: the escrowed tokens, minus the engine fee and any partner fee, go to pay_to's token account, which this creates if needed. Use it when this server's wallet was named attestor of an intent made with ${tool("wallet_escrow")} and the work it pays for is done. A release cannot be undone. Without send it only previews and signs nothing; show the user the summary and, once they approve, call again with send: true and the approval the preview returned, which holds the send to exactly what was previewed.`,
|
|
24
|
+
effect: "submit",
|
|
25
|
+
input: object({
|
|
26
|
+
owner: account("the wallet that made the escrow"),
|
|
27
|
+
nonce: amount("the escrow intent's nonce"),
|
|
28
|
+
pay_to: account("the wallet to pay"),
|
|
29
|
+
result: optional(amount("the result to attest, between the intent's min_result and max_result; default min_result")),
|
|
30
|
+
delivered_sha256: optional(text(`the sha256, as 64 hex digits, of the work this release pays for; required for a proof escrow, whose release pays that work's earliest announcer; recorded in a memo this wallet signs with the release, so the payer can check what it receives with ${tool("wallet_receipt")}`)),
|
|
31
|
+
max_pages: optional(integer(1, MAX_ATTEST_PAGES, MAX_PAGES_INPUT)),
|
|
32
|
+
approval: optional(text("the approval the preview returned; needed with send")),
|
|
33
|
+
send: optional(flag("true signs the attestation and settles; leave out to preview")),
|
|
34
|
+
}),
|
|
35
|
+
output: object({
|
|
36
|
+
intent: account(),
|
|
37
|
+
pay_to: account(),
|
|
38
|
+
payee: account("pay_to's token account that receives the escrow"),
|
|
39
|
+
paid: text("whole tokens pay_to receives"),
|
|
40
|
+
fee: text("whole tokens kept as fees"),
|
|
41
|
+
result: amount(),
|
|
42
|
+
approval: text("pass it back with send: true; a send that would differ from this preview is refused"),
|
|
43
|
+
delivered_sha256: optional(text("the sha256 the release records")),
|
|
44
|
+
summary: list(text(), 8),
|
|
45
|
+
warnings: list(text(), 8),
|
|
46
|
+
sent: flag(),
|
|
47
|
+
signature: optional(text()),
|
|
48
|
+
next: optional(text()),
|
|
49
|
+
}),
|
|
50
|
+
run: async (ctx, input, call) => {
|
|
51
|
+
const signer = await signerOf(ctx);
|
|
52
|
+
const [intent] = await findIntentPda({ owner: input.owner, nonce: input.nonce });
|
|
53
|
+
const [view, { config }] = await Promise.all([ctx.transport.getAccount(intent), loadConfig(ctx.transport)]);
|
|
54
|
+
if (view === null) {
|
|
55
|
+
throw new AgentRefusal("NotFound", `no intent ${intent}; it was settled, cancelled and closed, or never made`);
|
|
56
|
+
}
|
|
57
|
+
const held = getIntentDecoder().decode(view.data);
|
|
58
|
+
const params = decodeParams(held.kind, Uint8Array.from(held.params));
|
|
59
|
+
if (params.kind !== Kind.AttestedResult) {
|
|
60
|
+
throw new AgentRefusal("KindMismatch", "this intent is not an attested escrow");
|
|
61
|
+
}
|
|
62
|
+
if (params.attestor !== signer.address) {
|
|
63
|
+
throw new AgentRefusal("Unauthorized", notAttestor(params.attestor));
|
|
64
|
+
}
|
|
65
|
+
if (held.status !== IntentStatus.Open) {
|
|
66
|
+
throw new AgentRefusal("InvalidTransition", `this escrow is ${STATUS[held.status] ?? "not open"}, so it can no longer be released`);
|
|
67
|
+
}
|
|
68
|
+
if (held.expiresAt <= (await chainTime(ctx.transport))) {
|
|
69
|
+
throw new AgentRefusal("IntentExpired", "this escrow has expired; its owner gets it back instead");
|
|
70
|
+
}
|
|
71
|
+
const result = input.result ?? params.minResult;
|
|
72
|
+
if (result < params.minResult || result > params.maxResult) {
|
|
73
|
+
throw new InvalidInput([{ path: "result", message: `must be between ${params.minResult} and ${params.maxResult}` }]);
|
|
74
|
+
}
|
|
75
|
+
await walletRecipient(ctx.transport, input.pay_to, "pay_to");
|
|
76
|
+
const token = await mintOf(ctx.transport, held.inputMint);
|
|
77
|
+
const payee = await tokenAccountIfMissing(ctx.transport, signer, input.pay_to, held.inputMint, token.tokenProgram);
|
|
78
|
+
if (payee.create.length === 0) {
|
|
79
|
+
const existing = await ctx.transport.getAccount(payee.address);
|
|
80
|
+
const holder = existing === null || existing.data.length < 64 ? null : getAddressDecoder().decode(existing.data.subarray(32, 64));
|
|
81
|
+
if (holder !== input.pay_to) {
|
|
82
|
+
throw new InvalidInput([{ path: "pay_to", message: PAYEE_MOVED }]);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
const amountIn = held.escrowed - held.filled;
|
|
86
|
+
const isProof = params.specHash.some((b) => b !== 0);
|
|
87
|
+
const settleAmount = amountIn - params.judgeFee;
|
|
88
|
+
const maxFeeBps = feeBpsFor(config, held.kind) + held.partnerBps;
|
|
89
|
+
const shares = splitFees(settleAmount, feeBpsFor(config, held.kind), held.partnerBps, held.partnerCutBps);
|
|
90
|
+
const treasury = shares.protocol > 0n
|
|
91
|
+
? await tokenAccountIfMissing(ctx.transport, signer, config.feeRecipient, held.inputMint, token.tokenProgram)
|
|
92
|
+
: { create: [] };
|
|
93
|
+
const partnerPaid = shares.partner > 0n;
|
|
94
|
+
const partner = partnerPaid ? await tokenAccountIfMissing(ctx.transport, signer, held.partner, held.inputMint, token.tokenProgram) : { create: [] };
|
|
95
|
+
const judge = isProof && params.judgeFee > 0n
|
|
96
|
+
? await tokenAccountIfMissing(ctx.transport, signer, signer.address, held.inputMint, token.tokenProgram)
|
|
97
|
+
: { create: [] };
|
|
98
|
+
const attestFields = {
|
|
99
|
+
domain: Uint8Array.from(config.domain),
|
|
100
|
+
intent,
|
|
101
|
+
payee: payee.address,
|
|
102
|
+
amountIn,
|
|
103
|
+
result,
|
|
104
|
+
filled: held.filled,
|
|
105
|
+
revision: held.revision,
|
|
106
|
+
maxFeeBps,
|
|
107
|
+
};
|
|
108
|
+
const message = isProof
|
|
109
|
+
? await attestedProofMessage(signer.address, { ...attestFields, specHash: params.specHash })
|
|
110
|
+
: await attestedFillMessage(signer.address, attestFields);
|
|
111
|
+
const settle = await buildFillAttested({
|
|
112
|
+
solver: signer,
|
|
113
|
+
owner: input.owner,
|
|
114
|
+
nonce: input.nonce,
|
|
115
|
+
inputMint: held.inputMint,
|
|
116
|
+
inputTokenProgram: token.tokenProgram,
|
|
117
|
+
payee: payee.address,
|
|
118
|
+
...(shares.protocol > 0n ? { feeRecipient: config.feeRecipient } : {}),
|
|
119
|
+
...(partnerPaid ? { partner: held.partner } : {}),
|
|
120
|
+
...(isProof && params.judgeFee > 0n ? { judge: signer.address } : {}),
|
|
121
|
+
amountIn,
|
|
122
|
+
result,
|
|
123
|
+
maxFeeBps,
|
|
124
|
+
});
|
|
125
|
+
const name = TOKEN_NAMES[held.inputMint] ?? held.inputMint;
|
|
126
|
+
const paid = formatAmount(shares.net, token.decimals);
|
|
127
|
+
const setup = [...payee.create, ...treasury.create, ...partner.create, ...judge.create];
|
|
128
|
+
const delivered = input.delivered_sha256 === undefined ? undefined : sha256Of(input.delivered_sha256, "delivered_sha256");
|
|
129
|
+
if (isProof && delivered === undefined) {
|
|
130
|
+
throw new InvalidInput([{ path: "delivered_sha256", message: DELIVERED_NEEDED }]);
|
|
131
|
+
}
|
|
132
|
+
if (delivered !== undefined && isProof) {
|
|
133
|
+
const record = await deliveryRecord(ctx.transport, signer.address, intent, input.max_pages ?? ATTEST_PAGES);
|
|
134
|
+
if (!record.complete) {
|
|
135
|
+
throw new AgentRefusal("HistoryTooLong", HISTORY_TOO_LONG);
|
|
136
|
+
}
|
|
137
|
+
const first = firstDelivery(record.deliveries, delivered);
|
|
138
|
+
if (first !== null && first.worker !== input.pay_to) {
|
|
139
|
+
throw new AgentRefusal("NotEarliestAnnouncer", notEarliest(first.worker, delivered));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const memoText = delivered === undefined ? "" : releaseMemo(delivered);
|
|
143
|
+
const memo = delivered === undefined
|
|
144
|
+
? []
|
|
145
|
+
: [{ programAddress: MEMO_PROGRAM_ADDRESS, accounts: [{ address: signer.address, role: AccountRole.READONLY_SIGNER, signer }], data: new TextEncoder().encode(memoText) }];
|
|
146
|
+
const approval = approvalOf(message, memoText);
|
|
147
|
+
if (input.send === true && input.approval !== approval) {
|
|
148
|
+
throw new AgentRefusal("ReleaseChanged", RELEASE_CHANGED);
|
|
149
|
+
}
|
|
150
|
+
const prepared = input.send === true
|
|
151
|
+
? preparedView(await prepare(ctx.transport, [...setup, await signEd25519Instruction(signer, message), settle, ...memo], signer.address))
|
|
152
|
+
: undefined;
|
|
153
|
+
const view2 = {
|
|
154
|
+
intent,
|
|
155
|
+
pay_to: input.pay_to,
|
|
156
|
+
payee: payee.address,
|
|
157
|
+
paid,
|
|
158
|
+
fee: formatAmount(shares.protocol + shares.partner, token.decimals),
|
|
159
|
+
result,
|
|
160
|
+
approval,
|
|
161
|
+
...(delivered === undefined ? {} : { delivered_sha256: delivered }),
|
|
162
|
+
summary: [
|
|
163
|
+
`Pays: ${paid} of ${name} to ${input.pay_to} from ${input.owner}'s escrow${held.inputMint === NATIVE_MINT ? WRAPPED : ""}`,
|
|
164
|
+
...(isProof && params.judgeFee > 0n ? [`Pays the judge: ${formatAmount(params.judgeFee, token.decimals)} of ${name} to this wallet, carved out of the escrow`] : []),
|
|
165
|
+
...(isProof ? [`Binds: the result to the committed spec ${getBase16Decoder().decode(params.specHash)}`] : []),
|
|
166
|
+
`Attests: result ${result}, signed by this server's wallet as the escrow's attestor`,
|
|
167
|
+
...(delivered === undefined ? [] : [`Records: the delivered work's sha256 ${delivered}, in a memo this wallet signs with the release`]),
|
|
168
|
+
...(payee.create.length === 0 ? [] : [`Setup: creates ${input.pay_to}'s ${name} account, paid by this wallet`]),
|
|
169
|
+
...(treasury.create.length === 0 ? [] : [`Setup: creates the engine treasury's ${name} account for the fee, paid by this wallet`]),
|
|
170
|
+
...(partner.create.length === 0 ? [] : [`Setup: creates the partner ${held.partner}'s ${name} account for its fee, paid by this wallet`]),
|
|
171
|
+
],
|
|
172
|
+
warnings: settlementWarnings(params),
|
|
173
|
+
prepared,
|
|
174
|
+
};
|
|
175
|
+
return sent(ctx, signer, view2, input.send, call);
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
//# sourceMappingURL=attest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attest.js","sourceRoot":"","sources":["../../../../src/agent/wallet/attest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,IAAI,EACJ,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,SAAS,EACT,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAqB,MAAM,EAAE,MAAM,eAAe,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1G,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE9I,MAAM,CAAC,MAAM,WAAW,GAAG,mJAAmJ,CAAC;AAE/K,MAAM,CAAC,MAAM,eAAe,GAAG,kKAAkK,CAAC;AAElM,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAmB,EAAE,IAAI,GAAG,EAAE,EAAU,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEnJ,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC;IAC3B,KAAK,EAAE,mCAAmC;IAC1C,WAAW,EAAE,qTAAqT,IAAI,CAAC,eAAe,CAAC,yRAAyR;IAChnB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,OAAO,CAAC,iCAAiC,CAAC;QACjD,KAAK,EAAE,MAAM,CAAC,2BAA2B,CAAC;QAC1C,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC;QACpC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,0FAA0F,CAAC,CAAC;QACpH,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,wPAAwP,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAClT,SAAS,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAClE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QAC/E,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;KACrF,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,EAAE;QACjB,MAAM,EAAE,OAAO,EAAE;QACjB,KAAK,EAAE,OAAO,CAAC,iDAAiD,CAAC;QACjE,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC;QAC1C,GAAG,EAAE,IAAI,CAAC,2BAA2B,CAAC;QACtC,MAAM,EAAE,MAAM,EAAE;QAChB,QAAQ,EAAE,IAAI,CAAC,qFAAqF,CAAC;QACrG,gBAAgB,EAAE,QAAQ,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAClE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzB,IAAI,EAAE,IAAI,EAAE;QACZ,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;KACvB,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,GAAiB,EAAE,KAAK,EAAE,IAAU,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5G,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,aAAa,MAAM,uDAAuD,CAAC,CAAC;QACjH,CAAC;QACD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACrE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;YACxC,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YACvC,MAAM,IAAI,YAAY,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,YAAY,CAAC,mBAAmB,EAAE,kBAAkB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,UAAU,mCAAmC,CAAC,CAAC;QACtI,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,yDAAyD,CAAC,CAAC;QACrG,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC;QAChD,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3D,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,MAAM,CAAC,SAAS,QAAQ,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACnH,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAClI,IAAI,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBAC5B,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YACrE,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChD,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACjE,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1G,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,GAAG,EAAE;YAClB,CAAC,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC7G,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACxC,MAAM,OAAO,GACX,WAAW,CAAC,CAAC,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACtI,MAAM,KAAK,GACT,OAAO,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE;YAC7B,CAAC,CAAC,MAAM,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YACxG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACrB,MAAM,YAAY,GAAG;YACnB,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YACtC,MAAM;YACN,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,QAAQ;YACR,MAAM;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS;SACV,CAAC;QACF,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,MAAM,oBAAoB,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,GAAG,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5F,CAAC,CAAC,MAAM,mBAAmB,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC;YACrC,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,iBAAiB,EAAE,KAAK,CAAC,YAAY;YACrC,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrE,QAAQ;YACR,MAAM;YACN,SAAS;SACV,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC;QAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QACxF,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;QAC1H,IAAI,OAAO,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,SAAS,KAAK,SAAS,IAAI,OAAO,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC;YAC5G,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;gBACpD,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;YACvF,CAAC;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACvE,MAAM,IAAI,GACR,SAAS,KAAK,SAAS;YACrB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/K,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,QAAQ,GACZ,KAAK,CAAC,IAAI,KAAK,IAAI;YACjB,CAAC,CAAC,YAAY,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,KAAK,EAAE,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACxI,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,KAAK,GAAG;YACZ,MAAM;YACN,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,OAAO;YACpB,IAAI;YACJ,GAAG,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;YACnE,MAAM;YACN,QAAQ;YACR,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;YACnE,OAAO,EAAE;gBACP,SAAS,IAAI,OAAO,IAAI,OAAO,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1H,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,mBAAmB,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,2CAA2C,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpK,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,2CAA2C,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7G,mBAAmB,MAAM,2DAA2D;gBACpF,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wCAAwC,SAAS,gDAAgD,CAAC,CAAC;gBACvI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,kBAAkB,KAAK,CAAC,MAAM,MAAM,IAAI,+BAA+B,CAAC,CAAC;gBAC/G,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wCAAwC,IAAI,2CAA2C,CAAC,CAAC;gBAClI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,8BAA8B,IAAI,CAAC,OAAO,MAAM,IAAI,2CAA2C,CAAC,CAAC;aAC1I;YACD,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC;YACpC,QAAQ;SACT,CAAC;QACF,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare const walletDeliver: import("../actions.js").AnyAction;
|
|
2
|
+
export declare const notEarliest: (worker: string, sha256: string) => string;
|
|
3
|
+
export declare const notInSplit: (worker: string, sha256: string) => string;
|
|
4
|
+
export declare const DELIVERY_LIST: number;
|
|
5
|
+
export declare const DELIVERED_NEEDED = "a proof escrow pays the earliest announcer of the work it releases for, so give that work's sha256";
|
|
6
|
+
export declare const ATTEST_PAGES = 1000;
|
|
7
|
+
export declare const MAX_ATTEST_PAGES = 100000;
|
|
8
|
+
export declare const MAX_PAGES_INPUT = "pages of 1000 signatures of this wallet's history to read for announced work, listing every signature but fetching only announcements; default 1000; raise it when the release is refused because the record of announced work is incomplete";
|
|
9
|
+
export declare const HISTORY_TOO_LONG: string;
|
|
10
|
+
export declare const walletCheckDelivery: import("../actions.js").AnyAction;
|
|
11
|
+
export declare const checkDelivery: import("../actions.js").AnyAction;
|
|
12
|
+
export declare const prepareDeliver: import("../actions.js").AnyAction;
|
|
13
|
+
export declare const notAttestor: (attestor: string) => string;
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { createNoopSigner, getBase16Decoder } from "@solana/kit";
|
|
2
|
+
import { decodeParams, getIntentDecoder, getIntentDiscriminatorBytes, getIntentSize, isMemoUrl, MEMO_URL_RULE, INTENT_ENGINE_PROGRAM_ADDRESS, IntentStatus, Kind, } from "@intent-engine/core";
|
|
3
|
+
import { announcements, chainTime, DELIVERY_PAGES, deliveryRecord, deliveryInstructions, MEMOS_PER_TRANSACTION, SIGNATURE_PAGE, } from "@intent-engine/client";
|
|
4
|
+
import { define } from "../actions.js";
|
|
5
|
+
import { tool } from "../names.js";
|
|
6
|
+
import { AgentRefusal } from "../problems.js";
|
|
7
|
+
import { InvalidInput, account, amount, flag, integer, list, object, optional, text } from "../schema.js";
|
|
8
|
+
import { preparedSchema, preparedView } from "../shapes.js";
|
|
9
|
+
import { prepare } from "../prepare.js";
|
|
10
|
+
import { signerOf, sent, sha256Of } from "./guard.js";
|
|
11
|
+
export const walletDeliver = define({
|
|
12
|
+
name: tool("wallet_deliver"),
|
|
13
|
+
title: "Announce delivered work to a judge",
|
|
14
|
+
description: `As a worker, tell the attestor of a proof escrow, such as one found with ${tool("find_jobs")}, that the work is done: this server's wallet sends one transaction with a memo naming the escrow, the work's sha256 and the url the attestor fetches it from, and a transfer of 0 lamports to the attestor so the delivery shows in its history. It moves no tokens and costs only the transaction fee. The attestor alone decides whether the work passes and whom it pays, so host the work where the attestor can fetch it and give its exact sha256. Without send it only previews; show the user the summary and call again with send: true once they approve.`,
|
|
15
|
+
effect: "submit",
|
|
16
|
+
repeats: true,
|
|
17
|
+
input: object({
|
|
18
|
+
intent: account("the proof escrow's intent address"),
|
|
19
|
+
sha256: text("the sha256 of the delivered work, as 64 hex digits"),
|
|
20
|
+
url: text(`where the attestor fetches the work, ${MEMO_URL_RULE}`),
|
|
21
|
+
send: optional(flag("true signs and sends; leave out to preview")),
|
|
22
|
+
}),
|
|
23
|
+
output: object({
|
|
24
|
+
intent: account(),
|
|
25
|
+
attestor: account("the escrow's judge, who receives the announcement"),
|
|
26
|
+
sha256: text(),
|
|
27
|
+
url: text(),
|
|
28
|
+
summary: list(text(), 8),
|
|
29
|
+
warnings: list(text(), 8),
|
|
30
|
+
sent: flag(),
|
|
31
|
+
signature: optional(text()),
|
|
32
|
+
next: optional(text()),
|
|
33
|
+
}),
|
|
34
|
+
run: async (ctx, input, call) => {
|
|
35
|
+
const signer = await signerOf(ctx);
|
|
36
|
+
const sha256 = sha256Of(input.sha256, "sha256");
|
|
37
|
+
if (!isMemoUrl(input.url)) {
|
|
38
|
+
throw new InvalidInput([{ path: "url", message: `must be ${MEMO_URL_RULE}` }]);
|
|
39
|
+
}
|
|
40
|
+
const { attestor, instructions } = await deliveryInstructions(ctx.transport, { worker: signer, intent: input.intent, sha256, url: input.url });
|
|
41
|
+
const view = {
|
|
42
|
+
intent: input.intent,
|
|
43
|
+
attestor,
|
|
44
|
+
sha256,
|
|
45
|
+
url: input.url,
|
|
46
|
+
summary: [
|
|
47
|
+
`Announces: the work with sha256 ${sha256} at ${input.url}, for the proof escrow ${input.intent}`,
|
|
48
|
+
`Notifies: its attestor ${attestor}, with a transfer of 0 lamports from this wallet`,
|
|
49
|
+
"Costs: the transaction fee; no tokens move",
|
|
50
|
+
],
|
|
51
|
+
warnings: [],
|
|
52
|
+
prepared: preparedView(await prepare(ctx.transport, instructions, signer.address)),
|
|
53
|
+
};
|
|
54
|
+
return sent(ctx, signer, view, input.send, call);
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
export const notEarliest = (worker, sha256) => `${worker} announced the work with sha256 ${sha256} first, so a release recording it pays ${worker}; anyone can copy an announcement once it is on chain, so the earliest announcer is paid`;
|
|
58
|
+
export const notInSplit = (worker, sha256) => `${worker} announced the work with sha256 ${sha256} first, so a split recording it must pay ${worker} among its recipients; anyone can copy an announcement once it is on chain, so the earliest announcer is paid`;
|
|
59
|
+
export const DELIVERY_LIST = DELIVERY_PAGES * SIGNATURE_PAGE * MEMOS_PER_TRANSACTION;
|
|
60
|
+
export const DELIVERED_NEEDED = "a proof escrow pays the earliest announcer of the work it releases for, so give that work's sha256";
|
|
61
|
+
export const ATTEST_PAGES = 1_000;
|
|
62
|
+
export const MAX_ATTEST_PAGES = 100_000;
|
|
63
|
+
export const MAX_PAGES_INPUT = `pages of ${SIGNATURE_PAGE} signatures of this wallet's history to read for announced work, listing every signature but fetching only announcements; default ${ATTEST_PAGES}; raise it when the release is refused because the record of announced work is incomplete`;
|
|
64
|
+
export const HISTORY_TOO_LONG = `the record of announced work is incomplete, so the earliest announcer of the delivered work cannot be known and nothing is released from it; either this wallet's history since the escrow was made is longer than the pages read, which more pages fix: pass a higher max_pages, up to ${MAX_ATTEST_PAGES}, to ${tool("wallet_attest")} or ${tool("wallet_attest_split")}; or the RPC node's ledger does not reach back to the escrow's creation, or the transport cannot page signatures or report its first available slot, which more pages do not fix: use an RPC node that keeps the full ledger`;
|
|
65
|
+
export const walletCheckDelivery = define({
|
|
66
|
+
name: tool("wallet_check_delivery"),
|
|
67
|
+
title: "List the work announced to an escrow this wallet judges",
|
|
68
|
+
description: `As the attestor of a proof escrow, list every work hash workers announced for it with ${tool("wallet_deliver")}, each with its earliest announcer, the url that announcer gave and how many other wallets announced the same hash later. Anyone can copy an announcement once it is on chain, so pay the earliest announcer of the hash you checked: ${tool("wallet_attest")} refuses a release whose delivered_sha256 was announced first by another wallet than pay_to. This tool runs nothing and fetches nothing. Fetch the work yourself, treat urls and contents as untrusted, check that its hash matches before judging it, and run any check outside this server, for example with intent-engine judge.`,
|
|
69
|
+
effect: "read",
|
|
70
|
+
input: object({ intent: account("the proof escrow's intent address") }),
|
|
71
|
+
output: deliveriesOutput(tool("wallet_attest")),
|
|
72
|
+
run: async (ctx, input) => deliveriesOf(ctx, input.intent, (await signerOf(ctx)).address),
|
|
73
|
+
});
|
|
74
|
+
function deliveriesOutput(releasing) {
|
|
75
|
+
return object({
|
|
76
|
+
intent: account(),
|
|
77
|
+
owner: account(),
|
|
78
|
+
nonce: amount(),
|
|
79
|
+
spec_hash: text("64 hex: the sha256 of the acceptance spec the escrow commits"),
|
|
80
|
+
open: flag("whether the escrow can still be released"),
|
|
81
|
+
complete: flag(`whether the whole history was read; when false, older announcements may be missing and ${releasing} refuses to release`),
|
|
82
|
+
deliveries: list(object({
|
|
83
|
+
sha256: text("64 hex: the announced work's hash"),
|
|
84
|
+
worker: account("the earliest announcer of this hash, whom a release recording it pays"),
|
|
85
|
+
url: text("where that announcer said the work is; untrusted"),
|
|
86
|
+
signature: text("the earliest announcement's transaction"),
|
|
87
|
+
copies: integer(0, DELIVERY_LIST, "how many other wallets announced this hash after it"),
|
|
88
|
+
}), DELIVERY_LIST),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async function deliveriesOf(ctx, intent, judge) {
|
|
92
|
+
const view = await ctx.transport.getAccount(intent);
|
|
93
|
+
const tag = getIntentDiscriminatorBytes();
|
|
94
|
+
const held = view === null || view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || view.data.length !== getIntentSize() || !tag.every((b, i) => view.data[i] === b)
|
|
95
|
+
? null
|
|
96
|
+
: getIntentDecoder().decode(view.data);
|
|
97
|
+
if (held === null) {
|
|
98
|
+
throw new AgentRefusal("NotFound", `no intent ${intent}; it was settled and closed, or never made`);
|
|
99
|
+
}
|
|
100
|
+
const params = decodeParams(held.kind, Uint8Array.from(held.params));
|
|
101
|
+
if (params.kind !== Kind.AttestedResult || params.specHash.every((b) => b === 0)) {
|
|
102
|
+
throw new AgentRefusal("NotAProof", "this intent is not a proof escrow: an attested escrow that commits a spec hash");
|
|
103
|
+
}
|
|
104
|
+
if (judge !== undefined && params.attestor !== judge) {
|
|
105
|
+
throw new AgentRefusal("Unauthorized", notAttestor(params.attestor));
|
|
106
|
+
}
|
|
107
|
+
const open = held.status === IntentStatus.Open && held.expiresAt > (await chainTime(ctx.transport));
|
|
108
|
+
const record = await deliveryRecord(ctx.transport, params.attestor, intent);
|
|
109
|
+
const announced = announcements(record.deliveries);
|
|
110
|
+
return {
|
|
111
|
+
intent,
|
|
112
|
+
owner: held.owner,
|
|
113
|
+
nonce: held.nonce,
|
|
114
|
+
spec_hash: getBase16Decoder().decode(params.specHash),
|
|
115
|
+
open,
|
|
116
|
+
complete: record.complete,
|
|
117
|
+
deliveries: announced.map(({ sha256, first, copies }) => ({ sha256, worker: first.worker, url: first.url, signature: first.signature, copies })),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export const checkDelivery = define({
|
|
121
|
+
name: tool("check_delivery"),
|
|
122
|
+
title: "List the work announced to a proof escrow",
|
|
123
|
+
description: `List every work hash workers announced for a proof escrow, with ${tool("prepare_deliver")} or ${tool("wallet_deliver")}, each with its earliest announcer, the url that announcer gave and how many other wallets announced the same hash later, read from the history of the attestor the escrow names. Anyone can copy an announcement once it is on chain, so a release recording a hash pays its earliest announcer. This tool runs nothing, fetches nothing and needs no wallet. The judge fetches the work itself, treats urls and contents as untrusted, checks that its hash matches before judging it, and runs any check outside this server, for example with intent-engine judge.`,
|
|
124
|
+
effect: "read",
|
|
125
|
+
input: object({ intent: account("the proof escrow's intent address") }),
|
|
126
|
+
output: deliveriesOutput("a release"),
|
|
127
|
+
run: async (ctx, input) => deliveriesOf(ctx, input.intent),
|
|
128
|
+
});
|
|
129
|
+
export const prepareDeliver = define({
|
|
130
|
+
name: tool("prepare_deliver"),
|
|
131
|
+
title: "Prepare a delivery announcement",
|
|
132
|
+
description: `Build the transaction in which a worker tells the attestor of a proof escrow, such as one found with ${tool("find_jobs")}, that the work is done: a memo naming the escrow, the work's sha256 and the url the attestor fetches it from, and a transfer of 0 lamports to the attestor so the delivery shows in its history. It moves no tokens and costs the worker only the transaction fee. Returns an unsigned transaction that already simulated successfully; the worker's wallet must sign and send it. The attestor alone decides whether the work passes and whom it pays, and a release pays the earliest announcer of a hash, so host the work where the attestor can fetch it, give its exact sha256 and send promptly.`,
|
|
133
|
+
effect: "prepare",
|
|
134
|
+
input: object({
|
|
135
|
+
worker: account("the wallet that announces the work, signs and pays the fee, and is paid if a release records this work"),
|
|
136
|
+
intent: account("the proof escrow's intent address"),
|
|
137
|
+
sha256: text("the sha256 of the delivered work, as 64 hex digits"),
|
|
138
|
+
url: text(`where the attestor fetches the work, ${MEMO_URL_RULE}`),
|
|
139
|
+
}),
|
|
140
|
+
output: object({
|
|
141
|
+
intent: account(),
|
|
142
|
+
attestor: account("the escrow's judge, who receives the announcement"),
|
|
143
|
+
sha256: text(),
|
|
144
|
+
url: text(),
|
|
145
|
+
summary: list(text(), 8),
|
|
146
|
+
warnings: list(text(), 8),
|
|
147
|
+
prepared: preparedSchema,
|
|
148
|
+
}),
|
|
149
|
+
run: async (ctx, input) => {
|
|
150
|
+
const sha256 = sha256Of(input.sha256, "sha256");
|
|
151
|
+
if (!isMemoUrl(input.url)) {
|
|
152
|
+
throw new InvalidInput([{ path: "url", message: `must be ${MEMO_URL_RULE}` }]);
|
|
153
|
+
}
|
|
154
|
+
const { attestor, instructions } = await deliveryInstructions(ctx.transport, { worker: createNoopSigner(input.worker), intent: input.intent, sha256, url: input.url });
|
|
155
|
+
return {
|
|
156
|
+
intent: input.intent,
|
|
157
|
+
attestor,
|
|
158
|
+
sha256,
|
|
159
|
+
url: input.url,
|
|
160
|
+
summary: [
|
|
161
|
+
`Announces: the work with sha256 ${sha256} at ${input.url}, for the proof escrow ${input.intent}`,
|
|
162
|
+
`Notifies: its attestor ${attestor}, with a transfer of 0 lamports from ${input.worker}`,
|
|
163
|
+
"Costs: the transaction fee; no tokens move",
|
|
164
|
+
],
|
|
165
|
+
warnings: [],
|
|
166
|
+
prepared: preparedView(await prepare(ctx.transport, instructions, input.worker)),
|
|
167
|
+
};
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
export const notAttestor = (attestor) => `this intent names ${attestor} as its attestor, not this server's wallet; only that key can release it`;
|
|
171
|
+
//# sourceMappingURL=delivery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery.js","sourceRoot":"","sources":["../../../../src/agent/wallet/delivery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const ESCROW_EXPIRES_IN = 86400;
|
|
2
|
+
export declare const RECORD_MINT_NEEDED = "selling SOL on this RPC needs record_mint: any other token's mint, which only labels the escrow";
|
|
3
|
+
export declare const walletEscrow: import("../actions.js").AnyAction;
|
|
4
|
+
export declare const MAX_PIECES = 12;
|
|
5
|
+
export declare const piecesPartlySent: (sent: number, total: number, problem: string) => string;
|
|
6
|
+
export declare const piecesMayHaveLanded: (sent: number, total: number, problem: string) => string;
|
|
7
|
+
export declare const walletEscrowPlan: import("../actions.js").AnyAction;
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { formatAmount, MEMO_URL_RULE, NATIVE_MINT } from "@intent-engine/core";
|
|
2
|
+
import { chainTime, mintOf } from "@intent-engine/client";
|
|
3
|
+
import { TOKEN_NAMES, tokenNamed } from "../../tokens.js";
|
|
4
|
+
import { define } from "../actions.js";
|
|
5
|
+
import { MAX_EXPIRES_IN, MIN_EXPIRES_IN } from "../create.js";
|
|
6
|
+
import { tool } from "../names.js";
|
|
7
|
+
import { problemOf } from "../problems.js";
|
|
8
|
+
import { InvalidInput, account, amount, flag, hex32, integer, list, object, optional, text } from "../schema.js";
|
|
9
|
+
import { LANDING_SECONDS, access, mintNamed, raw, salesOf, checkSale, checkHour, refusedBeforeSending } from "./guard.js";
|
|
10
|
+
import { offerOutput, offered } from "./offer.js";
|
|
11
|
+
export const ESCROW_EXPIRES_IN = 86_400;
|
|
12
|
+
export const RECORD_MINT_NEEDED = "selling SOL on this RPC needs record_mint: any other token's mint, which only labels the escrow";
|
|
13
|
+
function recordedMint(sell, url, chosen) {
|
|
14
|
+
if (chosen !== undefined) {
|
|
15
|
+
return mintNamed(chosen, url, "record_mint");
|
|
16
|
+
}
|
|
17
|
+
if (sell !== NATIVE_MINT) {
|
|
18
|
+
return NATIVE_MINT;
|
|
19
|
+
}
|
|
20
|
+
const test = tokenNamed("TEST", url);
|
|
21
|
+
if (test instanceof Error) {
|
|
22
|
+
throw new InvalidInput([{ path: "record_mint", message: RECORD_MINT_NEEDED }]);
|
|
23
|
+
}
|
|
24
|
+
return test;
|
|
25
|
+
}
|
|
26
|
+
export const walletEscrow = define({
|
|
27
|
+
name: tool("wallet_escrow"),
|
|
28
|
+
title: "Escrow a payment for an attestor to release",
|
|
29
|
+
description: `Hold an exact amount of one token from this server's wallet in an attested intent: it goes, minus the engine fee, to whichever wallet the named attestor later signs for, once the attestor attests a result between min_result and max_result. Use it to pay another agent for work that a third agent or a person judges. The attestor alone decides who is paid, so name an attestor the user trusts; with spec_hash the release must also be signed over that exact spec. spec_url publishes where that spec lives, so workers find the escrow with ${tool("find_jobs")} and announce their work to the attestor with ${tool("wallet_deliver")}. Have the worker deliver to the attestor rather than to this wallet, since this wallet can cancel until the release; ${tool("wallet_receipt")} later shows what the release recorded. Until then the wallet can cancel it with ${tool("wallet_cancel")}, and after it expires anyone can return the escrow. Amounts are whole tokens such as 0.05. Without send it only previews; show the user the summary and call again with send: true once they approve.`,
|
|
30
|
+
effect: "submit",
|
|
31
|
+
repeats: true,
|
|
32
|
+
input: object({
|
|
33
|
+
sell: text("SOL, TEST or a mint address: the token to pay with"),
|
|
34
|
+
amount: text("whole tokens to escrow, such as 0.05"),
|
|
35
|
+
attestor: account("the wallet whose signature alone releases the escrow"),
|
|
36
|
+
min_result: optional(amount("least result the attestor may attest; default 1")),
|
|
37
|
+
max_result: optional(amount("greatest result the attestor may attest; default min_result")),
|
|
38
|
+
spec_hash: optional(hex32("64 hex: the sha256 of the acceptance spec the attestor must verify. Setting it binds the release to a signature over that exact spec, so the attestor cannot sign a generic result")),
|
|
39
|
+
spec_url: optional(text(`where the acceptance spec is published, ${MEMO_URL_RULE}; needs spec_hash. Recorded in a memo this wallet signs with the escrow`)),
|
|
40
|
+
judge_fee: optional(text("whole tokens of sell paid to the attestor out of the escrow when it settles, such as 0.001; needs spec_hash and must be below amount")),
|
|
41
|
+
expires_in: optional(integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, `least seconds the escrow stays open once sent; default ${ESCROW_EXPIRES_IN}`)),
|
|
42
|
+
record_mint: optional(text("a token the escrow records as its output, other than sell; only a label. Default SOL, or TEST when selling SOL on devnet")),
|
|
43
|
+
send: optional(flag("true signs and sends; leave out to preview")),
|
|
44
|
+
}),
|
|
45
|
+
output: offerOutput,
|
|
46
|
+
run: async (ctx, input, call) => {
|
|
47
|
+
const wallet = access(ctx);
|
|
48
|
+
const sold = mintNamed(input.sell, wallet.url, "sell");
|
|
49
|
+
const least = input.min_result ?? 1n;
|
|
50
|
+
const most = input.max_result ?? least;
|
|
51
|
+
if (most < least) {
|
|
52
|
+
throw new InvalidInput([{ path: "max_result", message: "must be at least min_result" }]);
|
|
53
|
+
}
|
|
54
|
+
const specHash = input.spec_hash;
|
|
55
|
+
if (input.judge_fee !== undefined && specHash === undefined) {
|
|
56
|
+
throw new InvalidInput([{ path: "judge_fee", message: "needs spec_hash" }]);
|
|
57
|
+
}
|
|
58
|
+
if (input.spec_url !== undefined && specHash === undefined) {
|
|
59
|
+
throw new InvalidInput([{ path: "spec_url", message: "needs spec_hash" }]);
|
|
60
|
+
}
|
|
61
|
+
return offered(ctx, call, { sell: sold, buy: recordedMint(sold, wallet.url, input.record_mint), send: input.send }, (token, _, now) => ({
|
|
62
|
+
order: {
|
|
63
|
+
kind: "attested",
|
|
64
|
+
amount_in: raw(input.amount, token.decimals, "amount"),
|
|
65
|
+
min_result: least,
|
|
66
|
+
max_result: most,
|
|
67
|
+
attestor: input.attestor,
|
|
68
|
+
...(specHash === undefined ? {} : { spec_hash: specHash }),
|
|
69
|
+
...(input.judge_fee === undefined ? {} : { judge_fee: raw(input.judge_fee, token.decimals, "judge_fee") }),
|
|
70
|
+
},
|
|
71
|
+
expires_at: now + BigInt((input.expires_in ?? ESCROW_EXPIRES_IN) + LANDING_SECONDS),
|
|
72
|
+
...(input.spec_url === undefined ? {} : { spec_url: input.spec_url }),
|
|
73
|
+
}));
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
export const MAX_PIECES = 12;
|
|
77
|
+
export const piecesPartlySent = (sent, total, problem) => `${sent} of ${total} pieces were escrowed; the next failed with ${problem}. To finish, escrow only the ${total - sent} remaining pieces; do not repeat this call`;
|
|
78
|
+
export const piecesMayHaveLanded = (sent, total, problem) => `${sent} of ${total} pieces were escrowed and the next may have landed too (${problem}); check ${tool("wallet_intents")} before escrowing any again, and do not repeat this call`;
|
|
79
|
+
export const walletEscrowPlan = define({
|
|
80
|
+
name: tool("wallet_escrow_plan"),
|
|
81
|
+
title: "Escrow a task's pieces in one plan",
|
|
82
|
+
description: `Split a task into pieces and escrow each piece's payment from this server's wallet in one call, each as ${tool("wallet_escrow")} would: every piece is its own escrow that its attestor releases on its own, to whichever wallet it signs for, so workers are paid as each piece passes. One preview shows every piece and the total; one send escrows them all. A piece not yet released can be cancelled on its own with ${tool("wallet_cancel")}. Have workers deliver to the attestor rather than to this wallet. Amounts are whole tokens. Without send it only previews; show the user the summary and call again with send: true once they approve.`,
|
|
83
|
+
effect: "submit",
|
|
84
|
+
repeats: true,
|
|
85
|
+
input: object({
|
|
86
|
+
sell: text("SOL, TEST or a mint address: the token to pay with"),
|
|
87
|
+
attestor: account("the wallet that releases every piece that names no attestor of its own"),
|
|
88
|
+
pieces: list(object({
|
|
89
|
+
name: text("a label for the piece, shown in the plan only"),
|
|
90
|
+
amount: text("whole tokens this piece pays, such as 0.01"),
|
|
91
|
+
attestor: optional(account("this piece's attestor, instead of the plan's")),
|
|
92
|
+
}), MAX_PIECES, "the pieces, in order", 2),
|
|
93
|
+
expires_in: optional(integer(MIN_EXPIRES_IN, MAX_EXPIRES_IN, `least seconds each escrow stays open once sent; default ${ESCROW_EXPIRES_IN}`)),
|
|
94
|
+
record_mint: optional(text("a token the escrows record as their output, other than sell; only a label. Default SOL, or TEST when selling SOL on devnet")),
|
|
95
|
+
send: optional(flag("true signs and sends every piece; leave out to preview")),
|
|
96
|
+
}),
|
|
97
|
+
output: object({
|
|
98
|
+
pieces: list(object({ name: text(), amount: text(), attestor: account(), intent: optional(account()), nonce: optional(amount()), signature: optional(text()) }), MAX_PIECES),
|
|
99
|
+
total: text("whole tokens escrowed across all pieces"),
|
|
100
|
+
summary: list(text(), 24, "the plan, then the first piece"),
|
|
101
|
+
warnings: list(text(), 16),
|
|
102
|
+
sent: flag(),
|
|
103
|
+
next: optional(text()),
|
|
104
|
+
}),
|
|
105
|
+
run: async (ctx, input, call) => {
|
|
106
|
+
const wallet = access(ctx);
|
|
107
|
+
const sold = mintNamed(input.sell, wallet.url, "sell");
|
|
108
|
+
const buy = recordedMint(sold, wallet.url, input.record_mint);
|
|
109
|
+
const [token, now] = await Promise.all([mintOf(ctx.transport, sold), chainTime(ctx.transport)]);
|
|
110
|
+
const planned = input.pieces.map((piece, i) => ({
|
|
111
|
+
name: piece.name,
|
|
112
|
+
amountIn: raw(piece.amount, token.decimals, `pieces.${i}.amount`),
|
|
113
|
+
attestor: piece.attestor ?? input.attestor,
|
|
114
|
+
}));
|
|
115
|
+
const total = planned.reduce((sum, piece) => sum + piece.amountIn, 0n);
|
|
116
|
+
const sales = await salesOf(wallet, now);
|
|
117
|
+
for (const piece of planned) {
|
|
118
|
+
checkSale(wallet.limits, sold, token.decimals, piece.amountIn, now, sales);
|
|
119
|
+
}
|
|
120
|
+
checkHour(wallet.limits, sold, token.decimals, total, now, sales);
|
|
121
|
+
const terms = (piece) => (_sold, _bought, at) => ({
|
|
122
|
+
order: { kind: "attested", amount_in: piece.amountIn, min_result: 1n, max_result: 1n, attestor: piece.attestor },
|
|
123
|
+
expires_at: at + BigInt((input.expires_in ?? ESCROW_EXPIRES_IN) + LANDING_SECONDS),
|
|
124
|
+
});
|
|
125
|
+
const name = TOKEN_NAMES[sold] ?? sold;
|
|
126
|
+
const listed = (piece) => ({ name: piece.name, amount: formatAmount(piece.amountIn, token.decimals), attestor: piece.attestor });
|
|
127
|
+
const [head, ...rest] = planned;
|
|
128
|
+
const first = (await offered(ctx, call, { sell: sold, buy, send: input.send }, terms(head)));
|
|
129
|
+
const shown = {
|
|
130
|
+
total: formatAmount(total, token.decimals),
|
|
131
|
+
summary: [
|
|
132
|
+
`Plan: ${planned.length} pieces, ${formatAmount(total, token.decimals)} of ${name} in all, each escrowed now and released on its own`,
|
|
133
|
+
...planned.map((piece, i) => `Piece ${i + 1}: ${piece.name}, ${formatAmount(piece.amountIn, token.decimals)} of ${name}, released by ${piece.attestor}`),
|
|
134
|
+
...first["summary"],
|
|
135
|
+
],
|
|
136
|
+
warnings: first["warnings"],
|
|
137
|
+
};
|
|
138
|
+
if (input.send !== true) {
|
|
139
|
+
return { pieces: planned.map(listed), ...shown, sent: false, next: first["next"] };
|
|
140
|
+
}
|
|
141
|
+
const pieces = [{ ...listed(head), intent: first["intent"], nonce: first["nonce"], signature: first["signature"] }];
|
|
142
|
+
for (const piece of rest) {
|
|
143
|
+
try {
|
|
144
|
+
const made = (await offered(ctx, call, { sell: sold, buy, send: true }, terms(piece)));
|
|
145
|
+
pieces.push({ ...listed(piece), intent: made["intent"], nonce: made["nonce"], signature: made["signature"] });
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
for (const undo of call.undo.splice(0)) {
|
|
149
|
+
undo();
|
|
150
|
+
}
|
|
151
|
+
const problem = problemOf(error);
|
|
152
|
+
const reason = `${problem.code}: ${problem.hint}`;
|
|
153
|
+
return {
|
|
154
|
+
pieces: [...pieces, ...planned.slice(pieces.length).map(listed)],
|
|
155
|
+
...shown,
|
|
156
|
+
sent: true,
|
|
157
|
+
next: refusedBeforeSending(error) ? piecesPartlySent(pieces.length, planned.length, reason) : piecesMayHaveLanded(pieces.length, planned.length, reason),
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return { pieces, ...shown, sent: true };
|
|
162
|
+
},
|
|
163
|
+
});
|
|
164
|
+
//# sourceMappingURL=escrow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../../../src/agent/wallet/escrow.ts"],"names":[],"mappings":"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"}
|