@intent-engine/cli 0.1.23 → 0.1.27

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.
Files changed (210) hide show
  1. package/assets/viperjs-judge.sha256 +1 -0
  2. package/assets/viperjs-judge.wasm +0 -0
  3. package/dist/src/admin-commands.d.ts +13 -0
  4. package/dist/src/admin-commands.js +185 -0
  5. package/dist/src/admin-commands.js.map +1 -0
  6. package/dist/src/agent/actions.d.ts +2 -0
  7. package/dist/src/agent/actions.js +1 -1
  8. package/dist/src/agent/actions.js.map +1 -1
  9. package/dist/src/agent/claims.js +13 -12
  10. package/dist/src/agent/claims.js.map +1 -1
  11. package/dist/src/agent/create.d.ts +1 -0
  12. package/dist/src/agent/create.js +9 -3
  13. package/dist/src/agent/create.js.map +1 -1
  14. package/dist/src/agent/mandate-agent.d.ts +2 -0
  15. package/dist/src/agent/mandate-agent.js +138 -0
  16. package/dist/src/agent/mandate-agent.js.map +1 -0
  17. package/dist/src/agent/mandate-grant.d.ts +2 -0
  18. package/dist/src/agent/mandate-grant.js +192 -0
  19. package/dist/src/agent/mandate-grant.js.map +1 -0
  20. package/dist/src/agent/mandate-revoke.d.ts +1 -0
  21. package/dist/src/agent/mandate-revoke.js +142 -0
  22. package/dist/src/agent/mandate-revoke.js.map +1 -0
  23. package/dist/src/agent/mandate-state.d.ts +33 -0
  24. package/dist/src/agent/mandate-state.js +85 -0
  25. package/dist/src/agent/mandate-state.js.map +1 -0
  26. package/dist/src/agent/mandate.d.ts +4 -26
  27. package/dist/src/agent/mandate.js +4 -479
  28. package/dist/src/agent/mandate.js.map +1 -1
  29. package/dist/src/agent/mcp.js +9 -3
  30. package/dist/src/agent/mcp.js.map +1 -1
  31. package/dist/src/agent/prepare.js +1 -1
  32. package/dist/src/agent/prepare.js.map +1 -1
  33. package/dist/src/agent/problems.d.ts +28 -1
  34. package/dist/src/agent/problems.js +47 -1
  35. package/dist/src/agent/problems.js.map +1 -1
  36. package/dist/src/agent/read.d.ts +12 -0
  37. package/dist/src/agent/read.js +20 -6
  38. package/dist/src/agent/read.js.map +1 -1
  39. package/dist/src/agent/registry.js +8 -1
  40. package/dist/src/agent/registry.js.map +1 -1
  41. package/dist/src/agent/relay.d.ts +2 -0
  42. package/dist/src/agent/relay.js +11 -3
  43. package/dist/src/agent/relay.js.map +1 -1
  44. package/dist/src/agent/reputation.d.ts +4 -0
  45. package/dist/src/agent/reputation.js +127 -0
  46. package/dist/src/agent/reputation.js.map +1 -0
  47. package/dist/src/agent/sales.d.ts +29 -0
  48. package/dist/src/agent/sales.js +248 -0
  49. package/dist/src/agent/sales.js.map +1 -0
  50. package/dist/src/agent/signed-prepare.d.ts +1 -0
  51. package/dist/src/agent/signed-prepare.js +138 -0
  52. package/dist/src/agent/signed-prepare.js.map +1 -0
  53. package/dist/src/agent/signed-relay.d.ts +25 -0
  54. package/dist/src/agent/signed-relay.js +69 -0
  55. package/dist/src/agent/signed-relay.js.map +1 -0
  56. package/dist/src/agent/signed-submit.d.ts +2 -0
  57. package/dist/src/agent/signed-submit.js +137 -0
  58. package/dist/src/agent/signed-submit.js.map +1 -0
  59. package/dist/src/agent/signed-terms.d.ts +85 -0
  60. package/dist/src/agent/signed-terms.js +84 -0
  61. package/dist/src/agent/signed-terms.js.map +1 -0
  62. package/dist/src/agent/signed.d.ts +4 -13
  63. package/dist/src/agent/signed.js +4 -361
  64. package/dist/src/agent/signed.js.map +1 -1
  65. package/dist/src/agent/wallet/account.d.ts +4 -0
  66. package/dist/src/agent/wallet/account.js +84 -0
  67. package/dist/src/agent/wallet/account.js.map +1 -0
  68. package/dist/src/agent/wallet/attest.d.ts +4 -0
  69. package/dist/src/agent/wallet/attest.js +178 -0
  70. package/dist/src/agent/wallet/attest.js.map +1 -0
  71. package/dist/src/agent/wallet/committee.d.ts +4 -0
  72. package/dist/src/agent/wallet/committee.js +155 -0
  73. package/dist/src/agent/wallet/committee.js.map +1 -0
  74. package/dist/src/agent/wallet/delivery.d.ts +13 -0
  75. package/dist/src/agent/wallet/delivery.js +171 -0
  76. package/dist/src/agent/wallet/delivery.js.map +1 -0
  77. package/dist/src/agent/wallet/escrow.d.ts +7 -0
  78. package/dist/src/agent/wallet/escrow.js +164 -0
  79. package/dist/src/agent/wallet/escrow.js.map +1 -0
  80. package/dist/src/agent/wallet/fills.d.ts +27 -0
  81. package/dist/src/agent/wallet/fills.js +80 -0
  82. package/dist/src/agent/wallet/fills.js.map +1 -0
  83. package/dist/src/agent/wallet/guard.d.ts +57 -0
  84. package/dist/src/agent/wallet/guard.js +205 -0
  85. package/dist/src/agent/wallet/guard.js.map +1 -0
  86. package/dist/src/agent/wallet/offer.d.ts +50 -0
  87. package/dist/src/agent/wallet/offer.js +80 -0
  88. package/dist/src/agent/wallet/offer.js.map +1 -0
  89. package/dist/src/agent/wallet/receipt.d.ts +42 -0
  90. package/dist/src/agent/wallet/receipt.js +102 -0
  91. package/dist/src/agent/wallet/receipt.js.map +1 -0
  92. package/dist/src/agent/wallet/record.d.ts +31 -0
  93. package/dist/src/agent/wallet/record.js +178 -0
  94. package/dist/src/agent/wallet/record.js.map +1 -0
  95. package/dist/src/agent/wallet/releases.d.ts +40 -0
  96. package/dist/src/agent/wallet/releases.js +245 -0
  97. package/dist/src/agent/wallet/releases.js.map +1 -0
  98. package/dist/src/agent/wallet/split.d.ts +10 -0
  99. package/dist/src/agent/wallet/split.js +271 -0
  100. package/dist/src/agent/wallet/split.js.map +1 -0
  101. package/dist/src/agent/wallet/trade.d.ts +14 -0
  102. package/dist/src/agent/wallet/trade.js +243 -0
  103. package/dist/src/agent/wallet/trade.js.map +1 -0
  104. package/dist/src/agent/wallet/wait.d.ts +5 -0
  105. package/dist/src/agent/wallet/wait.js +99 -0
  106. package/dist/src/agent/wallet/wait.js.map +1 -0
  107. package/dist/src/agent/wallet.d.ts +19 -73
  108. package/dist/src/agent/wallet.js +30 -1322
  109. package/dist/src/agent/wallet.js.map +1 -1
  110. package/dist/src/arg-options.d.ts +405 -0
  111. package/dist/src/arg-options.js +361 -0
  112. package/dist/src/arg-options.js.map +1 -0
  113. package/dist/src/arg-usage.d.ts +7 -0
  114. package/dist/src/arg-usage.js +60 -0
  115. package/dist/src/arg-usage.js.map +1 -0
  116. package/dist/src/arg-values.d.ts +47 -0
  117. package/dist/src/arg-values.js +284 -0
  118. package/dist/src/arg-values.js.map +1 -0
  119. package/dist/src/args.d.ts +7 -545
  120. package/dist/src/args.js +103 -926
  121. package/dist/src/args.js.map +1 -1
  122. package/dist/src/artifact.d.ts +28 -0
  123. package/dist/src/artifact.js +103 -0
  124. package/dist/src/artifact.js.map +1 -0
  125. package/dist/src/check-process.d.ts +46 -0
  126. package/dist/src/check-process.js +416 -0
  127. package/dist/src/check-process.js.map +1 -0
  128. package/dist/src/command-builders.d.ts +37 -0
  129. package/dist/src/command-builders.js +216 -0
  130. package/dist/src/command-builders.js.map +1 -0
  131. package/dist/src/command-types.d.ts +285 -0
  132. package/dist/src/command-types.js +2 -0
  133. package/dist/src/command-types.js.map +1 -0
  134. package/dist/src/commands.d.ts +7 -43
  135. package/dist/src/commands.js +76 -457
  136. package/dist/src/commands.js.map +1 -1
  137. package/dist/src/committee-commands.d.ts +31 -0
  138. package/dist/src/committee-commands.js +167 -0
  139. package/dist/src/committee-commands.js.map +1 -0
  140. package/dist/src/event-feed.d.ts +13 -0
  141. package/dist/src/event-feed.js +46 -0
  142. package/dist/src/event-feed.js.map +1 -0
  143. package/dist/src/flow-commands.d.ts +8 -0
  144. package/dist/src/flow-commands.js +116 -0
  145. package/dist/src/flow-commands.js.map +1 -0
  146. package/dist/src/flows.d.ts +6 -0
  147. package/dist/src/flows.js +84 -10
  148. package/dist/src/flows.js.map +1 -1
  149. package/dist/src/host-judge.d.ts +11 -0
  150. package/dist/src/host-judge.js +120 -0
  151. package/dist/src/host-judge.js.map +1 -0
  152. package/dist/src/job-commands.d.ts +9 -0
  153. package/dist/src/job-commands.js +89 -0
  154. package/dist/src/job-commands.js.map +1 -0
  155. package/dist/src/judge-errors.d.ts +12 -0
  156. package/dist/src/judge-errors.js +16 -0
  157. package/dist/src/judge-errors.js.map +1 -0
  158. package/dist/src/judge.d.ts +25 -16
  159. package/dist/src/judge.js +179 -103
  160. package/dist/src/judge.js.map +1 -1
  161. package/dist/src/main.d.ts +5 -1
  162. package/dist/src/main.js +36 -9
  163. package/dist/src/main.js.map +1 -1
  164. package/dist/src/monitor-args.d.ts +11 -0
  165. package/dist/src/monitor-args.js +58 -0
  166. package/dist/src/monitor-args.js.map +1 -0
  167. package/dist/src/monitor-fills.d.ts +13 -0
  168. package/dist/src/monitor-fills.js +56 -0
  169. package/dist/src/monitor-fills.js.map +1 -0
  170. package/dist/src/monitor.d.ts +60 -0
  171. package/dist/src/monitor.js +295 -0
  172. package/dist/src/monitor.js.map +1 -0
  173. package/dist/src/order-builders.d.ts +10 -0
  174. package/dist/src/order-builders.js +172 -0
  175. package/dist/src/order-builders.js.map +1 -0
  176. package/dist/src/render.d.ts +1 -0
  177. package/dist/src/render.js +9 -0
  178. package/dist/src/render.js.map +1 -1
  179. package/dist/src/reputation-commands.d.ts +8 -0
  180. package/dist/src/reputation-commands.js +20 -0
  181. package/dist/src/reputation-commands.js.map +1 -0
  182. package/dist/src/runtime.d.ts +22 -0
  183. package/dist/src/runtime.js +2 -0
  184. package/dist/src/runtime.js.map +1 -0
  185. package/dist/src/sandbox.d.ts +46 -0
  186. package/dist/src/sandbox.js +142 -0
  187. package/dist/src/sandbox.js.map +1 -0
  188. package/dist/src/solve-commands.d.ts +25 -0
  189. package/dist/src/solve-commands.js +175 -0
  190. package/dist/src/solve-commands.js.map +1 -0
  191. package/dist/src/tokens.js +2 -1
  192. package/dist/src/tokens.js.map +1 -1
  193. package/dist/src/trust-args.d.ts +6 -0
  194. package/dist/src/trust-args.js +76 -0
  195. package/dist/src/trust-args.js.map +1 -0
  196. package/dist/src/version.d.ts +1 -1
  197. package/dist/src/version.js +1 -1
  198. package/dist/src/viper.d.ts +66 -0
  199. package/dist/src/viper.js +282 -0
  200. package/dist/src/viper.js.map +1 -0
  201. package/dist/src/wallet.d.ts +4 -1
  202. package/dist/src/wallet.js +25 -5
  203. package/dist/src/wallet.js.map +1 -1
  204. package/package.json +18 -7
  205. package/dist/src/events.d.ts +0 -8
  206. package/dist/src/events.js +0 -43
  207. package/dist/src/events.js.map +0 -1
  208. package/dist/src/transport.d.ts +0 -208
  209. package/dist/src/transport.js +0 -441
  210. package/dist/src/transport.js.map +0 -1
