@intent-engine/client 0.1.42 → 0.1.43
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 +13 -2
- package/dist/src/accounts.js +25 -8
- package/dist/src/accounts.js.map +1 -1
- package/dist/src/client-claims.js +3 -3
- package/dist/src/client-claims.js.map +1 -1
- package/dist/src/client-committee.d.ts +4 -0
- package/dist/src/client-committee.js +14 -2
- package/dist/src/client-committee.js.map +1 -1
- package/dist/src/client-errors.d.ts +6 -0
- package/dist/src/client-errors.js +13 -0
- package/dist/src/client-errors.js.map +1 -1
- package/dist/src/client-intents.js +8 -4
- package/dist/src/client-intents.js.map +1 -1
- package/dist/src/client-reads.js +3 -3
- package/dist/src/client-reads.js.map +1 -1
- package/dist/src/client-settle.d.ts +5 -1
- package/dist/src/client-settle.js +41 -10
- package/dist/src/client-settle.js.map +1 -1
- package/dist/src/client-types.d.ts +18 -4
- package/dist/src/client-types.js.map +1 -1
- package/dist/src/client.d.ts +4 -3
- package/dist/src/client.js +8 -4
- package/dist/src/client.js.map +1 -1
- package/dist/src/confirm-release.d.ts +6 -2
- package/dist/src/confirm-release.js +19 -4
- package/dist/src/confirm-release.js.map +1 -1
- package/dist/src/delivery-openings.d.ts +84 -0
- package/dist/src/delivery-openings.js +162 -0
- package/dist/src/delivery-openings.js.map +1 -0
- package/dist/src/funding.js +16 -12
- package/dist/src/funding.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/job-deliveries.d.ts +49 -5
- package/dist/src/job-deliveries.js +128 -21
- package/dist/src/job-deliveries.js.map +1 -1
- package/dist/src/job-memos.d.ts +5 -2
- package/dist/src/job-memos.js +16 -12
- package/dist/src/job-memos.js.map +1 -1
- package/dist/src/job-origins.d.ts +2 -2
- package/dist/src/job-origins.js +2 -2
- package/dist/src/job-origins.js.map +1 -1
- package/dist/src/job-pay.js +2 -2
- package/dist/src/job-pay.js.map +1 -1
- package/dist/src/job-proofs.js +2 -2
- package/dist/src/job-proofs.js.map +1 -1
- package/dist/src/job-scan.d.ts +6 -1
- package/dist/src/job-scan.js +13 -0
- package/dist/src/job-scan.js.map +1 -1
- package/dist/src/job-specs.d.ts +1 -0
- package/dist/src/job-specs.js +1 -0
- package/dist/src/job-specs.js.map +1 -1
- package/dist/src/jobs.d.ts +3 -2
- package/dist/src/jobs.js +3 -2
- package/dist/src/jobs.js.map +1 -1
- package/dist/src/ledger.d.ts +11 -4
- package/dist/src/ledger.js +46 -2
- package/dist/src/ledger.js.map +1 -1
- package/dist/src/release-reads.d.ts +8 -1
- package/dist/src/release-reads.js +34 -1
- package/dist/src/release-reads.js.map +1 -1
- package/dist/src/reputation.d.ts +16 -0
- package/dist/src/reputation.js +110 -36
- package/dist/src/reputation.js.map +1 -1
- package/dist/src/rpc-shapes.d.ts +7 -0
- package/dist/src/rpc-transport.js +14 -3
- package/dist/src/rpc-transport.js.map +1 -1
- package/dist/src/simple-work.d.ts +1 -1
- package/dist/src/simple-work.js +3 -3
- package/dist/src/simple-work.js.map +1 -1
- package/dist/src/svm.js +3 -1
- package/dist/src/svm.js.map +1 -1
- package/dist/src/transaction-keys.d.ts +5 -1
- package/dist/src/transaction-keys.js +67 -13
- package/dist/src/transaction-keys.js.map +1 -1
- package/dist/src/trust.d.ts +1 -0
- package/dist/src/trust.js +43 -28
- package/dist/src/trust.js.map +1 -1
- package/dist/src/unopened.d.ts +53 -0
- package/dist/src/unopened.js +169 -0
- package/dist/src/unopened.js.map +1 -0
- package/package.json +3 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SYSTEM_PROGRAM_ADDRESS } from "./accounts.js";
|
|
1
|
+
import { SYSTEM_PROGRAM_ADDRESS, TOKEN_PROGRAMS } from "./accounts.js";
|
|
2
2
|
export function keysAt(keys, indices) {
|
|
3
3
|
const found = Array.from(indices, (index) => keys[index]);
|
|
4
4
|
return found.every((key) => key !== undefined) ? found : [];
|
|
@@ -17,20 +17,74 @@ export const MEMO_PROGRAM_ADDRESS = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr
|
|
|
17
17
|
export function signersAmong(keys, indices, signing) {
|
|
18
18
|
return [...new Set(indices.filter((index) => index < signing).flatMap((index) => keys[index] ?? []))];
|
|
19
19
|
}
|
|
20
|
+
const SYSTEM_CREATE_ACCOUNT = 0;
|
|
20
21
|
const SYSTEM_TRANSFER = 2;
|
|
22
|
+
const SYSTEM_CREATE_ACCOUNT_WITH_SEED = 3;
|
|
23
|
+
const SYSTEM_WITHDRAW_NONCE = 5;
|
|
21
24
|
const SYSTEM_TRANSFER_WITH_SEED = 11;
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
const TOKEN_CLOSE_ACCOUNT = 9;
|
|
26
|
+
const TOKEN_WITHDRAW_EXCESS_LAMPORTS = 38;
|
|
27
|
+
const LAMPORTS_AT = 4;
|
|
28
|
+
const SEED_LENGTH_AT = 36;
|
|
29
|
+
const SEED_AT = 44;
|
|
30
|
+
const lamportsAt = (view, at) => (view.byteLength >= at + 8 ? view.getBigUint64(at, true) : null);
|
|
31
|
+
function systemMove(accounts, view) {
|
|
32
|
+
if (view.byteLength < 4) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const at = (i) => accounts[i] ?? -1;
|
|
36
|
+
switch (view.getUint32(0, true)) {
|
|
37
|
+
case SYSTEM_CREATE_ACCOUNT:
|
|
38
|
+
case SYSTEM_TRANSFER:
|
|
39
|
+
return { from: at(0), to: at(1), lamports: lamportsAt(view, LAMPORTS_AT) };
|
|
40
|
+
case SYSTEM_CREATE_ACCOUNT_WITH_SEED: {
|
|
41
|
+
const seed = lamportsAt(view, SEED_LENGTH_AT);
|
|
42
|
+
return seed === null || seed > BigInt(view.byteLength) ? null : { from: at(0), to: at(1), lamports: lamportsAt(view, SEED_AT + Number(seed)) };
|
|
43
|
+
}
|
|
44
|
+
case SYSTEM_WITHDRAW_NONCE:
|
|
45
|
+
return { from: at(4), to: at(1), lamports: lamportsAt(view, LAMPORTS_AT) };
|
|
46
|
+
case SYSTEM_TRANSFER_WITH_SEED:
|
|
47
|
+
return { from: at(1), to: at(2), lamports: lamportsAt(view, LAMPORTS_AT) };
|
|
48
|
+
default:
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function tokenMove(accounts, data, balances) {
|
|
53
|
+
const kind = data[0];
|
|
54
|
+
if (kind !== TOKEN_CLOSE_ACCOUNT && kind !== TOKEN_WITHDRAW_EXCESS_LAMPORTS) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const [source = -1, to = -1, from = -1] = accounts;
|
|
58
|
+
const before = balances?.before[source];
|
|
59
|
+
const after = balances?.after[source];
|
|
60
|
+
return { from, to, lamports: before === undefined || after === undefined ? null : before - after };
|
|
61
|
+
}
|
|
62
|
+
function moveOf({ program, accounts, data }, balances) {
|
|
63
|
+
if (program === SYSTEM_PROGRAM_ADDRESS) {
|
|
64
|
+
return systemMove(accounts, new DataView(data.buffer, data.byteOffset, data.byteLength));
|
|
65
|
+
}
|
|
66
|
+
return program !== undefined && TOKEN_PROGRAMS.includes(program) ? tokenMove(accounts, data, balances) : null;
|
|
67
|
+
}
|
|
68
|
+
export function solTransfersOf(keys, instructions, balances) {
|
|
69
|
+
const found = [];
|
|
70
|
+
for (const instruction of instructions) {
|
|
71
|
+
const moved = moveOf(instruction, balances);
|
|
72
|
+
const from = keys[moved?.from ?? -1];
|
|
73
|
+
const to = keys[moved?.to ?? -1];
|
|
74
|
+
if (moved !== null && moved.lamports !== null && from !== undefined && to !== undefined) {
|
|
75
|
+
found.push({ from, to, lamports: moved.lamports });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const payer = keys[0];
|
|
79
|
+
if (balances === undefined || payer === undefined) {
|
|
80
|
+
return found;
|
|
81
|
+
}
|
|
82
|
+
for (const [index, into] of keys.entries()) {
|
|
83
|
+
const rise = (balances.after[index] ?? 0n) - (balances.before[index] ?? 0n);
|
|
84
|
+
if (into !== undefined && into !== payer && rise > 0n && !found.some(({ to, lamports }) => to === into && lamports > 0n)) {
|
|
85
|
+
found.push({ from: payer, to: into, lamports: rise });
|
|
27
86
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
const to = kind === SYSTEM_TRANSFER ? 1 : kind === SYSTEM_TRANSFER_WITH_SEED ? 2 : -1;
|
|
31
|
-
const from = keys[accounts[0] ?? -1];
|
|
32
|
-
const into = keys[accounts[to] ?? -1];
|
|
33
|
-
return from === undefined || into === undefined ? [] : [{ from, to: into, lamports: view.getBigUint64(4, true) }];
|
|
34
|
-
});
|
|
87
|
+
}
|
|
88
|
+
return found;
|
|
35
89
|
}
|
|
36
90
|
//# sourceMappingURL=transaction-keys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-keys.js","sourceRoot":"","sources":["../../src/transaction-keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"transaction-keys.js","sourceRoot":"","sources":["../../src/transaction-keys.ts"],"names":[],"mappings":"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"}
|
package/dist/src/trust.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export declare const RESTART = 0.15;
|
|
|
4
4
|
export declare const TRUST_HOPS = 2;
|
|
5
5
|
export declare const TRUST_WALLETS = 32;
|
|
6
6
|
export declare const TRUST_PATHS = 3;
|
|
7
|
+
export declare const TRUST_PAYER_READS = 8;
|
|
7
8
|
export type TrustPath = {
|
|
8
9
|
wallets: Address[];
|
|
9
10
|
trust: number;
|
package/dist/src/trust.js
CHANGED
|
@@ -1,38 +1,41 @@
|
|
|
1
|
-
import { NATIVE_MINT } from "@intent-engine/core";
|
|
1
|
+
import { NATIVE_MINT, splitN } from "@intent-engine/core";
|
|
2
2
|
import { HISTORY_LIMIT } from "./client-types.js";
|
|
3
3
|
import { DELIVERY_PAGES, scan } from "./job-scan.js";
|
|
4
|
-
import { eventsOf, releaseOf, splitClaim } from "./release-reads.js";
|
|
5
|
-
import { counted, reputationOf } from "./reputation.js";
|
|
4
|
+
import { eventsOf, intentHistory, releaseOf, splitClaim } from "./release-reads.js";
|
|
5
|
+
import { counted, reputationOf, solBacked } from "./reputation.js";
|
|
6
6
|
export const RESTART = 0.15;
|
|
7
7
|
export const TRUST_HOPS = 2;
|
|
8
8
|
export const TRUST_WALLETS = 32;
|
|
9
9
|
export const TRUST_PATHS = 3;
|
|
10
|
+
export const TRUST_PAYER_READS = 8;
|
|
10
11
|
const RESIDUAL = 1e-12;
|
|
11
12
|
const PATH_STEPS = 10_000;
|
|
12
13
|
function paidWallets({ event, transaction }, intent) {
|
|
13
14
|
if (event.name === "IntentAttested") {
|
|
14
15
|
const payee = event.fields.payee;
|
|
15
16
|
const owner = transaction.tokens?.find(({ account }) => account === payee)?.owner;
|
|
16
|
-
return owner === undefined ? null : [owner];
|
|
17
|
+
return owner === undefined ? null : { wallets: [owner], weights: null };
|
|
17
18
|
}
|
|
18
19
|
const claim = splitClaim(transaction, intent);
|
|
19
|
-
return claim === null ? null :
|
|
20
|
+
return claim === null ? null : { wallets: claim.recipients, weights: claim.weights };
|
|
20
21
|
}
|
|
22
|
+
const shareOf = (amount, weights, at) => (weights === null ? amount : (splitN(amount, weights)[at] ?? 0n));
|
|
21
23
|
async function paidBy(transport, payer, pages, history, covered) {
|
|
22
24
|
const scanned = await scan(transport, payer, { pages, covered });
|
|
23
|
-
const intents = new
|
|
25
|
+
const intents = new Map();
|
|
24
26
|
for (const { event } of eventsOf(scanned.transactions)) {
|
|
25
27
|
if (event.name === "IntentCreated" && event.fields.owner === payer) {
|
|
26
|
-
intents.
|
|
28
|
+
intents.set(event.fields.intent, { mint: event.fields.inputMint, createFee: BigInt(event.fields.createFee) });
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
let complete = scanned.complete;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
let cost = 0n;
|
|
33
|
+
const workers = new Map();
|
|
34
|
+
for (const [intent, { mint, createFee }] of intents) {
|
|
35
|
+
const read = await intentHistory(transport, intent, history);
|
|
36
|
+
const release = releaseOf(read.transactions, intent);
|
|
37
|
+
if (release === undefined || (release.event.name !== "IntentAttested" && release.event.name !== "IntentSplit")) {
|
|
38
|
+
complete &&= read.complete;
|
|
36
39
|
continue;
|
|
37
40
|
}
|
|
38
41
|
const paid = paidWallets(release, intent);
|
|
@@ -40,18 +43,19 @@ async function paidBy(transport, payer, pages, history, covered) {
|
|
|
40
43
|
complete = false;
|
|
41
44
|
continue;
|
|
42
45
|
}
|
|
43
|
-
|
|
46
|
+
const fee = mint === NATIVE_MINT ? release.event.fields.fee : 0n;
|
|
47
|
+
for (const [at, wallet] of paid.wallets.entries()) {
|
|
44
48
|
if (wallet !== payer) {
|
|
45
|
-
|
|
49
|
+
const share = shareOf(fee, paid.weights, at) + shareOf(createFee, paid.weights, at);
|
|
50
|
+
workers.set(wallet, (workers.get(wallet) ?? 0n) + share);
|
|
51
|
+
cost += share;
|
|
46
52
|
}
|
|
47
53
|
}
|
|
48
54
|
}
|
|
49
|
-
return { workers
|
|
55
|
+
return { workers, cost, complete };
|
|
50
56
|
}
|
|
51
57
|
function backedBy(rep, payer) {
|
|
52
|
-
return rep.records
|
|
53
|
-
.filter((record) => counted(record) && record.owner === payer)
|
|
54
|
-
.reduce((sum, record) => sum + (record.mint === NATIVE_MINT ? (record.backed ?? 0n) : 0n) + (record.createBacked ?? 0n), 0n);
|
|
58
|
+
return rep.records.filter((record) => counted(record) && record.owner === payer).reduce((sum, record) => sum + solBacked(record), 0n);
|
|
55
59
|
}
|
|
56
60
|
function pushed(seeds, edges) {
|
|
57
61
|
const score = new Map();
|
|
@@ -109,15 +113,16 @@ function reasonFor(reader, seeds, worker, hops, edges) {
|
|
|
109
113
|
: `no counted release path from a seed reaches ${worker} within ${TRUST_HOPS} hops`;
|
|
110
114
|
}
|
|
111
115
|
export async function trustOf(transport, reader, worker, options = {}) {
|
|
112
|
-
const
|
|
116
|
+
const named = [...new Set([reader, ...(options.seeds ?? [])])];
|
|
113
117
|
const pages = options.pages ?? DELIVERY_PAGES;
|
|
114
118
|
const history = options.history ?? HISTORY_LIMIT;
|
|
115
|
-
const maxWallets = options.maxWallets ?? TRUST_WALLETS;
|
|
119
|
+
const maxWallets = Math.max(1, options.maxWallets ?? TRUST_WALLETS);
|
|
120
|
+
const seeds = named.slice(0, maxWallets);
|
|
116
121
|
const { firstAvailableSlot } = transport;
|
|
117
122
|
const covered = async () => firstAvailableSlot !== undefined && (await firstAvailableSlot.call(transport)) === 0n;
|
|
118
123
|
const read = new Set(seeds);
|
|
119
124
|
const reputations = new Map();
|
|
120
|
-
let complete =
|
|
125
|
+
let complete = named.length <= maxWallets;
|
|
121
126
|
const reputation = (wallet) => {
|
|
122
127
|
const held = reputations.get(wallet) ?? reputationOf(transport, wallet, { pages, history });
|
|
123
128
|
reputations.set(wallet, held);
|
|
@@ -130,27 +135,37 @@ export async function trustOf(transport, reader, worker, options = {}) {
|
|
|
130
135
|
const payer = queue[at];
|
|
131
136
|
const hop = hops.get(payer) ?? 0;
|
|
132
137
|
const weights = [];
|
|
138
|
+
let known = 0n;
|
|
139
|
+
let cost = 0n;
|
|
133
140
|
try {
|
|
134
141
|
const paid = await paidBy(transport, payer, pages, history, covered);
|
|
135
142
|
complete &&= paid.complete;
|
|
136
|
-
|
|
137
|
-
|
|
143
|
+
cost = paid.cost;
|
|
144
|
+
let reads = 0;
|
|
145
|
+
for (const [to, paidCost] of paid.workers) {
|
|
146
|
+
if (paidCost === 0n) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
if ((!read.has(to) && read.size >= maxWallets) || (!reputations.has(to) && reads >= TRUST_PAYER_READS)) {
|
|
138
150
|
complete = false;
|
|
139
151
|
continue;
|
|
140
152
|
}
|
|
141
|
-
|
|
153
|
+
reads += reputations.has(to) ? 0 : 1;
|
|
142
154
|
const rep = await reputation(to);
|
|
143
155
|
complete &&= rep.complete;
|
|
144
156
|
const weight = backedBy(rep, payer);
|
|
145
|
-
|
|
146
|
-
|
|
157
|
+
known += weight;
|
|
158
|
+
if (weight === 0n) {
|
|
159
|
+
continue;
|
|
147
160
|
}
|
|
161
|
+
read.add(to);
|
|
162
|
+
weights.push({ to, weight });
|
|
148
163
|
}
|
|
149
164
|
}
|
|
150
165
|
catch {
|
|
151
166
|
complete = false;
|
|
152
167
|
}
|
|
153
|
-
const total =
|
|
168
|
+
const total = known > cost ? known : cost;
|
|
154
169
|
const kept = [];
|
|
155
170
|
for (const { to, weight } of weights) {
|
|
156
171
|
if (!hops.has(to)) {
|
package/dist/src/trust.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../../src/trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Address } from "@solana/kit";
|
|
2
|
+
import { type Delivery, type DeliveryOpeners } from "./job-deliveries.js";
|
|
3
|
+
import type { Transport } from "./transport.js";
|
|
4
|
+
export type KeyKind = "wallet" | "profile";
|
|
5
|
+
export type ResponsibleKey = {
|
|
6
|
+
key: string;
|
|
7
|
+
fingerprint: string;
|
|
8
|
+
kind: KeyKind;
|
|
9
|
+
held: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type MissingKey = {
|
|
12
|
+
delivery: Delivery;
|
|
13
|
+
key: ResponsibleKey;
|
|
14
|
+
};
|
|
15
|
+
export type Skipped = {
|
|
16
|
+
delivery: Delivery;
|
|
17
|
+
reason: string;
|
|
18
|
+
};
|
|
19
|
+
export type Unopened = {
|
|
20
|
+
missing: MissingKey | null;
|
|
21
|
+
skipped: Skipped[];
|
|
22
|
+
};
|
|
23
|
+
export type UnopenedInput = {
|
|
24
|
+
judge: Address;
|
|
25
|
+
recipients: readonly Address[];
|
|
26
|
+
deliveries: readonly Delivery[];
|
|
27
|
+
first: Delivery | null;
|
|
28
|
+
openers: DeliveryOpeners | undefined;
|
|
29
|
+
confirm?: Transport | undefined;
|
|
30
|
+
};
|
|
31
|
+
export declare class ProfileHistoryIncomplete extends Error {
|
|
32
|
+
readonly judge: Address;
|
|
33
|
+
constructor(judge: Address);
|
|
34
|
+
}
|
|
35
|
+
export declare const NOT_VERSION_3 = "its sealed url is not a version-3 sealed delivery";
|
|
36
|
+
export declare const OTHER_RECIPIENTS = "it is not sealed to this escrow's recipients";
|
|
37
|
+
export declare const NOT_PUBLISHED_KEY = "its key for this judge is not the key the judge's profile named when it landed";
|
|
38
|
+
export declare const DOES_NOT_OPEN = "it is sealed to this judge's key but does not open with it";
|
|
39
|
+
export declare const unopenedBefore: (deliveries: readonly Delivery[], first: Delivery | null) => Delivery[];
|
|
40
|
+
export declare const GIVE_KEY_FILE = "give the encryption key file of that key";
|
|
41
|
+
export declare const missingKey: ({ delivery, key }: MissingKey, give?: string) => string;
|
|
42
|
+
export declare const WARN_NO_JUDGE_KEY = "this judge cannot use a Ledger for announced work";
|
|
43
|
+
export declare const noKeyAtCreation: (judge: Address, intent: Address) => string;
|
|
44
|
+
export declare class NoKeyAtCreation extends Error {
|
|
45
|
+
readonly intent: Address;
|
|
46
|
+
constructor(judge: Address, intent: Address);
|
|
47
|
+
}
|
|
48
|
+
export declare const keepsKey: (wallet: Address, escrows: readonly Address[]) => string;
|
|
49
|
+
export declare const skippedNote: ({ delivery, reason }: Skipped) => string;
|
|
50
|
+
export declare function unopenedOf(transport: Transport, input: UnopenedInput): Promise<Unopened>;
|
|
51
|
+
export declare function deviceJudgeReady(transport: Transport, judge: Address, intent: Address): Promise<void>;
|
|
52
|
+
export declare function escrowsJudgedBy(transport: Transport, wallet: Address): Promise<Address[]>;
|
|
53
|
+
export declare function keylessJudges(transport: Transport, attestor: Address): Promise<Address[]>;
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { AccountVersionError, decodeEvent, deliveryKeyOf, encryptionKeyText, keyFingerprint, parseEncryptionKey, profileAddress, sealedFingerprints, x25519PublicOf, } from "@intent-engine/core";
|
|
2
|
+
import { loadProfile } from "./client-claims.js";
|
|
3
|
+
import { loadCommittee } from "./client-committee.js";
|
|
4
|
+
import { creationSlotOf, openProofEscrows } from "./job-proofs.js";
|
|
5
|
+
import { ConfirmMismatch } from "./confirm-release.js";
|
|
6
|
+
import { earlier, openersOf } from "./job-deliveries.js";
|
|
7
|
+
import { scan } from "./job-scan.js";
|
|
8
|
+
export class ProfileHistoryIncomplete extends Error {
|
|
9
|
+
judge;
|
|
10
|
+
constructor(judge) {
|
|
11
|
+
super(`the history of ${judge}'s profile could not be read back far enough to know which encryption key it named when the escrow was made or the work was announced, so which key an honest worker sealed to is unknown; nothing was paid. Use an RPC node that keeps the full ledger`);
|
|
12
|
+
this.name = "ProfileHistoryIncomplete";
|
|
13
|
+
this.judge = judge;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export const NOT_VERSION_3 = "its sealed url is not a version-3 sealed delivery";
|
|
17
|
+
export const OTHER_RECIPIENTS = "it is not sealed to this escrow's recipients";
|
|
18
|
+
export const NOT_PUBLISHED_KEY = "its key for this judge is not the key the judge's profile named when it landed";
|
|
19
|
+
export const DOES_NOT_OPEN = "it is sealed to this judge's key but does not open with it";
|
|
20
|
+
const ordered = (a, b) => (earlier(a, b) ? -1 : earlier(b, a) ? 1 : 0);
|
|
21
|
+
const hex = (bytes) => Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
22
|
+
export const unopenedBefore = (deliveries, first) => deliveries.filter((delivery) => delivery.url === "" && (first === null || (delivery.intent === first.intent && earlier(delivery, first)))).sort(ordered);
|
|
23
|
+
export const GIVE_KEY_FILE = "give the encryption key file of that key";
|
|
24
|
+
export const missingKey = ({ delivery, key }, give = GIVE_KEY_FILE) => `the announcement ${delivery.signature} by ${delivery.worker} for intent ${delivery.intent} came before the work being paid and is sealed to ${key.kind === "wallet" ? `the key derived from the judge's wallet, ${key.key}` : `the encryption key ${key.key} the judge's profile named when it landed`}, which none of the keys given opens; ${key.kind === "wallet" ? "give the wallet's key file" : give}; nothing was paid`;
|
|
25
|
+
export const WARN_NO_JUDGE_KEY = "this judge cannot use a Ledger for announced work";
|
|
26
|
+
export const noKeyAtCreation = (judge, intent) => `${judge} signs on a Ledger, which cannot open work sealed to the key derived from its wallet, and its profile named no encryption key when escrow ${intent} was made, so work sealed to that key could stall it; the escrow is refused. A hirer should name a judge whose profile publishes an encryption key before the escrow is made; nothing was run or paid`;
|
|
27
|
+
export class NoKeyAtCreation extends Error {
|
|
28
|
+
intent;
|
|
29
|
+
constructor(judge, intent) {
|
|
30
|
+
super(noKeyAtCreation(judge, intent));
|
|
31
|
+
this.name = "NoKeyAtCreation";
|
|
32
|
+
this.intent = intent;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export const keepsKey = (wallet, escrows) => `${wallet} signs on a Ledger and judges the open escrows ${escrows.join(", ")}; without an encryption key it could not open their announcements, so it keeps one: rotate with a new --encryption-key instead, or wait until they close; nothing was sent`;
|
|
36
|
+
export const skippedNote = ({ delivery, reason }) => `skipped the announcement ${delivery.signature} by ${delivery.worker}: ${reason}`;
|
|
37
|
+
function keyEvents(transaction, wallet) {
|
|
38
|
+
if (transaction.failed) {
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
return transaction.emitted.flatMap((data) => {
|
|
42
|
+
const event = decodeEvent(data);
|
|
43
|
+
const fields = event?.fields;
|
|
44
|
+
if (fields?.wallet !== wallet) {
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
if (event?.name === "ProfileClosed") {
|
|
48
|
+
return [{ slot: transaction.slot, key: null }];
|
|
49
|
+
}
|
|
50
|
+
const key = event?.name === "ProfileSet" && fields.encryptionKey !== undefined ? Uint8Array.from(fields.encryptionKey) : null;
|
|
51
|
+
return event?.name === "ProfileSet" ? [{ slot: transaction.slot, key: key?.some((b) => b !== 0) === true ? key : null }] : [];
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function historyOf(transport, wallet, bound) {
|
|
55
|
+
let seen = false;
|
|
56
|
+
const read = await scan(transport, await profileAddress(wallet), {
|
|
57
|
+
until: (transaction) => {
|
|
58
|
+
const events = keyEvents(transaction, wallet);
|
|
59
|
+
seen ||= events.length > 0;
|
|
60
|
+
return events.some(({ slot }) => slot <= bound);
|
|
61
|
+
},
|
|
62
|
+
covered: async () => {
|
|
63
|
+
const first = await transport.firstAvailableSlot?.call(transport);
|
|
64
|
+
return first !== undefined && (seen ? first === 0n : first <= bound);
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (!read.complete) {
|
|
68
|
+
throw new ProfileHistoryIncomplete(wallet);
|
|
69
|
+
}
|
|
70
|
+
const events = read.transactions.flatMap((transaction) => keyEvents(transaction, wallet)).sort((a, b) => (a.slot < b.slot ? -1 : a.slot > b.slot ? 1 : 0));
|
|
71
|
+
if (events.length > 0) {
|
|
72
|
+
return { events, before: null };
|
|
73
|
+
}
|
|
74
|
+
return { events, before: await currentKey(transport, wallet) };
|
|
75
|
+
}
|
|
76
|
+
async function currentKey(transport, wallet) {
|
|
77
|
+
const profile = await loadProfile(transport, wallet).catch((error) => {
|
|
78
|
+
if (error instanceof AccountVersionError) {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
throw error;
|
|
82
|
+
});
|
|
83
|
+
const key = profile?.encryptionKey ?? null;
|
|
84
|
+
return key === null ? null : parseEncryptionKey(key);
|
|
85
|
+
}
|
|
86
|
+
const keyAt = (history, slot) => {
|
|
87
|
+
const latest = history.events.filter((event) => event.slot <= slot).at(-1);
|
|
88
|
+
return latest === undefined ? history.before : latest.key;
|
|
89
|
+
};
|
|
90
|
+
const historyText = (history) => [...history.events.map(({ slot, key }) => `${slot}:${key === null ? "none" : hex(key)}`), `before:${history.before === null ? "none" : hex(history.before)}`].join(",");
|
|
91
|
+
async function responsible(key, kind, held) {
|
|
92
|
+
const fingerprint = await keyFingerprint(key);
|
|
93
|
+
return { key: encryptionKeyText(key), fingerprint, kind, held: held.includes(fingerprint) };
|
|
94
|
+
}
|
|
95
|
+
export async function unopenedOf(transport, input) {
|
|
96
|
+
const hidden = unopenedBefore(input.deliveries, input.first);
|
|
97
|
+
const [earliest] = hidden;
|
|
98
|
+
if (earliest === undefined) {
|
|
99
|
+
return { missing: null, skipped: [] };
|
|
100
|
+
}
|
|
101
|
+
const history = await historyOf(transport, input.judge, earliest.slot);
|
|
102
|
+
if (input.confirm !== undefined) {
|
|
103
|
+
const second = await historyOf(input.confirm, input.judge, earliest.slot);
|
|
104
|
+
if (historyText(second) !== historyText(history)) {
|
|
105
|
+
throw new ConfirmMismatch("profile history", historyText(history), historyText(second));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const held = await Promise.all(openersOf(input.openers).map(async (opener) => keyFingerprint((await deliveryKeyOf(opener)).publicKey)));
|
|
109
|
+
const slot = input.recipients.indexOf(input.judge);
|
|
110
|
+
const skipped = [];
|
|
111
|
+
for (const delivery of hidden) {
|
|
112
|
+
const sealedTo = sealedFingerprints(delivery.sealed);
|
|
113
|
+
if (sealedTo === null) {
|
|
114
|
+
skipped.push({ delivery, reason: NOT_VERSION_3 });
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
if (slot < 0 || sealedTo.length !== input.recipients.length) {
|
|
118
|
+
skipped.push({ delivery, reason: OTHER_RECIPIENTS });
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const published = keyAt(history, delivery.slot);
|
|
122
|
+
const key = await responsible(published ?? x25519PublicOf(input.judge), published === null ? "wallet" : "profile", held);
|
|
123
|
+
if (sealedTo[slot] !== key.fingerprint) {
|
|
124
|
+
skipped.push({ delivery, reason: NOT_PUBLISHED_KEY });
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (key.held) {
|
|
128
|
+
skipped.push({ delivery, reason: DOES_NOT_OPEN });
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
return { missing: { delivery, key }, skipped: [] };
|
|
132
|
+
}
|
|
133
|
+
return { missing: null, skipped };
|
|
134
|
+
}
|
|
135
|
+
export async function deviceJudgeReady(transport, judge, intent) {
|
|
136
|
+
const slot = await creationSlotOf(transport, intent);
|
|
137
|
+
if (slot === null) {
|
|
138
|
+
throw new ProfileHistoryIncomplete(judge);
|
|
139
|
+
}
|
|
140
|
+
if (keyAt(await historyOf(transport, judge, slot), slot) === null) {
|
|
141
|
+
throw new NoKeyAtCreation(judge, intent);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
export async function escrowsJudgedBy(transport, wallet) {
|
|
145
|
+
const open = await openProofEscrows(transport, undefined, Number.POSITIVE_INFINITY);
|
|
146
|
+
const committees = new Map();
|
|
147
|
+
const judged = [];
|
|
148
|
+
for (const { address, params } of open) {
|
|
149
|
+
if (params.attestor === wallet) {
|
|
150
|
+
judged.push(address);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
let members = committees.get(params.attestor);
|
|
154
|
+
if (members === undefined) {
|
|
155
|
+
members = (await loadCommittee(transport, params.attestor))?.members ?? [];
|
|
156
|
+
committees.set(params.attestor, members);
|
|
157
|
+
}
|
|
158
|
+
if (members.includes(wallet)) {
|
|
159
|
+
judged.push(address);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return judged;
|
|
163
|
+
}
|
|
164
|
+
export async function keylessJudges(transport, attestor) {
|
|
165
|
+
const members = (await loadCommittee(transport, attestor))?.members ?? [attestor];
|
|
166
|
+
const keys = await Promise.all(members.map(async (member) => (await currentKey(transport, member).catch(() => null)) !== null));
|
|
167
|
+
return members.filter((_, at) => keys[at] !== true);
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=unopened.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unopened.js","sourceRoot":"","sources":["../../src/unopened.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intent-engine/client",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.43",
|
|
4
4
|
"description": "Runtime client for the intent engine on Solana: transport, confirmation, account readers and intent notifications",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"@solana-program/system": "0.14.1",
|
|
39
39
|
"@solana-program/token": "0.16.1",
|
|
40
40
|
"@solana/kit": "8.4.0",
|
|
41
|
-
"@intent-engine/core": "0.1.
|
|
41
|
+
"@intent-engine/core": "0.1.43"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@ledgerhq/hw-app-solana": "7.12.0",
|
|
@@ -62,6 +62,7 @@
|
|
|
62
62
|
"@types/node": "26.6.4",
|
|
63
63
|
"litesvm": "1.5.0",
|
|
64
64
|
"typescript": "7.0.2",
|
|
65
|
+
"vite": "8.3.3",
|
|
65
66
|
"vitest": "5.0.3"
|
|
66
67
|
},
|
|
67
68
|
"scripts": {
|