@telaro/sacp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/INTEGRATION.md +238 -0
  2. package/README.md +253 -0
  3. package/dist/codec.d.ts +35 -0
  4. package/dist/codec.d.ts.map +1 -0
  5. package/dist/codec.js +63 -0
  6. package/dist/codec.js.map +1 -0
  7. package/dist/constants.d.ts +50 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +50 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/dispatcher.d.ts +87 -0
  12. package/dist/dispatcher.d.ts.map +1 -0
  13. package/dist/dispatcher.js +175 -0
  14. package/dist/dispatcher.js.map +1 -0
  15. package/dist/events.d.ts +93 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +142 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/index.d.ts +38 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +39 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/job.d.ts +99 -0
  24. package/dist/job.d.ts.map +1 -0
  25. package/dist/job.js +297 -0
  26. package/dist/job.js.map +1 -0
  27. package/dist/lst.d.ts +52 -0
  28. package/dist/lst.d.ts.map +1 -0
  29. package/dist/lst.js +58 -0
  30. package/dist/lst.js.map +1 -0
  31. package/dist/negotiation.d.ts +66 -0
  32. package/dist/negotiation.d.ts.map +1 -0
  33. package/dist/negotiation.js +184 -0
  34. package/dist/negotiation.js.map +1 -0
  35. package/dist/offering.d.ts +65 -0
  36. package/dist/offering.d.ts.map +1 -0
  37. package/dist/offering.js +190 -0
  38. package/dist/offering.js.map +1 -0
  39. package/dist/pdas.d.ts +44 -0
  40. package/dist/pdas.d.ts.map +1 -0
  41. package/dist/pdas.js +95 -0
  42. package/dist/pdas.js.map +1 -0
  43. package/dist/runtime.d.ts +244 -0
  44. package/dist/runtime.d.ts.map +1 -0
  45. package/dist/runtime.js +481 -0
  46. package/dist/runtime.js.map +1 -0
  47. package/dist/signer.d.ts +107 -0
  48. package/dist/signer.d.ts.map +1 -0
  49. package/dist/signer.js +94 -0
  50. package/dist/signer.js.map +1 -0
  51. package/dist/take_rate.d.ts +44 -0
  52. package/dist/take_rate.d.ts.map +1 -0
  53. package/dist/take_rate.js +141 -0
  54. package/dist/take_rate.js.map +1 -0
  55. package/dist/timeout.d.ts +35 -0
  56. package/dist/timeout.d.ts.map +1 -0
  57. package/dist/timeout.js +113 -0
  58. package/dist/timeout.js.map +1 -0
  59. package/dist/types.d.ts +39 -0
  60. package/dist/types.d.ts.map +1 -0
  61. package/dist/types.js +13 -0
  62. package/dist/types.js.map +1 -0
  63. package/dist/validation.d.ts +133 -0
  64. package/dist/validation.d.ts.map +1 -0
  65. package/dist/validation.js +315 -0
  66. package/dist/validation.js.map +1 -0
  67. package/dist/watcher.d.ts +67 -0
  68. package/dist/watcher.d.ts.map +1 -0
  69. package/dist/watcher.js +176 -0
  70. package/dist/watcher.js.map +1 -0
  71. package/dist/wormhole.d.ts +88 -0
  72. package/dist/wormhole.d.ts.map +1 -0
  73. package/dist/wormhole.js +152 -0
  74. package/dist/wormhole.js.map +1 -0
  75. package/package.json +138 -0