package/dist/src/judge.js CHANGED
@@ -1,91 +1,26 @@
1
- import { spawn } from "node:child_process";
2
1
  import { createHash } from "node:crypto";
3
- import { readdir, readFile, stat, writeFile } from "node:fs/promises";
4
- import { join, resolve } from "node:path";
5
- import { decodeParams, IntentStatus, Kind, manifestSha256 } from "@intent-engine/core";
6
- import { chainTime, createClient, deliveriesOf, firstDelivery, loadIntent } from "@intent-engine/client";
7
- import { ENV_KEYPAIR } from "./args.js";
2
+ import { readFile, rm, writeFile } from "node:fs/promises";
3
+ import { basename, resolve } from "node:path";
4
+ import { getBase58Decoder } from "@solana/kit";
5
+ import { decodeParams, IntentStatus, Kind } from "@intent-engine/core";
6
+ import { chainTime, createClient, deliveryRecord, firstDelivery, loadCommittee, loadIntent, SIGNATURE_PAGE, } from "@intent-engine/client";
8
7
  import { NOT_SENT } from "./flows.js";
9
- export const SKIPPED = new Set([".git", "node_modules", "target"]);
10
- export const ENV_SPEC_PATH = "SPEC_PATH";
11
- export const ENV_ARTIFACT_PATH = "ARTIFACT_PATH";
12
- export const ENV_ARTIFACT_SHA256 = "ARTIFACT_SHA256";
13
- export class JudgeRefused extends Error {
14
- constructor(reason) {
15
- super(reason);
16
- this.name = "JudgeRefused";
17
- }
18
- }
8
+ import { memberVote } from "./committee-commands.js";
9
+ import { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
10
+ import { copyOf, readArtifact, removeCopy } from "./artifact.js";
11
+ import { checkEnv, holdSignals, runCheck, runContainer } from "./check-process.js";
12
+ import { containerArgs, containerName, dockerEnv, NO_SANDBOX, sandboxReady, shareable } from "./sandbox.js";
13
+ import { judgeHost } from "./host-judge.js";
14
+ import { casesOf, judgeViper, pinnedWasm, VIPER_ENGINE_COMMIT, VIPER_WASM_SHA256 } from "./viper.js";
15
+ export { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
16
+ export { artifactSha256, CHECK_COPY, CLEANUP_RETRIES, removeCopy, SKIPPED, SPEC_COPY } from "./artifact.js";
17
+ export { CHECK_ENV, checkEnv, claim, ENV_ARTIFACT_PATH, ENV_ARTIFACT_SHA256, ENV_SPEC_PATH, leftRunning, runCheck, stillRunning, } from "./check-process.js";
18
+ const FORCED_EXIT_MS = 200;
19
+ export const VOTE_NEXT = "the check passed and this member's vote is in the verdict; nothing was sent. Pass this verdict file, with the other members' votes, to committee release --vote";
19
20
  const hex = (bytes) => Buffer.from(bytes).toString("hex");
20
- async function filesUnder(root, prefix) {
21
- const entries = [];
22
- for (const entry of await readdir(root, { withFileTypes: true })) {
23
- if (SKIPPED.has(entry.name)) {
24
- continue;
25
- }
26
- const path = prefix === "" ? entry.name : `${prefix}/${entry.name}`;
27
- const full = join(root, entry.name);
28
- if (entry.isDirectory()) {
29
- entries.push(...(await filesUnder(full, path)));
30
- }
31
- else if (entry.isFile()) {
32
- entries.push({ path, bytes: await readFile(full) });
33
- }
34
- else {
35
- throw new JudgeRefused(`the artifact holds ${path}, which is neither a regular file nor a directory; the judge hashes only those`);
36
- }
37
- }
38
- return entries;
39
- }
40
- export async function artifactSha256(path) {
41
- const found = await stat(path);
42
- if (found.isFile()) {
43
- return createHash("sha256").update(await readFile(path)).digest("hex");
44
- }
45
- if (found.isDirectory()) {
46
- return manifestSha256(await filesUnder(path, ""));
47
- }
48
- throw new JudgeRefused(`--artifact ${path} is neither a regular file nor a directory`);
49
- }
50
- function killTree(pid) {
51
- if (pid === undefined) {
52
- return;
53
- }
54
- if (process.platform === "win32") {
55
- spawn("taskkill", ["/pid", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }).on("error", () => undefined);
56
- return;
57
- }
58
- try {
59
- process.kill(-pid, "SIGKILL");
60
- }
61
- catch {
62
- return;
63
- }
64
- }
65
- export function runCheck(command, env, timeoutSeconds) {
66
- return new Promise((done, failed) => {
67
- const child = spawn(command, { shell: true, env, stdio: ["ignore", 2, 2], detached: process.platform !== "win32", windowsHide: true });
68
- let timedOut = false;
69
- const timer = setTimeout(() => {
70
- timedOut = true;
71
- killTree(child.pid);
72
- }, timeoutSeconds * 1000);
73
- child.once("error", (error) => {
74
- clearTimeout(timer);
75
- failed(error);
76
- });
77
- child.once("exit", (code) => {
78
- clearTimeout(timer);
79
- killTree(child.pid);
80
- done({ exitCode: timedOut ? null : code, timedOut });
81
- });
82
- });
83
- }
84
- export function checkEnv(base, spec, artifact, sha256) {
85
- const env = { ...base, [ENV_SPEC_PATH]: spec, [ENV_ARTIFACT_PATH]: artifact, [ENV_ARTIFACT_SHA256]: sha256 };
86
- delete env[ENV_KEYPAIR];
87
- return env;
88
- }
21
+ const reasonOf = (error) => (error instanceof Error ? error.message : String(error));
22
+ export const pagesRead = (pages) => `It read ${pages} ${pages === 1 ? "page" : "pages"} of ${SIGNATURE_PAGE} signatures; a higher --max-pages reads further, but does not help when the RPC node's ledger does not reach back to the escrow's creation or the node cannot page signatures or report its first available slot`;
23
+ export const resultOutside = (result, intent, min, max) => `--result ${result} lies outside the results intent ${intent} accepts, ${min} to ${max}; nothing was run or paid`;
89
24
  async function escrowFor(transport, judge, owner, nonce) {
90
25
  const { address, intent } = await loadIntent(transport, owner, nonce);
91
26
  const params = decodeParams(intent.kind, Uint8Array.from(intent.params));
@@ -95,22 +30,51 @@ async function escrowFor(transport, judge, owner, nonce) {
95
30
  if (intent.status !== IntentStatus.Open || intent.expiresAt <= (await chainTime(transport))) {
96
31
  throw new JudgeRefused(`intent ${address} is no longer open`);
97
32
  }
98
- if (params.attestor !== judge) {
33
+ const committee = params.attestor === judge ? null : await loadCommittee(transport, params.attestor);
34
+ if (params.attestor !== judge && committee === null) {
99
35
  throw new JudgeRefused(`intent ${address} names ${params.attestor} as its judge, not ${judge}`);
100
36
  }
101
- return { address, specHash: hex(params.specHash) };
37
+ if (committee !== null && !committee.members.includes(judge)) {
38
+ throw new JudgeRefused(`intent ${address} names committee ${params.attestor} as its judge, and ${judge} is not one of its members`);
39
+ }
40
+ return {
41
+ address,
42
+ attestor: params.attestor,
43
+ committee,
44
+ specHash: hex(params.specHash),
45
+ minResult: params.minResult,
46
+ maxResult: params.maxResult,
47
+ };
102
48
  }
103
49
  export async function judge(command, runtime, transport) {
50
+ if (command.verdict !== undefined) {
51
+ await rm(command.verdict, { force: true });
52
+ }
53
+ await sandboxReady(command.sandbox, dockerEnv(process.env));
104
54
  const signer = await runtime.loadSigner(command.keypair);
105
- const { address, specHash } = await escrowFor(transport, signer.address, command.owner, command.nonce);
106
- const spec = resolve(command.spec);
107
- const specSha256 = createHash("sha256").update(await readFile(spec)).digest("hex");
55
+ const { address, attestor, committee, specHash, minResult, maxResult } = await escrowFor(transport, signer.address, command.owner, command.nonce);
56
+ const result = command.result ?? minResult;
57
+ if (result < minResult || result > maxResult) {
58
+ throw new JudgeRefused(resultOutside(result, address, minResult, maxResult));
59
+ }
60
+ const specBytes = await readFile(resolve(command.spec));
61
+ const specSha256 = createHash("sha256").update(specBytes).digest("hex");
108
62
  if (specSha256 !== specHash) {
109
63
  throw new JudgeRefused(`--spec ${command.spec} has sha256 ${specSha256}, but intent ${address} commits ${specHash}`);
110
64
  }
65
+ const viper = command.sandbox.kind === "viper" ? { cases: casesOf(specBytes), wasm: await pinnedWasm() } : undefined;
111
66
  const artifact = resolve(command.artifact);
112
- const sha256 = await artifactSha256(artifact);
113
- const first = firstDelivery(await deliveriesOf(transport, signer.address, address), sha256);
67
+ const read = await readArtifact(artifact);
68
+ if (viper !== undefined && !read.single) {
69
+ throw new JudgeRefused(`--sandbox viper judges one module file, and --artifact ${command.artifact} is a directory; nothing was run or paid`);
70
+ }
71
+ const sha256 = read.sha256;
72
+ const check = command.check === undefined ? undefined : { name: basename(resolve(command.check)), read: await readArtifact(resolve(command.check)) };
73
+ const record = await deliveryRecord(transport, attestor, address, command.maxPages);
74
+ if (!record.complete) {
75
+ throw new JudgeRefused(`the delivery record is incomplete because the judge's history is too long to read in full or the RPC node cannot serve all of it, so the earliest announcer of the artifact with sha256 ${sha256} for intent ${address} cannot be known; nothing was run or paid. ${pagesRead(record.pages)}`);
76
+ }
77
+ const first = firstDelivery(record.deliveries, sha256);
114
78
  const payTo = command.payTo ?? first?.worker;
115
79
  if (payTo === undefined) {
116
80
  throw new JudgeRefused(`nobody announced the artifact with sha256 ${sha256} for intent ${address}; pass --pay-to to pay a worker who did not announce it`);
@@ -118,32 +82,144 @@ export async function judge(command, runtime, transport) {
118
82
  if (first !== null && first.worker !== payTo) {
119
83
  throw new JudgeRefused(`${first.worker} announced the artifact with sha256 ${sha256} first, in ${first.signature}; it is paid, not --pay-to ${payTo}`);
120
84
  }
121
- const check = await runCheck(command.run, checkEnv(process.env, spec, artifact, sha256), command.timeout);
122
- const passed = check.exitCode === 0;
123
- const signature = passed && command.yes
124
- ? await createClient({ url: command.url, transport }).settleProof({
125
- judge: signer,
85
+ const signals = holdSignals();
86
+ try {
87
+ return await checkAndSettle(command, transport, signer, signals, { address, committee, specHash, sha256, payTo, result, read, specBytes, check, viper });
88
+ }
89
+ finally {
90
+ signals.release();
91
+ }
92
+ }
93
+ export const notSent = (signal) => `the check passed, but ${signal} arrived before the release was sent; nothing was paid and no verdict was written`;
94
+ export const mayHaveLanded = (signal, address, signature) => `the check passed and the release was sent${signature === undefined ? "" : ` in ${signature}`}; a second ${signal} stopped the judge before the send was confirmed, so the release may have landed. Read intent ${address} before judging it again; no verdict was written`;
95
+ function sendRelease(command, transport, signer, signals, release) {
96
+ return new Promise((done, failed) => {
97
+ let sent = false;
98
+ let signature;
99
+ let after = 0;
100
+ const signTransactions = async (transactions, config) => {
101
+ const caught = signals.caught();
102
+ if (caught !== undefined) {
103
+ throw new JudgeInterrupted(caught, notSent(caught));
104
+ }
105
+ sent = true;
106
+ const signed = await signer.signTransactions(transactions, config);
107
+ const own = signed[0]?.[signer.address];
108
+ signature = own === undefined ? signature : getBase58Decoder().decode(own);
109
+ return signed;
110
+ };
111
+ signals.listen((signal) => {
112
+ if (!sent) {
113
+ failed(new JudgeInterrupted(signal, notSent(signal)));
114
+ return;
115
+ }
116
+ after += 1;
117
+ if (after > 1) {
118
+ failed(new JudgeInterrupted(signal, mayHaveLanded(signal, release.address, signature)));
119
+ setTimeout(() => process.exit(SIGNAL_EXIT[signal]), FORCED_EXIT_MS).unref();
120
+ }
121
+ });
122
+ createClient({ url: command.url, transport })
123
+ .settleProof({
124
+ judge: Object.freeze({ ...signer, signTransactions }),
126
125
  owner: command.owner,
127
126
  nonce: command.nonce,
128
- payTo,
129
- result: 1n,
130
- deliveredSha256: sha256,
127
+ payTo: release.payTo,
128
+ result: release.result,
129
+ deliveredSha256: release.sha256,
131
130
  })
132
- : null;
131
+ .then((confirmed) => {
132
+ signals.listen(() => undefined);
133
+ done(confirmed);
134
+ }, failed);
135
+ });
136
+ }
137
+ async function checkAndSettle(command, transport, signer, signals, { address, committee, specHash, sha256, payTo, result, read, specBytes, check: checkFiles, viper }) {
138
+ const { sandbox } = command;
139
+ let check = { exitCode: null, timedOut: false };
140
+ let cases;
141
+ let host;
142
+ let cleanup;
143
+ if (viper !== undefined) {
144
+ const module = read.entries[0]?.bytes ?? new Uint8Array();
145
+ if (signals.caught() === undefined) {
146
+ cases = await judgeViper(viper.wasm, module, viper.cases, command.timeout);
147
+ }
148
+ if (signals.caught() === undefined) {
149
+ host = await judgeHost(module, viper.cases, command.timeout);
150
+ }
151
+ }
152
+ else {
153
+ const copy = await copyOf(read, specBytes, checkFiles);
154
+ const run = command.run ?? "";
155
+ try {
156
+ if (signals.caught() === undefined) {
157
+ if (sandbox.kind === "docker") {
158
+ await shareable(copy.root);
159
+ check = await runContainer(containerArgs(sandbox, copy, sha256, run), containerName(), dockerEnv(process.env), command.timeout);
160
+ }
161
+ else {
162
+ check = await runCheck(run, checkEnv(process.env, copy.spec, copy.path, sha256), command.timeout, { cwd: copy.root });
163
+ process.stderr.write(`${NO_SANDBOX}\n`);
164
+ }
165
+ }
166
+ }
167
+ finally {
168
+ cleanup = await removeCopy(copy.root);
169
+ }
170
+ }
171
+ const interrupted = check.interrupted ?? signals.caught();
172
+ if (interrupted !== undefined) {
173
+ throw new JudgeInterrupted(interrupted);
174
+ }
175
+ const agreed = (judged) => judged !== undefined && judged.total > 0 && judged.passed === judged.total;
176
+ const passed = cases === undefined ? check.exitCode === 0 : agreed(cases) && agreed(host);
177
+ let signature = null;
178
+ let vote;
179
+ if (passed && committee !== null) {
180
+ const target = { owner: command.owner, nonce: command.nonce, payTo, result };
181
+ vote = await memberVote(signer, await createClient({ url: command.url, transport }).committeeBallot(target), target);
182
+ }
183
+ else if (passed && command.yes) {
184
+ try {
185
+ signature = await sendRelease(command, transport, signer, signals, { address, payTo, result, sha256 });
186
+ }
187
+ catch (error) {
188
+ if (error instanceof JudgeInterrupted) {
189
+ throw error;
190
+ }
191
+ const during = signals.caught();
192
+ if (during !== undefined) {
193
+ throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; the send failed, but the release may have landed: ${reasonOf(error)}. Read intent ${address} before judging it again; no verdict was written`);
194
+ }
195
+ throw error;
196
+ }
197
+ }
133
198
  const verdict = {
134
199
  intent: address,
135
200
  specHash,
136
201
  artifactSha256: sha256,
137
- command: command.run,
202
+ command: command.run ?? "viper",
203
+ sandbox: sandbox.kind,
204
+ ...(sandbox.kind === "docker" ? { image: sandbox.image } : {}),
205
+ ...(cases !== undefined ? { engine: { wasmSha256: VIPER_WASM_SHA256, commit: VIPER_ENGINE_COMMIT }, cases } : {}),
206
+ ...(host !== undefined ? { host } : {}),
138
207
  exitCode: check.exitCode,
139
208
  verdict: passed ? "pass" : "fail",
140
209
  payTo,
141
210
  signature,
142
- ...(passed && !command.yes ? { next: NOT_SENT } : {}),
211
+ ...(committee === null ? {} : { committee: committee.address }),
212
+ ...(vote === undefined ? {} : { vote, next: VOTE_NEXT }),
213
+ ...(passed && committee === null && !command.yes ? { next: NOT_SENT } : {}),
214
+ ...(cleanup !== undefined ? { cleanup } : {}),
143
215
  };
144
216
  if (command.verdict !== undefined) {
145
217
  await writeFile(command.verdict, `${JSON.stringify(verdict, null, 2)}\n`);
146
218
  }
219
+ const during = signals.caught();
220
+ if (signature !== null && during !== undefined) {
221
+ throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; it was sent in ${signature}${command.verdict !== undefined ? ` and the verdict was written to ${command.verdict}` : ""}`);
222
+ }
147
223
  return verdict;
148
224
  }
149
225
  //# sourceMappingURL=judge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/judge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/judge.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import { type Runtime } from "./commands.js";
4
4
  export declare const EXIT_OK = 0;
5
5
  export declare const EXIT_FAILED = 1;
6
6
  export declare const EXIT_USAGE = 2;
7
+ export declare const EXIT_PARTIAL = 3;
8
+ export { EXIT_ALERTED } from "./monitor-args.js";
7
9
  export declare const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
8
10
  export declare const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
9
11
  type Io = {
@@ -12,8 +14,10 @@ type Io = {
12
14
  };
13
15
  export { render } from "./render.js";
14
16
  export declare const unreachable: (url: string) => string;
17
+ export declare const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
15
18
  export declare function main(argv: readonly string[], runtime: Runtime, io: Io): Promise<number>;
16
- export declare function loadKeypairFile(path: string, platform?: string): Promise<KeyPairSigner>;
19
+ export declare const keypairUnreadable: (path: string) => string;
20
+ export declare function loadKeypairFile(path: string, platform?: string, home?: string): Promise<KeyPairSigner>;
17
21
  type Pipes = {
18
22
  stdin: Readable;
19
23
  stdout: Writable;
package/dist/src/main.js CHANGED
@@ -7,20 +7,27 @@ import { changesFrom, intentNotifications, rpcTransport, signatureWatch } from "
7
7
  import { ENV_URL, outputOf, parse, UsageError } from "./args.js";
8
8
  import { follow, run, watchSolve } from "./commands.js";
9
9
  import { withPriority } from "./compute.js";
10
- import { printableLines, render, renderText } from "./render.js";
11
- import { withSettings } from "./wallet.js";
10
+ import { JudgeInterrupted } from "./judge.js";
11
+ import { printableLines, redactUrl, render, renderText } from "./render.js";
12
+ import { expandHome, withSettings } from "./wallet.js";
12
13
  import { WALLET_NOTICE } from "./agent/wallet.js";
14
+ import { EXIT_ALERTED } from "./monitor-args.js";
15
+ import { monitor, writeBaseline } from "./monitor.js";
13
16
  export const EXIT_OK = 0;
14
17
  export const EXIT_FAILED = 1;
15
18
  export const EXIT_USAGE = 2;
19
+ export const EXIT_PARTIAL = 3;
20
+ export { EXIT_ALERTED } from "./monitor-args.js";
16
21
  export const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
17
22
  export const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
18
23
  export { render } from "./render.js";
19
- export const unreachable = (url) => `cannot reach the RPC node at ${url}; pass --url devnet, --url mainnet-beta or an https URL, or set ${ENV_URL}`;
24
+ export const unreachable = (url) => `cannot reach the RPC node at ${url}; check your network connection and that this endpoint is up, or pass another --url or set ${ENV_URL}`;
25
+ export const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
26
+ const PREVIEWED = new Set(["cancel", "expire", "close"]);
20
27
  const offline = (error) => error instanceof TypeError && error.message === "fetch failed";
21
28
  function message(error, url) {
22
29
  if (url !== undefined && offline(error)) {
23
- return unreachable(url);
30
+ return unreachable(redactUrl(url));
24
31
  }
25
32
  return printableLines(error instanceof Error ? error.message : String(error));
26
33
  }
@@ -35,6 +42,14 @@ export async function main(argv, runtime, io) {
35
42
  await follow(transport, runtime, command.limit, command.interval, show);
36
43
  return EXIT_OK;
37
44
  }
45
+ if (command.name === "monitor") {
46
+ const transport = runtime.transport(command.url);
47
+ if (command.watch === null) {
48
+ show(await writeBaseline(command.baseline, runtime, transport));
49
+ return EXIT_OK;
50
+ }
51
+ return (await monitor(command.url, command.baseline, command.watch, runtime, transport, io)) > 0 ? EXIT_ALERTED : EXIT_OK;
52
+ }
38
53
  if (command.name === "solve" && command.watch !== null) {
39
54
  await watchSolve(command, command.watch, runtime, show);
40
55
  return EXIT_OK;
@@ -46,22 +61,34 @@ export async function main(argv, runtime, io) {
46
61
  if (result !== null) {
47
62
  show(result);
48
63
  }
64
+ if (PREVIEWED.has(command.name) && result !== null && "sent" in result && result.sent === false) {
65
+ io.err(PREVIEW_ONLY);
66
+ }
67
+ if (command.name === "flow" && command.flow === "mandate-revoke" && result !== null && ("failed" in result || "unknown" in result)) {
68
+ return EXIT_PARTIAL;
69
+ }
49
70
  return command.name === "judge" && result !== null && "verdict" in result && result.verdict !== "pass" ? EXIT_FAILED : EXIT_OK;
50
71
  }
51
72
  catch (error) {
52
73
  io.err(message(error, url));
74
+ if (error instanceof JudgeInterrupted) {
75
+ return error.exitCode;
76
+ }
53
77
  return error instanceof UsageError ? EXIT_USAGE : EXIT_FAILED;
54
78
  }
55
79
  }
56
- export async function loadKeypairFile(path, platform = process.platform) {
80
+ const keyLike = (path) => /^[1-9A-HJ-NP-Za-km-z]{32,}$/.test(path) || path.trimStart().startsWith("[");
81
+ export const keypairUnreadable = (path) => keyLike(path) ? `${KEYPAIR_UNREADABLE}; the value given looks like a key, not a file path, so it is not repeated here` : `${KEYPAIR_UNREADABLE}; tried ${path}`;
82
+ export async function loadKeypairFile(path, platform = process.platform, home = homedir()) {
83
+ const file = expandHome(path, home);
57
84
  let bytes;
58
85
  let mode;
59
86
  try {
60
- mode = (await stat(path)).mode;
61
- bytes = JSON.parse(await readFile(path, "utf8"));
87
+ mode = (await stat(file)).mode;
88
+ bytes = JSON.parse(await readFile(file, "utf8"));
62
89
  }
63
90
  catch {
64
- throw new UsageError(KEYPAIR_UNREADABLE);
91
+ throw new UsageError(keypairUnreadable(file));
65
92
  }
66
93
  if (platform !== "win32" && (mode & 0o077) !== 0) {
67
94
  throw new UsageError(KEYPAIR_EXPOSED);
@@ -69,7 +96,7 @@ export async function loadKeypairFile(path, platform = process.platform) {
69
96
  if (!Array.isArray(bytes) ||
70
97
  bytes.length !== 64 ||
71
98
  !bytes.every((b) => Number.isInteger(b) && b >= 0 && b <= 255)) {
72
- throw new UsageError(KEYPAIR_UNREADABLE);
99
+ throw new UsageError(keypairUnreadable(file));
73
100
  }
74
101
  return createKeyPairSignerFromBytes(new Uint8Array(bytes));
75
102
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Values } from "./arg-options.js";
2
+ import type { Command, Remote } from "./command-types.js";
3
+ export declare const EXIT_ALERTED = 4;
4
+ export declare const MONITOR_INTERVAL = 30;
5
+ export declare const MIN_MONITOR_INTERVAL = 5;
6
+ export declare const MAX_MONITOR_INTERVAL = 3600;
7
+ export declare const MAX_MONITOR_FILLS = 999;
8
+ export declare const MONITOR_NEEDS_BASELINE = "monitor needs --expect <baseline file>; write one first with monitor --write-baseline <file> after checking the current config and program are the ones you intend";
9
+ export declare const BASELINE_ALONE = "--write-baseline writes the current values and exits, so it takes no other monitor option but --url";
10
+ export declare const MAX_FILL_FORMAT = "--max-fill takes <mint>=<raw amount>, once per input mint";
11
+ export declare function monitorOf(remote: Remote, values: Values): Command;
@@ -0,0 +1,58 @@
1
+ import { https, parseAddress, parseBounded, parseU64, UsageError } from "./arg-values.js";
2
+ import { tokenNamed } from "./tokens.js";
3
+ export const EXIT_ALERTED = 4;
4
+ export const MONITOR_INTERVAL = 30;
5
+ export const MIN_MONITOR_INTERVAL = 5;
6
+ export const MAX_MONITOR_INTERVAL = 3_600;
7
+ export const MAX_MONITOR_FILLS = 999;
8
+ export const MONITOR_NEEDS_BASELINE = "monitor needs --expect <baseline file>; write one first with monitor --write-baseline <file> after checking the current config and program are the ones you intend";
9
+ export const BASELINE_ALONE = "--write-baseline writes the current values and exits, so it takes no other monitor option but --url";
10
+ export const MAX_FILL_FORMAT = "--max-fill takes <mint>=<raw amount>, once per input mint";
11
+ function maxFills(entries, url) {
12
+ const limits = new Map();
13
+ for (const entry of entries) {
14
+ const at = entry.lastIndexOf("=");
15
+ if (at <= 0) {
16
+ throw new UsageError(MAX_FILL_FORMAT);
17
+ }
18
+ const named = tokenNamed(entry.slice(0, at).trim(), url);
19
+ if (named instanceof Error) {
20
+ throw new UsageError(named.message);
21
+ }
22
+ const mint = parseAddress(named, "max-fill");
23
+ if (limits.has(mint)) {
24
+ throw new UsageError(`${MAX_FILL_FORMAT}; ${mint} is given twice`);
25
+ }
26
+ limits.set(mint, parseU64(entry.slice(at + 1).trim(), "max-fill"));
27
+ }
28
+ return limits;
29
+ }
30
+ export function monitorOf(remote, values) {
31
+ const watching = [values.expect, values.interval, values["max-fill"], values["max-fills"], values.webhook, values.once];
32
+ const write = values["write-baseline"];
33
+ if (write !== undefined) {
34
+ if (watching.some((v) => v !== undefined)) {
35
+ throw new UsageError(BASELINE_ALONE);
36
+ }
37
+ return { name: "monitor", ...remote, baseline: write, watch: null };
38
+ }
39
+ if (values.expect === undefined) {
40
+ throw new UsageError(MONITOR_NEEDS_BASELINE);
41
+ }
42
+ if (values.webhook !== undefined) {
43
+ https(values.webhook, "webhook");
44
+ }
45
+ return {
46
+ name: "monitor",
47
+ ...remote,
48
+ baseline: values.expect,
49
+ watch: {
50
+ interval: parseBounded(values.interval ?? String(MONITOR_INTERVAL), "interval", MAX_MONITOR_INTERVAL, MIN_MONITOR_INTERVAL),
51
+ maxFill: maxFills(values["max-fill"] ?? [], remote.url),
52
+ maxFills: values["max-fills"] === undefined ? null : parseBounded(values["max-fills"], "max-fills", MAX_MONITOR_FILLS),
53
+ webhook: values.webhook ?? null,
54
+ once: values.once === true,
55
+ },
56
+ };
57
+ }
58
+ //# sourceMappingURL=monitor-args.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor-args.js","sourceRoot":"","sources":["../../src/monitor-args.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAErC,MAAM,CAAC,MAAM,sBAAsB,GACjC,oKAAoK,CAAC;AAEvK,MAAM,CAAC,MAAM,cAAc,GAAG,qGAAqG,CAAC;AAEpI,MAAM,CAAC,MAAM,eAAe,GAAG,2DAA2D,CAAC;AAE3F,SAAS,QAAQ,CAAC,OAA0B,EAAE,GAAW;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,UAAU,CAAC,GAAG,eAAe,KAAK,IAAI,iBAAiB,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc,EAAE,MAAc;IACtD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACxH,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACtE,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACnC,CAAC;IACD,OAAO;QACL,IAAI,EAAE,SAAS;QACf,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM,CAAC,MAAM;QACvB,KAAK,EAAE;YACL,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,gBAAgB,CAAC,EAAE,UAAU,EAAE,oBAAoB,EAAE,oBAAoB,CAAC;YAC3H,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC;YACvD,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,iBAAiB,CAAC;YACtH,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI,KAAK,IAAI;SAC3B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { EngineTransaction, Transport } from "@intent-engine/client";
3
+ export type SeenFill = {
4
+ signature: string;
5
+ slot: bigint;
6
+ intent: Address;
7
+ amountIn: bigint;
8
+ };
9
+ export declare function fillsIn(transactions: readonly EngineTransaction[]): {
10
+ fills: SeenFill[];
11
+ created: Map<Address, Address>;
12
+ };
13
+ export declare function inputMintsOf(transport: Transport, fills: readonly SeenFill[], created: ReadonlyMap<Address, Address>): Promise<Map<Address, Address>>;