@intent-engine/cli 0.1.23 → 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 +7 -3
- 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 +7 -3
- 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 +13 -1
- package/dist/src/agent/problems.js +32 -1
- package/dist/src/agent/problems.js.map +1 -1
- package/dist/src/agent/read.d.ts +12 -0
- package/dist/src/agent/read.js +20 -6
- package/dist/src/agent/read.js.map +1 -1
- package/dist/src/agent/registry.js +6 -1
- 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 -73
- package/dist/src/agent/wallet.js +24 -1322
- 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 -545
- package/dist/src/args.js +55 -923
- 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 +60 -457
- 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 +11 -16
- package/dist/src/judge.js +120 -100
- package/dist/src/judge.js.map +1 -1
- package/dist/src/main.d.ts +4 -1
- package/dist/src/main.js +25 -9
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"sales.js","sourceRoot":"","sources":["../../../src/agent/sales.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const prepareSignedIntent: import("./actions.js").AnyAction;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { createNoopSigner, getBase64Decoder } from "@solana/kit";
|
|
2
|
+
import { buildApproveDelegate, buildEd25519Instruction, describeSignedIntent, escrowAmount, formatAmount, MEMO_URL_RULE, signedIntentMessage, validate, } from "@intent-engine/core";
|
|
3
|
+
import { chainTime, clusterDomain, initUserIfMissing, loadConfig, loadUser, mintOf, tokenAccountIfMissing, } from "@intent-engine/client";
|
|
4
|
+
import { define } from "./actions.js";
|
|
5
|
+
import { tool } from "./names.js";
|
|
6
|
+
import { expiryOf, termsInput, termsOutput, warningsOf } from "./create.js";
|
|
7
|
+
import { pickNonce, raiseAllowance, setupLines, unusedIntent } from "./owner.js";
|
|
8
|
+
import { prepare } from "./prepare.js";
|
|
9
|
+
import { AgentRefusal } from "./problems.js";
|
|
10
|
+
import { SIGNATURE_FEE } from "./budget.js";
|
|
11
|
+
import { refuseCostlyTerms, refuseLongRelay } from "./relay.js";
|
|
12
|
+
import { claim, claimedBy } from "./claims.js";
|
|
13
|
+
import { paramsOf, preparedSchema, preparedView } from "./shapes.js";
|
|
14
|
+
import { tokenNames } from "../tokens.js";
|
|
15
|
+
import { account, amount, integer, object, optional, text } from "./schema.js";
|
|
16
|
+
import { DEFAULT_SUBMIT_WITHIN, fieldsOf, MAX_SUBMIT_WITHIN, published, publishedUrl, publishesLine, signedTerms, SPEC_URL_UNSIGNED, } from "./signed-terms.js";
|
|
17
|
+
import { offeredFee, RELAY_TOO_LARGE, relayCreate, relayFits, relayFloor, SPEC_URL_TOO_LONG } from "./signed-relay.js";
|
|
18
|
+
export const prepareSignedIntent = define({
|
|
19
|
+
name: tool("prepare_signed_intent"),
|
|
20
|
+
title: "Prepare a relayer-submitted signed intent",
|
|
21
|
+
description: `Build an intent the owner authorises by signing a message off-chain, so a relayer creates it on chain and pays its rent and fees. Steps: (1) the owner signs and sends the returned setup transaction; it registers them, creates the receiving token account and raises the engine's spending allowance on the input token by this intent's escrow plus any relayer fee, and it is the only part that costs the owner SOL: its network fee, which the summary gives in lamports, plus rent for any account it creates; (2) the owner signs message with their wallet's sign-message; (3) pass submit unchanged plus that base58 signature to ${tool("submit_signed_intent")}. When this server runs a relayer, it relays only the input tokens it lists a fee for, the message includes that fee, and the owner pays it in that token as the intent is created; it refuses, before the owner signs or pays anything, an expiry beyond that relayer's longest or a create fee and crank bounty above what it pays; without --relayer this server can prepare but not submit. Read summary and warnings before the owner signs anything.`,
|
|
22
|
+
effect: "prepare",
|
|
23
|
+
input: object({
|
|
24
|
+
...termsInput,
|
|
25
|
+
owner: account("the wallet that signs the message off-chain; it pays only the setup transaction's network fee and any rent named in the summary, in SOL"),
|
|
26
|
+
submit_within: optional(integer(60, MAX_SUBMIT_WITHIN, `seconds the relayer has to submit the signature; default ${DEFAULT_SUBMIT_WITHIN}`)),
|
|
27
|
+
relayer_fee: optional(amount("raw input units offered to whoever submits; default and minimum is this server's relayer fee for the input token")),
|
|
28
|
+
spec_url: optional(text(`where the acceptance spec of an attested order with spec_hash is published, ${MEMO_URL_RULE}; passed on in submit for the relayer to record in a memo it signs with the create, so workers find it. It is not part of what the owner signs`)),
|
|
29
|
+
}),
|
|
30
|
+
output: object({
|
|
31
|
+
...termsOutput,
|
|
32
|
+
message: text("base64 bytes the owner signs with sign-message"),
|
|
33
|
+
digest: text("sha-256 of the signed terms; the wallet shows the same value"),
|
|
34
|
+
submit: object(signedTerms, `pass these unchanged, plus the signature, to ${tool("submit_signed_intent")}`),
|
|
35
|
+
setup: preparedSchema,
|
|
36
|
+
}),
|
|
37
|
+
run: async ({ transport, claims, relay }, input, call) => {
|
|
38
|
+
const now = await chainTime(transport);
|
|
39
|
+
const expiresAt = expiryOf(input, now);
|
|
40
|
+
const params = validate(paramsOf(input.order));
|
|
41
|
+
const specUrl = await publishedUrl(transport, params, input.spec_url);
|
|
42
|
+
if (relay !== undefined) {
|
|
43
|
+
refuseLongRelay(relay, expiresAt, now);
|
|
44
|
+
const { config } = await loadConfig(transport);
|
|
45
|
+
refuseCostlyTerms(relay, BigInt(config.createFee) + BigInt(config.crankBounty));
|
|
46
|
+
}
|
|
47
|
+
const user = await loadUser(transport, input.owner);
|
|
48
|
+
const outputToken = await mintOf(transport, input.output_mint);
|
|
49
|
+
if (input.nonce !== undefined) {
|
|
50
|
+
await unusedIntent(transport, input.owner, input.nonce);
|
|
51
|
+
}
|
|
52
|
+
const terms = {
|
|
53
|
+
owner: input.owner,
|
|
54
|
+
input_mint: input.input_mint,
|
|
55
|
+
output_mint: input.output_mint,
|
|
56
|
+
order: input.order,
|
|
57
|
+
expires_at: expiresAt,
|
|
58
|
+
nonce: pickNonce(user, input.nonce, claimedBy(claims, input.owner, now)),
|
|
59
|
+
submit_by: now + BigInt(input.submit_within ?? DEFAULT_SUBMIT_WITHIN),
|
|
60
|
+
epoch: user?.epoch ?? 0n,
|
|
61
|
+
relayer_fee: offeredFee(relay === undefined ? 0n : relayFloor(relay, input.input_mint), input.relayer_fee),
|
|
62
|
+
...(input.partner === undefined ? {} : { partner: input.partner }),
|
|
63
|
+
...(specUrl === undefined ? {} : { spec_url: specUrl }),
|
|
64
|
+
};
|
|
65
|
+
claim(claims, call, input.owner, terms.nonce, terms.submit_by, now);
|
|
66
|
+
const { config, inputToken, fields } = await fieldsOf(transport, terms, params, outputToken.tokenProgram);
|
|
67
|
+
if (relay !== undefined) {
|
|
68
|
+
const placeholder = buildEd25519Instruction({
|
|
69
|
+
publicKey: input.owner,
|
|
70
|
+
signature: new Uint8Array(64),
|
|
71
|
+
message: await signedIntentMessage(fields),
|
|
72
|
+
});
|
|
73
|
+
const create = await relayCreate(terms, relay, config, params, {
|
|
74
|
+
input: inputToken.tokenProgram,
|
|
75
|
+
output: outputToken.tokenProgram,
|
|
76
|
+
});
|
|
77
|
+
if (!(await relayFits(transport, relay, [placeholder, create, ...published(relay.signer, specUrl)]))) {
|
|
78
|
+
const memoOnly = specUrl !== undefined && (await relayFits(transport, relay, [placeholder, create]));
|
|
79
|
+
throw new AgentRefusal("RelayTooLarge", memoOnly ? SPEC_URL_TOO_LONG : RELAY_TOO_LARGE);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
const description = await describeSignedIntent(fields, {
|
|
83
|
+
now,
|
|
84
|
+
currentEpoch: terms.epoch,
|
|
85
|
+
expectedDomain: await clusterDomain(transport),
|
|
86
|
+
outputTokenProgram: outputToken.tokenProgram,
|
|
87
|
+
inputDecimals: inputToken.decimals,
|
|
88
|
+
outputDecimals: outputToken.decimals,
|
|
89
|
+
...tokenNames(fields.inputMint, fields.outputMint),
|
|
90
|
+
});
|
|
91
|
+
const escrow = escrowAmount(params);
|
|
92
|
+
const allowance = await raiseAllowance(transport, input.owner, fields.ownerInput, escrow + terms.relayer_fee);
|
|
93
|
+
const receiver = await tokenAccountIfMissing(transport, createNoopSigner(input.owner), input.owner, input.output_mint, outputToken.tokenProgram);
|
|
94
|
+
const approve = await buildApproveDelegate({
|
|
95
|
+
owner: createNoopSigner(input.owner),
|
|
96
|
+
mint: input.input_mint,
|
|
97
|
+
tokenProgram: inputToken.tokenProgram,
|
|
98
|
+
amount: allowance.after,
|
|
99
|
+
decimals: inputToken.decimals,
|
|
100
|
+
});
|
|
101
|
+
const register = await initUserIfMissing(user, input.owner);
|
|
102
|
+
const setup = [...register, ...receiver.create, approve];
|
|
103
|
+
const intent = await unusedIntent(transport, input.owner, terms.nonce);
|
|
104
|
+
const disclosed = setupLines({
|
|
105
|
+
registers: register.length > 0,
|
|
106
|
+
creates: receiver.create.length > 0 ? [input.output_mint] : [],
|
|
107
|
+
allowance,
|
|
108
|
+
decimals: inputToken.decimals,
|
|
109
|
+
});
|
|
110
|
+
const ready = await prepare(transport, setup, input.owner);
|
|
111
|
+
const prepared = preparedView(ready);
|
|
112
|
+
const setupFee = SIGNATURE_FEE * BigInt(ready.signers.length) + ready.priorityLamports;
|
|
113
|
+
return {
|
|
114
|
+
intent,
|
|
115
|
+
nonce: terms.nonce,
|
|
116
|
+
expires_at: expiresAt,
|
|
117
|
+
escrow,
|
|
118
|
+
summary: [
|
|
119
|
+
...description.lines,
|
|
120
|
+
terms.relayer_fee === 0n
|
|
121
|
+
? `Cost to you: no relayer fee; only ${setupFee} lamports of SOL for the setup transaction's network fee, once`
|
|
122
|
+
: `Cost to you: ${formatAmount(terms.relayer_fee, inputToken.decimals)} of ${input.input_mint} to the relayer, plus ${setupFee} lamports of SOL for the setup transaction's network fee, once`,
|
|
123
|
+
...(specUrl === undefined ? [] : [publishesLine(specUrl)]),
|
|
124
|
+
...disclosed.lines,
|
|
125
|
+
],
|
|
126
|
+
warnings: [
|
|
127
|
+
...new Set([
|
|
128
|
+
...warningsOf(params, expiresAt, now, inputToken.scaled || outputToken.scaled),
|
|
129
|
+
...description.warnings,
|
|
130
|
+
...disclosed.warnings,
|
|
131
|
+
...(specUrl === undefined ? [] : [SPEC_URL_UNSIGNED]),
|
|
132
|
+
]),
|
|
133
|
+
],
|
|
134
|
+
message: getBase64Decoder().decode(await signedIntentMessage(fields)),
|
|
135
|
+
digest: description.digest,
|
|
136
|
+
submit: terms,
|
|
137
|
+
setup: prepared,
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=signed-prepare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-prepare.js","sourceRoot":"","sources":["../../../src/agent/signed-prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type Address, type Instruction } from "@solana/kit";
|
|
2
|
+
import { type IntentParams } from "@intent-engine/core";
|
|
3
|
+
import { type Transport } from "@intent-engine/client";
|
|
4
|
+
import { type Prepared } from "./prepare.js";
|
|
5
|
+
import type { Relay } from "./relay.js";
|
|
6
|
+
import type { SignedTerms } from "./signed-terms.js";
|
|
7
|
+
export declare function relayFloor(relay: Relay, mint: Address): bigint;
|
|
8
|
+
export declare const RELAY_TOO_LARGE = "this server's relayer cannot fit these signed terms in one Solana transaction; drop the partner fee or use a relayer that adds no priority fee";
|
|
9
|
+
export declare function relayCreate(input: SignedTerms, relay: Relay, config: {
|
|
10
|
+
feeRecipient: Address;
|
|
11
|
+
createFee: number;
|
|
12
|
+
crankBounty: number;
|
|
13
|
+
}, params: IntentParams, tokenPrograms: {
|
|
14
|
+
input: Address;
|
|
15
|
+
output: Address;
|
|
16
|
+
}): Promise<Instruction>;
|
|
17
|
+
export declare function relayFits(transport: Transport, relay: Relay, instructions: readonly Instruction[]): Promise<boolean>;
|
|
18
|
+
export declare const SPEC_URL_TOO_LONG = "this server's relayer cannot fit the spec url's memo with these signed terms in one Solana transaction; give a shorter spec_url or leave it out";
|
|
19
|
+
export declare const preparedFits: (prepared: Prepared) => boolean;
|
|
20
|
+
export declare function offeredFee(floor: bigint, offered: bigint | undefined): bigint;
|
|
21
|
+
export declare function paying<T>(paid: {
|
|
22
|
+
any: boolean;
|
|
23
|
+
}, sending: Promise<T>): Promise<T>;
|
|
24
|
+
export declare const repriced: (admitted: bigint, now: bigint) => string;
|
|
25
|
+
export declare function refuseRepricing(admitted: bigint, now: bigint): void;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { getBase64Encoder } from "@solana/kit";
|
|
2
|
+
import { buildCreateIntentSigned } from "@intent-engine/core";
|
|
3
|
+
import { bytesFit } from "@intent-engine/solver";
|
|
4
|
+
import { Charged } from "@intent-engine/client";
|
|
5
|
+
import { transactionSize } from "./prepare.js";
|
|
6
|
+
import { AgentRefusal } from "./problems.js";
|
|
7
|
+
export function relayFloor(relay, mint) {
|
|
8
|
+
const floor = relay.fees.get(mint);
|
|
9
|
+
if (floor === undefined) {
|
|
10
|
+
throw new AgentRefusal("RelayMintNotAccepted", `this server's relayer does not relay intents selling ${mint}; it relays only ${[...relay.fees.keys()].join(", ")}`);
|
|
11
|
+
}
|
|
12
|
+
return floor;
|
|
13
|
+
}
|
|
14
|
+
export const RELAY_TOO_LARGE = "this server's relayer cannot fit these signed terms in one Solana transaction; drop the partner fee or use a relayer that adds no priority fee";
|
|
15
|
+
export async function relayCreate(input, relay, config, params, tokenPrograms) {
|
|
16
|
+
return buildCreateIntentSigned({
|
|
17
|
+
payer: relay.signer,
|
|
18
|
+
owner: input.owner,
|
|
19
|
+
treasury: config.feeRecipient,
|
|
20
|
+
maxCreateFee: config.createFee,
|
|
21
|
+
maxBounty: config.crankBounty,
|
|
22
|
+
nonce: input.nonce,
|
|
23
|
+
params,
|
|
24
|
+
expiresAt: input.expires_at,
|
|
25
|
+
...(input.partner === undefined ? {} : { partner: { key: input.partner.account, bps: input.partner.bps } }),
|
|
26
|
+
inputMint: input.input_mint,
|
|
27
|
+
outputMint: input.output_mint,
|
|
28
|
+
inputTokenProgram: tokenPrograms.input,
|
|
29
|
+
outputTokenProgram: tokenPrograms.output,
|
|
30
|
+
submitBy: input.submit_by,
|
|
31
|
+
relayerFee: input.relayer_fee,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export async function relayFits(transport, relay, instructions) {
|
|
35
|
+
const budgeted = await transport.budget(instructions, relay.signer.address);
|
|
36
|
+
return bytesFit(await transactionSize(transport, budgeted, relay.signer.address));
|
|
37
|
+
}
|
|
38
|
+
export const SPEC_URL_TOO_LONG = "this server's relayer cannot fit the spec url's memo with these signed terms in one Solana transaction; give a shorter spec_url or leave it out";
|
|
39
|
+
export const preparedFits = (prepared) => bytesFit(getBase64Encoder().encode(prepared.transaction).length);
|
|
40
|
+
export function offeredFee(floor, offered) {
|
|
41
|
+
if (offered === undefined) {
|
|
42
|
+
return floor;
|
|
43
|
+
}
|
|
44
|
+
if (offered < floor) {
|
|
45
|
+
throw new AgentRefusal("RelayFeeTooLow", `this server's relayer charges ${floor} raw units of the input token; offer at least that or leave relayer_fee out`);
|
|
46
|
+
}
|
|
47
|
+
return offered;
|
|
48
|
+
}
|
|
49
|
+
export async function paying(paid, sending) {
|
|
50
|
+
try {
|
|
51
|
+
const result = await sending;
|
|
52
|
+
paid.any = true;
|
|
53
|
+
return result;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
if (error instanceof Charged) {
|
|
57
|
+
paid.any = true;
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export const repriced = (admitted, now) => `the priority fee rose from the admitted ${admitted} to ${now} lamports while relaying; ask again later`;
|
|
63
|
+
export function refuseRepricing(admitted, now) {
|
|
64
|
+
if (now > admitted) {
|
|
65
|
+
throw new AgentRefusal("RelayTooCostly", repriced(admitted, now));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=signed-relay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-relay.js","sourceRoot":"","sources":["../../../src/agent/signed-relay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { getPublicKeyFromAddress, verifySignature } from "@solana/kit";
|
|
2
|
+
import { buildEd25519Instruction, describeSignedIntent, formatAmount, findIntentPda, getIntentDecoder, signedIntentMessage, validate, } from "@intent-engine/core";
|
|
3
|
+
import { chainTime, clusterDomain, createdAccount, loadUser, mintOf, tokenAccountIfMissing } from "@intent-engine/client";
|
|
4
|
+
import { define } from "./actions.js";
|
|
5
|
+
import { tool } from "./names.js";
|
|
6
|
+
import { prepare } from "./prepare.js";
|
|
7
|
+
import { AgentRefusal } from "./problems.js";
|
|
8
|
+
import { createCost, rentFor, SIGNATURE_FEE, TOKEN_ACCOUNT_RENT_BYTES } from "./budget.js";
|
|
9
|
+
import { admitRelay } from "./relay.js";
|
|
10
|
+
import { enter } from "./claims.js";
|
|
11
|
+
import { paramsOf } from "./shapes.js";
|
|
12
|
+
import { tokenNames } from "../tokens.js";
|
|
13
|
+
import { account, amount, integer, list, nullable, object, text } from "./schema.js";
|
|
14
|
+
import { fieldsOf, published, publishedUrl, publishesLine, sameTerms, signatureBytes, signedTerms, SPEC_URL_UNSIGNED, } from "./signed-terms.js";
|
|
15
|
+
import { paying, preparedFits, RELAY_TOO_LARGE, relayCreate, relayFloor, refuseRepricing, SPEC_URL_TOO_LONG, } from "./signed-relay.js";
|
|
16
|
+
export const submitSignedIntent = define({
|
|
17
|
+
name: tool("submit_signed_intent"),
|
|
18
|
+
title: "Submit a signed intent",
|
|
19
|
+
description: `Relay an owner's signed intent: the relayer key this server was started with (--relayer) pays the fee and creates the intent on chain, within the relayer's limits: accepted input tokens and their minimum fee, lamport cost per intent and per hour, expiry, transaction size and intents per owner per hour. Pass the submit object from ${tool("prepare_signed_intent")} unchanged plus the owner's base58 signature of its message; ${tool("preview_signed_intent")} checks the same input first without sending. When submit carries a spec_url, the relayer also records it in a memo it signs with the create, so ${tool("find_jobs")} lists it; that url is not part of the owner's signature. Calling again after success returns the same intent without sending anything.`,
|
|
20
|
+
effect: "submit",
|
|
21
|
+
input: object({ ...signedTerms, signature: text("the owner's base58 Ed25519 signature of the message") }),
|
|
22
|
+
output: object({ intent: account(), signature: nullable(text("the relayed transaction's signature; null if it already existed")) }),
|
|
23
|
+
run: async ({ transport, relay, claims }, input, call) => {
|
|
24
|
+
if (relay === undefined) {
|
|
25
|
+
throw new AgentRefusal("RelayerNotConfigured", "this server has no relayer key; start it with --relayer to submit signed intents");
|
|
26
|
+
}
|
|
27
|
+
const leave = enter(claims, `${input.owner}:${input.nonce}`);
|
|
28
|
+
try {
|
|
29
|
+
return await relaySigned(transport, relay, input, call);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
leave();
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
async function relaySigned(transport, relay, input, call) {
|
|
37
|
+
const params = validate(paramsOf(input.order));
|
|
38
|
+
const specUrl = await publishedUrl(transport, params, input.spec_url);
|
|
39
|
+
const outputToken = await mintOf(transport, input.output_mint);
|
|
40
|
+
const { config, inputToken, fields } = await fieldsOf(transport, input, params, outputToken.tokenProgram);
|
|
41
|
+
const [intent] = await findIntentPda({ owner: input.owner, nonce: input.nonce });
|
|
42
|
+
const existing = await createdAccount(transport, intent);
|
|
43
|
+
if (existing !== null) {
|
|
44
|
+
if (!sameTerms(getIntentDecoder().decode(existing.data), fields)) {
|
|
45
|
+
throw new AgentRefusal("NonceTaken", "a different intent already uses this owner's nonce; these signed terms can never be submitted");
|
|
46
|
+
}
|
|
47
|
+
return { intent, signature: null };
|
|
48
|
+
}
|
|
49
|
+
const floor = relayFloor(relay, input.input_mint);
|
|
50
|
+
if (input.relayer_fee < floor) {
|
|
51
|
+
throw new AgentRefusal("RelayFeeTooLow", `this relayer charges ${floor} raw units of ${input.input_mint} per intent; prepare and sign the intent again on this server`);
|
|
52
|
+
}
|
|
53
|
+
const message = await signedIntentMessage(fields);
|
|
54
|
+
const signature = signatureBytes(input.signature);
|
|
55
|
+
if (!(await verifySignature(await getPublicKeyFromAddress(input.owner), signature, message))) {
|
|
56
|
+
throw new AgentRefusal("SignatureInvalid", `the signature is not the owner's signature of these exact terms; sign the message from ${tool("prepare_signed_intent")} again`);
|
|
57
|
+
}
|
|
58
|
+
const feeAccount = input.relayer_fee === 0n
|
|
59
|
+
? { create: [] }
|
|
60
|
+
: await tokenAccountIfMissing(transport, relay.signer, relay.signer.address, input.input_mint, inputToken.tokenProgram);
|
|
61
|
+
const relayed = [
|
|
62
|
+
buildEd25519Instruction({ publicKey: input.owner, signature, message }),
|
|
63
|
+
await relayCreate(input, relay, config, params, { input: inputToken.tokenProgram, output: outputToken.tokenProgram }),
|
|
64
|
+
...published(relay.signer, specUrl),
|
|
65
|
+
];
|
|
66
|
+
const now = await chainTime(transport);
|
|
67
|
+
let prepared = await prepare(transport, [...feeAccount.create, ...relayed], relay.signer.address);
|
|
68
|
+
const split = feeAccount.create.length !== 0 && !preparedFits(prepared);
|
|
69
|
+
const ticket = admitRelay(relay, input.owner, BigInt(config.createFee) + BigInt(config.crankBounty) + prepared.priorityLamports, createCost(config) +
|
|
70
|
+
prepared.priorityLamports +
|
|
71
|
+
(feeAccount.create.length > 0 ? rentFor(TOKEN_ACCOUNT_RENT_BYTES) : 0n) +
|
|
72
|
+
(split ? SIGNATURE_FEE + prepared.priorityLamports : 0n), input.expires_at, now);
|
|
73
|
+
const paid = { any: false };
|
|
74
|
+
call.undo.push(() => {
|
|
75
|
+
if (!paid.any) {
|
|
76
|
+
ticket.cancel();
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
const admitted = prepared.priorityLamports;
|
|
80
|
+
if (split) {
|
|
81
|
+
await paying(paid, transport.send(feeAccount.create, relay.signer));
|
|
82
|
+
prepared = await prepare(transport, relayed, relay.signer.address);
|
|
83
|
+
refuseRepricing(admitted, prepared.priorityLamports);
|
|
84
|
+
}
|
|
85
|
+
if (!preparedFits(prepared)) {
|
|
86
|
+
throw new AgentRefusal("RelayTooLarge", specUrl === undefined ? RELAY_TOO_LARGE : SPEC_URL_TOO_LONG);
|
|
87
|
+
}
|
|
88
|
+
return { intent, signature: await paying(paid, transport.send(prepared.instructions, relay.signer)) };
|
|
89
|
+
}
|
|
90
|
+
export const previewSignedIntent = define({
|
|
91
|
+
name: tool("preview_signed_intent"),
|
|
92
|
+
title: "Check a signed intent before relaying it",
|
|
93
|
+
description: `Verify an owner's signature over signed terms and describe what relaying them creates, without sending anything.`,
|
|
94
|
+
effect: "read",
|
|
95
|
+
input: object({ ...signedTerms, signature: text("the owner's base58 Ed25519 signature of the message") }),
|
|
96
|
+
output: object({
|
|
97
|
+
intent: account(),
|
|
98
|
+
exists: integer(0, 1, "1 if the intent is already on chain, else 0"),
|
|
99
|
+
relayer_fee: amount("raw input-token units the relayer receives"),
|
|
100
|
+
summary: list(text(), 32, "what relaying creates"),
|
|
101
|
+
warnings: list(text(), 16, "anything to check before relaying"),
|
|
102
|
+
}),
|
|
103
|
+
run: async ({ transport }, input) => {
|
|
104
|
+
const params = validate(paramsOf(input.order));
|
|
105
|
+
const specUrl = await publishedUrl(transport, params, input.spec_url);
|
|
106
|
+
const outputToken = await mintOf(transport, input.output_mint);
|
|
107
|
+
const { config, inputToken, fields } = await fieldsOf(transport, input, params, outputToken.tokenProgram);
|
|
108
|
+
const message = await signedIntentMessage(fields);
|
|
109
|
+
if (!(await verifySignature(await getPublicKeyFromAddress(input.owner), signatureBytes(input.signature), message))) {
|
|
110
|
+
throw new AgentRefusal("SignatureInvalid", "the signature is not the owner's signature of these exact terms");
|
|
111
|
+
}
|
|
112
|
+
const [intent] = await findIntentPda({ owner: input.owner, nonce: input.nonce });
|
|
113
|
+
const exists = (await createdAccount(transport, intent)) !== null;
|
|
114
|
+
const user = await loadUser(transport, input.owner);
|
|
115
|
+
const description = await describeSignedIntent(fields, {
|
|
116
|
+
now: await chainTime(transport),
|
|
117
|
+
currentEpoch: user?.epoch ?? 0n,
|
|
118
|
+
expectedDomain: await clusterDomain(transport),
|
|
119
|
+
outputTokenProgram: outputToken.tokenProgram,
|
|
120
|
+
inputDecimals: inputToken.decimals,
|
|
121
|
+
outputDecimals: outputToken.decimals,
|
|
122
|
+
...tokenNames(fields.inputMint, fields.outputMint),
|
|
123
|
+
});
|
|
124
|
+
return {
|
|
125
|
+
intent,
|
|
126
|
+
exists: exists ? 1 : 0,
|
|
127
|
+
relayer_fee: input.relayer_fee,
|
|
128
|
+
summary: [
|
|
129
|
+
...description.lines,
|
|
130
|
+
`Relaying costs you ${createCost(config)} lamports in create fee, crank bounty, rent and signature fee, plus any priority fee; you receive ${formatAmount(input.relayer_fee, inputToken.decimals)} of ${input.input_mint}`,
|
|
131
|
+
...(specUrl === undefined ? [] : [publishesLine(specUrl)]),
|
|
132
|
+
],
|
|
133
|
+
warnings: [...description.warnings, ...(specUrl === undefined ? [] : [SPEC_URL_UNSIGNED])],
|
|
134
|
+
};
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=signed-submit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-submit.js","sourceRoot":"","sources":["../../../src/agent/signed-submit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,qBAAqB,EAAkB,MAAM,uBAAuB,CAAC;AAC1I,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AACpD,OAAO,EAAa,KAAK,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACT,cAAc,EACd,WAAW,EAEX,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,MAAM,EACN,YAAY,EACZ,eAAe,EACf,WAAW,EACX,UAAU,EACV,eAAe,EACf,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;IACvC,IAAI,EAAE,IAAI,CAAC,sBAAsB,CAAC;IAClC,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EACT,+UAA+U,IAAI,CAAC,uBAAuB,CAAC,gEAAgE,IAAI,CAAC,uBAAuB,CAAC,oJAAoJ,IAAI,CAAC,WAAW,CAAC,yIAAyI;IACzvB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,MAAM,CAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,qDAAqD,CAAC,EAAE,CAAC;IACzG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC,EAAE,CAAC;IACnI,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACvD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,YAAY,CAAC,sBAAsB,EAAE,kFAAkF,CAAC,CAAC;QACrI,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC;YACH,OAAO,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC1D,CAAC;gBAAS,CAAC;YACT,KAAK,EAAE,CAAC;QACV,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,KAAK,UAAU,WAAW,CAAC,SAAoB,EAAE,KAAY,EAAE,KAA0C,EAAE,IAAU;IACnH,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IAC1G,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACjF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,YAAY,CACpB,YAAY,EACZ,+FAA+F,CAChG,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACrC,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAClD,IAAI,KAAK,CAAC,WAAW,GAAG,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CACpB,gBAAgB,EAChB,wBAAwB,KAAK,iBAAiB,KAAK,CAAC,UAAU,+DAA+D,CAC9H,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAClD,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,YAAY,CACpB,kBAAkB,EAClB,0FAA0F,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAChI,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GACd,KAAK,CAAC,WAAW,KAAK,EAAE;QACtB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE;QAChB,CAAC,CAAC,MAAM,qBAAqB,CACzB,SAAS,EACT,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,MAAM,CAAC,OAAO,EACpB,KAAK,CAAC,UAAU,EAChB,UAAU,CAAC,YAAY,CACxB,CAAC;IACR,MAAM,OAAO,GAAG;QACd,uBAAuB,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACvE,MAAM,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,EAAE,CAAC;QACrH,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC;KACpC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClG,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,UAAU,CACvB,KAAK,EACL,KAAK,CAAC,KAAK,EACX,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC,gBAAgB,EACjF,UAAU,CAAC,MAAM,CAAC;QAChB,QAAQ,CAAC,gBAAgB;QACzB,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,EAC1D,KAAK,CAAC,UAAU,EAChB,GAAG,CACJ,CAAC;IACF,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAC3C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnE,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,eAAe,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC;IACvG,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AACxG,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC;IACxC,IAAI,EAAE,IAAI,CAAC,uBAAuB,CAAC;IACnC,KAAK,EAAE,0CAA0C;IACjD,WAAW,EAAE,kHAAkH;IAC/H,MAAM,EAAE,MAAM;IACd,KAAK,EAAE,MAAM,CAAC,EAAE,GAAG,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,qDAAqD,CAAC,EAAE,CAAC;IACzG,MAAM,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,EAAE;QACjB,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,6CAA6C,CAAC;QACpE,WAAW,EAAE,MAAM,CAAC,4CAA4C,CAAC;QACjE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,uBAAuB,CAAC;QAClD,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,mCAAmC,CAAC;KAChE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE;QAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAC/D,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1G,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,CAAC,MAAM,eAAe,CAAC,MAAM,uBAAuB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;YACnH,MAAM,IAAI,YAAY,CAAC,kBAAkB,EAAE,iEAAiE,CAAC,CAAC;QAChH,CAAC;QACD,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,MAAM,GAAG,CAAC,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;QAClE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,MAAM,EAAE;YACrD,GAAG,EAAE,MAAM,SAAS,CAAC,SAAS,CAAC;YAC/B,YAAY,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE;YAC/B,cAAc,EAAE,MAAM,aAAa,CAAC,SAAS,CAAC;YAC9C,kBAAkB,EAAE,WAAW,CAAC,YAAY;YAC5C,aAAa,EAAE,UAAU,CAAC,QAAQ;YAClC,cAAc,EAAE,WAAW,CAAC,QAAQ;YACpC,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC;SACnD,CAAC,CAAC;QACH,OAAO;YACL,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,OAAO,EAAE;gBACP,GAAG,WAAW,CAAC,KAAK;gBACpB,sBAAsB,UAAU,CAAC,MAAM,CAAC,qGAAqG,YAAY,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,CAAC,QAAQ,CAAC,OAAO,KAAK,CAAC,UAAU,EAAE;gBAC1N,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;aAC3D;YACD,QAAQ,EAAE,CAAC,GAAG,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC;SAC3F,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type Address, type Instruction, type SignatureBytes, type TransactionSigner } from "@solana/kit";
|
|
2
|
+
import { type Intent, type IntentParams, type SignedIntentFields } from "@intent-engine/core";
|
|
3
|
+
import { type Transport } from "@intent-engine/client";
|
|
4
|
+
import { type Order } from "./shapes.js";
|
|
5
|
+
export declare const DEFAULT_SUBMIT_WITHIN: number;
|
|
6
|
+
export declare const MAX_SUBMIT_WITHIN: number;
|
|
7
|
+
export declare const signedTerms: {
|
|
8
|
+
owner: import("./schema.js").Schema<Address>;
|
|
9
|
+
input_mint: import("./schema.js").Schema<Address>;
|
|
10
|
+
output_mint: import("./schema.js").Schema<Address>;
|
|
11
|
+
order: import("./schema.js").Schema<({
|
|
12
|
+
kind: "attested";
|
|
13
|
+
} & {
|
|
14
|
+
amount_in: bigint;
|
|
15
|
+
min_result: bigint;
|
|
16
|
+
max_result: bigint;
|
|
17
|
+
attestor: Address;
|
|
18
|
+
} & {
|
|
19
|
+
spec_hash?: string;
|
|
20
|
+
judge_fee?: bigint;
|
|
21
|
+
}) | ({
|
|
22
|
+
kind: "dutch";
|
|
23
|
+
} & {
|
|
24
|
+
amount_in: bigint;
|
|
25
|
+
start_out: bigint;
|
|
26
|
+
end_out: bigint;
|
|
27
|
+
start_time: bigint;
|
|
28
|
+
end_time: bigint;
|
|
29
|
+
} & {}) | ({
|
|
30
|
+
kind: "limit";
|
|
31
|
+
} & {
|
|
32
|
+
make_amount: bigint;
|
|
33
|
+
take_amount: bigint;
|
|
34
|
+
} & {}) | ({
|
|
35
|
+
kind: "swap";
|
|
36
|
+
} & {
|
|
37
|
+
amount_in: bigint;
|
|
38
|
+
min_out: bigint;
|
|
39
|
+
} & {})>;
|
|
40
|
+
expires_at: import("./schema.js").Schema<bigint>;
|
|
41
|
+
nonce: import("./schema.js").Schema<bigint>;
|
|
42
|
+
submit_by: import("./schema.js").Schema<bigint>;
|
|
43
|
+
epoch: import("./schema.js").Schema<bigint>;
|
|
44
|
+
relayer_fee: import("./schema.js").Schema<bigint>;
|
|
45
|
+
partner: {
|
|
46
|
+
optional: import("./schema.js").Schema<{
|
|
47
|
+
account: Address;
|
|
48
|
+
bps: number;
|
|
49
|
+
} & {}>;
|
|
50
|
+
};
|
|
51
|
+
spec_url: {
|
|
52
|
+
optional: import("./schema.js").Schema<string>;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
export type SignedTerms = {
|
|
56
|
+
owner: Address;
|
|
57
|
+
input_mint: Address;
|
|
58
|
+
output_mint: Address;
|
|
59
|
+
order: Order;
|
|
60
|
+
expires_at: bigint;
|
|
61
|
+
nonce: bigint;
|
|
62
|
+
submit_by: bigint;
|
|
63
|
+
epoch: bigint;
|
|
64
|
+
relayer_fee: bigint;
|
|
65
|
+
partner?: {
|
|
66
|
+
account: Address;
|
|
67
|
+
bps: number;
|
|
68
|
+
};
|
|
69
|
+
spec_url?: string;
|
|
70
|
+
};
|
|
71
|
+
export declare const SPEC_URL_UNSIGNED: string;
|
|
72
|
+
export declare const publishesLine: (url: string) => string;
|
|
73
|
+
export declare function publishedUrl(transport: Transport, params: IntentParams, url: string | undefined): Promise<string | undefined>;
|
|
74
|
+
export declare const published: (signer: TransactionSigner, url: string | undefined) => Instruction[];
|
|
75
|
+
export declare function fieldsOf(transport: Transport, t: SignedTerms, params: IntentParams, outputTokenProgram: Address): Promise<{
|
|
76
|
+
config: import("@intent-engine/core").Config;
|
|
77
|
+
inputToken: {
|
|
78
|
+
tokenProgram: Address;
|
|
79
|
+
decimals: number;
|
|
80
|
+
scaled: boolean;
|
|
81
|
+
};
|
|
82
|
+
fields: SignedIntentFields;
|
|
83
|
+
}>;
|
|
84
|
+
export declare function sameTerms(stored: Intent, fields: SignedIntentFields): boolean;
|
|
85
|
+
export declare function signatureBytes(text: string): SignatureBytes;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { getBase58Encoder } from "@solana/kit";
|
|
2
|
+
import { createExt, encodeParams, findAssociatedTokenAddress, isMemoUrl, Kind, MEMO_URL_RULE, partnerOf, specMemo, } from "@intent-engine/core";
|
|
3
|
+
import { loadConfig, memoInstruction, mintOf, plainHttpOnPublic } from "@intent-engine/client";
|
|
4
|
+
import { tool } from "./names.js";
|
|
5
|
+
import { SPEC_URL_PLAIN } from "./create.js";
|
|
6
|
+
import { AgentRefusal } from "./problems.js";
|
|
7
|
+
import { orderSchema, partnerSchema } from "./shapes.js";
|
|
8
|
+
import { account, amount, InvalidInput, optional, text, time } from "./schema.js";
|
|
9
|
+
export const DEFAULT_SUBMIT_WITHIN = 60 * 60;
|
|
10
|
+
export const MAX_SUBMIT_WITHIN = 24 * 60 * 60;
|
|
11
|
+
const SIGNATURE_PATTERN = "^[1-9A-HJ-NP-Za-km-z]{64,88}$";
|
|
12
|
+
export const signedTerms = {
|
|
13
|
+
owner: account("the wallet that signs the message and sells"),
|
|
14
|
+
input_mint: account(),
|
|
15
|
+
output_mint: account(),
|
|
16
|
+
order: orderSchema,
|
|
17
|
+
expires_at: time(),
|
|
18
|
+
nonce: amount(),
|
|
19
|
+
submit_by: time("unix seconds after which the signature can no longer be submitted"),
|
|
20
|
+
epoch: amount("the owner's signing epoch the signature is bound to"),
|
|
21
|
+
relayer_fee: amount("raw input units the owner pays, from the same allowance, to whoever submits the signature"),
|
|
22
|
+
partner: optional(partnerSchema),
|
|
23
|
+
spec_url: optional(text(`where the acceptance spec is published, ${MEMO_URL_RULE}; the relayer records it in a memo it signs with the create. It is not part of the owner's signature`)),
|
|
24
|
+
};
|
|
25
|
+
export const SPEC_URL_UNSIGNED = `the spec url is not part of what the owner signs: the relayer publishes it in a memo it signs with the create, and a relayer could leave it out or change it; ${tool("find_jobs")} shows the url that was published`;
|
|
26
|
+
export const publishesLine = (url) => `Publishes: the acceptance spec's url ${url}, in a memo the relayer signs`;
|
|
27
|
+
export async function publishedUrl(transport, params, url) {
|
|
28
|
+
if (url === undefined) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
if (params.kind !== Kind.AttestedResult || params.specHash.every((b) => b === 0)) {
|
|
32
|
+
throw new InvalidInput([{ path: "spec_url", message: "needs an attested order with spec_hash" }]);
|
|
33
|
+
}
|
|
34
|
+
if (!isMemoUrl(url)) {
|
|
35
|
+
throw new InvalidInput([{ path: "spec_url", message: `must be ${MEMO_URL_RULE}` }]);
|
|
36
|
+
}
|
|
37
|
+
if (await plainHttpOnPublic(transport, url)) {
|
|
38
|
+
throw new InvalidInput([{ path: "spec_url", message: SPEC_URL_PLAIN }]);
|
|
39
|
+
}
|
|
40
|
+
return url;
|
|
41
|
+
}
|
|
42
|
+
export const published = (signer, url) => url === undefined ? [] : [memoInstruction(signer, specMemo(url))];
|
|
43
|
+
export async function fieldsOf(transport, t, params, outputTokenProgram) {
|
|
44
|
+
const { config } = await loadConfig(transport);
|
|
45
|
+
const inputToken = await mintOf(transport, t.input_mint);
|
|
46
|
+
const fields = {
|
|
47
|
+
domain: Uint8Array.from(config.domain),
|
|
48
|
+
owner: t.owner,
|
|
49
|
+
ownerInput: await findAssociatedTokenAddress({ owner: t.owner, mint: t.input_mint, tokenProgram: inputToken.tokenProgram }),
|
|
50
|
+
inputMint: t.input_mint,
|
|
51
|
+
outputMint: t.output_mint,
|
|
52
|
+
receiver: await findAssociatedTokenAddress({ owner: t.owner, mint: t.output_mint, tokenProgram: outputTokenProgram }),
|
|
53
|
+
nonce: t.nonce,
|
|
54
|
+
expiresAt: t.expires_at,
|
|
55
|
+
submitBy: t.submit_by,
|
|
56
|
+
kind: params.kind,
|
|
57
|
+
params: encodeParams(params),
|
|
58
|
+
epoch: t.epoch,
|
|
59
|
+
relayerFee: t.relayer_fee,
|
|
60
|
+
ext: createExt(t.partner === undefined ? {} : { partner: { key: t.partner.account, bps: t.partner.bps } }),
|
|
61
|
+
};
|
|
62
|
+
return { config, inputToken, fields };
|
|
63
|
+
}
|
|
64
|
+
export function sameTerms(stored, fields) {
|
|
65
|
+
const partner = partnerOf(fields.ext ?? new Uint8Array());
|
|
66
|
+
return (stored.inputMint === fields.inputMint &&
|
|
67
|
+
stored.outputMint === fields.outputMint &&
|
|
68
|
+
stored.receiver === fields.receiver &&
|
|
69
|
+
stored.expiresAt === fields.expiresAt &&
|
|
70
|
+
stored.kind === fields.kind &&
|
|
71
|
+
stored.flags === (fields.flags ?? 0) &&
|
|
72
|
+
stored.partnerBps === (partner?.bps ?? 0) &&
|
|
73
|
+
(partner === undefined || stored.partner === partner.key) &&
|
|
74
|
+
stored.params.length === fields.params.length &&
|
|
75
|
+
stored.params.every((byte, i) => byte === fields.params[i]));
|
|
76
|
+
}
|
|
77
|
+
export function signatureBytes(text) {
|
|
78
|
+
const bytes = new RegExp(SIGNATURE_PATTERN).test(text) ? getBase58Encoder().encode(text) : new Uint8Array();
|
|
79
|
+
if (bytes.length !== 64) {
|
|
80
|
+
throw new AgentRefusal("SignatureMalformed", "the signature must be 64 bytes written in base58");
|
|
81
|
+
}
|
|
82
|
+
return bytes;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=signed-terms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signed-terms.js","sourceRoot":"","sources":["../../../src/agent/signed-terms.ts"],"names":[],"mappings":"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"}
|