package/dist/index.js ADDED
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @telaro/sacp — Solana Agent Commerce Protocol SDK
3
+ *
4
+ * Reference implementation of the sACP v0.1 specification. See
5
+ * `docs/srfc/sacp-v0.1.md` for the full protocol document.
6
+ *
7
+ * The SDK is split into two namespaces matching the two halves of the
8
+ * spec:
9
+ *
10
+ * - `./job` — Part A. Job lifecycle (Open → Funded → Submitted →
11
+ * Settled / Disputed). Used by Clients to create jobs, Providers to
12
+ * submit work, Evaluators to settle disputes.
13
+ * - `./validation` — Part B. Bonded validator registry. Used by
14
+ * validator operators to stake bond and act as Evaluators across
15
+ * many Jobs.
16
+ *
17
+ * The two parts share the constants and PDA helpers exported from this
18
+ * top-level entry point.
19
+ */
20
+ export * as job from "./job.js";
21
+ export * as validation from "./validation.js";
22
+ export * as events from "./events.js";
23
+ export * as wormhole from "./wormhole.js";
24
+ export * as lst from "./lst.js";
25
+ export * as takeRate from "./take_rate.js";
26
+ export * as offering from "./offering.js";
27
+ export * as negotiation from "./negotiation.js";
28
+ // v0.8 runtime layer — high-level client + session.
29
+ export { SacpClient, JobSession, } from "./runtime.js";
30
+ export { LocalSigner, RemoteSigner, WalletAdapterSigner, } from "./signer.js";
31
+ // v0.9 runtime watchers + webhook dispatcher.
32
+ export { ProviderRuntime, EvaluatorRuntime, } from "./watcher.js";
33
+ export { WebhookDispatcher, signWebhookBody, verifyWebhookSignature, } from "./dispatcher.js";
34
+ export { ReclaimWatcher, } from "./timeout.js";
35
+ // v1.0 Phase 8 — Negotiation namespace types.
36
+ export { NegotiationNamespace, NegotiationSession, } from "./runtime.js";
37
+ export { SACP_PROGRAM_ID, SACP_VALIDATION_PROGRAM_ID, FEE_DENOMINATOR_BPS, MAX_TAKE_RATE_BPS, MAX_VALIDATOR_SHARE_BPS, } from "./constants.js";
38
+ export { findJobPda, findEscrowPda, findEscrowVaultPda, findSubmissionPda, findVerdictPda, findValidatorPda, findBondPda, findChallengePda, findSacpConfigPda, findResolverConfigPda, findOfferingPda, findNegotiationPda, } from "./pdas.js";
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAEhD,oDAAoD;AACpD,OAAO,EACL,UAAU,EACV,UAAU,GAKX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,mBAAmB,GAIpB,MAAM,aAAa,CAAC;AAErB,8CAA8C;AAC9C,OAAO,EACL,eAAe,EACf,gBAAgB,GAIjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,sBAAsB,GAIvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,GAEf,MAAM,cAAc,CAAC;AAEtB,8CAA8C;AAC9C,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,cAAc,CAAC;AAMtB,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,GACnB,MAAM,WAAW,CAAC"}
package/dist/job.d.ts ADDED
@@ -0,0 +1,99 @@
1
+ import { Connection, PublicKey, TransactionInstruction, type Signer } from "@solana/web3.js";
2
+ import { findEscrowPda, findEscrowVaultPda, findJobPda, findSubmissionPda, findVerdictPda } from "./pdas.js";
3
+ import type { CreateJobResult, JobRoles, JobState, VerdictWinner } from "./types.js";
4
+ export interface CreateJobParams {
5
+ jobId: bigint;
6
+ roles: Required<JobRoles>;
7
+ bondMint: PublicKey;
8
+ amount: bigint;
9
+ workUri: string;
10
+ submitWindowSecs?: bigint;
11
+ }
12
+ export interface CreateJobBuildResult {
13
+ ix: TransactionInstruction;
14
+ jobPda: PublicKey;
15
+ escrowPda: PublicKey;
16
+ escrowVaultPda: PublicKey;
17
+ }
18
+ export declare function buildCreateJobIx(params: CreateJobParams): CreateJobBuildResult;
19
+ export interface FundJobParams {
20
+ client: PublicKey;
21
+ jobId: bigint;
22
+ amount: bigint;
23
+ clientTokenAccount: PublicKey;
24
+ }
25
+ export declare function buildFundJobIx(params: FundJobParams): TransactionInstruction;
26
+ export declare function buildSubmitWorkIx(provider: PublicKey, jobId: bigint, submissionUri: string): TransactionInstruction;
27
+ export interface AcceptWorkParams {
28
+ client: PublicKey;
29
+ provider: PublicKey;
30
+ jobId: bigint;
31
+ bondMint: PublicKey;
32
+ providerTokenAccount: PublicKey;
33
+ }
34
+ export declare function buildAcceptWorkIx(params: AcceptWorkParams): TransactionInstruction;
35
+ export declare function buildDisputeWorkIx(client: PublicKey, jobId: bigint, reasonHash: Uint8Array): TransactionInstruction;
36
+ export interface SubmitVerdictParams {
37
+ evaluator: PublicKey;
38
+ client: PublicKey;
39
+ provider: PublicKey;
40
+ jobId: bigint;
41
+ bondMint: PublicKey;
42
+ winner: VerdictWinner;
43
+ clientTokenAccount: PublicKey;
44
+ providerTokenAccount: PublicKey;
45
+ /** v0.7+. Evaluator's payout ATA — receives the validator-share
46
+ * slice of the protocol fee when winner=Provider. For non-bonded
47
+ * evaluators this is `getAssociatedTokenAddressSync(bondMint,
48
+ * evaluator)`; for bonded validators it's the Validator PDA's
49
+ * off-curve ATA. */
50
+ evaluatorTokenAccount: PublicKey;
51
+ }
52
+ export declare function buildSubmitVerdictIx(params: SubmitVerdictParams): TransactionInstruction;
53
+ export interface RecordVerdictParams {
54
+ payer: PublicKey;
55
+ jobId: bigint;
56
+ /** IPFS / HTTPS URI of the verdict rationale. Can be empty string. */
57
+ evidenceUri: string;
58
+ }
59
+ export declare function buildRecordVerdictIx(params: RecordVerdictParams): {
60
+ ix: TransactionInstruction;
61
+ verdictPda: PublicKey;
62
+ };
63
+ export interface FetchedVerdict {
64
+ jobId: bigint;
65
+ winner: 0 | 1;
66
+ evaluator: PublicKey;
67
+ issuedAt: bigint;
68
+ evidenceUri: string;
69
+ }
70
+ export declare function fetchVerdict(connection: Connection, jobId: bigint): Promise<FetchedVerdict | null>;
71
+ export interface ReclaimEscrowParams {
72
+ client: PublicKey;
73
+ jobId: bigint;
74
+ clientTokenAccount: PublicKey;
75
+ }
76
+ export declare function buildReclaimEscrowIx(params: ReclaimEscrowParams): TransactionInstruction;
77
+ export declare function createJob(connection: Connection, client: Signer, params: Omit<CreateJobParams, "roles"> & {
78
+ provider: PublicKey;
79
+ evaluator: PublicKey;
80
+ }): Promise<CreateJobResult>;
81
+ export interface FetchedJob {
82
+ jobId: bigint;
83
+ state: JobState;
84
+ roles: Required<JobRoles>;
85
+ bondMint: PublicKey;
86
+ amount: bigint;
87
+ workUri: string;
88
+ createdAt: bigint;
89
+ submitDeadline: bigint;
90
+ }
91
+ /**
92
+ * Parse a Job account buffer into the typed shape. Exported so the
93
+ * v0.8 runtime layer can use it after `getProgramAccounts` returns
94
+ * raw account data (instead of paying for one round-trip per Job).
95
+ */
96
+ export declare function parseJobFromBuffer(data: Buffer): FetchedJob;
97
+ export declare function fetchJob(connection: Connection, jobId: bigint): Promise<FetchedJob | null>;
98
+ export { findJobPda, findEscrowPda, findEscrowVaultPda, findSubmissionPda, findVerdictPda, };
99
+ //# sourceMappingURL=job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.d.ts","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"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"}
package/dist/job.js ADDED
@@ -0,0 +1,297 @@
1
+ import { PublicKey, SystemProgram, SYSVAR_RENT_PUBKEY, Transaction, TransactionInstruction, sendAndConfirmTransaction, } from "@solana/web3.js";
2
+ import { encodeI64, encodeBytes32, encodeInstruction, encodeString, encodeU64, encodeU8, } from "./codec.js";
3
+ import { SACP_PROGRAM_ID } from "./constants.js";
4
+ import { findEscrowPda, findEscrowVaultPda, findJobPda, findSacpConfigPda, findSubmissionPda, findVerdictPda, } from "./pdas.js";
5
+ import { getTreasuryTokenAccount } from "./take_rate.js";
6
+ import { JOB_STATE_NUMERIC, VERDICT_WINNER_NUMERIC } from "./types.js";
7
+ /**
8
+ * Part A — Job Lifecycle SDK surface (v0.2).
9
+ *
10
+ * v0.2 wires real SPL Token escrow:
11
+ * - `create_job` initializes an Escrow vault TokenAccount owned by
12
+ * an Escrow PDA authority.
13
+ * - `fund_job` transfers tokens from Client → vault.
14
+ * - `accept_work`, `submit_verdict`, `reclaim_escrow` drain the
15
+ * vault to the appropriate party via PDA-signed CPI and close it.
16
+ *
17
+ * Wire-level v0.1 SDK is incompatible with the v0.2 program — the
18
+ * Anchor account orders changed when escrow was introduced. The SDK
19
+ * is version-pinned to the on-chain program; a v0.1 SDK will fail
20
+ * with InstructionDidNotDeserialize if called against the v0.2
21
+ * deployment.
22
+ */
23
+ const SACP_PROGRAM = SACP_PROGRAM_ID;
24
+ const SPL_TOKEN_PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
25
+ const SPL_ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
26
+ const URI_MAX_BYTES = 256;
27
+ function assertUri(uri, name) {
28
+ const len = Buffer.byteLength(uri, "utf8");
29
+ if (len > URI_MAX_BYTES) {
30
+ throw new Error(`${name} exceeds 256-byte limit (got ${len} bytes)`);
31
+ }
32
+ }
33
+ export function buildCreateJobIx(params) {
34
+ assertUri(params.workUri, "workUri");
35
+ if (params.amount <= 0n)
36
+ throw new Error("amount must be > 0");
37
+ const submitWindow = params.submitWindowSecs ?? BigInt(24 * 60 * 60);
38
+ if (submitWindow <= 0n)
39
+ throw new Error("submitWindowSecs must be > 0");
40
+ const [jobPda] = findJobPda(params.jobId);
41
+ const [escrowPda] = findEscrowPda(params.jobId);
42
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
43
+ const data = encodeInstruction("create_job", encodeU64(params.jobId), encodeU64(params.amount), encodeString(params.workUri), encodeI64(submitWindow));
44
+ const ix = new TransactionInstruction({
45
+ programId: SACP_PROGRAM,
46
+ keys: [
47
+ { pubkey: params.roles.client, isSigner: true, isWritable: true },
48
+ { pubkey: params.roles.provider, isSigner: false, isWritable: false },
49
+ { pubkey: params.roles.evaluator, isSigner: false, isWritable: false },
50
+ { pubkey: params.bondMint, isSigner: false, isWritable: false },
51
+ { pubkey: jobPda, isSigner: false, isWritable: true },
52
+ { pubkey: escrowPda, isSigner: false, isWritable: false },
53
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
54
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
55
+ { pubkey: SPL_ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
56
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
57
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
58
+ ],
59
+ data,
60
+ });
61
+ return { ix, jobPda, escrowPda, escrowVaultPda };
62
+ }
63
+ export function buildFundJobIx(params) {
64
+ const [jobPda] = findJobPda(params.jobId);
65
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
66
+ const data = encodeInstruction("fund_job", encodeU64(params.amount));
67
+ return new TransactionInstruction({
68
+ programId: SACP_PROGRAM,
69
+ keys: [
70
+ { pubkey: params.client, isSigner: true, isWritable: true },
71
+ { pubkey: jobPda, isSigner: false, isWritable: true },
72
+ { pubkey: params.clientTokenAccount, isSigner: false, isWritable: true },
73
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
74
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
75
+ ],
76
+ data,
77
+ });
78
+ }
79
+ // ─────────────────────────────── submit_work ─────────────────────────
80
+ export function buildSubmitWorkIx(provider, jobId, submissionUri) {
81
+ assertUri(submissionUri, "submissionUri");
82
+ const [jobPda] = findJobPda(jobId);
83
+ const [submissionPda] = findSubmissionPda(jobId);
84
+ const data = encodeInstruction("submit_work", encodeString(submissionUri));
85
+ return new TransactionInstruction({
86
+ programId: SACP_PROGRAM,
87
+ keys: [
88
+ { pubkey: provider, isSigner: true, isWritable: true },
89
+ { pubkey: jobPda, isSigner: false, isWritable: true },
90
+ { pubkey: submissionPda, isSigner: false, isWritable: true },
91
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
92
+ ],
93
+ data,
94
+ });
95
+ }
96
+ export function buildAcceptWorkIx(params) {
97
+ const [jobPda] = findJobPda(params.jobId);
98
+ const [escrowPda] = findEscrowPda(params.jobId);
99
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
100
+ const [configPda] = findSacpConfigPda();
101
+ const treasuryAta = getTreasuryTokenAccount(params.bondMint);
102
+ const data = encodeInstruction("accept_work");
103
+ return new TransactionInstruction({
104
+ programId: SACP_PROGRAM,
105
+ keys: [
106
+ { pubkey: params.client, isSigner: true, isWritable: true },
107
+ { pubkey: jobPda, isSigner: false, isWritable: true },
108
+ { pubkey: params.provider, isSigner: false, isWritable: false },
109
+ { pubkey: escrowPda, isSigner: false, isWritable: false },
110
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
111
+ { pubkey: params.providerTokenAccount, isSigner: false, isWritable: true },
112
+ { pubkey: configPda, isSigner: false, isWritable: false },
113
+ { pubkey: treasuryAta, isSigner: false, isWritable: true },
114
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
115
+ ],
116
+ data,
117
+ });
118
+ }
119
+ // ─────────────────────────────── dispute_work ────────────────────────
120
+ export function buildDisputeWorkIx(client, jobId, reasonHash) {
121
+ const [jobPda] = findJobPda(jobId);
122
+ const data = encodeInstruction("dispute_work", encodeBytes32(reasonHash));
123
+ return new TransactionInstruction({
124
+ programId: SACP_PROGRAM,
125
+ keys: [
126
+ { pubkey: client, isSigner: true, isWritable: false },
127
+ { pubkey: jobPda, isSigner: false, isWritable: true },
128
+ ],
129
+ data,
130
+ });
131
+ }
132
+ export function buildSubmitVerdictIx(params) {
133
+ const [jobPda] = findJobPda(params.jobId);
134
+ const [escrowPda] = findEscrowPda(params.jobId);
135
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
136
+ const [configPda] = findSacpConfigPda();
137
+ const treasuryAta = getTreasuryTokenAccount(params.bondMint);
138
+ const data = encodeInstruction("submit_verdict", encodeU8(VERDICT_WINNER_NUMERIC[params.winner]));
139
+ return new TransactionInstruction({
140
+ programId: SACP_PROGRAM,
141
+ keys: [
142
+ { pubkey: params.evaluator, isSigner: true, isWritable: true },
143
+ { pubkey: jobPda, isSigner: false, isWritable: true },
144
+ { pubkey: params.client, isSigner: false, isWritable: false },
145
+ { pubkey: params.provider, isSigner: false, isWritable: false },
146
+ { pubkey: escrowPda, isSigner: false, isWritable: false },
147
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
148
+ { pubkey: params.clientTokenAccount, isSigner: false, isWritable: true },
149
+ { pubkey: params.providerTokenAccount, isSigner: false, isWritable: true },
150
+ { pubkey: configPda, isSigner: false, isWritable: false },
151
+ { pubkey: treasuryAta, isSigner: false, isWritable: true },
152
+ { pubkey: params.evaluatorTokenAccount, isSigner: false, isWritable: true },
153
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
154
+ ],
155
+ data,
156
+ });
157
+ }
158
+ export function buildRecordVerdictIx(params) {
159
+ const [jobPda] = findJobPda(params.jobId);
160
+ const [verdictPda] = findVerdictPda(params.jobId);
161
+ const data = encodeInstruction("record_verdict", encodeString(params.evidenceUri));
162
+ const ix = new TransactionInstruction({
163
+ programId: SACP_PROGRAM,
164
+ keys: [
165
+ { pubkey: params.payer, isSigner: true, isWritable: true },
166
+ { pubkey: jobPda, isSigner: false, isWritable: false },
167
+ { pubkey: verdictPda, isSigner: false, isWritable: true },
168
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
169
+ ],
170
+ data,
171
+ });
172
+ return { ix, verdictPda };
173
+ }
174
+ export async function fetchVerdict(connection, jobId) {
175
+ const [verdictPda] = findVerdictPda(jobId);
176
+ const info = await connection.getAccountInfo(verdictPda, "confirmed");
177
+ if (!info)
178
+ return null;
179
+ const data = info.data;
180
+ let offset = 8;
181
+ const idRead = data.readBigUInt64LE(offset);
182
+ offset += 8;
183
+ const winner = data.readUInt8(offset);
184
+ offset += 1;
185
+ const evaluator = new PublicKey(data.subarray(offset, offset + 32));
186
+ offset += 32;
187
+ const issuedAt = data.readBigInt64LE(offset);
188
+ offset += 8;
189
+ const uriLen = data.readUInt32LE(offset);
190
+ offset += 4;
191
+ const evidenceUri = data.subarray(offset, offset + uriLen).toString("utf8");
192
+ return { jobId: idRead, winner, evaluator, issuedAt, evidenceUri };
193
+ }
194
+ export function buildReclaimEscrowIx(params) {
195
+ const [jobPda] = findJobPda(params.jobId);
196
+ const [escrowPda] = findEscrowPda(params.jobId);
197
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
198
+ const data = encodeInstruction("reclaim_escrow");
199
+ return new TransactionInstruction({
200
+ programId: SACP_PROGRAM,
201
+ keys: [
202
+ { pubkey: params.client, isSigner: true, isWritable: true },
203
+ { pubkey: jobPda, isSigner: false, isWritable: true },
204
+ { pubkey: escrowPda, isSigner: false, isWritable: false },
205
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
206
+ { pubkey: params.clientTokenAccount, isSigner: false, isWritable: true },
207
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
208
+ ],
209
+ data,
210
+ });
211
+ }
212
+ // ─────────────────────────────── convenience ─────────────────────────
213
+ export async function createJob(connection, client, params) {
214
+ const { ix, jobPda, escrowVaultPda } = buildCreateJobIx({
215
+ jobId: params.jobId,
216
+ roles: {
217
+ client: client.publicKey,
218
+ provider: params.provider,
219
+ evaluator: params.evaluator,
220
+ },
221
+ bondMint: params.bondMint,
222
+ amount: params.amount,
223
+ workUri: params.workUri,
224
+ submitWindowSecs: params.submitWindowSecs,
225
+ });
226
+ const tx = new Transaction().add(ix);
227
+ const sig = await sendAndConfirmTransaction(connection, tx, [client], {
228
+ commitment: "confirmed",
229
+ });
230
+ return {
231
+ jobId: params.jobId,
232
+ jobPda,
233
+ escrowPda: escrowVaultPda,
234
+ txSignature: sig,
235
+ };
236
+ }
237
+ /**
238
+ * Parse a Job account buffer into the typed shape. Exported so the
239
+ * v0.8 runtime layer can use it after `getProgramAccounts` returns
240
+ * raw account data (instead of paying for one round-trip per Job).
241
+ */
242
+ export function parseJobFromBuffer(data) {
243
+ let offset = 8;
244
+ const readU64 = () => {
245
+ const v = data.readBigUInt64LE(offset);
246
+ offset += 8;
247
+ return v;
248
+ };
249
+ const readI64 = () => {
250
+ const v = data.readBigInt64LE(offset);
251
+ offset += 8;
252
+ return v;
253
+ };
254
+ const readPubkey = () => {
255
+ const pk = new PublicKey(data.subarray(offset, offset + 32));
256
+ offset += 32;
257
+ return pk;
258
+ };
259
+ const readString = () => {
260
+ const len = data.readUInt32LE(offset);
261
+ offset += 4;
262
+ const s = data.subarray(offset, offset + len).toString("utf8");
263
+ offset += len;
264
+ return s;
265
+ };
266
+ const idRead = readU64();
267
+ const client = readPubkey();
268
+ const provider = readPubkey();
269
+ const evaluator = readPubkey();
270
+ const bondMint = readPubkey();
271
+ const amount = readU64();
272
+ const workUri = readString();
273
+ const stateByte = data.readUInt8(offset);
274
+ offset += 1;
275
+ const createdAt = readI64();
276
+ const submitDeadline = readI64();
277
+ const stateName = (Object.entries(JOB_STATE_NUMERIC).find(([, v]) => v === stateByte)?.[0] ?? "Open");
278
+ return {
279
+ jobId: idRead,
280
+ state: stateName,
281
+ roles: { client, provider, evaluator },
282
+ bondMint,
283
+ amount,
284
+ workUri,
285
+ createdAt,
286
+ submitDeadline,
287
+ };
288
+ }
289
+ export async function fetchJob(connection, jobId) {
290
+ const [jobPda] = findJobPda(jobId);
291
+ const info = await connection.getAccountInfo(jobPda, "confirmed");
292
+ if (!info)
293
+ return null;
294
+ return parseJobFromBuffer(info.data);
295
+ }
296
+ export { findJobPda, findEscrowPda, findEscrowVaultPda, findSubmissionPda, findVerdictPda, };
297
+ //# sourceMappingURL=job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"job.js","sourceRoot":"","sources":["../src/job.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EACT,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,sBAAsB,EACtB,yBAAyB,GAE1B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,SAAS,EACT,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAOzD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEvE;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,oBAAoB,GAAG,IAAI,SAAS,CACxC,6CAA6C,CAC9C,CAAC;AACF,MAAM,+BAA+B,GAAG,IAAI,SAAS,CACnD,8CAA8C,CAC/C,CAAC;AAEF,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,SAAS,SAAS,CAAC,GAAW,EAAE,IAAY;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC3C,IAAI,GAAG,GAAG,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,gCAAgC,GAAG,SAAS,CAAC,CAAC;IACvE,CAAC;AACH,CAAC;AAoBD,MAAM,UAAU,gBAAgB,CAC9B,MAAuB;IAEvB,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACrE,IAAI,YAAY,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAExE,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1D,MAAM,IAAI,GAAG,iBAAiB,CAC5B,YAAY,EACZ,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EACvB,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EACxB,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5B,SAAS,CAAC,YAAY,CAAC,CACxB,CAAC;IAEF,MAAM,EAAE,GAAG,IAAI,sBAAsB,CAAC;QACpC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACjE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACrE,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACtE,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC/D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7D,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACpE,EAAE,MAAM,EAAE,+BAA+B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC/E,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAClE,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACxE;QACD,IAAI;KACL,CAAC,CAAC;IAEH,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AACnD,CAAC;AAWD,MAAM,UAAU,cAAc,CAC5B,MAAqB;IAErB,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACxE,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7D,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACrE;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,iBAAiB,CAC/B,QAAmB,EACnB,KAAa,EACb,aAAqB;IAErB,SAAS,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,aAAa,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,EAAE,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YACtD,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC5D,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACxE;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAYD,MAAM,UAAU,iBAAiB,CAC/B,MAAwB;IAExB,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC/D,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7D,EAAE,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1E,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1D,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACrE;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AAExE,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,KAAa,EACb,UAAsB;IAEtB,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,iBAAiB,CAC5B,cAAc,EACd,aAAa,CAAC,UAAU,CAAC,CAC1B,CAAC;IACF,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE;YACrD,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;SACtD;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAqBD,MAAM,UAAU,oBAAoB,CAClC,MAA2B;IAE3B,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,iBAAiB,CAC5B,gBAAgB,EAChB,QAAQ,CAAC,sBAAsB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAChD,CAAC;IACF,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC9D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC7D,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC/D,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7D,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACxE,EAAE,MAAM,EAAE,MAAM,CAAC,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1E,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1D,EAAE,MAAM,EAAE,MAAM,CAAC,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3E,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACrE;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAWD,MAAM,UAAU,oBAAoB,CAClC,MAA2B;IAE3B,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,iBAAiB,CAC5B,gBAAgB,EAChB,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CACjC,CAAC;IACF,MAAM,EAAE,GAAG,IAAI,sBAAsB,CAAC;QACpC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACtD,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACzD,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACxE;QACD,IAAI;KACL,CAAC,CAAC;IACH,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;AAC5B,CAAC;AAUD,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,UAAsB,EACtB,KAAa;IAEb,MAAM,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACtE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAU,CAAC;IAC/C,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,EAAE,CAAC;IACb,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AACrE,CAAC;AAUD,MAAM,UAAU,oBAAoB,CAClC,MAA2B;IAE3B,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;IACjD,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,YAAY;QACvB,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;YAC3D,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACrD,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzD,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YAC7D,EAAE,MAAM,EAAE,MAAM,CAAC,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACxE,EAAE,MAAM,EAAE,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SACrE;QACD,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AAExE,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,UAAsB,EACtB,MAAc,EACd,MAGC;IAED,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,gBAAgB,CAAC;QACtD,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,KAAK,EAAE;YACL,MAAM,EAAE,MAAM,CAAC,SAAS;YACxB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B;QACD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;KAC1C,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE;QACpE,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM;QACN,SAAS,EAAE,cAAc;QACzB,WAAW,EAAE,GAAG;KACjB,CAAC;AACJ,CAAC;AAeD;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,GAAW,EAAE;QAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC;QACZ,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAc,EAAE;QACjC,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,IAAI,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,GAAW,EAAE;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,IAAI,CAAC,CAAC;QACZ,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,CAAC;QACd,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,IAAI,CAAC,CAAC;IACZ,MAAM,SAAS,GAAG,OAAO,EAAE,CAAC;IAC5B,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC;IAEjC,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,IAAI,CACvD,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAC3B,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAa,CAAC;IAE9B,OAAO;QACL,KAAK,EAAE,MAAM;QACb,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE;QACtC,QAAQ;QACR,MAAM;QACN,OAAO;QACP,SAAS;QACT,cAAc;KACf,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,UAAsB,EACtB,KAAa;IAEb,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,OAAO,EACL,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,GACf,CAAC"}
package/dist/lst.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ /**
3
+ * Liquid-staking-token (LST) bond adapter constants.
4
+ *
5
+ * No code change in the program is needed to accept an LST as bond —
6
+ * sACP v0.4 accepts any plain SPL Token mint with no freeze authority,
7
+ * which all major Solana LSTs satisfy. This file gives integrators a
8
+ * single, version-pinned source for the canonical LST mints + helpers
9
+ * to compute "real bond" in SOL terms.
10
+ *
11
+ * For each LST we list the mainnet mint and (if known) a devnet
12
+ * equivalent. Devnet LSTs are usually thin or non-existent, so
13
+ * integration tests that need a "JitoSOL-shaped" mint should create a
14
+ * fresh `Mint` with no freeze authority and pretend.
15
+ */
16
+ export interface LstMintInfo {
17
+ /** Display name for the LST. */
18
+ name: string;
19
+ /** Mainnet mint address. */
20
+ mainnet: PublicKey;
21
+ /** Devnet mint address, if the LST has a devnet deployment. */
22
+ devnet?: PublicKey;
23
+ /** Decimals (typically 9 for SOL-pegged LSTs). */
24
+ decimals: number;
25
+ /**
26
+ * Brief blurb on the LST's design — used by the SDK's
27
+ * `formatBondInfo` helper to surface "what is this bond actually
28
+ * worth?" hints to a UI.
29
+ */
30
+ description: string;
31
+ }
32
+ export declare const JITOSOL: LstMintInfo;
33
+ export declare const MSOL: LstMintInfo;
34
+ export declare const BSOL: LstMintInfo;
35
+ /** Convenience lookup by name. */
36
+ export declare const LST_REGISTRY: Record<string, LstMintInfo>;
37
+ /**
38
+ * Convert a bond amount in LST atomic units to display SOL given a
39
+ * known LST → SOL exchange rate. The rate is typically fetched off-
40
+ * chain (e.g. JitoSOL provides a sanctum API) and changes slowly.
41
+ *
42
+ * For example: 10_000_000_000 JitoSOL atomic units (= 10 JitoSOL)
43
+ * at a rate of 1.15 SOL per JitoSOL → 11.5 SOL of effective bond.
44
+ */
45
+ export declare function lstToSolDisplay(atomicAmount: bigint, lst: LstMintInfo, ratePerLst: number): number;
46
+ /**
47
+ * Quick check: does the SDK consider this mint a known LST? Used by
48
+ * the validator detail page in `/explore/sacp` to show a small
49
+ * "appreciating bond" badge.
50
+ */
51
+ export declare function isKnownLst(mint: PublicKey): LstMintInfo | null;
52
+ //# sourceMappingURL=lst.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lst.d.ts","sourceRoot":"","sources":["../src/lst.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,OAAO,EAAE,SAAS,CAAC;IACnB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,OAAO,EAAE,WAWrB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,WAOlB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,WAOlB,CAAC;AAEF,kCAAkC;AAClC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAIpD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,IAAI,CAO9D"}
package/dist/lst.js ADDED
@@ -0,0 +1,58 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export const JITOSOL = {
3
+ name: "JitoSOL",
4
+ mainnet: new PublicKey("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn"),
5
+ decimals: 9,
6
+ description: "JitoSOL is Jito's liquid-staked SOL. The price-per-token grows as " +
7
+ "MEV + staking rewards accrue, so a bond denominated in JitoSOL " +
8
+ "appreciates in SOL terms while held. v0.4 sACP accepts JitoSOL " +
9
+ "without code changes — the bond_amount field stays constant in " +
10
+ "JitoSOL units, and the slash split (70/30) divides those JitoSOL " +
11
+ "units rather than the underlying SOL.",
12
+ };
13
+ export const MSOL = {
14
+ name: "mSOL",
15
+ mainnet: new PublicKey("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So"),
16
+ decimals: 9,
17
+ description: "mSOL is Marinade's liquid-staked SOL. Same accrual story as " +
18
+ "JitoSOL — the bond appreciates in SOL terms over time.",
19
+ };
20
+ export const BSOL = {
21
+ name: "bSOL",
22
+ mainnet: new PublicKey("bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1"),
23
+ decimals: 9,
24
+ description: "bSOL is BlazeStake's liquid-staked SOL. Compatible with sACP " +
25
+ "v0.4 as a bond mint.",
26
+ };
27
+ /** Convenience lookup by name. */
28
+ export const LST_REGISTRY = {
29
+ JitoSOL: JITOSOL,
30
+ mSOL: MSOL,
31
+ bSOL: BSOL,
32
+ };
33
+ /**
34
+ * Convert a bond amount in LST atomic units to display SOL given a
35
+ * known LST → SOL exchange rate. The rate is typically fetched off-
36
+ * chain (e.g. JitoSOL provides a sanctum API) and changes slowly.
37
+ *
38
+ * For example: 10_000_000_000 JitoSOL atomic units (= 10 JitoSOL)
39
+ * at a rate of 1.15 SOL per JitoSOL → 11.5 SOL of effective bond.
40
+ */
41
+ export function lstToSolDisplay(atomicAmount, lst, ratePerLst) {
42
+ const wholeLst = Number(atomicAmount) / 10 ** lst.decimals;
43
+ return wholeLst * ratePerLst;
44
+ }
45
+ /**
46
+ * Quick check: does the SDK consider this mint a known LST? Used by
47
+ * the validator detail page in `/explore/sacp` to show a small
48
+ * "appreciating bond" badge.
49
+ */
50
+ export function isKnownLst(mint) {
51
+ for (const lst of Object.values(LST_REGISTRY)) {
52
+ if (lst.mainnet.equals(mint) || (lst.devnet && lst.devnet.equals(mint))) {
53
+ return lst;
54
+ }
55
+ }
56
+ return null;
57
+ }
58
+ //# sourceMappingURL=lst.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lst.js","sourceRoot":"","sources":["../src/lst.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAkC5C,MAAM,CAAC,MAAM,OAAO,GAAgB;IAClC,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,IAAI,SAAS,CAAC,8CAA8C,CAAC;IACtE,QAAQ,EAAE,CAAC;IACX,WAAW,EACT,oEAAoE;QACpE,iEAAiE;QACjE,iEAAiE;QACjE,iEAAiE;QACjE,mEAAmE;QACnE,uCAAuC;CAC1C,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,IAAI,SAAS,CAAC,6CAA6C,CAAC;IACrE,QAAQ,EAAE,CAAC;IACX,WAAW,EACT,8DAA8D;QAC9D,wDAAwD;CAC3D,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAgB;IAC/B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,IAAI,SAAS,CAAC,6CAA6C,CAAC;IACrE,QAAQ,EAAE,CAAC;IACX,WAAW,EACT,+DAA+D;QAC/D,sBAAsB;CACzB,CAAC;AAEF,kCAAkC;AAClC,MAAM,CAAC,MAAM,YAAY,GAAgC;IACvD,OAAO,EAAE,OAAO;IAChB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,IAAI;CACX,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC7B,YAAoB,EACpB,GAAgB,EAChB,UAAkB;IAElB,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC;IAC3D,OAAO,QAAQ,GAAG,UAAU,CAAC;AAC/B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAe;IACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACxE,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
2
+ export type NegotiationState = "Open" | "Countered" | "Accepted" | "Cancelled";
3
+ export interface ProposeTermsParams {
4
+ buyer: PublicKey;
5
+ provider: PublicKey;
6
+ evaluator: PublicKey;
7
+ bondMint: PublicKey;
8
+ negotiationId: bigint;
9
+ amount: bigint;
10
+ workUri: string;
11
+ submitWindowSecs: bigint;
12
+ }
13
+ export interface ProposeTermsBuildResult {
14
+ ix: TransactionInstruction;
15
+ negotiationPda: PublicKey;
16
+ }
17
+ export declare function buildProposeTermsIx(params: ProposeTermsParams): ProposeTermsBuildResult;
18
+ export interface CounterTermsParams {
19
+ signer: PublicKey;
20
+ buyer: PublicKey;
21
+ negotiationId: bigint;
22
+ amount: bigint;
23
+ workUri: string;
24
+ submitWindowSecs: bigint;
25
+ }
26
+ export declare function buildCounterTermsIx(params: CounterTermsParams): TransactionInstruction;
27
+ export declare function buildAcceptTermsIx(params: {
28
+ signer: PublicKey;
29
+ buyer: PublicKey;
30
+ negotiationId: bigint;
31
+ }): TransactionInstruction;
32
+ export declare function buildCancelNegotiationIx(params: {
33
+ signer: PublicKey;
34
+ buyer: PublicKey;
35
+ negotiationId: bigint;
36
+ }): TransactionInstruction;
37
+ export interface MaterializeJobParams {
38
+ buyer: PublicKey;
39
+ bondMint: PublicKey;
40
+ negotiationId: bigint;
41
+ jobId: bigint;
42
+ }
43
+ export interface MaterializeJobBuildResult {
44
+ ix: TransactionInstruction;
45
+ jobPda: PublicKey;
46
+ escrowPda: PublicKey;
47
+ escrowVaultPda: PublicKey;
48
+ }
49
+ export declare function buildMaterializeJobIx(params: MaterializeJobParams): MaterializeJobBuildResult;
50
+ export interface FetchedNegotiation {
51
+ pda: PublicKey;
52
+ buyer: PublicKey;
53
+ provider: PublicKey;
54
+ evaluator: PublicKey;
55
+ bondMint: PublicKey;
56
+ negotiationId: bigint;
57
+ currentAmount: bigint;
58
+ currentWorkUri: string;
59
+ currentSubmitWindowSecs: bigint;
60
+ state: NegotiationState;
61
+ lastProposer: PublicKey;
62
+ createdAt: bigint;
63
+ updatedAt: bigint;
64
+ }
65
+ export declare function fetchNegotiation(connection: Connection, buyer: PublicKey, negotiationId: bigint): Promise<FetchedNegotiation | null>;
66
+ //# sourceMappingURL=negotiation.d.ts.map