@intent-engine/solver 0.1.36 → 0.1.38

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.
@@ -0,0 +1,28 @@
1
+ import type { Address, Base64EncodedWireTransaction, Blockhash, Instruction, TransactionSigner } from "@solana/kit";
2
+ import { type FillContext } from "./build.js";
3
+ import type { Plan } from "./plan.js";
4
+ export declare const badBundleSize: (value: number) => string;
5
+ export declare const bundleSizeFits: (value: number) => boolean;
6
+ export declare function withoutTip(plan: Plan, tipped: FillContext, solver: TransactionSigner, latest: {
7
+ blockhash: Blockhash;
8
+ lastValidBlockHeight: bigint;
9
+ }, tables: Readonly<Record<Address, Address[]>>, unitPrice: (instructions: readonly Instruction[]) => Promise<bigint>): Promise<{
10
+ context: FillContext;
11
+ probe: Base64EncodedWireTransaction;
12
+ } | {
13
+ bytes: number | null;
14
+ accounts: number;
15
+ }>;
16
+ export type Bundled<T, O> = {
17
+ item: T;
18
+ signature: string;
19
+ } | {
20
+ item: T;
21
+ error: string;
22
+ } | {
23
+ item: T;
24
+ refused: O;
25
+ };
26
+ export declare function sendBundles<T extends {
27
+ wire: Base64EncodedWireTransaction;
28
+ }, O extends object>(queue: readonly T[], size: number, sendBundle: (wires: readonly Base64EncodedWireTransaction[]) => Promise<string>, last: (item: T) => Promise<Base64EncodedWireTransaction | O>): Promise<Bundled<T, O>[]>;
@@ -0,0 +1,49 @@
1
+ import { accountsOf, bytesFit, compile, fillInstructions, locksFit, wireSize } from "./build.js";
2
+ import { MAX_BUNDLE } from "./jito.js";
3
+ export const badBundleSize = (value) => `bundle size must be an integer from 1 to ${MAX_BUNDLE}, not ${value}`;
4
+ export const bundleSizeFits = (value) => Number.isInteger(value) && value >= 1 && value <= MAX_BUNDLE;
5
+ export async function withoutTip(plan, tipped, solver, latest, tables, unitPrice) {
6
+ const bare = { ...tipped, tip: null, unitPrice: 0n };
7
+ const context = { ...bare, unitPrice: await unitPrice(await fillInstructions(plan, bare)) };
8
+ const instructions = await fillInstructions(plan, context);
9
+ const accounts = accountsOf(instructions, solver.address);
10
+ if (!locksFit(accounts)) {
11
+ return { bytes: null, accounts };
12
+ }
13
+ const probe = await compile(instructions, solver, latest, tables);
14
+ const bytes = wireSize(probe);
15
+ return bytesFit(bytes) ? { context, probe } : { bytes, accounts };
16
+ }
17
+ export async function sendBundles(queue, size, sendBundle, last) {
18
+ if (!bundleSizeFits(size)) {
19
+ throw new RangeError(badBundleSize(size));
20
+ }
21
+ const done = [];
22
+ for (let at = 0; at < queue.length; at += size) {
23
+ const bundle = queue.slice(at, at + size);
24
+ const wires = bundle.map((item) => item.wire);
25
+ for (let tail = bundle.at(-1); tail !== undefined; tail = bundle.at(-1)) {
26
+ const wire = await last(tail);
27
+ if (typeof wire === "string") {
28
+ wires[wires.length - 1] = wire;
29
+ break;
30
+ }
31
+ done.push({ item: tail, refused: wire });
32
+ bundle.pop();
33
+ wires.pop();
34
+ }
35
+ if (bundle.length === 0) {
36
+ continue;
37
+ }
38
+ try {
39
+ const signature = await sendBundle(wires);
40
+ done.push(...bundle.map((item) => ({ item, signature })));
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : String(error);
44
+ done.push(...bundle.map((item) => ({ item, error: message })));
45
+ }
46
+ }
47
+ return done;
48
+ }
49
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/bundle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Address } from "@solana/kit";
2
+ import { type Intent } from "@intent-engine/core";
3
+ import type { Backoff } from "./backoff.js";
4
+ import type { Hold } from "./holds.js";
5
+ export type Flight = {
6
+ until: bigint;
7
+ signature: string;
8
+ holds?: Hold;
9
+ intent?: Intent;
10
+ };
11
+ export type Landing = "landed" | "failed" | null;
12
+ export declare const FAILED_ON_CHAIN = "the fill was sent but failed on chain";
13
+ export declare function landings(flights: Map<Address, Flight>, now: bigint, listed: readonly {
14
+ address: Address;
15
+ intent: Intent;
16
+ }[], failedOnChain: (signature: string) => Promise<boolean>, held: Backoff): Promise<{
17
+ intent: Address;
18
+ error: string;
19
+ }[]>;
20
+ export declare function answered(flights: Map<Address, Flight>, listed: readonly {
21
+ address: Address;
22
+ intent: Intent;
23
+ }[], statuses: (signatures: readonly string[]) => Promise<readonly Landing[]>, held: Backoff): Promise<{
24
+ intent: Address;
25
+ error: string;
26
+ }[]>;
@@ -0,0 +1,48 @@
1
+ import { IntentStatus } from "@intent-engine/core";
2
+ export const FAILED_ON_CHAIN = "the fill was sent but failed on chain";
3
+ export async function landings(flights, now, listed, failedOnChain, held) {
4
+ const failed = [];
5
+ for (const { address, intent } of listed) {
6
+ const flight = flights.get(address);
7
+ if (flight === undefined || flight.until > now) {
8
+ continue;
9
+ }
10
+ flights.delete(address);
11
+ if (intent.status !== IntentStatus.Open) {
12
+ continue;
13
+ }
14
+ const lost = await failedOnChain(flight.signature).catch(() => false);
15
+ if (lost) {
16
+ held.failed(address, intent);
17
+ failed.push({ intent: address, error: `${FAILED_ON_CHAIN}: ${flight.signature}` });
18
+ }
19
+ }
20
+ return failed;
21
+ }
22
+ export async function answered(flights, listed, statuses, held) {
23
+ const asked = [...flights];
24
+ if (asked.length === 0) {
25
+ return [];
26
+ }
27
+ const found = await statuses(asked.map(([, flight]) => flight.signature)).catch(() => []);
28
+ const current = new Map(listed.map(({ address, intent }) => [address, intent]));
29
+ const failed = [];
30
+ asked.forEach(([address, flight], i) => {
31
+ const status = found[i];
32
+ if (status === "landed") {
33
+ flights.delete(address);
34
+ return;
35
+ }
36
+ const intent = current.get(address) ?? flight.intent;
37
+ if (status !== "failed" || intent === undefined) {
38
+ return;
39
+ }
40
+ flights.delete(address);
41
+ if (intent.status === IntentStatus.Open) {
42
+ held.failed(address, intent);
43
+ failed.push({ intent: address, error: `${FAILED_ON_CHAIN}: ${flight.signature}` });
44
+ }
45
+ });
46
+ return failed;
47
+ }
48
+ //# sourceMappingURL=flights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flights.js","sourceRoot":"","sources":["../../src/flights.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { Address } from "@solana/kit";
2
+ import { type Intent } from "@intent-engine/core";
3
+ import type { Flight } from "./flights.js";
4
+ export type Hold = {
5
+ account: Address;
6
+ amount: bigint;
7
+ };
8
+ export declare function unheld(live: bigint, held: bigint): bigint;
9
+ export declare function heldBy(flights: ReadonlyMap<Address, Flight>): (account: Address) => bigint;
10
+ export declare function releaseHolds(flights: Map<Address, Flight>, listed: readonly {
11
+ address: Address;
12
+ intent: Intent;
13
+ }[], full: boolean): void;
@@ -0,0 +1,30 @@
1
+ import { IntentStatus } from "@intent-engine/core";
2
+ export function unheld(live, held) {
3
+ return live > held ? live - held : 0n;
4
+ }
5
+ export function heldBy(flights) {
6
+ return (account) => {
7
+ let total = 0n;
8
+ for (const flight of flights.values()) {
9
+ if (flight.holds?.account === account) {
10
+ total += flight.holds.amount;
11
+ }
12
+ }
13
+ return total;
14
+ };
15
+ }
16
+ export function releaseHolds(flights, listed, full) {
17
+ const status = new Map(listed.map(({ address, intent }) => [address, intent.status]));
18
+ for (const [address, flight] of flights) {
19
+ if (flight.holds === undefined) {
20
+ continue;
21
+ }
22
+ const seen = status.get(address);
23
+ if (seen === IntentStatus.Open || (seen === undefined && !full)) {
24
+ continue;
25
+ }
26
+ const { holds: _, ...kept } = flight;
27
+ flights.set(address, kept);
28
+ }
29
+ }
30
+ //# sourceMappingURL=holds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"holds.js","sourceRoot":"","sources":["../../src/holds.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKhE,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,IAAY;IAC/C,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAqC;IAC1D,OAAO,CAAC,OAAO,EAAE,EAAE;QACjB,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;gBACtC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAA6B,EAC7B,MAAuD,EACvD,IAAa;IAEb,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACtF,KAAK,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC/B,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjC,IAAI,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAChE,SAAS;QACX,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
@@ -1,8 +1,15 @@
1
1
  export * from "./build.js";
