@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negotiation.d.ts","sourceRoot":"","sources":["../src/negotiation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAGT,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AA2CzB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC;AAU/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,GACzB,uBAAuB,CA4BzB;AAID,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,GACzB,sBAAsB,CAmBxB;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IACzC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,sBAAsB,CAWzB;AAID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE;IAC/C,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,sBAAsB,CAYzB;AAID,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,sBAAsB,CAAC;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,SAAS,CAAC;CAC3B;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,GAC3B,yBAAyB,CAuB3B;AAID,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,uBAAuB,EAAE,MAAM,CAAC;IAChC,KAAK,EAAE,gBAAgB,CAAC;IACxB,YAAY,EAAE,SAAS,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAqED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAKpC"}
@@ -0,0 +1,184 @@
1
+ import { PublicKey, SYSVAR_RENT_PUBKEY, SystemProgram, TransactionInstruction, } from "@solana/web3.js";
2
+ import { encodeI64, encodeInstruction, encodeString, encodeU64, } from "./codec.js";
3
+ import { SACP_PROGRAM_ID } from "./constants.js";
4
+ import { findEscrowPda, findEscrowVaultPda, findJobPda, findNegotiationPda, } from "./pdas.js";
5
+ /**
6
+ * v1.0 Phase 8 — Negotiation phase.
7
+ *
8
+ * Replaces the v0.x assumption that the buyer dictates Job terms in
9
+ * one shot. A Negotiation is a separate PDA that tracks proposed +
10
+ * countered terms between buyer and provider. Either side can counter
11
+ * back-and-forth; whichever side did NOT propose last is the only one
12
+ * eligible to accept. Once Accepted, the buyer calls `materialize_job`
13
+ * to lift the negotiation into a real Job + escrow vault.
14
+ *
15
+ * State machine (NegotiationState):
16
+ * Open = 0 (buyer proposed, awaiting provider)
17
+ * Countered = 1 (provider countered, awaiting buyer)
18
+ * Accepted = 2 (both sides committed; ready to materialize)
19
+ * Cancelled = 3
20
+ *
21
+ * The legacy `create_job` flow is untouched — callers that don't need
22
+ * negotiation can keep using it. This module exists for the path that
23
+ * does.
24
+ */
25
+ const SPL_TOKEN_PROGRAM_ID = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
26
+ const SPL_ASSOCIATED_TOKEN_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
27
+ const NEGOTIATION_STATE_NUMERIC = {
28
+ Open: 0,
29
+ Countered: 1,
30
+ Accepted: 2,
31
+ Cancelled: 3,
32
+ };
33
+ export function buildProposeTermsIx(params) {
34
+ if (Buffer.byteLength(params.workUri, "utf8") > 256) {
35
+ throw new Error("workUri exceeds 256 bytes");
36
+ }
37
+ const [negotiationPda] = findNegotiationPda(params.buyer, params.negotiationId);
38
+ const data = encodeInstruction("propose_terms", encodeU64(params.negotiationId), encodeU64(params.amount), encodeString(params.workUri), encodeI64(params.submitWindowSecs));
39
+ const ix = new TransactionInstruction({
40
+ programId: SACP_PROGRAM_ID,
41
+ keys: [
42
+ { pubkey: params.buyer, isSigner: true, isWritable: true },
43
+ { pubkey: params.provider, isSigner: false, isWritable: false },
44
+ { pubkey: params.evaluator, isSigner: false, isWritable: false },
45
+ { pubkey: params.bondMint, isSigner: false, isWritable: false },
46
+ { pubkey: negotiationPda, isSigner: false, isWritable: true },
47
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
48
+ ],
49
+ data,
50
+ });
51
+ return { ix, negotiationPda };
52
+ }
53
+ export function buildCounterTermsIx(params) {
54
+ if (Buffer.byteLength(params.workUri, "utf8") > 256) {
55
+ throw new Error("workUri exceeds 256 bytes");
56
+ }
57
+ const [negotiationPda] = findNegotiationPda(params.buyer, params.negotiationId);
58
+ const data = encodeInstruction("counter_terms", encodeU64(params.amount), encodeString(params.workUri), encodeI64(params.submitWindowSecs));
59
+ return new TransactionInstruction({
60
+ programId: SACP_PROGRAM_ID,
61
+ keys: [
62
+ { pubkey: params.signer, isSigner: true, isWritable: false },
63
+ { pubkey: negotiationPda, isSigner: false, isWritable: true },
64
+ ],
65
+ data,
66
+ });
67
+ }
68
+ /* ─── builder: accept_terms ──────────────────────────────────────── */
69
+ export function buildAcceptTermsIx(params) {
70
+ const [negotiationPda] = findNegotiationPda(params.buyer, params.negotiationId);
71
+ const data = encodeInstruction("accept_terms");
72
+ return new TransactionInstruction({
73
+ programId: SACP_PROGRAM_ID,
74
+ keys: [
75
+ { pubkey: params.signer, isSigner: true, isWritable: false },
76
+ { pubkey: negotiationPda, isSigner: false, isWritable: true },
77
+ ],
78
+ data,
79
+ });
80
+ }
81
+ /* ─── builder: cancel_negotiation ────────────────────────────────── */
82
+ export function buildCancelNegotiationIx(params) {
83
+ const [negotiationPda] = findNegotiationPda(params.buyer, params.negotiationId);
84
+ const data = encodeInstruction("cancel_negotiation");
85
+ return new TransactionInstruction({
86
+ programId: SACP_PROGRAM_ID,
87
+ keys: [
88
+ { pubkey: params.signer, isSigner: true, isWritable: true },
89
+ { pubkey: params.buyer, isSigner: false, isWritable: true },
90
+ { pubkey: negotiationPda, isSigner: false, isWritable: true },
91
+ ],
92
+ data,
93
+ });
94
+ }
95
+ export function buildMaterializeJobIx(params) {
96
+ const [negotiationPda] = findNegotiationPda(params.buyer, params.negotiationId);
97
+ const [jobPda] = findJobPda(params.jobId);
98
+ const [escrowPda] = findEscrowPda(params.jobId);
99
+ const [escrowVaultPda] = findEscrowVaultPda(params.jobId);
100
+ const data = encodeInstruction("materialize_job", encodeU64(params.jobId));
101
+ const ix = new TransactionInstruction({
102
+ programId: SACP_PROGRAM_ID,
103
+ keys: [
104
+ { pubkey: params.buyer, isSigner: true, isWritable: true },
105
+ { pubkey: params.bondMint, isSigner: false, isWritable: false },
106
+ { pubkey: negotiationPda, isSigner: false, isWritable: true },
107
+ { pubkey: jobPda, isSigner: false, isWritable: true },
108
+ { pubkey: escrowPda, isSigner: false, isWritable: false },
109
+ { pubkey: escrowVaultPda, isSigner: false, isWritable: true },
110
+ { pubkey: SPL_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
111
+ { pubkey: SPL_ASSOCIATED_TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
112
+ { pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
113
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
114
+ ],
115
+ data,
116
+ });
117
+ return { ix, jobPda, escrowPda, escrowVaultPda };
118
+ }
119
+ function parseNegotiationFromBuffer(pda, data) {
120
+ let offset = 8;
121
+ const readPubkey = () => {
122
+ const pk = new PublicKey(data.subarray(offset, offset + 32));
123
+ offset += 32;
124
+ return pk;
125
+ };
126
+ const readU64 = () => {
127
+ const v = data.readBigUInt64LE(offset);
128
+ offset += 8;
129
+ return v;
130
+ };
131
+ const readI64 = () => {
132
+ const v = data.readBigInt64LE(offset);
133
+ offset += 8;
134
+ return v;
135
+ };
136
+ const readString = () => {
137
+ const len = data.readUInt32LE(offset);
138
+ offset += 4;
139
+ const s = data.subarray(offset, offset + len).toString("utf8");
140
+ offset += len;
141
+ return s;
142
+ };
143
+ const readU8 = () => {
144
+ const v = data.readUInt8(offset);
145
+ offset += 1;
146
+ return v;
147
+ };
148
+ const buyer = readPubkey();
149
+ const provider = readPubkey();
150
+ const evaluator = readPubkey();
151
+ const bondMint = readPubkey();
152
+ const negotiationId = readU64();
153
+ const currentAmount = readU64();
154
+ const currentWorkUri = readString();
155
+ const currentSubmitWindowSecs = readI64();
156
+ const stateByte = readU8();
157
+ const lastProposer = readPubkey();
158
+ const createdAt = readI64();
159
+ const updatedAt = readI64();
160
+ const state = (Object.entries(NEGOTIATION_STATE_NUMERIC).find(([, v]) => v === stateByte)?.[0] ?? "Open");
161
+ return {
162
+ pda,
163
+ buyer,
164
+ provider,
165
+ evaluator,
166
+ bondMint,
167
+ negotiationId,
168
+ currentAmount,
169
+ currentWorkUri,
170
+ currentSubmitWindowSecs,
171
+ state,
172
+ lastProposer,
173
+ createdAt,
174
+ updatedAt,
175
+ };
176
+ }
177
+ export async function fetchNegotiation(connection, buyer, negotiationId) {
178
+ const [pda] = findNegotiationPda(buyer, negotiationId);
179
+ const info = await connection.getAccountInfo(pda, "confirmed");
180
+ if (!info)
181
+ return null;
182
+ return parseNegotiationFromBuffer(pda, info.data);
183
+ }
184
+ //# sourceMappingURL=negotiation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"negotiation.js","sourceRoot":"","sources":["../src/negotiation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
2
+ export interface RegisterOfferingParams {
3
+ provider: PublicKey;
4
+ defaultEvaluator: PublicKey;
5
+ bondMint: PublicKey;
6
+ slotId: number;
7
+ category: number;
8
+ pricePerUnit: bigint;
9
+ minAmount: bigint;
10
+ maxAmount: bigint;
11
+ metadataUri: string;
12
+ }
13
+ export interface RegisterOfferingBuildResult {
14
+ ix: TransactionInstruction;
15
+ offeringPda: PublicKey;
16
+ }
17
+ export declare function buildRegisterOfferingIx(params: RegisterOfferingParams): RegisterOfferingBuildResult;
18
+ export interface UpdateOfferingParams {
19
+ provider: PublicKey;
20
+ slotId: number;
21
+ pricePerUnit: bigint;
22
+ minAmount: bigint;
23
+ maxAmount: bigint;
24
+ metadataUri: string;
25
+ active: boolean;
26
+ }
27
+ export declare function buildUpdateOfferingIx(params: UpdateOfferingParams): TransactionInstruction;
28
+ export declare function buildCloseOfferingIx(params: {
29
+ provider: PublicKey;
30
+ slotId: number;
31
+ }): TransactionInstruction;
32
+ export interface FetchedOffering {
33
+ pda: PublicKey;
34
+ provider: PublicKey;
35
+ defaultEvaluator: PublicKey;
36
+ bondMint: PublicKey;
37
+ slotId: number;
38
+ category: number;
39
+ pricePerUnit: bigint;
40
+ minAmount: bigint;
41
+ maxAmount: bigint;
42
+ metadataUri: string;
43
+ active: boolean;
44
+ createdAt: bigint;
45
+ updatedAt: bigint;
46
+ }
47
+ export declare function fetchOffering(connection: Connection, provider: PublicKey, slotId: number): Promise<FetchedOffering | null>;
48
+ /**
49
+ * Browse Offerings by an optional set of filters. Uses
50
+ * `getProgramAccounts` with memcmp filters when the field permits
51
+ * (provider / bond_mint), otherwise filters post-fetch.
52
+ *
53
+ * Field offsets in the Offering account:
54
+ * discriminator(8) | provider(32) | default_evaluator(32) | bond_mint(32) | slot_id(4) | category(1) | price_per_unit(8) | min_amount(8) | max_amount(8) | metadata_uri(4+N) | active(1) | created_at(8) | updated_at(8) | bump(1)
55
+ *
56
+ * provider sits at offset 8, bond_mint at 72, category at 76.
57
+ */
58
+ export declare function listOfferings(connection: Connection, filter?: {
59
+ provider?: PublicKey;
60
+ bondMint?: PublicKey;
61
+ category?: number;
62
+ onlyActive?: boolean;
63
+ maxPrice?: bigint;
64
+ }): Promise<FetchedOffering[]>;
65
+ //# sourceMappingURL=offering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offering.d.ts","sourceRoot":"","sources":["../src/offering.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAET,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAoCzB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,SAAS,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,sBAAsB,CAAC;IAC3B,WAAW,EAAE,SAAS,CAAC;CACxB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,sBAAsB,GAC7B,2BAA2B,CA6B7B;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,oBAAoB,GAC3B,sBAAsB,CAkBxB;AAID,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,sBAAsB,CAWzB;AAID,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,SAAS,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB,EAAE,SAAS,CAAC;IAC5B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAoED,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAKjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,MAAM,CAAC,EAAE;IACP,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GACA,OAAO,CAAC,eAAe,EAAE,CAAC,CAiC5B"}
@@ -0,0 +1,190 @@
1
+ import { PublicKey, SystemProgram, TransactionInstruction, } from "@solana/web3.js";
2
+ import { encodeInstruction, encodeString, encodeU8, encodeU64, } from "./codec.js";
3
+ import { SACP_PROGRAM_ID } from "./constants.js";
4
+ import { findOfferingPda } from "./pdas.js";
5
+ /**
6
+ * v0.9 — Offering registry.
7
+ *
8
+ * A provider registers one or more Offerings (PDA per slot_id) that
9
+ * describe what they do, in what price band, in what bond mint, and
10
+ * which evaluator they trust by default. Buyers browse Offerings and
11
+ * use `createJobFromOffering` (SDK helper) to spin up a Job with
12
+ * those terms.
13
+ *
14
+ * Layout matches `Offering` in programs/sacp_job/src/lib.rs.
15
+ *
16
+ * Wire-level: hand-rolled Borsh — no IDL dependency, same pattern as
17
+ * the rest of @telaro/sacp.
18
+ */
19
+ function encodeU32(value) {
20
+ const buf = Buffer.alloc(4);
21
+ buf.writeUInt32LE(value);
22
+ return buf;
23
+ }
24
+ function encodeBool(value) {
25
+ return Buffer.from([value ? 1 : 0]);
26
+ }
27
+ export function buildRegisterOfferingIx(params) {
28
+ if (params.minAmount > params.maxAmount) {
29
+ throw new Error("minAmount must be ≤ maxAmount");
30
+ }
31
+ if (Buffer.byteLength(params.metadataUri, "utf8") > 256) {
32
+ throw new Error("metadataUri exceeds 256 bytes");
33
+ }
34
+ const [offeringPda] = findOfferingPda(params.provider, params.slotId);
35
+ const data = encodeInstruction("register_offering", encodeU32(params.slotId), encodeU8(params.category), encodeU64(params.pricePerUnit), encodeU64(params.minAmount), encodeU64(params.maxAmount), encodeString(params.metadataUri));
36
+ const ix = new TransactionInstruction({
37
+ programId: SACP_PROGRAM_ID,
38
+ keys: [
39
+ { pubkey: params.provider, isSigner: true, isWritable: true },
40
+ { pubkey: params.defaultEvaluator, isSigner: false, isWritable: false },
41
+ { pubkey: params.bondMint, isSigner: false, isWritable: false },
42
+ { pubkey: offeringPda, isSigner: false, isWritable: true },
43
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
44
+ ],
45
+ data,
46
+ });
47
+ return { ix, offeringPda };
48
+ }
49
+ export function buildUpdateOfferingIx(params) {
50
+ const [offeringPda] = findOfferingPda(params.provider, params.slotId);
51
+ const data = encodeInstruction("update_offering", encodeU64(params.pricePerUnit), encodeU64(params.minAmount), encodeU64(params.maxAmount), encodeString(params.metadataUri), encodeBool(params.active));
52
+ return new TransactionInstruction({
53
+ programId: SACP_PROGRAM_ID,
54
+ keys: [
55
+ { pubkey: params.provider, isSigner: true, isWritable: false },
56
+ { pubkey: offeringPda, isSigner: false, isWritable: true },
57
+ ],
58
+ data,
59
+ });
60
+ }
61
+ /* ─── builder: close_offering ──────────────────────────────────────── */
62
+ export function buildCloseOfferingIx(params) {
63
+ const [offeringPda] = findOfferingPda(params.provider, params.slotId);
64
+ const data = encodeInstruction("close_offering");
65
+ return new TransactionInstruction({
66
+ programId: SACP_PROGRAM_ID,
67
+ keys: [
68
+ { pubkey: params.provider, isSigner: true, isWritable: true },
69
+ { pubkey: offeringPda, isSigner: false, isWritable: true },
70
+ ],
71
+ data,
72
+ });
73
+ }
74
+ function parseOfferingFromBuffer(pda, data) {
75
+ let offset = 8;
76
+ const readPubkey = () => {
77
+ const pk = new PublicKey(data.subarray(offset, offset + 32));
78
+ offset += 32;
79
+ return pk;
80
+ };
81
+ const readU64 = () => {
82
+ const v = data.readBigUInt64LE(offset);
83
+ offset += 8;
84
+ return v;
85
+ };
86
+ const readI64 = () => {
87
+ const v = data.readBigInt64LE(offset);
88
+ offset += 8;
89
+ return v;
90
+ };
91
+ const readU32 = () => {
92
+ const v = data.readUInt32LE(offset);
93
+ offset += 4;
94
+ return v;
95
+ };
96
+ const readU8 = () => {
97
+ const v = data.readUInt8(offset);
98
+ offset += 1;
99
+ return v;
100
+ };
101
+ const readString = () => {
102
+ const len = data.readUInt32LE(offset);
103
+ offset += 4;
104
+ const s = data.subarray(offset, offset + len).toString("utf8");
105
+ offset += len;
106
+ return s;
107
+ };
108
+ const readBool = () => readU8() !== 0;
109
+ const provider = readPubkey();
110
+ const defaultEvaluator = readPubkey();
111
+ const bondMint = readPubkey();
112
+ const slotId = readU32();
113
+ const category = readU8();
114
+ const pricePerUnit = readU64();
115
+ const minAmount = readU64();
116
+ const maxAmount = readU64();
117
+ const metadataUri = readString();
118
+ const active = readBool();
119
+ const createdAt = readI64();
120
+ const updatedAt = readI64();
121
+ return {
122
+ pda,
123
+ provider,
124
+ defaultEvaluator,
125
+ bondMint,
126
+ slotId,
127
+ category,
128
+ pricePerUnit,
129
+ minAmount,
130
+ maxAmount,
131
+ metadataUri,
132
+ active,
133
+ createdAt,
134
+ updatedAt,
135
+ };
136
+ }
137
+ export async function fetchOffering(connection, provider, slotId) {
138
+ const [pda] = findOfferingPda(provider, slotId);
139
+ const info = await connection.getAccountInfo(pda, "confirmed");
140
+ if (!info)
141
+ return null;
142
+ return parseOfferingFromBuffer(pda, info.data);
143
+ }
144
+ /**
145
+ * Browse Offerings by an optional set of filters. Uses
146
+ * `getProgramAccounts` with memcmp filters when the field permits
147
+ * (provider / bond_mint), otherwise filters post-fetch.
148
+ *
149
+ * Field offsets in the Offering account:
150
+ * discriminator(8) | provider(32) | default_evaluator(32) | bond_mint(32) | slot_id(4) | category(1) | price_per_unit(8) | min_amount(8) | max_amount(8) | metadata_uri(4+N) | active(1) | created_at(8) | updated_at(8) | bump(1)
151
+ *
152
+ * provider sits at offset 8, bond_mint at 72, category at 76.
153
+ */
154
+ export async function listOfferings(connection, filter) {
155
+ const filters = [];
156
+ if (filter?.provider) {
157
+ filters.push({
158
+ memcmp: { offset: 8, bytes: filter.provider.toBase58() },
159
+ });
160
+ }
161
+ if (filter?.bondMint) {
162
+ filters.push({
163
+ memcmp: { offset: 72, bytes: filter.bondMint.toBase58() },
164
+ });
165
+ }
166
+ const accounts = await connection.getProgramAccounts(SACP_PROGRAM_ID, {
167
+ commitment: "confirmed",
168
+ filters,
169
+ });
170
+ const out = [];
171
+ for (const { pubkey, account } of accounts) {
172
+ try {
173
+ const off = parseOfferingFromBuffer(pubkey, account.data);
174
+ if (filter?.category !== undefined && off.category !== filter.category) {
175
+ continue;
176
+ }
177
+ if (filter?.onlyActive && !off.active)
178
+ continue;
179
+ if (filter?.maxPrice !== undefined && off.pricePerUnit > filter.maxPrice) {
180
+ continue;
181
+ }
182
+ out.push(off);
183
+ }
184
+ catch {
185
+ // Discriminator mismatch — not an Offering account.
186
+ }
187
+ }
188
+ return out;
189
+ }
190
+ //# sourceMappingURL=offering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"offering.js","sourceRoot":"","sources":["../src/offering.ts"],"names":[],"mappings":"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"}
package/dist/pdas.d.ts ADDED
@@ -0,0 +1,44 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ export declare function findJobPda(jobId: bigint): [PublicKey, number];
3
+ /**
4
+ * Escrow authority PDA. PDA-only — does not hold tokens itself, only
5
+ * signs as the owner of the `EscrowVault` TokenAccount.
6
+ */
7
+ export declare function findEscrowPda(jobId: bigint): [PublicKey, number];
8
+ /**
9
+ * Escrow vault — the actual SPL Token account holding the Job's funds.
10
+ * Owned by the `Escrow` authority PDA above.
11
+ */
12
+ export declare function findEscrowVaultPda(jobId: bigint): [PublicKey, number];
13
+ export declare function findSubmissionPda(jobId: bigint): [PublicKey, number];
14
+ export declare function findVerdictPda(jobId: bigint): [PublicKey, number];
15
+ /**
16
+ * Protocol Config PDA. Holds the take-rate policy and the
17
+ * authority that can update it or withdraw from the per-mint Treasury
18
+ * ATAs. Doubles as the Treasury ATAs' owner — there is no separate
19
+ * "treasury authority" PDA on the Job side.
20
+ */
21
+ export declare function findSacpConfigPda(): [PublicKey, number];
22
+ /** v0.9: Provider's per-slot Offering PDA. `slotId` is u32 little-endian. */
23
+ export declare function findOfferingPda(provider: PublicKey, slotId: number): [PublicKey, number];
24
+ /** v1.0 Phase 8: Negotiation PDA. `negotiationId` is u64 little-endian. */
25
+ export declare function findNegotiationPda(buyer: PublicKey, negotiationId: bigint): [PublicKey, number];
26
+ export declare function findValidatorPda(authority: PublicKey): [PublicKey, number];
27
+ export declare function findBondPda(validator: PublicKey): [PublicKey, number];
28
+ /** PDA that signs as authority over the bond vault TokenAccount. */
29
+ export declare function findBondAuthorityPda(validatorAuthority: PublicKey): [PublicKey, number];
30
+ /** Bond vault — the SPL Token account holding the validator's stake. */
31
+ export declare function findBondVaultPda(validatorAuthority: PublicKey): [PublicKey, number];
32
+ export declare function findChallengePda(jobId: bigint): [PublicKey, number];
33
+ /** Program-owned treasury authority — single PDA, controls every per-mint vault. */
34
+ export declare function findTreasuryAuthorityPda(): [PublicKey, number];
35
+ /** Canonical per-mint treasury vault. Receives 30% of every slash. */
36
+ export declare function findTreasuryVaultPda(bondMint: PublicKey): [PublicKey, number];
37
+ /**
38
+ * Resolver Config PDA. Holds the authority that can call
39
+ * `resolve_challenge`. Pre-v0.7 deployments must run
40
+ * `init_resolver_config` immediately after upgrade — until then the
41
+ * validation program rejects every resolution attempt.
42
+ */
43
+ export declare function findResolverConfigPda(): [PublicKey, number];
44
+ //# sourceMappingURL=pdas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdas.d.ts","sourceRoot":"","sources":["../src/pdas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAwC5C,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAK7D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKhE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKpE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKjE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAKvD;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,MAAM,GACb,CAAC,SAAS,EAAE,MAAM,CAAC,CAOrB;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,EAChB,aAAa,EAAE,MAAM,GACpB,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAK1E;AAED,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrE;AAED,oEAAoE;AACpE,wBAAgB,oBAAoB,CAClC,kBAAkB,EAAE,SAAS,GAC5B,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wEAAwE;AACxE,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,SAAS,GAC5B,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAKnE;AAED,oFAAoF;AACpF,wBAAgB,wBAAwB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAK9D;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,SAAS,GAClB,CAAC,SAAS,EAAE,MAAM,CAAC,CAKrB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAK3D"}
package/dist/pdas.js ADDED
@@ -0,0 +1,95 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+ import { BOND_AUTHORITY_SEED_PREFIX, BOND_SEED_PREFIX, BOND_VAULT_SEED_PREFIX, CHALLENGE_SEED_PREFIX, CONFIG_SEED_PREFIX, NEGOTIATION_SEED_PREFIX, OFFERING_SEED_PREFIX, ESCROW_SEED_PREFIX, ESCROW_VAULT_SEED_PREFIX, JOB_SEED_PREFIX, RESOLVER_CONFIG_SEED_PREFIX, SACP_PROGRAM_ID, SACP_VALIDATION_PROGRAM_ID, SUBMISSION_SEED_PREFIX, TREASURY_AUTHORITY_SEED_PREFIX, TREASURY_VAULT_SEED_PREFIX, VALIDATOR_SEED_PREFIX, VERDICT_SEED_PREFIX, } from "./constants.js";
3
+ /**
4
+ * Deterministic PDA derivations matching SRFC v0.1 §"PDA layout".
5
+ *
6
+ * All Job-side PDAs are keyed by `jobId` (u64) so the spec is opinion-
7
+ * agnostic about who allocates IDs — we recommend a monotonic counter
8
+ * held by the Client (e.g. `Date.now() * 1000 + nonce`). The PDAs
9
+ * never collide between programs because the seed namespace differs.
10
+ *
11
+ * v0.1 helpers are sync because they only call `PublicKey.findProgramAddressSync`,
12
+ * which is a pure derivation. No I/O.
13
+ */
14
+ function u64Bytes(n) {
15
+ const buf = Buffer.alloc(8);
16
+ buf.writeBigUInt64LE(n);
17
+ return buf;
18
+ }
19
+ export function findJobPda(jobId) {
20
+ return PublicKey.findProgramAddressSync([Buffer.from(JOB_SEED_PREFIX), u64Bytes(jobId)], SACP_PROGRAM_ID);
21
+ }
22
+ /**
23
+ * Escrow authority PDA. PDA-only — does not hold tokens itself, only
24
+ * signs as the owner of the `EscrowVault` TokenAccount.
25
+ */
26
+ export function findEscrowPda(jobId) {
27
+ return PublicKey.findProgramAddressSync([Buffer.from(ESCROW_SEED_PREFIX), u64Bytes(jobId)], SACP_PROGRAM_ID);
28
+ }
29
+ /**
30
+ * Escrow vault — the actual SPL Token account holding the Job's funds.
31
+ * Owned by the `Escrow` authority PDA above.
32
+ */
33
+ export function findEscrowVaultPda(jobId) {
34
+ return PublicKey.findProgramAddressSync([Buffer.from(ESCROW_VAULT_SEED_PREFIX), u64Bytes(jobId)], SACP_PROGRAM_ID);
35
+ }
36
+ export function findSubmissionPda(jobId) {
37
+ return PublicKey.findProgramAddressSync([Buffer.from(SUBMISSION_SEED_PREFIX), u64Bytes(jobId)], SACP_PROGRAM_ID);
38
+ }
39
+ export function findVerdictPda(jobId) {
40
+ return PublicKey.findProgramAddressSync([Buffer.from(VERDICT_SEED_PREFIX), u64Bytes(jobId)], SACP_PROGRAM_ID);
41
+ }
42
+ /**
43
+ * Protocol Config PDA. Holds the take-rate policy and the
44
+ * authority that can update it or withdraw from the per-mint Treasury
45
+ * ATAs. Doubles as the Treasury ATAs' owner — there is no separate
46
+ * "treasury authority" PDA on the Job side.
47
+ */
48
+ export function findSacpConfigPda() {
49
+ return PublicKey.findProgramAddressSync([Buffer.from(CONFIG_SEED_PREFIX)], SACP_PROGRAM_ID);
50
+ }
51
+ /** v0.9: Provider's per-slot Offering PDA. `slotId` is u32 little-endian. */
52
+ export function findOfferingPda(provider, slotId) {
53
+ const slotBytes = Buffer.alloc(4);
54
+ slotBytes.writeUInt32LE(slotId);
55
+ return PublicKey.findProgramAddressSync([Buffer.from(OFFERING_SEED_PREFIX), provider.toBuffer(), slotBytes], SACP_PROGRAM_ID);
56
+ }
57
+ /** v1.0 Phase 8: Negotiation PDA. `negotiationId` is u64 little-endian. */
58
+ export function findNegotiationPda(buyer, negotiationId) {
59
+ return PublicKey.findProgramAddressSync([Buffer.from(NEGOTIATION_SEED_PREFIX), buyer.toBuffer(), u64Bytes(negotiationId)], SACP_PROGRAM_ID);
60
+ }
61
+ export function findValidatorPda(authority) {
62
+ return PublicKey.findProgramAddressSync([Buffer.from(VALIDATOR_SEED_PREFIX), authority.toBuffer()], SACP_VALIDATION_PROGRAM_ID);
63
+ }
64
+ export function findBondPda(validator) {
65
+ return PublicKey.findProgramAddressSync([Buffer.from(BOND_SEED_PREFIX), validator.toBuffer()], SACP_VALIDATION_PROGRAM_ID);
66
+ }
67
+ /** PDA that signs as authority over the bond vault TokenAccount. */
68
+ export function findBondAuthorityPda(validatorAuthority) {
69
+ return PublicKey.findProgramAddressSync([Buffer.from(BOND_AUTHORITY_SEED_PREFIX), validatorAuthority.toBuffer()], SACP_VALIDATION_PROGRAM_ID);
70
+ }
71
+ /** Bond vault — the SPL Token account holding the validator's stake. */
72
+ export function findBondVaultPda(validatorAuthority) {
73
+ return PublicKey.findProgramAddressSync([Buffer.from(BOND_VAULT_SEED_PREFIX), validatorAuthority.toBuffer()], SACP_VALIDATION_PROGRAM_ID);
74
+ }
75
+ export function findChallengePda(jobId) {
76
+ return PublicKey.findProgramAddressSync([Buffer.from(CHALLENGE_SEED_PREFIX), u64Bytes(jobId)], SACP_VALIDATION_PROGRAM_ID);
77
+ }
78
+ /** Program-owned treasury authority — single PDA, controls every per-mint vault. */
79
+ export function findTreasuryAuthorityPda() {
80
+ return PublicKey.findProgramAddressSync([Buffer.from(TREASURY_AUTHORITY_SEED_PREFIX)], SACP_VALIDATION_PROGRAM_ID);
81
+ }
82
+ /** Canonical per-mint treasury vault. Receives 30% of every slash. */
83
+ export function findTreasuryVaultPda(bondMint) {
84
+ return PublicKey.findProgramAddressSync([Buffer.from(TREASURY_VAULT_SEED_PREFIX), bondMint.toBuffer()], SACP_VALIDATION_PROGRAM_ID);
85
+ }
86
+ /**
87
+ * Resolver Config PDA. Holds the authority that can call
88
+ * `resolve_challenge`. Pre-v0.7 deployments must run
89
+ * `init_resolver_config` immediately after upgrade — until then the
90
+ * validation program rejects every resolution attempt.
91
+ */
92
+ export function findResolverConfigPda() {
93
+ return PublicKey.findProgramAddressSync([Buffer.from(RESOLVER_CONFIG_SEED_PREFIX)], SACP_VALIDATION_PROGRAM_ID);
94
+ }
95
+ //# sourceMappingURL=pdas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pdas.js","sourceRoot":"","sources":["../src/pdas.ts"],"names":[],"mappings":"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"}