@intent-engine/client 0.1.41 → 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.d.ts +21 -1
- package/dist/src/client-claims.js +32 -4
- 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 +5 -4
- package/dist/src/client.js +9 -5
- 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 +3 -3
- 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
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { getAddressDecoder } from "@solana/kit";
|
|
2
|
+
import { getTransferSolInstruction } from "@solana-program/system";
|
|
3
|
+
import { MAX_OPENED_SALTS, openingMemo } from "@intent-engine/core";
|
|
4
|
+
import { deliveriesIn, deliverySalt, earlier, opensWith, openingsIn, saltCheckOf } from "./job-deliveries.js";
|
|
5
|
+
import { HISTORY_LIMIT } from "./client-types.js";
|
|
6
|
+
import { memoInstruction, recordedRelease } from "./job-memos.js";
|
|
7
|
+
import { releaseOf, splitClaim } from "./release-reads.js";
|
|
8
|
+
import { lifecycleDeliveries } from "./job-origins.js";
|
|
9
|
+
import { transactionAt } from "./job-scan.js";
|
|
10
|
+
const TOKEN_ACCOUNT_HEAD = 64;
|
|
11
|
+
const ordered = (a, b) => (earlier(a, b) ? -1 : earlier(b, a) ? 1 : 0);
|
|
12
|
+
const ownSalt = (delivery) => (delivery.salt !== "" && saltCheckOf(delivery.salt) === delivery.check ? delivery.salt : null);
|
|
13
|
+
export function earlierSalts(deliveries, payee) {
|
|
14
|
+
return deliveries
|
|
15
|
+
.filter((delivery) => delivery.intent === payee.intent && earlier(delivery, payee))
|
|
16
|
+
.sort(ordered)
|
|
17
|
+
.map(ownSalt);
|
|
18
|
+
}
|
|
19
|
+
export function openingsOf(intent, salts) {
|
|
20
|
+
return Array.from({ length: Math.ceil(salts.length / MAX_OPENED_SALTS) }, (_, i) => ({ intent, salts: salts.slice(i * MAX_OPENED_SALTS, (i + 1) * MAX_OPENED_SALTS) }));
|
|
21
|
+
}
|
|
22
|
+
export function judgeOpenings(deliveries, payee) {
|
|
23
|
+
return openingsOf(payee.intent, earlierSalts(deliveries, payee));
|
|
24
|
+
}
|
|
25
|
+
export function unitedSalts(lists) {
|
|
26
|
+
const length = lists.reduce((most, list) => Math.max(most, list.length), 0);
|
|
27
|
+
return Array.from({ length }, (_, i) => lists.map((list) => list[i] ?? null).find((salt) => salt !== null) ?? null);
|
|
28
|
+
}
|
|
29
|
+
export function openingInstructions(signer, attestor, opening) {
|
|
30
|
+
const notified = [...new Set([opening.intent, attestor])].filter((to) => to !== signer.address);
|
|
31
|
+
return [
|
|
32
|
+
memoInstruction(signer, openingMemo(opening)),
|
|
33
|
+
...notified.map((destination) => getTransferSolInstruction({ source: signer, destination, amount: 0n })),
|
|
34
|
+
];
|
|
35
|
+
}
|
|
36
|
+
export async function paidWalletsOf(transport, { event, transaction }, intent) {
|
|
37
|
+
if (event.name === "IntentSplit") {
|
|
38
|
+
const claim = splitClaim(transaction, intent);
|
|
39
|
+
return claim === null ? null : [...claim.recipients];
|
|
40
|
+
}
|
|
41
|
+
if (event.name !== "IntentAttested") {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const payee = event.fields.payee;
|
|
45
|
+
const recorded = transaction.tokens?.find(({ account }) => account === payee)?.owner;
|
|
46
|
+
if (recorded !== undefined) {
|
|
47
|
+
return [recorded];
|
|
48
|
+
}
|
|
49
|
+
const held = await transport.getAccount(payee);
|
|
50
|
+
return held === null || held.data.length < TOKEN_ACCOUNT_HEAD ? null : [getAddressDecoder().decode(held.data.subarray(32, TOKEN_ACCOUNT_HEAD))];
|
|
51
|
+
}
|
|
52
|
+
export function publishedSalts(delivery, openings) {
|
|
53
|
+
const salts = openings.flatMap(({ opening }) => {
|
|
54
|
+
if (opening.intent !== delivery.intent) {
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
return "announcement" in opening ? (opening.announcement === delivery.signature ? [opening.salt] : []) : opening.salts;
|
|
58
|
+
});
|
|
59
|
+
return [...new Set(salts.filter((salt) => salt !== null && saltCheckOf(salt) === delivery.check))];
|
|
60
|
+
}
|
|
61
|
+
export function refutingAmong(deliveries, openings, payee, sha256, paid) {
|
|
62
|
+
let refutedBy = null;
|
|
63
|
+
for (const delivery of deliveries) {
|
|
64
|
+
const counts = delivery.intent === payee.intent && !paid.includes(delivery.worker) && earlier(delivery, payee);
|
|
65
|
+
if (counts && publishedSalts(delivery, openings).some((open) => opensWith(delivery, open, sha256)) && (refutedBy === null || earlier(delivery, refutedBy))) {
|
|
66
|
+
refutedBy = delivery;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return refutedBy;
|
|
70
|
+
}
|
|
71
|
+
export function releaseStanding(deliveries, openings, recorded, payees) {
|
|
72
|
+
const { sha256, salt } = recorded;
|
|
73
|
+
let payee = null;
|
|
74
|
+
for (const delivery of salt === undefined || payees === null ? [] : deliveries) {
|
|
75
|
+
if (opensWith(delivery, salt ?? "", sha256) && payees?.includes(delivery.worker) === true && (payee === null || earlier(delivery, payee))) {
|
|
76
|
+
payee = delivery;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (payee === null || payees === null) {
|
|
80
|
+
return { valid: false, payee: null, refutedBy: null };
|
|
81
|
+
}
|
|
82
|
+
const refutedBy = refutingAmong(deliveries, openings, payee, sha256, payees);
|
|
83
|
+
return { valid: true, payee: { ...payee, sha256, salt: salt ?? "" }, refutedBy: refutedBy === null ? null : { ...refutedBy, sha256 } };
|
|
84
|
+
}
|
|
85
|
+
export async function refutationIn(transport, transactions, payee, sha256, paid = [], judged) {
|
|
86
|
+
const { intent } = payee;
|
|
87
|
+
let complete = true;
|
|
88
|
+
const failed = () => {
|
|
89
|
+
complete = false;
|
|
90
|
+
return null;
|
|
91
|
+
};
|
|
92
|
+
const own = openingsIn(transactions, new Set([intent]));
|
|
93
|
+
const named = own.flatMap(({ opening }) => ("announcement" in opening && opening.announcement !== payee.signature ? [opening] : []));
|
|
94
|
+
const fetched = [];
|
|
95
|
+
for (const opening of named) {
|
|
96
|
+
const announced = await transactionAt(transport, opening.announcement, intent).catch(failed);
|
|
97
|
+
complete &&= announced?.unread !== true;
|
|
98
|
+
fetched.push(...(announced === null ? [] : deliveriesIn([announced], new Set([intent]))).filter(({ signature }) => signature === opening.announcement));
|
|
99
|
+
}
|
|
100
|
+
const record = judged === undefined
|
|
101
|
+
? null
|
|
102
|
+
: await lifecycleDeliveries(transport, judged.attestor, { intent, createdAt: judged.createdAt, from: null, to: judged.to }).catch(failed);
|
|
103
|
+
const deliveries = [...fetched, ...(record?.deliveries ?? [])];
|
|
104
|
+
return { refutedBy: refutingAmong(deliveries, [...own, ...(record?.openings ?? [])], payee, sha256, paid)?.signature ?? null, complete };
|
|
105
|
+
}
|
|
106
|
+
export async function refutedIn(transport, transactions, payee, sha256, paid = [], judged) {
|
|
107
|
+
return (await refutationIn(transport, transactions, payee, sha256, paid, judged)).refutedBy;
|
|
108
|
+
}
|
|
109
|
+
export const notOpened = (announcement, worker, intent, sha256) => `the transaction ${announcement} holds no announcement by ${worker} for intent ${intent} that its salt opens to the sha256 ${sha256}; nothing was sent`;
|
|
110
|
+
export async function selfOpeningInstructions(transport, input) {
|
|
111
|
+
const { worker, intent, attestor, announcement } = input;
|
|
112
|
+
const sha256 = input.sha256.toLowerCase();
|
|
113
|
+
const salt = await deliverySalt(worker, intent, sha256, input.saltSignature);
|
|
114
|
+
const announced = await transactionAt(transport, announcement, attestor);
|
|
115
|
+
const own = (announced === null ? [] : deliveriesIn([announced], new Set([intent]))).find((delivery) => delivery.worker === worker.address && opensWith(delivery, salt, sha256));
|
|
116
|
+
if (own === undefined) {
|
|
117
|
+
throw new RangeError(notOpened(announcement, worker.address, intent, sha256));
|
|
118
|
+
}
|
|
119
|
+
return { salt, instructions: openingInstructions(worker, attestor, { intent, announcement, salt }) };
|
|
120
|
+
}
|
|
121
|
+
export async function releaseStandingOf(transport, target) {
|
|
122
|
+
const { intent, attestor, release, recorded } = target;
|
|
123
|
+
if (recorded.salt === undefined) {
|
|
124
|
+
return { valid: false, refutedBy: null, complete: true };
|
|
125
|
+
}
|
|
126
|
+
const record = await lifecycleDeliveries(transport, attestor, { intent, createdAt: target.createdAt ?? null, from: target.from ?? null, to: release.slot });
|
|
127
|
+
const standing = releaseStanding(record.deliveries, record.openings, recorded, target.payees);
|
|
128
|
+
return { valid: standing.valid, refutedBy: standing.refutedBy?.signature ?? null, complete: record.complete };
|
|
129
|
+
}
|
|
130
|
+
export async function recordedStanding(transport, intent, record, history = HISTORY_LIMIT) {
|
|
131
|
+
const transactions = await transport.engineTransactions(history, intent);
|
|
132
|
+
const release = releaseOf(transactions, intent);
|
|
133
|
+
if (release === undefined || (release.event.name !== "IntentAttested" && release.event.name !== "IntentSplit")) {
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
const recorded = recordedRelease(transactions, release.transaction, release.event.fields.attestor);
|
|
137
|
+
if (recorded === null) {
|
|
138
|
+
return null;
|
|
139
|
+
}
|
|
140
|
+
const payees = await paidWalletsOf(transport, release, intent);
|
|
141
|
+
const standing = releaseStanding(record.deliveries, [...record.openings, ...openingsIn(transactions, new Set([intent]))], recorded, payees);
|
|
142
|
+
return {
|
|
143
|
+
signature: release.transaction.signature,
|
|
144
|
+
...recorded,
|
|
145
|
+
valid: standing.valid,
|
|
146
|
+
refutedBy: standing.refutedBy?.signature ?? null,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
export async function releaseStandingAt(transport, intent, signature, created, history = HISTORY_LIMIT) {
|
|
150
|
+
const transactions = await transport.engineTransactions(history, intent);
|
|
151
|
+
const release = releaseOf(transactions.filter((transaction) => transaction.signature === signature), intent);
|
|
152
|
+
if (release === undefined || (release.event.name !== "IntentAttested" && release.event.name !== "IntentSplit")) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
const recorded = recordedRelease(transactions, release.transaction, release.event.fields.attestor);
|
|
156
|
+
if (recorded === null) {
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
const payees = await paidWalletsOf(transport, release, intent);
|
|
160
|
+
return releaseStandingOf(transport, { intent, attestor: release.event.fields.attestor, release: release.transaction, recorded, payees, ...created });
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=delivery-openings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delivery-openings.js","sourceRoot":"","sources":["../../src/delivery-openings.ts"],"names":[],"mappings":"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"}
|
package/dist/src/funding.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SIGNATURE_PAGE } from "./job-scan.js";
|
|
1
|
+
import { SIGNATURE_PAGE, signaturePage } from "./job-scan.js";
|
|
2
2
|
import { TRANSACTION_FETCHES } from "./transport.js";
|
|
3
3
|
export const FUNDING_PAGES = 2;
|
|
4
4
|
export const FUNDING_READS = 16;
|
|
@@ -12,12 +12,12 @@ async function listedOldestFirst(transport, wallet) {
|
|
|
12
12
|
const listed = [];
|
|
13
13
|
let before;
|
|
14
14
|
for (let page = 1; page <= FUNDING_PAGES; page++) {
|
|
15
|
-
const found = await
|
|
16
|
-
listed.push(...found);
|
|
17
|
-
if (found.
|
|
15
|
+
const found = await signaturePage(transport, signaturesOf, wallet, SIGNATURE_PAGE, before);
|
|
16
|
+
listed.push(...found.listed);
|
|
17
|
+
if (found.last) {
|
|
18
18
|
return listed.filter(({ failed }) => !failed).reverse();
|
|
19
19
|
}
|
|
20
|
-
before = found[found.length - 1]?.signature;
|
|
20
|
+
before = found.listed[found.listed.length - 1]?.signature;
|
|
21
21
|
}
|
|
22
22
|
return BUSY;
|
|
23
23
|
}
|
|
@@ -38,9 +38,11 @@ async function readFunder(transport, wallet, covered) {
|
|
|
38
38
|
if (transactionsOf === undefined || oldest === null) {
|
|
39
39
|
return { funder: null, complete: false };
|
|
40
40
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
let reads = 0;
|
|
42
|
+
let at = 0;
|
|
43
|
+
while (at < oldest.length && reads < FUNDING_READS) {
|
|
44
|
+
const batch = oldest.slice(at, at + TRANSACTION_FETCHES);
|
|
45
|
+
at += batch.length;
|
|
44
46
|
const found = await transactionsOf.call(transport, batch);
|
|
45
47
|
if (found.length < batch.length) {
|
|
46
48
|
return { funder: null, complete: false };
|
|
@@ -49,13 +51,15 @@ async function readFunder(transport, wallet, covered) {
|
|
|
49
51
|
if (transaction.unread === true) {
|
|
50
52
|
return { funder: null, complete: false };
|
|
51
53
|
}
|
|
52
|
-
const into = transaction.transfers
|
|
53
|
-
|
|
54
|
-
|
|
54
|
+
const into = (transaction.transfers ?? []).filter(({ from, to }) => to === wallet && from !== wallet);
|
|
55
|
+
const funding = into.find(({ lamports }) => lamports > 0n);
|
|
56
|
+
if (funding !== undefined) {
|
|
57
|
+
return { funder: funding.from, complete: await covered() };
|
|
55
58
|
}
|
|
59
|
+
reads += into.length === 0 ? 1 : 0;
|
|
56
60
|
}
|
|
57
61
|
}
|
|
58
|
-
return { funder: null, complete: oldest.length
|
|
62
|
+
return { funder: null, complete: at >= oldest.length && (await covered()) };
|
|
59
63
|
}
|
|
60
64
|
export function fundingLookup(transport, covered) {
|
|
61
65
|
const known = new Map();
|
package/dist/src/funding.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/funding.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"funding.js","sourceRoot":"","sources":["../../src/funding.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
package/dist/src/index.js
CHANGED
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import type
|
|
1
|
+
import { type Address, type Instruction, type Signature, type TransactionSigner } from "@solana/kit";
|
|
2
|
+
import { type DeliveryOpener, type Opening, type SealedKey } from "@intent-engine/core";
|
|
3
|
+
import type { EngineTransaction, Transport } from "./transport.js";
|
|
3
4
|
export type DeliverInput = {
|
|
4
5
|
worker: TransactionSigner;
|
|
5
6
|
intent: Address;
|
|
6
7
|
sha256: string;
|
|
7
8
|
url: string;
|
|
9
|
+
saltSignature?: Uint8Array;
|
|
10
|
+
};
|
|
11
|
+
export type SealedFor = {
|
|
12
|
+
wallet: Address;
|
|
13
|
+
kind: SealedKey;
|
|
14
|
+
key: string;
|
|
8
15
|
};
|
|
9
16
|
export type DeliveryPlan = {
|
|
10
17
|
attestor: Address;
|
|
11
18
|
instructions: Instruction[];
|
|
12
19
|
commitment: string;
|
|
20
|
+
check: string;
|
|
21
|
+
salt: string;
|
|
13
22
|
sealedTo: Address[];
|
|
23
|
+
sealedKeys: SealedKey[];
|
|
24
|
+
sealedFor: SealedFor[];
|
|
14
25
|
};
|
|
26
|
+
export type DeliveryOpeners = DeliveryOpener | readonly DeliveryOpener[];
|
|
15
27
|
export type Delivery = {
|
|
16
28
|
intent: Address;
|
|
17
29
|
worker: Address;
|
|
@@ -21,10 +33,19 @@ export type Delivery = {
|
|
|
21
33
|
slot: bigint;
|
|
22
34
|
blockTime: bigint | null;
|
|
23
35
|
commitment: string;
|
|
36
|
+
check: string;
|
|
37
|
+
salt: string;
|
|
24
38
|
sealed: string;
|
|
25
39
|
};
|
|
40
|
+
export type PublishedOpening = {
|
|
41
|
+
opening: Opening;
|
|
42
|
+
signature: string;
|
|
43
|
+
slot: bigint;
|
|
44
|
+
by: Address;
|
|
45
|
+
};
|
|
26
46
|
export type DeliveryRecord = {
|
|
27
47
|
deliveries: Delivery[];
|
|
48
|
+
openings: PublishedOpening[];
|
|
28
49
|
complete: boolean;
|
|
29
50
|
pages: number;
|
|
30
51
|
};
|
|
@@ -32,11 +53,34 @@ export declare class NotDeliverable extends Error {
|
|
|
32
53
|
readonly intent: Address;
|
|
33
54
|
constructor(intent: Address, reason: string);
|
|
34
55
|
}
|
|
56
|
+
export declare const cannotSignMessages: (worker: Address) => string;
|
|
57
|
+
export declare class NoMessageSigner extends Error {
|
|
58
|
+
readonly worker: Address;
|
|
59
|
+
constructor(worker: Address);
|
|
60
|
+
}
|
|
61
|
+
export declare const saltSignatureRefused: (worker: Address) => string;
|
|
62
|
+
export declare class BadSaltSignature extends Error {
|
|
63
|
+
readonly worker: Address;
|
|
64
|
+
constructor(worker: Address);
|
|
65
|
+
}
|
|
66
|
+
export declare function deliverySalt(worker: TransactionSigner, intent: Address, sha256: string, saltSignature?: Uint8Array): Promise<string>;
|
|
35
67
|
export declare function deliveryInstructions(transport: Transport, input: DeliverInput): Promise<DeliveryPlan>;
|
|
36
|
-
export declare function deliveryRecord(transport: Transport, judge: Address, intent?: Address, pages?: number, keypair?:
|
|
37
|
-
export declare function
|
|
68
|
+
export declare function deliveryRecord(transport: Transport, judge: Address, intent?: Address, pages?: number, keypair?: DeliveryOpeners): Promise<DeliveryRecord>;
|
|
69
|
+
export declare function openingsIn(transactions: readonly EngineTransaction[], judged?: ReadonlySet<Address>): PublishedOpening[];
|
|
70
|
+
export declare function deliveriesIn(transactions: readonly EngineTransaction[], judged?: ReadonlySet<Address>): Delivery[];
|
|
71
|
+
export declare function judgedDeliveries(transport: Transport, judge: Address, judged: ReadonlySet<Address>, floor: bigint | null, covered: () => Promise<boolean>, pages: number, keypair?: DeliveryOpeners): Promise<DeliveryRecord>;
|
|
72
|
+
export declare function openersOf(keys: DeliveryOpeners | undefined): readonly DeliveryOpener[];
|
|
38
73
|
export declare function deliveriesOf(transport: Transport, judge: Address, intent?: Address): Promise<Delivery[]>;
|
|
39
|
-
export declare
|
|
74
|
+
export declare const earlier: (a: {
|
|
75
|
+
slot: bigint;
|
|
76
|
+
signature: string;
|
|
77
|
+
}, b: {
|
|
78
|
+
slot: bigint;
|
|
79
|
+
signature: string;
|
|
80
|
+
}) => boolean;
|
|
81
|
+
export declare function commitmentOf(intent: Address, worker: Address, salt: string, sha256: string): string;
|
|
82
|
+
export declare function saltCheckOf(salt: string): string;
|
|
83
|
+
export declare function opensWith(delivery: Delivery, salt: string, sha256: string): boolean;
|
|
40
84
|
export declare function announces(delivery: Delivery, sha256: string): boolean;
|
|
41
85
|
export declare function withWork(delivery: Delivery, sha256: string): Delivery | null;
|
|
42
86
|
export declare function firstDelivery(deliveries: readonly Delivery[], sha256: string): Delivery | null;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
+
import { createSignableMessage, getPublicKeyFromAddress, isMessagePartialSigner, verifySignature, } from "@solana/kit";
|
|
2
3
|
import { getTransferSolInstruction } from "@solana-program/system";
|
|
3
|
-
import { commitmentPreimage,
|
|
4
|
+
import { AccountVersionError, commitmentPreimage, deliveryKeyOf, DELIVERY_MEMO_MARK, encryptionKeyText, isEncryptionKeyText, deliveryMemo, IntentStatus, isMemoUrl, isSaltHex, isSha256Hex, MEMO_URL_RULE, openDelivery, parseDeliveryMemo, parseEncryptionKey, parseOpeningMemo, saltCheckPreimage, saltMessage, saltOfSignature, sealDelivery, sealedKeys, x25519PublicOf, } from "@intent-engine/core";
|
|
4
5
|
import { chainTime } from "./accounts.js";
|
|
6
|
+
import { isDevice } from "./ledger.js";
|
|
7
|
+
import { loadProfile } from "./client-claims.js";
|
|
5
8
|
import { loadCommittee } from "./client-committee.js";
|
|
6
9
|
import { memoInstruction } from "./job-memos.js";
|
|
7
10
|
import { historyCovers, openProofEscrows, proofAt } from "./job-proofs.js";
|
|
@@ -15,6 +18,63 @@ export class NotDeliverable extends Error {
|
|
|
15
18
|
this.intent = intent;
|
|
16
19
|
}
|
|
17
20
|
}
|
|
21
|
+
export const cannotSignMessages = (worker) => `the wallet ${worker} cannot sign messages, and a delivery derives its salt from the wallet's own signature over the intent and the work's sha256; announce with a key file or a wallet that signs messages; nothing was sent`;
|
|
22
|
+
export class NoMessageSigner extends Error {
|
|
23
|
+
worker;
|
|
24
|
+
constructor(worker) {
|
|
25
|
+
super(cannotSignMessages(worker));
|
|
26
|
+
this.name = "NoMessageSigner";
|
|
27
|
+
this.worker = worker;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export const saltSignatureRefused = (worker) => `the salt signature is not ${worker}'s ed25519 signature of the salt message for this intent and sha256; nothing was sent`;
|
|
31
|
+
export class BadSaltSignature extends Error {
|
|
32
|
+
worker;
|
|
33
|
+
constructor(worker) {
|
|
34
|
+
super(saltSignatureRefused(worker));
|
|
35
|
+
this.name = "BadSaltSignature";
|
|
36
|
+
this.worker = worker;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function signedBy(worker, signature, message) {
|
|
40
|
+
if (signature.length !== 64) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return await verifySignature(await getPublicKeyFromAddress(worker), signature, message);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export async function deliverySalt(worker, intent, sha256, saltSignature) {
|
|
51
|
+
const message = saltMessage(intent, sha256);
|
|
52
|
+
if (saltSignature !== undefined) {
|
|
53
|
+
if (!(await signedBy(worker.address, saltSignature, message))) {
|
|
54
|
+
throw new BadSaltSignature(worker.address);
|
|
55
|
+
}
|
|
56
|
+
return saltOfSignature(saltSignature);
|
|
57
|
+
}
|
|
58
|
+
if (!isMessagePartialSigner(worker) || isDevice(worker)) {
|
|
59
|
+
throw new NoMessageSigner(worker.address);
|
|
60
|
+
}
|
|
61
|
+
const [signed] = await worker.signMessages([createSignableMessage(message)]);
|
|
62
|
+
const signature = signed?.[worker.address];
|
|
63
|
+
if (signature === undefined || signature.length !== 64) {
|
|
64
|
+
throw new NoMessageSigner(worker.address);
|
|
65
|
+
}
|
|
66
|
+
return saltOfSignature(signature);
|
|
67
|
+
}
|
|
68
|
+
async function recipientOf(transport, wallet) {
|
|
69
|
+
const profile = await loadProfile(transport, wallet).catch((error) => {
|
|
70
|
+
if (error instanceof AccountVersionError) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
throw error;
|
|
74
|
+
});
|
|
75
|
+
const key = profile?.encryptionKey ?? null;
|
|
76
|
+
return { wallet, encryptionKey: key === null || !isEncryptionKeyText(key) ? null : parseEncryptionKey(key) };
|
|
77
|
+
}
|
|
18
78
|
export async function deliveryInstructions(transport, input) {
|
|
19
79
|
const { worker, intent } = input;
|
|
20
80
|
const sha256 = input.sha256.toLowerCase();
|
|
@@ -34,9 +94,18 @@ export async function deliveryInstructions(transport, input) {
|
|
|
34
94
|
const attestor = proof.params.attestor;
|
|
35
95
|
const notify = getTransferSolInstruction({ source: worker, destination: attestor, amount: 0n });
|
|
36
96
|
const sealedTo = [...((await loadCommittee(transport, attestor))?.members ?? [attestor])];
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
97
|
+
const salt = await deliverySalt(worker, intent, sha256, input.saltSignature);
|
|
98
|
+
const commitment = commitmentOf(intent, worker.address, salt, sha256);
|
|
99
|
+
const check = saltCheckOf(salt);
|
|
100
|
+
const recipients = await Promise.all(sealedTo.map((wallet) => recipientOf(transport, wallet)));
|
|
101
|
+
const blob = await sealDelivery({ salt, url: input.url }, recipients, intent);
|
|
102
|
+
const instructions = [memoInstruction(worker, deliveryMemo({ intent, commitment, check, blob })), notify];
|
|
103
|
+
const kinds = sealedKeys(blob) ?? [];
|
|
104
|
+
const sealedFor = recipients.map(({ wallet, encryptionKey }, at) => {
|
|
105
|
+
const kind = kinds[at] ?? "wallet";
|
|
106
|
+
return { wallet, kind, key: encryptionKeyText(kind === "profile" && encryptionKey !== null ? encryptionKey : x25519PublicOf(wallet)) };
|
|
107
|
+
});
|
|
108
|
+
return { attestor, instructions, commitment, check, salt, sealedTo, sealedKeys: kinds, sealedFor };
|
|
40
109
|
}
|
|
41
110
|
export async function deliveryRecord(transport, judge, intent, pages = DELIVERY_PAGES, keypair) {
|
|
42
111
|
let proofs;
|
|
@@ -49,41 +118,79 @@ export async function deliveryRecord(transport, judge, intent, pages = DELIVERY_
|
|
|
49
118
|
}
|
|
50
119
|
const [first] = proofs;
|
|
51
120
|
if (first === undefined) {
|
|
52
|
-
return { deliveries: [], complete: true, pages: 0 };
|
|
121
|
+
return { deliveries: [], openings: [], complete: true, pages: 0 };
|
|
53
122
|
}
|
|
54
123
|
const judged = new Set(proofs.map(({ address }) => address));
|
|
55
124
|
const oldest = proofs.reduce((low, proof) => (proof.intent.createdAt < low.intent.createdAt ? proof : low), first);
|
|
56
125
|
const floor = oldest.intent.createdAt;
|
|
57
126
|
return judgedDeliveries(transport, judge, judged, floor, () => historyCovers(transport, oldest.address, floor), pages, keypair);
|
|
58
127
|
}
|
|
59
|
-
export
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
128
|
+
export function openingsIn(transactions, judged) {
|
|
129
|
+
return transactions.flatMap(({ signature, slot, failed, memos, feePayer }) => failed || feePayer === undefined
|
|
130
|
+
? []
|
|
131
|
+
: (memos ?? []).slice(0, MEMOS_PER_TRANSACTION).flatMap((text) => {
|
|
132
|
+
const opening = parseOpeningMemo(text);
|
|
133
|
+
return opening === null || (judged !== undefined && !judged.has(opening.intent)) ? [] : [{ opening, signature, slot, by: feePayer }];
|
|
134
|
+
}));
|
|
135
|
+
}
|
|
136
|
+
export function deliveriesIn(transactions, judged) {
|
|
137
|
+
return transactions.flatMap(({ signature, slot, blockTime, failed, memos, feePayer }) => failed || feePayer === undefined
|
|
63
138
|
? []
|
|
64
139
|
: (memos ?? []).slice(0, MEMOS_PER_TRANSACTION).flatMap((text) => {
|
|
65
140
|
const at = { worker: feePayer, signature: signature, slot, blockTime };
|
|
66
|
-
const sealed =
|
|
67
|
-
return sealed === null || !judged.has(sealed.intent)
|
|
141
|
+
const sealed = parseDeliveryMemo(text);
|
|
142
|
+
return sealed === null || (judged !== undefined && !judged.has(sealed.intent))
|
|
68
143
|
? []
|
|
69
|
-
: [{ intent: sealed.intent, sha256: "", url: "", ...at, commitment: sealed.commitment, sealed: sealed.blob }];
|
|
144
|
+
: [{ intent: sealed.intent, sha256: "", url: "", ...at, commitment: sealed.commitment, check: sealed.check, salt: "", sealed: sealed.blob }];
|
|
70
145
|
}));
|
|
71
|
-
const deliveries = keypair === undefined ? found : await Promise.all(found.map((delivery) => opened(delivery, keypair)));
|
|
72
|
-
return { deliveries, complete: complete && !transactions.some(({ unread }) => unread === true), pages: scanned.pages };
|
|
73
146
|
}
|
|
74
|
-
async function
|
|
75
|
-
const
|
|
76
|
-
|
|
147
|
+
export async function judgedDeliveries(transport, judge, judged, floor, covered, pages, keypair) {
|
|
148
|
+
const scanned = await scan(transport, judge, { floor, memo: DELIVERY_MEMO_MARK, pages, covered });
|
|
149
|
+
const { transactions, complete } = scanned;
|
|
150
|
+
const found = deliveriesIn(transactions, judged);
|
|
151
|
+
const keys = await Promise.all(openersOf(keypair).map(deliveryKeyOf));
|
|
152
|
+
const deliveries = keys.length === 0 ? found : await Promise.all(found.map((delivery) => opened(delivery, keys)));
|
|
153
|
+
return {
|
|
154
|
+
deliveries,
|
|
155
|
+
openings: openingsIn(transactions, judged),
|
|
156
|
+
complete: complete && !transactions.some(({ unread }) => unread === true),
|
|
157
|
+
pages: scanned.pages,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
export function openersOf(keys) {
|
|
161
|
+
if (keys === undefined) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
return keys instanceof Uint8Array || !Array.isArray(keys) ? [keys] : keys;
|
|
165
|
+
}
|
|
166
|
+
async function opened(delivery, keys) {
|
|
167
|
+
let open = null;
|
|
168
|
+
for (const key of keys) {
|
|
169
|
+
open ??= await openDelivery(delivery.sealed, key, delivery.intent).catch(() => null);
|
|
170
|
+
}
|
|
171
|
+
if (open === null) {
|
|
172
|
+
return delivery;
|
|
173
|
+
}
|
|
174
|
+
return saltCheckOf(open.salt) === delivery.check ? { ...delivery, url: open.url, salt: open.salt } : { ...delivery, url: open.url };
|
|
77
175
|
}
|
|
78
176
|
export async function deliveriesOf(transport, judge, intent) {
|
|
79
177
|
return (await deliveryRecord(transport, judge, intent)).deliveries;
|
|
80
178
|
}
|
|
81
|
-
const earlier = (a, b) => a.slot < b.slot || (a.slot === b.slot && a.signature < b.signature);
|
|
82
|
-
export function commitmentOf(intent, worker, sha256) {
|
|
83
|
-
return createHash("sha256").update(commitmentPreimage({ intent, worker, sha256 })).digest("hex");
|
|
179
|
+
export const earlier = (a, b) => a.slot < b.slot || (a.slot === b.slot && a.signature < b.signature);
|
|
180
|
+
export function commitmentOf(intent, worker, salt, sha256) {
|
|
181
|
+
return createHash("sha256").update(commitmentPreimage({ intent, worker, salt, sha256 })).digest("hex");
|
|
182
|
+
}
|
|
183
|
+
export function saltCheckOf(salt) {
|
|
184
|
+
return createHash("sha256").update(saltCheckPreimage(salt)).digest("hex").slice(0, 32);
|
|
185
|
+
}
|
|
186
|
+
export function opensWith(delivery, salt, sha256) {
|
|
187
|
+
return (isSaltHex(salt) &&
|
|
188
|
+
isSha256Hex(sha256) &&
|
|
189
|
+
delivery.check === saltCheckOf(salt) &&
|
|
190
|
+
delivery.commitment === commitmentOf(delivery.intent, delivery.worker, salt, sha256));
|
|
84
191
|
}
|
|
85
192
|
export function announces(delivery, sha256) {
|
|
86
|
-
return
|
|
193
|
+
return opensWith(delivery, delivery.salt, sha256);
|
|
87
194
|
}
|
|
88
195
|
export function withWork(delivery, sha256) {
|
|
89
196
|
return announces(delivery, sha256) ? { ...delivery, sha256 } : null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"job-deliveries.js","sourceRoot":"","sources":["../../src/job-deliveries.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"job-deliveries.js","sourceRoot":"","sources":["../../src/job-deliveries.ts"],"names":[],"mappings":"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"}
|