@intent-engine/client 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.
- package/dist/src/accounts.d.ts +6 -0
- package/dist/src/accounts.js +15 -1
- package/dist/src/accounts.js.map +1 -1
- package/dist/src/budget.d.ts +6 -4
- package/dist/src/budget.js +24 -9
- package/dist/src/budget.js.map +1 -1
- package/dist/src/client-committee.d.ts +8 -0
- package/dist/src/client-committee.js +34 -0
- package/dist/src/client-committee.js.map +1 -0
- package/dist/src/client-errors.d.ts +33 -0
- package/dist/src/client-errors.js +65 -0
- package/dist/src/client-errors.js.map +1 -0
- package/dist/src/client-intents.d.ts +12 -0
- package/dist/src/client-intents.js +140 -0
- package/dist/src/client-intents.js.map +1 -0
- package/dist/src/client-reads.d.ts +7 -0
- package/dist/src/client-reads.js +61 -0
- package/dist/src/client-reads.js.map +1 -0
- package/dist/src/client-settle.d.ts +7 -0
- package/dist/src/client-settle.js +180 -0
- package/dist/src/client-settle.js.map +1 -0
- package/dist/src/client-types.d.ts +192 -0
- package/dist/src/client-types.js +9 -0
- package/dist/src/client-types.js.map +1 -0
- package/dist/src/client-watch.d.ts +4 -0
- package/dist/src/client-watch.js +97 -0
- package/dist/src/client-watch.js.map +1 -0
- package/dist/src/client.d.ts +5 -140
- package/dist/src/client.js +28 -309
- package/dist/src/client.js.map +1 -1
- package/dist/src/confirmation.d.ts +11 -0
- package/dist/src/confirmation.js +94 -0
- package/dist/src/confirmation.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/intent-notifications.d.ts +13 -0
- package/dist/src/intent-notifications.js +106 -0
- package/dist/src/intent-notifications.js.map +1 -0
- package/dist/src/job-deliveries.d.ts +40 -0
- package/dist/src/job-deliveries.js +92 -0
- package/dist/src/job-deliveries.js.map +1 -0
- package/dist/src/job-memos.d.ts +17 -0
- package/dist/src/job-memos.js +64 -0
- package/dist/src/job-memos.js.map +1 -0
- package/dist/src/job-origins.d.ts +30 -0
- package/dist/src/job-origins.js +53 -0
- package/dist/src/job-origins.js.map +1 -0
- package/dist/src/job-proofs.d.ts +17 -0
- package/dist/src/job-proofs.js +54 -0
- package/dist/src/job-proofs.js.map +1 -0
- package/dist/src/job-scan.d.ts +20 -0
- package/dist/src/job-scan.js +70 -0
- package/dist/src/job-scan.js.map +1 -0
- package/dist/src/job-specs.d.ts +40 -0
- package/dist/src/job-specs.js +107 -0
- package/dist/src/job-specs.js.map +1 -0
- package/dist/src/jobs.d.ts +6 -77
- package/dist/src/jobs.js +6 -186
- package/dist/src/jobs.js.map +1 -1
- package/dist/src/memoized-transport.d.ts +4 -0
- package/dist/src/memoized-transport.js +66 -0
- package/dist/src/memoized-transport.js.map +1 -0
- package/dist/src/reputation.d.ts +53 -0
- package/dist/src/reputation.js +176 -0
- package/dist/src/reputation.js.map +1 -0
- package/dist/src/rpc-retry.d.ts +16 -0
- package/dist/src/rpc-retry.js +62 -0
- package/dist/src/rpc-retry.js.map +1 -0
- package/dist/src/rpc-shapes.d.ts +230 -0
- package/dist/src/rpc-shapes.js +2 -0
- package/dist/src/rpc-shapes.js.map +1 -0
- package/dist/src/rpc-transport.d.ts +6 -0
- package/dist/src/rpc-transport.js +236 -0
- package/dist/src/rpc-transport.js.map +1 -0
- package/dist/src/simple-orders.d.ts +24 -0
- package/dist/src/simple-orders.js +101 -0
- package/dist/src/simple-orders.js.map +1 -0
- package/dist/src/simple-tokens.d.ts +19 -0
- package/dist/src/simple-tokens.js +84 -0
- package/dist/src/simple-tokens.js.map +1 -0
- package/dist/src/simple-types.d.ts +111 -0
- package/dist/src/simple-types.js +2 -0
- package/dist/src/simple-types.js.map +1 -0
- package/dist/src/simple-work.d.ts +12 -0
- package/dist/src/simple-work.js +69 -0
- package/dist/src/simple-work.js.map +1 -0
- package/dist/src/simple.d.ts +6 -0
- package/dist/src/simple.js +53 -0
- package/dist/src/simple.js.map +1 -0
- package/dist/src/svm.js +83 -27
- package/dist/src/svm.js.map +1 -1
- package/dist/src/transaction-keys.d.ts +6 -0
- package/dist/src/transaction-keys.js +19 -0
- package/dist/src/transaction-keys.js.map +1 -0
- package/dist/src/transport.d.ts +7 -223
- package/dist/src/transport.js +6 -467
- package/dist/src/transport.js.map +1 -1
- package/package.json +17 -6
package/dist/src/accounts.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type Address } from "@solana/kit";
|
|
2
|
+
import { type MintCap } from "@intent-engine/core";
|
|
2
3
|
import type { AccountView, Transport } from "./transport.js";
|
|
3
4
|
export declare const SYSTEM_PROGRAM_ADDRESS: Address;
|
|
4
5
|
export declare function createdAccount(transport: Transport, address: Address): Promise<AccountView | null>;
|
|
@@ -19,6 +20,11 @@ export declare function loadConfig(transport: Transport): Promise<{
|
|
|
19
20
|
address: Address<string>;
|
|
20
21
|
config: import("@intent-engine/core").Config;
|
|
21
22
|
}>;
|
|
23
|
+
export declare function loadMintCap(transport: Transport, mint: Address): Promise<{
|
|
24
|
+
address: Address;
|
|
25
|
+
cap: MintCap;
|
|
26
|
+
} | null>;
|
|
27
|
+
export declare function mintCapOf(transport: Transport, mint: Address): Promise<Address | undefined>;
|
|
22
28
|
export type NonceWindow = {
|
|
23
29
|
nonceBase: bigint;
|
|
24
30
|
nonceBitmap: readonly bigint[];
|
package/dist/src/accounts.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getBase58Encoder } from "@solana/kit";
|
|
2
|
-
import { findConfigPda, findIntentPda, findUserStatePda, getConfigDecoder, getConfigDiscriminatorBytes, getIntentDecoder, getIntentDiscriminatorBytes, getUserStateDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, TOKEN_2022_PROGRAM_ADDRESS, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
|
|
2
|
+
import { decodeMintCapData, findConfigPda, findIntentPda, findMintCapAddress, findUserStatePda, getConfigDecoder, getConfigDiscriminatorBytes, getIntentDecoder, getIntentDiscriminatorBytes, getUserStateDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, isMintCapData, TOKEN_2022_PROGRAM_ADDRESS, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
|
|
3
3
|
export const SYSTEM_PROGRAM_ADDRESS = "11111111111111111111111111111111";
|
|
4
4
|
export async function createdAccount(transport, address) {
|
|
5
5
|
const view = await transport.getAccount(address);
|
|
@@ -42,6 +42,20 @@ export async function loadConfig(transport) {
|
|
|
42
42
|
const data = await engineAccount(transport, address, getConfigDiscriminatorBytes(), "config");
|
|
43
43
|
return { address, config: getConfigDecoder().decode(data) };
|
|
44
44
|
}
|
|
45
|
+
export async function loadMintCap(transport, mint) {
|
|
46
|
+
const address = await findMintCapAddress(mint);
|
|
47
|
+
const view = await createdAccount(transport, address);
|
|
48
|
+
if (view === null) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS || !isMintCapData(view.data)) {
|
|
52
|
+
throw new Error(`${address} is not an engine mint cap`);
|
|
53
|
+
}
|
|
54
|
+
return { address, cap: decodeMintCapData(view.data) };
|
|
55
|
+
}
|
|
56
|
+
export async function mintCapOf(transport, mint) {
|
|
57
|
+
return (await loadMintCap(transport, mint))?.address;
|
|
58
|
+
}
|
|
45
59
|
export async function loadUser(transport, owner) {
|
|
46
60
|
const [address] = await findUserStatePda({ owner });
|
|
47
61
|
const view = await createdAccount(transport, address);
|
package/dist/src/accounts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/accounts.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"accounts.js","sourceRoot":"","sources":["../../src/accounts.ts"],"names":[],"mappings":"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"}
|
package/dist/src/budget.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { type Address, type Instruction } from "@solana/kit";
|
|
2
|
-
import type
|
|
2
|
+
import { type LookupTables, type Simulation, type Transport } from "./transport.js";
|
|
3
3
|
export type Priority = bigint | "auto";
|
|
4
4
|
export declare const AUTO_PERCENTILE = 75n;
|
|
5
5
|
export declare const AUTO_PRICE_CAP = 10000000n;
|
|
6
|
+
export declare const PACKET_DATA_SIZE = 1232;
|
|
6
7
|
export declare function percentile(fees: readonly bigint[], rank: bigint): bigint;
|
|
7
8
|
export declare function writableAccounts(instructions: readonly Instruction[]): Address[];
|
|
8
9
|
export declare function priceOf(transport: Transport, priority: Priority, instructions: readonly Instruction[]): Promise<bigint>;
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function
|
|
11
|
-
export declare function
|
|
10
|
+
export declare function transactionBytes(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<number>;
|
|
11
|
+
export declare function simulated(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<Simulation>;
|
|
12
|
+
export declare function unitsOf(transport: Transport, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<bigint | null>;
|
|
13
|
+
export declare function budgeted(transport: Transport, priority: Priority, instructions: readonly Instruction[], feePayer: Address, tables?: LookupTables): Promise<Instruction[]>;
|
|
12
14
|
export declare function withPriority(inner: Transport, priority: Priority): Transport;
|
package/dist/src/budget.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { appendTransactionMessageInstructions, createTransactionMessage, getBase64EncodedWireTransaction,
|
|
1
|
+
import { appendTransactionMessageInstructions, compileTransaction, compressTransactionMessageUsingAddressLookupTables, createTransactionMessage, getBase64EncodedWireTransaction, getTransactionEncoder, isWritableRole, pipe, setTransactionMessageFeePayer, setTransactionMessageLifetimeUsingBlockhash, } from "@solana/kit";
|
|
2
2
|
import { COMPUTE_BUDGET_ADDRESS, computeUnitLimit, computeUnitPrice, headroom, MAX_COMPUTE_UNITS } from "@intent-engine/core";
|
|
3
|
+
import { boundMembers } from "./transport.js";
|
|
3
4
|
export const AUTO_PERCENTILE = 75n;
|
|
4
5
|
export const AUTO_PRICE_CAP = 10000000n;
|
|
6
|
+
export const PACKET_DATA_SIZE = 1_232;
|
|
5
7
|
export function percentile(fees, rank) {
|
|
6
8
|
const sorted = [...fees].sort((a, b) => Number(a - b));
|
|
7
9
|
if (sorted.length === 0) {
|
|
@@ -28,28 +30,41 @@ export async function priceOf(transport, priority, instructions) {
|
|
|
28
30
|
const suggested = percentile(await transport.recentFees(writableAccounts(instructions)), AUTO_PERCENTILE);
|
|
29
31
|
return suggested < AUTO_PRICE_CAP ? suggested : AUTO_PRICE_CAP;
|
|
30
32
|
}
|
|
31
|
-
|
|
33
|
+
async function compiled(transport, instructions, feePayer, tables) {
|
|
32
34
|
const latest = await transport.latestBlockhash();
|
|
33
35
|
const message = pipe(createTransactionMessage({ version: 0 }), (m) => setTransactionMessageFeePayer(feePayer, m), (m) => setTransactionMessageLifetimeUsingBlockhash(latest, m), (m) => appendTransactionMessageInstructions(instructions, m));
|
|
34
|
-
|
|
36
|
+
const compressed = tables === undefined || Object.keys(tables).length === 0 ? message : compressTransactionMessageUsingAddressLookupTables(message, tables);
|
|
37
|
+
const built = compileTransaction(compressed);
|
|
38
|
+
const signatures = Object.fromEntries(Object.keys(built.signatures).map((signer) => [signer, new Uint8Array(64)]));
|
|
39
|
+
return { ...built, signatures };
|
|
35
40
|
}
|
|
36
|
-
export async function
|
|
37
|
-
|
|
41
|
+
export async function transactionBytes(transport, instructions, feePayer, tables) {
|
|
42
|
+
return getTransactionEncoder().encode(await compiled(transport, instructions, feePayer, tables)).length;
|
|
43
|
+
}
|
|
44
|
+
export async function simulated(transport, instructions, feePayer, tables) {
|
|
45
|
+
return transport.simulate(getBase64EncodedWireTransaction(await compiled(transport, instructions, feePayer, tables)));
|
|
46
|
+
}
|
|
47
|
+
export async function unitsOf(transport, instructions, feePayer, tables) {
|
|
48
|
+
const simulation = await simulated(transport, instructions, feePayer, tables);
|
|
38
49
|
return simulation.err === null ? simulation.unitsConsumed : null;
|
|
39
50
|
}
|
|
40
|
-
export async function budgeted(transport, priority, instructions, feePayer) {
|
|
51
|
+
export async function budgeted(transport, priority, instructions, feePayer, tables) {
|
|
41
52
|
if (instructions.some((ix) => ix.programAddress === COMPUTE_BUDGET_ADDRESS)) {
|
|
42
53
|
return [...instructions];
|
|
43
54
|
}
|
|
44
55
|
const price = await priceOf(transport, priority, instructions);
|
|
45
56
|
const head = price > 0n ? [computeUnitPrice(price)] : [];
|
|
46
|
-
const
|
|
57
|
+
const trial = [...instructions, computeUnitLimit(MAX_COMPUTE_UNITS), ...head];
|
|
58
|
+
if ((await transactionBytes(transport, trial, feePayer, tables)) > PACKET_DATA_SIZE) {
|
|
59
|
+
return trial;
|
|
60
|
+
}
|
|
61
|
+
const consumed = await unitsOf(transport, trial, feePayer, tables);
|
|
47
62
|
return [...instructions, computeUnitLimit(consumed === null ? MAX_COMPUTE_UNITS : headroom(consumed)), ...head];
|
|
48
63
|
}
|
|
49
64
|
export function withPriority(inner, priority) {
|
|
50
|
-
const budget = (instructions, feePayer) => budgeted(inner, priority, instructions, feePayer);
|
|
65
|
+
const budget = (instructions, feePayer, tables) => budgeted(inner, priority, instructions, feePayer, tables);
|
|
51
66
|
return {
|
|
52
|
-
...inner,
|
|
67
|
+
...boundMembers(inner),
|
|
53
68
|
budget,
|
|
54
69
|
send: async (instructions, payer) => inner.send(await budget(instructions, payer.address), payer),
|
|
55
70
|
};
|
package/dist/src/budget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,oCAAoC,EACpC,wBAAwB,EACxB,+BAA+B,
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../../src/budget.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
import type { ClientContext, CommitteeView, CreateCommitteeInput, CreatedCommittee } from "./client-types.js";
|
|
3
|
+
import type { Transport } from "./transport.js";
|
|
4
|
+
export declare function loadCommittee(transport: Transport, address: Address): Promise<CommitteeView | null>;
|
|
5
|
+
export declare function committeeSends({ transport, send }: ClientContext): {
|
|
6
|
+
createCommittee: (input: CreateCommitteeInput) => Promise<CreatedCommittee>;
|
|
7
|
+
committee: (address: Address) => Promise<CommitteeView | null>;
|
|
8
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { buildCreateCommittee, COMMITTEE_DISCRIMINATOR, committeeOf, getCommitteeDecoder, INTENT_ENGINE_PROGRAM_ADDRESS, } from "@intent-engine/core";
|
|
2
|
+
import { createdAccount } from "./accounts.js";
|
|
3
|
+
export async function loadCommittee(transport, address) {
|
|
4
|
+
const view = await createdAccount(transport, address);
|
|
5
|
+
if (view === null ||
|
|
6
|
+
view.owner !== INTENT_ENGINE_PROGRAM_ADDRESS ||
|
|
7
|
+
!COMMITTEE_DISCRIMINATOR.every((b, i) => view.data[i] === b)) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const stored = getCommitteeDecoder().decode(view.data);
|
|
11
|
+
const members = stored.members.slice(0, stored.count);
|
|
12
|
+
const terms = { members, threshold: stored.threshold, feeWallet: stored.feeWallet };
|
|
13
|
+
const derived = await committeeOf(terms);
|
|
14
|
+
if (derived.address !== address) {
|
|
15
|
+
throw new Error(`${address} holds a committee whose contents address ${derived.address}`);
|
|
16
|
+
}
|
|
17
|
+
return { ...terms, address, id: derived.id, createdAt: stored.createdAt };
|
|
18
|
+
}
|
|
19
|
+
export function committeeSends({ transport, send }) {
|
|
20
|
+
const createCommittee = async (input) => {
|
|
21
|
+
const { committee, instruction } = await buildCreateCommittee({
|
|
22
|
+
payer: input.payer,
|
|
23
|
+
members: input.members,
|
|
24
|
+
threshold: input.threshold,
|
|
25
|
+
feeWallet: input.feeWallet,
|
|
26
|
+
});
|
|
27
|
+
if ((await loadCommittee(transport, committee.address)) !== null) {
|
|
28
|
+
return { committee: committee.address, signature: null };
|
|
29
|
+
}
|
|
30
|
+
return { committee: committee.address, signature: await send([instruction], input.payer) };
|
|
31
|
+
};
|
|
32
|
+
return { createCommittee, committee: (address) => loadCommittee(transport, address) };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=client-committee.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-committee.js","sourceRoot":"","sources":["../../src/client-committee.ts"],"names":[],"mappings":"AACA,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,WAAW,EACX,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAoB,EAAE,OAAgB;IACxE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,IACE,IAAI,KAAK,IAAI;QACb,IAAI,CAAC,KAAK,KAAK,6BAA6B;QAC5C,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IACpF,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,6CAA6C,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC5E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAiB;IAC/D,MAAM,eAAe,GAAG,KAAK,EAAE,KAA2B,EAA6B,EAAE;QACvF,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC;YAC5D,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACjE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC3D,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7F,CAAC,CAAC;IACF,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
export declare class NoFreeNonce extends Error {
|
|
3
|
+
readonly owner: Address;
|
|
4
|
+
constructor(owner: Address);
|
|
5
|
+
}
|
|
6
|
+
export declare class NotSettleable extends Error {
|
|
7
|
+
readonly intent: Address;
|
|
8
|
+
constructor(intent: Address, reason: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class NotFillable extends Error {
|
|
11
|
+
readonly intent: Address;
|
|
12
|
+
constructor(intent: Address, reason: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class PayToNotWallet extends Error {
|
|
15
|
+
readonly payTo: Address;
|
|
16
|
+
readonly program: Address;
|
|
17
|
+
constructor(payTo: Address, program: Address);
|
|
18
|
+
}
|
|
19
|
+
export declare class PayeeMoved extends Error {
|
|
20
|
+
readonly payTo: Address;
|
|
21
|
+
readonly account: Address;
|
|
22
|
+
constructor(payTo: Address, account: Address);
|
|
23
|
+
}
|
|
24
|
+
export declare class EscrowExpired extends Error {
|
|
25
|
+
readonly intent: Address;
|
|
26
|
+
readonly expiresAt: bigint;
|
|
27
|
+
constructor(intent: Address, expiresAt: bigint);
|
|
28
|
+
}
|
|
29
|
+
export declare class VoteRejected extends Error {
|
|
30
|
+
readonly member: Address;
|
|
31
|
+
readonly intent: Address;
|
|
32
|
+
constructor(member: Address, intent: Address);
|
|
33
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export class NoFreeNonce extends Error {
|
|
2
|
+
owner;
|
|
3
|
+
constructor(owner) {
|
|
4
|
+
super(`every nonce in the window of ${owner} is used; advance the nonce window first`);
|
|
5
|
+
this.name = "NoFreeNonce";
|
|
6
|
+
this.owner = owner;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class NotSettleable extends Error {
|
|
10
|
+
intent;
|
|
11
|
+
constructor(intent, reason) {
|
|
12
|
+
super(`intent ${intent} ${reason}`);
|
|
13
|
+
this.name = "NotSettleable";
|
|
14
|
+
this.intent = intent;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class NotFillable extends Error {
|
|
18
|
+
intent;
|
|
19
|
+
constructor(intent, reason) {
|
|
20
|
+
super(`intent ${intent} ${reason}`);
|
|
21
|
+
this.name = "NotFillable";
|
|
22
|
+
this.intent = intent;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class PayToNotWallet extends Error {
|
|
26
|
+
payTo;
|
|
27
|
+
program;
|
|
28
|
+
constructor(payTo, program) {
|
|
29
|
+
super(`payTo ${payTo} belongs to the program ${program}, not to a wallet, so nothing paid to it could be spent; give a wallet address`);
|
|
30
|
+
this.name = "PayToNotWallet";
|
|
31
|
+
this.payTo = payTo;
|
|
32
|
+
this.program = program;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class PayeeMoved extends Error {
|
|
36
|
+
payTo;
|
|
37
|
+
account;
|
|
38
|
+
constructor(payTo, account) {
|
|
39
|
+
super(`the token account ${account} of payTo ${payTo} is no longer held by ${payTo} for this mint, so a release to it would not reach ${payTo}`);
|
|
40
|
+
this.name = "PayeeMoved";
|
|
41
|
+
this.payTo = payTo;
|
|
42
|
+
this.account = account;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class EscrowExpired extends Error {
|
|
46
|
+
intent;
|
|
47
|
+
expiresAt;
|
|
48
|
+
constructor(intent, expiresAt) {
|
|
49
|
+
super(`intent ${intent} expired at ${expiresAt}; its owner gets it back instead`);
|
|
50
|
+
this.name = "EscrowExpired";
|
|
51
|
+
this.intent = intent;
|
|
52
|
+
this.expiresAt = expiresAt;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class VoteRejected extends Error {
|
|
56
|
+
member;
|
|
57
|
+
intent;
|
|
58
|
+
constructor(member, intent) {
|
|
59
|
+
super(`the vote of ${member} is not a valid committee signature over the release of ${intent}`);
|
|
60
|
+
this.name = "VoteRejected";
|
|
61
|
+
this.member = member;
|
|
62
|
+
this.intent = intent;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=client-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-errors.js","sourceRoot":"","sources":["../../src/client-errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,KAAK,CAAU;IAExB,YAAY,KAAc;QACxB,KAAK,CAAC,gCAAgC,KAAK,0CAA0C,CAAC,CAAC;QACvF,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAc;QACzC,KAAK,CAAC,UAAU,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,KAAK;IAC3B,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAc;QACzC,KAAK,CAAC,UAAU,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,KAAK,CAAU;IACf,OAAO,CAAU;IAE1B,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,SAAS,KAAK,2BAA2B,OAAO,gFAAgF,CAAC,CAAC;QACxI,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,KAAK;IAC1B,KAAK,CAAU;IACf,OAAO,CAAU;IAE1B,YAAY,KAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,qBAAqB,OAAO,aAAa,KAAK,yBAAyB,KAAK,sDAAsD,KAAK,EAAE,CAAC,CAAC;QACjJ,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,MAAM,CAAU;IAChB,SAAS,CAAS;IAE3B,YAAY,MAAe,EAAE,SAAiB;QAC5C,KAAK,CAAC,UAAU,MAAM,eAAe,SAAS,kCAAkC,CAAC,CAAC;QAClF,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,MAAM,CAAU;IAChB,MAAM,CAAU;IAEzB,YAAY,MAAe,EAAE,MAAe;QAC1C,KAAK,CAAC,eAAe,MAAM,2DAA2D,MAAM,EAAE,CAAC,CAAC;QAChG,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Address, TransactionSigner } from "@solana/kit";
|
|
2
|
+
import { type NonceWindow } from "./accounts.js";
|
|
3
|
+
import { type ClientContext, type CreatedIntent, type CreateIntentInput, type FillInput } from "./client-types.js";
|
|
4
|
+
export declare function nonceAfter(owner: Address, user: NonceWindow | null): bigint;
|
|
5
|
+
export declare function intentSends({ transport, send, mint, config }: ClientContext): {
|
|
6
|
+
createIntent: (input: CreateIntentInput) => Promise<CreatedIntent>;
|
|
7
|
+
cancel: (signer: TransactionSigner, nonce: bigint) => Promise<import("@solana/kit").Signature>;
|
|
8
|
+
unwrap: (signer: TransactionSigner) => Promise<import("@solana/kit").Signature | null>;
|
|
9
|
+
fill: (input: FillInput) => Promise<import("@solana/kit").Signature>;
|
|
10
|
+
expire: (cranker: TransactionSigner, owner: Address, nonce: bigint) => Promise<import("@solana/kit").Signature>;
|
|
11
|
+
close: (cranker: TransactionSigner, owner: Address, nonce: bigint) => Promise<import("@solana/kit").Signature>;
|
|
12
|
+
};
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { buildCancelIntent, buildCloseIntent, buildCreateIntent, buildExpireIntent, buildFillIntent, decodeParams, escrowAmount, feeBpsFor, findAssociatedTokenAddress, findIntentPda, IntentStatus, Kind, NATIVE_MINT, nextFreeNonce, remainingOf, requiredOut, specMemo, splitFees, TOKEN_PROGRAM_ADDRESS, } from "@intent-engine/core";
|
|
2
|
+
import { getCloseAccountInstruction } from "@solana-program/token";
|
|
3
|
+
import { chainTime, createdAccount, loadIntent, loadUser, mintCapOf } from "./accounts.js";
|
|
4
|
+
import { NoFreeNonce, NotFillable } from "./client-errors.js";
|
|
5
|
+
import { DEFAULT_EXPIRES_IN, EXPIRES_IN_RANGE, MAX_EXPIRES_IN, MIN_EXPIRES_IN, SPEC_URL_NEEDS_PROOF, } from "./client-types.js";
|
|
6
|
+
import { memoInstruction, PLAIN_HTTP_ON_PUBLIC, plainHttpOnPublic } from "./jobs.js";
|
|
7
|
+
import { initUserIfMissing, tokenAccountIfMissing, wrapIfShort } from "./setup.js";
|
|
8
|
+
export function nonceAfter(owner, user) {
|
|
9
|
+
if (user === null) {
|
|
10
|
+
return 0n;
|
|
11
|
+
}
|
|
12
|
+
const next = nextFreeNonce(user);
|
|
13
|
+
if (next === null) {
|
|
14
|
+
throw new NoFreeNonce(owner);
|
|
15
|
+
}
|
|
16
|
+
return next;
|
|
17
|
+
}
|
|
18
|
+
export function intentSends({ transport, send, mint, config }) {
|
|
19
|
+
const createIntent = async (input) => {
|
|
20
|
+
const { signer, params, inputMint, outputMint } = input;
|
|
21
|
+
const owner = signer.address;
|
|
22
|
+
if (input.specUrl !== undefined && (params.kind !== Kind.AttestedResult || params.specHash.every((b) => b === 0))) {
|
|
23
|
+
throw new RangeError(SPEC_URL_NEEDS_PROOF);
|
|
24
|
+
}
|
|
25
|
+
if (input.expiresIn !== undefined && (input.expiresIn < MIN_EXPIRES_IN || input.expiresIn > MAX_EXPIRES_IN)) {
|
|
26
|
+
throw new RangeError(EXPIRES_IN_RANGE);
|
|
27
|
+
}
|
|
28
|
+
const published = input.specUrl === undefined ? [] : [memoInstruction(signer, specMemo(input.specUrl))];
|
|
29
|
+
if (input.specUrl !== undefined && (await plainHttpOnPublic(transport, input.specUrl))) {
|
|
30
|
+
throw new RangeError(`the spec url ${input.specUrl} ${PLAIN_HTTP_ON_PUBLIC}`);
|
|
31
|
+
}
|
|
32
|
+
const [settings, sell, buy, user, mintCap] = await Promise.all([
|
|
33
|
+
config(),
|
|
34
|
+
mint(inputMint),
|
|
35
|
+
mint(outputMint),
|
|
36
|
+
loadUser(transport, owner),
|
|
37
|
+
mintCapOf(transport, inputMint),
|
|
38
|
+
]);
|
|
39
|
+
const nonce = input.nonce ?? nonceAfter(owner, user);
|
|
40
|
+
const expiresAt = input.expiresAt ?? (await chainTime(transport)) + (input.expiresIn ?? DEFAULT_EXPIRES_IN);
|
|
41
|
+
const recipient = input.receiver ?? owner;
|
|
42
|
+
const receiver = await tokenAccountIfMissing(transport, signer, recipient, outputMint, buy.tokenProgram);
|
|
43
|
+
const wrap = await wrapIfShort(transport, signer, inputMint, sell.tokenProgram, escrowAmount(params));
|
|
44
|
+
const create = await buildCreateIntent({
|
|
45
|
+
owner: signer,
|
|
46
|
+
treasury: settings.feeRecipient,
|
|
47
|
+
maxCreateFee: settings.createFee,
|
|
48
|
+
maxBounty: settings.crankBounty,
|
|
49
|
+
nonce,
|
|
50
|
+
params,
|
|
51
|
+
expiresAt,
|
|
52
|
+
inputMint,
|
|
53
|
+
outputMint,
|
|
54
|
+
inputTokenProgram: sell.tokenProgram,
|
|
55
|
+
outputTokenProgram: buy.tokenProgram,
|
|
56
|
+
...(recipient === owner ? {} : { receiver: receiver.address, receiverAuthority: recipient }),
|
|
57
|
+
...(mintCap === undefined ? {} : { mintCap }),
|
|
58
|
+
});
|
|
59
|
+
const register = await initUserIfMissing(user, signer);
|
|
60
|
+
const signature = await send([...register, ...receiver.create, ...wrap.instructions, create, ...published], signer);
|
|
61
|
+
const [intent] = await findIntentPda({ owner, nonce });
|
|
62
|
+
return { signature, intent, nonce };
|
|
63
|
+
};
|
|
64
|
+
const cancel = async (signer, nonce) => {
|
|
65
|
+
const { intent } = await loadIntent(transport, signer.address, nonce);
|
|
66
|
+
const { tokenProgram } = await mint(intent.inputMint);
|
|
67
|
+
const refund = await tokenAccountIfMissing(transport, signer, signer.address, intent.inputMint, tokenProgram);
|
|
68
|
+
return send([...refund.create, await buildCancelIntent({ owner: signer, nonce, inputMint: intent.inputMint, tokenProgram })], signer);
|
|
69
|
+
};
|
|
70
|
+
const unwrap = async (signer) => {
|
|
71
|
+
const account = await findAssociatedTokenAddress({ owner: signer.address, mint: NATIVE_MINT, tokenProgram: TOKEN_PROGRAM_ADDRESS });
|
|
72
|
+
if ((await createdAccount(transport, account)) === null) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
return send([getCloseAccountInstruction({ account, destination: signer.address, owner: signer })], signer);
|
|
76
|
+
};
|
|
77
|
+
const fill = async (input) => {
|
|
78
|
+
const { solver, owner, nonce } = input;
|
|
79
|
+
const [{ address, intent: held }, settings] = await Promise.all([loadIntent(transport, owner, nonce), config()]);
|
|
80
|
+
if (held.status !== IntentStatus.Open) {
|
|
81
|
+
throw new NotFillable(address, "is not open");
|
|
82
|
+
}
|
|
83
|
+
const params = decodeParams(held.kind, Uint8Array.from(held.params));
|
|
84
|
+
if (params.kind === Kind.AttestedResult) {
|
|
85
|
+
throw new NotFillable(address, "is an AttestedResult intent, which only its judge settles");
|
|
86
|
+
}
|
|
87
|
+
const [sell, buy] = await Promise.all([mint(held.inputMint), mint(held.outputMint)]);
|
|
88
|
+
const amountIn = input.amountIn ?? remainingOf(held);
|
|
89
|
+
const amountOut = input.amountOut ?? requiredOut(params, amountIn, await chainTime(transport));
|
|
90
|
+
const kindBps = feeBpsFor(settings, held.kind);
|
|
91
|
+
const shares = splitFees(amountIn, kindBps, held.partnerBps, held.partnerCutBps);
|
|
92
|
+
const feeRecipient = shares.protocol > 0n ? settings.feeRecipient : undefined;
|
|
93
|
+
const partner = shares.partner > 0n ? held.partner : undefined;
|
|
94
|
+
const agent = held.agentFee > 0n ? held.rentPayer : undefined;
|
|
95
|
+
const paid = (wallet) => tokenAccountIfMissing(transport, solver, wallet, held.inputMint, sell.tokenProgram);
|
|
96
|
+
const [solverInput, solverOutput, ...payouts] = await Promise.all([
|
|
97
|
+
paid(solver.address),
|
|
98
|
+
tokenAccountIfMissing(transport, solver, solver.address, held.outputMint, buy.tokenProgram),
|
|
99
|
+
...[feeRecipient, partner, agent].filter((wallet) => wallet !== undefined).map(paid),
|
|
100
|
+
]);
|
|
101
|
+
const filled = await buildFillIntent({
|
|
102
|
+
solver,
|
|
103
|
+
owner,
|
|
104
|
+
nonce,
|
|
105
|
+
inputMint: held.inputMint,
|
|
106
|
+
outputMint: held.outputMint,
|
|
107
|
+
inputTokenProgram: sell.tokenProgram,
|
|
108
|
+
outputTokenProgram: buy.tokenProgram,
|
|
109
|
+
receiver: held.receiver,
|
|
110
|
+
solverInput: solverInput.address,
|
|
111
|
+
solverOutput: solverOutput.address,
|
|
112
|
+
...(feeRecipient === undefined ? {} : { feeRecipient }),
|
|
113
|
+
...(partner === undefined ? {} : { partner }),
|
|
114
|
+
...(agent === undefined ? {} : { agent }),
|
|
115
|
+
mandate: held.mandate,
|
|
116
|
+
amountIn,
|
|
117
|
+
amountOut,
|
|
118
|
+
maxFeeBps: kindBps + held.partnerBps,
|
|
119
|
+
});
|
|
120
|
+
const setup = [solverInput, solverOutput, ...payouts].flatMap(({ create }) => create);
|
|
121
|
+
const wrap = input.route === undefined ? (await wrapIfShort(transport, solver, held.outputMint, buy.tokenProgram, amountOut)).instructions : [];
|
|
122
|
+
return send([...setup, ...wrap, ...(input.route ?? []), filled], solver);
|
|
123
|
+
};
|
|
124
|
+
const settling = async (cranker, owner, nonce) => {
|
|
125
|
+
const { intent } = await loadIntent(transport, owner, nonce);
|
|
126
|
+
const { tokenProgram } = await mint(intent.inputMint);
|
|
127
|
+
return { ref: { cranker, owner, nonce, inputMint: intent.inputMint, tokenProgram }, rentPayer: intent.rentPayer };
|
|
128
|
+
};
|
|
129
|
+
const expire = async (cranker, owner, nonce) => {
|
|
130
|
+
const { ref } = await settling(cranker, owner, nonce);
|
|
131
|
+
const refund = await tokenAccountIfMissing(transport, cranker, owner, ref.inputMint, ref.tokenProgram);
|
|
132
|
+
return send([...refund.create, await buildExpireIntent(ref)], cranker);
|
|
133
|
+
};
|
|
134
|
+
const close = async (cranker, owner, nonce) => {
|
|
135
|
+
const { ref, rentPayer } = await settling(cranker, owner, nonce);
|
|
136
|
+
return send([await buildCloseIntent({ ...ref, rentPayer })], cranker);
|
|
137
|
+
};
|
|
138
|
+
return { createIntent, cancel, unwrap, fill, expire, close };
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=client-intents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-intents.js","sourceRoot":"","sources":["../../src/client-intents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
import { type Balances, type ClientContext, type Fill, type HistoryEvent } from "./client-types.js";
|
|
3
|
+
export declare function clientReads({ transport, mint }: ClientContext): {
|
|
4
|
+
history: (intent: Address, limit?: number) => Promise<HistoryEvent[]>;
|
|
5
|
+
fillOf: (intent: Address) => Promise<Fill | null>;
|
|
6
|
+
balances: (owner: Address, mints: readonly Address[]) => Promise<Balances>;
|
|
7
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { decodeEvent, findAssociatedTokenAddress, tokenName } from "@intent-engine/core";
|
|
2
|
+
import { createdAccount, tokenAmountOf } from "./accounts.js";
|
|
3
|
+
import { HISTORY_LIMIT } from "./client-types.js";
|
|
4
|
+
import { createdAtOf, recordedDelivery, scan } from "./jobs.js";
|
|
5
|
+
const FILL_EVENTS = new Set(["IntentFilled", "FillEnded"]);
|
|
6
|
+
function eventsIn(transactions, intent) {
|
|
7
|
+
return transactions
|
|
8
|
+
.filter(({ failed }) => !failed)
|
|
9
|
+
.flatMap(({ signature, slot, blockTime, emitted }) => emitted
|
|
10
|
+
.map((data) => decodeEvent(data))
|
|
11
|
+
.filter((event) => event !== null && "intent" in event.fields && event.fields.intent === intent)
|
|
12
|
+
.reverse()
|
|
13
|
+
.map((event) => ({ ...event, signature: signature, slot, blockTime })));
|
|
14
|
+
}
|
|
15
|
+
const fillIn = (intent) => (transaction) => eventsIn([transaction], intent).some(({ name }) => FILL_EVENTS.has(name));
|
|
16
|
+
export function clientReads({ transport, mint }) {
|
|
17
|
+
const history = async (intent, limit = HISTORY_LIMIT) => {
|
|
18
|
+
const transactions = await transport.engineTransactions(limit, intent);
|
|
19
|
+
return eventsIn(transactions, intent).map((event) => {
|
|
20
|
+
if (event.name !== "IntentAttested" && event.name !== "IntentSplit") {
|
|
21
|
+
return event;
|
|
22
|
+
}
|
|
23
|
+
const release = transactions.find(({ signature }) => signature === event.signature);
|
|
24
|
+
const recorded = release === undefined ? null : recordedDelivery(transactions, release, event.fields.attestor);
|
|
25
|
+
return recorded === null ? event : { ...event, deliveredSha256: recorded };
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
const fillOf = async (intent) => {
|
|
29
|
+
const floor = await createdAtOf(transport, intent);
|
|
30
|
+
const events = eventsIn((await scan(transport, intent, { floor, until: fillIn(intent) })).transactions, intent);
|
|
31
|
+
for (const event of events) {
|
|
32
|
+
const { signature, slot, blockTime } = event;
|
|
33
|
+
if (event.name === "IntentFilled") {
|
|
34
|
+
const { solver, delivered, required, fee, net } = event.fields;
|
|
35
|
+
return { steps: 1, solver, delivered, required, fee, net, signature, slot, blockTime };
|
|
36
|
+
}
|
|
37
|
+
if (event.name === "FillEnded") {
|
|
38
|
+
const begun = events.find((other) => other.name === "FillBegun" && other.signature === signature);
|
|
39
|
+
if (begun?.name === "FillBegun") {
|
|
40
|
+
const { solver, delivered, required } = event.fields;
|
|
41
|
+
return { steps: 2, solver, delivered, required, fee: begun.fields.fee, net: begun.fields.net, signature, slot, blockTime };
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return null;
|
|
46
|
+
};
|
|
47
|
+
const balances = async (owner, mints) => {
|
|
48
|
+
const [wallet, tokens] = await Promise.all([
|
|
49
|
+
transport.getAccount(owner),
|
|
50
|
+
Promise.all(mints.map(async (address) => {
|
|
51
|
+
const { decimals, tokenProgram } = await mint(address);
|
|
52
|
+
const account = await findAssociatedTokenAddress({ owner, mint: address, tokenProgram });
|
|
53
|
+
const amount = tokenAmountOf((await createdAccount(transport, account))?.data ?? null) ?? 0n;
|
|
54
|
+
return { mint: address, name: tokenName(address), account, amount, decimals };
|
|
55
|
+
})),
|
|
56
|
+
]);
|
|
57
|
+
return { sol: wallet?.lamports ?? 0n, tokens };
|
|
58
|
+
};
|
|
59
|
+
return { history, fillOf, balances };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=client-reads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-reads.js","sourceRoot":"","sources":["../../src/client-reads.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BallotInput, ClientContext, CommitteeBallot, CommitteeRelease, SettleCommitteeInput, SettleProofInput } from "./client-types.js";
|
|
2
|
+
export declare function proofSettlement(context: ClientContext): (input: SettleProofInput) => Promise<import("@solana/kit").Signature>;
|
|
3
|
+
export declare function committeeSettlement(context: ClientContext): {
|
|
4
|
+
committeeBallot: (input: BallotInput) => Promise<CommitteeBallot>;
|
|
5
|
+
prepareCommitteeRelease: (input: SettleCommitteeInput) => Promise<CommitteeRelease>;
|
|
6
|
+
settleCommittee: (input: SettleCommitteeInput) => Promise<import("@solana/kit").Signature>;
|
|
7
|
+
};
|