2
+ export * from "./flights.js";
3
+ export * from "./bundle.js";
4
+ export * from "./holds.js";
5
+ export * from "./inventory.js";
2
6
  export * from "./issue.js";
3
7
  export * from "./jito.js";
4
8
  export * from "./jupiter.js";
5
9
  export * from "./lookup.js";
6
10
  export * from "./market.js";
11
+ export * from "./net.js";
7
12
  export * from "./plan.js";
13
+ export * from "./quote-cache.js";
14
+ export * from "./remember.js";
8
15
  export * from "./solver.js";
package/dist/src/index.js CHANGED
@@ -1,9 +1,16 @@
1
1
  export * from "./build.js";
2
+ export * from "./flights.js";
3
+ export * from "./bundle.js";
4
+ export * from "./holds.js";
5
+ export * from "./inventory.js";
2
6
  export * from "./issue.js";
3
7
  export * from "./jito.js";
4
8
  export * from "./jupiter.js";
5
9
  export * from "./lookup.js";
6
10
  export * from "./market.js";
11
+ export * from "./net.js";
7
12
  export * from "./plan.js";
13
+ export * from "./quote-cache.js";
14
+ export * from "./remember.js";
8
15
  export * from "./solver.js";
9
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { IssueRoute } from "./issue.js";
3
+ import type { Pricer } from "./market.js";
4
+ export type Holdings = (mint: Address) => Promise<bigint>;
5
+ export type Stock = Map<Address, {
6
+ start: bigint;
7
+ spent: bigint;
8
+ }>;
9
+ export declare function stockLeft(stock: Stock, account: Address, live: bigint): bigint;
10
+ export declare function spend(stock: Stock, account: Address, live: bigint, amount: bigint): void;
11
+ export declare function inventoryPricer(routes: readonly IssueRoute[], held: Holdings): Pricer;
@@ -0,0 +1,33 @@
1
+ export function stockLeft(stock, account, live) {
2
+ const held = stock.get(account);
3
+ if (held === undefined) {
4
+ return live;
5
+ }
6
+ const left = held.start - held.spent;
7
+ return left < live ? left : live;
8
+ }
9
+ export function spend(stock, account, live, amount) {
10
+ const held = stock.get(account) ?? { start: live, spent: 0n };
11
+ stock.set(account, { start: held.start, spent: held.spent + amount });
12
+ }
13
+ export function inventoryPricer(routes, held) {
14
+ for (const route of routes) {
15
+ if (route.out <= 0n || route.in <= 0n) {
16
+ throw new RangeError(`the inventory rate for ${route.outputMint} must be positive on both sides`);
17
+ }
18
+ }
19
+ return {
20
+ async quote(request) {
21
+ const route = routes.find((r) => r.inputMint === request.inputMint && r.outputMint === request.outputMint);
22
+ if (route === undefined) {
23
+ return null;
24
+ }
25
+ const amountOut = (request.amountIn * route.out) / route.in;
26
+ if ((await held(route.outputMint)) < amountOut) {
27
+ return null;
28
+ }
29
+ return { amountIn: request.amountIn, amountOut, instructions: [], lookupTables: [], inventory: true };
30
+ },
31
+ };
32
+ }
33
+ //# sourceMappingURL=inventory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inventory.js","sourceRoot":"","sources":["../../src/inventory.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,OAAgB,EAAE,IAAY;IACpE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACrC,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAY,EAAE,OAAgB,EAAE,IAAY,EAAE,MAAc;IAChF,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IAC9D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA6B,EAAE,IAAc;IAC3E,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,UAAU,CAAC,0BAA0B,KAAK,CAAC,UAAU,iCAAiC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;IACD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAqB;YAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;YAC3G,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC;YAC5D,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACxG,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { AccountRole, address, getBase64Encoder } from "@solana/kit";
2
+ import { TOKEN_PROGRAMS } from "./build.js";
2
3
  export const RATE_LIMITED = 429;
3
4
  export const EXACT_IN = "ExactIn";
4
5
  export class RateLimited extends Error {
@@ -21,6 +22,9 @@ export const ATA_CREATE_IDEMPOTENT = 1;
21
22
  const ATA_PAYER = 0;
22
23
  const ATA_WALLET = 2;
23
24
  const ATA_MINT = 3;
25
+ const ATA_SYSTEM = 4;
26
+ const ATA_TOKEN_PROGRAM = 5;
27
+ const SYSTEM_PROGRAM = address("11111111111111111111111111111111");
24
28
  function ownAccount(ix, request, what) {
25
29
  const data = ix.data ?? new Uint8Array();
26
30
  const kind = data.length === 0 ? ATA_CREATE : data[0];
@@ -29,7 +33,9 @@ function ownAccount(ix, request, what) {
29
33
  if (!opens ||
30
34
  ix.accounts?.[ATA_PAYER]?.address !== request.taker ||
31
35
  ix.accounts?.[ATA_WALLET]?.address !== request.taker ||
32
- (mint !== request.inputMint && mint !== request.outputMint)) {
36
+ (mint !== request.inputMint && mint !== request.outputMint) ||
37
+ ix.accounts?.[ATA_SYSTEM]?.address !== SYSTEM_PROGRAM ||
38
+ !TOKEN_PROGRAMS.some((program) => program === ix.accounts?.[ATA_TOKEN_PROGRAM]?.address)) {
33
39
  throw new Error(`jupiter ${what} does more than open this solver's own token account for the traded mints`);
34
40
  }
35
41
  return ix;
@@ -1 +1 @@
1
- {"version":3,"file":"jupiter.js","sourceRoot":"","sources":["../../src/jupiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jupiter.js","sourceRoot":"","sources":["../../src/jupiter.ts"],"names":[],"mappings":"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"}
@@ -5,16 +5,19 @@ export type QuoteRequest = {
5
5
  amountIn: bigint;
6
6
  taker: Address;
7
7
  maxAccounts?: number;
8
+ fresh?: boolean;
8
9
  };
9
10
  export type Quote = {
10
11
  amountIn: bigint;
11
12
  amountOut: bigint;
12
13
  instructions: Instruction[];
13
14
  lookupTables: Address[];
15
+ inventory?: boolean;
14
16
  };
15
17
  export interface Pricer {
16
18
  quote(request: QuoteRequest): Promise<Quote | null>;
17
19
  }
20
+ export declare function firstPricer(...pricers: readonly Pricer[]): Pricer;
18
21
  export type FetchResponse = {
19
22
  ok: boolean;
20
23
  status: number;
@@ -1,2 +1,14 @@
1
- export {};
1
+ export function firstPricer(...pricers) {
2
+ return {
3
+ async quote(request) {
4
+ for (const pricer of pricers) {
5
+ const quote = await pricer.quote(request);
6
+ if (quote !== null) {
7
+ return quote;
8
+ }
9
+ }
10
+ return null;
11
+ },
12
+ };
13
+ }
2
14
  //# sourceMappingURL=market.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/market.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/market.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,WAAW,CAAC,GAAG,OAA0B;IACvD,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAqB;YAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,OAAO,KAAK,CAAC;gBACf,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Address } from "@solana/kit";
2
+ import type { Plan, SolValue } from "./plan.js";
3
+ export declare const NET_BELOW_FLOOR = "the fill's profit less its sol cost is below the profit floor";
4
+ export declare const netBelowFloor: (profit: bigint, cost: bigint, lamports: bigint, floor: bigint) => string;
5
+ export declare const badSolValue: (mint: Address) => string;
6
+ export declare function solValueFits(solValue: SolValue | undefined): string | null;
7
+ export declare function costIn(mint: Address, lamports: bigint, solValue: SolValue | undefined): bigint | null;
8
+ export declare function netShort(plan: Pick<Plan, "intent" | "profit">, floor: bigint, lamports: bigint, solValue: SolValue | undefined): string | null;
@@ -0,0 +1,24 @@
1
+ import { NATIVE_MINT } from "@intent-engine/core";
2
+ export const NET_BELOW_FLOOR = "the fill's profit less its sol cost is below the profit floor";
3
+ export const netBelowFloor = (profit, cost, lamports, floor) => `${NET_BELOW_FLOOR}: profit ${profit} less a cost of ${cost} (${lamports} lamports) is below the floor of ${floor}`;
4
+ export const badSolValue = (mint) => `the sol value of ${mint} must be positive on both sides`;
5
+ export function solValueFits(solValue) {
6
+ for (const [mint, { raw, lamports }] of solValue ?? []) {
7
+ if (raw <= 0n || lamports <= 0n) {
8
+ return badSolValue(mint);
9
+ }
10
+ }
11
+ return null;
12
+ }
13
+ export function costIn(mint, lamports, solValue) {
14
+ if (mint === NATIVE_MINT) {
15
+ return lamports;
16
+ }
17
+ const value = solValue?.get(mint);
18
+ return value === undefined ? null : (lamports * value.raw + value.lamports - 1n) / value.lamports;
19
+ }
20
+ export function netShort(plan, floor, lamports, solValue) {
21
+ const cost = costIn(plan.intent.outputMint, lamports, solValue);
22
+ return cost === null || plan.profit - cost >= floor ? null : netBelowFloor(plan.profit, cost, lamports, floor);
23
+ }
24
+ //# sourceMappingURL=net.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"net.js","sourceRoot":"","sources":["../../src/net.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,CAAC,MAAM,eAAe,GAAG,+DAA+D,CAAC;AAE/F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,IAAY,EAAE,QAAgB,EAAE,KAAa,EAAU,EAAE,CACrG,GAAG,eAAe,YAAY,MAAM,mBAAmB,IAAI,KAAK,QAAQ,oCAAoC,KAAK,EAAE,CAAC;AAEtH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAa,EAAU,EAAE,CAAC,oBAAoB,IAAI,iCAAiC,CAAC;AAEhH,MAAM,UAAU,YAAY,CAAC,QAA8B;IACzD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;QACvD,IAAI,GAAG,IAAI,EAAE,IAAI,QAAQ,IAAI,EAAE,EAAE,CAAC;YAChC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,IAAa,EAAE,QAAgB,EAAE,QAA8B;IACpF,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,MAAM,KAAK,GAAG,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAqC,EAAE,KAAa,EAAE,QAAgB,EAAE,QAA8B;IAC7H,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChE,OAAO,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjH,CAAC"}
@@ -2,12 +2,22 @@ import type { Address } from "@solana/kit";
2
2
  import { type Config, type FeeShares, type Intent, type IntentParams } from "@intent-engine/core";
3
3
  import type { Pricer, Quote } from "./market.js";
4
4
  export type Cycle = (mint: Address, amount: bigint) => Promise<Quote | null>;
5
+ export type SolValue = ReadonlyMap<Address, {
6
+ raw: bigint;
7
+ lamports: bigint;
8
+ }>;
5
9
  export type Strategy = {
6
10
  minProfit: ReadonlyMap<Address, bigint>;
7
11
  maxFeeBps: number;
8
12
  cycle?: Cycle;
9
13
  routeAccounts?: number;
14
+ target?: ReadonlyMap<Address, bigint>;
15
+ patience?: number;
16
+ solValue?: SolValue;
10
17
  };
18
+ export declare const DEFAULT_PATIENCE = 30;
19
+ export declare const WAITING_FOR_TARGET = "waiting for the profit target while the auction still falls";
20
+ export declare function awaitingTarget(params: IntentParams, outputMint: Address, profit: bigint, now: bigint, strategy: Strategy): string | null;
11
21
  export type Payable = (draft: Pick<Plan, "intent" | "fees">) => Promise<string | null>;
12
22
  export type Plan = {
13
23
  address: Address;
package/dist/src/plan.js CHANGED
@@ -1,4 +1,16 @@
1
1
  import { decodeParamsLoose, feeBpsFor, INTENT_VERSION, IntentStatus, Kind, kindBit, PAUSE_FILL, remainingOf, requiredOut, splitFees, } from "@intent-engine/core";
2
+ export const DEFAULT_PATIENCE = 30;
3
+ export const WAITING_FOR_TARGET = "waiting for the profit target while the auction still falls";
4
+ export function awaitingTarget(params, outputMint, profit, now, strategy) {
5
+ const target = strategy.target?.get(outputMint);
6
+ if (params.kind !== Kind.DutchAuction || target === undefined || profit >= target) {
7
+ return null;
8
+ }
9
+ if (now + BigInt(strategy.patience ?? DEFAULT_PATIENCE) >= params.endTs) {
10
+ return null;
11
+ }
12
+ return `${WAITING_FOR_TARGET}: profit ${profit} is below the target ${target}`;
13
+ }
2
14
  const skip = (reason) => ({ kind: "skip", reason });
3
15
  export function standing(intent, config, now, strategy) {
4
16
  if (intent.version !== INTENT_VERSION) {
@@ -63,6 +75,10 @@ export async function decide(address, intent, config, now, pricer, solver, strat
63
75
  const arbitrage = strategy.cycle !== undefined && spread > 0n ? await strategy.cycle(intent.outputMint, spread) : null;
64
76
  const gain = arbitrage !== null && arbitrage.amountIn <= spread && arbitrage.amountOut > arbitrage.amountIn ? arbitrage : null;
65
77
  const profit = gain === null ? spread : spread - gain.amountIn + gain.amountOut;
78
+ const patient = awaitingTarget(params, intent.outputMint, profit, now, strategy);
79
+ if (patient !== null) {
80
+ return skip(patient);
81
+ }
66
82
  if (profit < floor) {
67
83
  return skip(`profit ${profit} is below ${floor}`);
68
84
  }
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Pricer, Quote } from "./market.js";
2
+ export type QuoteCache = {
3
+ ttlMs: number;
4
+ clock: () => number;
5
+ };
6
+ export type CacheStats = {
7
+ hits: number;
8
+ misses: number;
9
+ };
10
+ export type CachedPricer = Pricer & {
11
+ stats(): CacheStats;
12
+ };
13
+ export type CountingPricer = Pricer & {
14
+ count(): number;
15
+ };
16
+ export declare const fromCache: (quote: Quote) => boolean;
17
+ export declare const freshly: (pricer: Pricer) => Pricer;
18
+ export declare function countingPricer(pricer: Pricer): CountingPricer;
19
+ export declare function cachedPricer(pricer: Pricer, { ttlMs, clock }: QuoteCache): CachedPricer;
@@ -0,0 +1,46 @@
1
+ const served = new WeakSet();
2
+ export const fromCache = (quote) => served.has(quote);
3
+ export const freshly = (pricer) => ({ quote: (request) => pricer.quote({ ...request, fresh: true }) });
4
+ const keyOf = (request) => [request.inputMint, request.outputMint, request.amountIn.toString(), request.taker, request.maxAccounts ?? ""].join(":");
5
+ export function countingPricer(pricer) {
6
+ let answered = 0;
7
+ return {
8
+ async quote(request) {
9
+ const quote = await pricer.quote(request);
10
+ answered += 1;
11
+ return quote;
12
+ },
13
+ count: () => answered,
14
+ };
15
+ }
16
+ export function cachedPricer(pricer, { ttlMs, clock }) {
17
+ const held = new Map();
18
+ const counts = { hits: 0, misses: 0 };
19
+ return {
20
+ stats: () => ({ ...counts }),
21
+ async quote(request) {
22
+ const key = keyOf(request);
23
+ const entry = held.get(key);
24
+ if (request.fresh !== true && entry !== undefined && clock() - entry.at < ttlMs) {
25
+ counts.hits += 1;
26
+ if (entry.quote === null) {
27
+ return null;
28
+ }
29
+ const copy = { ...entry.quote };
30
+ served.add(copy);
31
+ return copy;
32
+ }
33
+ counts.misses += 1;
34
+ const quote = await pricer.quote(request);
35
+ const at = clock();
36
+ for (const [old, stored] of held) {
37
+ if (at - stored.at >= ttlMs) {
38
+ held.delete(old);
39
+ }
40
+ }
41
+ held.set(key, { at, quote });
42
+ return quote;
43
+ },
44
+ };
45
+ }
46
+ //# sourceMappingURL=quote-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote-cache.js","sourceRoot":"","sources":["../../src/quote-cache.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,GAAG,IAAI,OAAO,EAAS,CAAC;AAEpC,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAY,EAAW,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAc,EAAU,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;AAEvH,MAAM,KAAK,GAAG,CAAC,OAAqB,EAAU,EAAE,CAC9C,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAE3H,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAO;YACjB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,QAAQ,IAAI,CAAC,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QACD,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,EAAE,KAAK,EAAE,KAAK,EAAc;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAA+C,CAAC;IACpE,MAAM,MAAM,GAAe,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAClD,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,OAAO;YACjB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,EAAE,GAAG,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC;gBAChF,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;gBACjB,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBACzB,OAAO,IAAI,CAAC;gBACd,CAAC;gBACD,MAAM,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACjB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;gBACjC,IAAI,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnB,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Chain } from "./solver.js";
2
+ export declare const CONFIG_TTL_MS = 30000;
3
+ export declare const BLOCKHASH_TTL_MS = 20000;
4
+ export type Remembering = Chain & {
5
+ forget(): void;
6
+ };
7
+ export declare function remembering(chain: Chain, clock?: () => number): Remembering;