@telaro/sacp 1.0.2 → 1.0.3
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/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/jury.d.ts +83 -0
- package/dist/jury.d.ts.map +1 -0
- package/dist/jury.js +142 -0
- package/dist/jury.js.map +1 -0
- package/package.json +6 -1
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ export * as takeRate from "./take_rate.js";
|
|
|
26
26
|
export * as offering from "./offering.js";
|
|
27
27
|
export * as negotiation from "./negotiation.js";
|
|
28
28
|
export * as agreement from "./agreement.js";
|
|
29
|
+
export * as jury from "./jury.js";
|
|
29
30
|
export { SacpClient, JobSession, type JobActors, type JobSnapshot, type JobAction, type SacpClientConfig, } from "./runtime.js";
|
|
30
31
|
export { LocalSigner, RemoteSigner, WalletAdapterSigner, type SacpSigner, type RemoteSignTransport, type BrowserWalletAdapter, } from "./signer.js";
|
|
31
32
|
export { ProviderRuntime, EvaluatorRuntime, type ProviderRuntimeOptions, type EvaluatorRuntimeOptions, type WatcherCallbackContext, } from "./watcher.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","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;AAChD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","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;AAChD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EACL,UAAU,EACV,UAAU,EACV,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,GAC3B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,KAAK,wBAAwB,GAC9B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAE1B,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;AACnB,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ export * as takeRate from "./take_rate.js";
|
|
|
26
26
|
export * as offering from "./offering.js";
|
|
27
27
|
export * as negotiation from "./negotiation.js";
|
|
28
28
|
export * as agreement from "./agreement.js";
|
|
29
|
+
export * as jury from "./jury.js";
|
|
29
30
|
// v0.8 runtime layer — high-level client + session.
|
|
30
31
|
export { SacpClient, JobSession, } from "./runtime.js";
|
|
31
32
|
export { LocalSigner, RemoteSigner, WalletAdapterSigner, } from "./signer.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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;AAChD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;
|
|
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;AAChD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,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/jury.d.ts
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for `sacp_jury` — VRF-seeded jury draw program (Phase 8b
|
|
3
|
+
* Step 4).
|
|
4
|
+
*
|
|
5
|
+
* - `deriveJuryPda(jobIdHash)` — PDA lookup, deterministic from the
|
|
6
|
+
* sha256(jobId) bytes that buyer + provider both produce.
|
|
7
|
+
* - `buildOpenJuryIx(...)` — opens the Jury account before any
|
|
8
|
+
* panel draw runs.
|
|
9
|
+
* - `buildSealPanelIx(...)` — dev / test path. Caller supplies the
|
|
10
|
+
* candidate list and a mock 32-byte seed.
|
|
11
|
+
* - `buildSealPanelFromRandomnessIx(...)` — production path. Pass a
|
|
12
|
+
* Switchboard On-Demand `Randomness` account; the program reads
|
|
13
|
+
* its `result_buffer` directly.
|
|
14
|
+
* - `fetchJury` / `parseJuryFromBuffer` — read + decode the sealed
|
|
15
|
+
* panel for downstream consumers (e.g. evaluator UI).
|
|
16
|
+
*/
|
|
17
|
+
import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
18
|
+
export declare const SACP_JURY_PROGRAM_ID: PublicKey;
|
|
19
|
+
/**
|
|
20
|
+
* Switchboard On-Demand program id used by `seal_panel_from_randomness`.
|
|
21
|
+
* Same value baked into `programs/sacp_jury/src/lib.rs`. Exported so
|
|
22
|
+
* the client can derive Randomness PDAs without re-importing the
|
|
23
|
+
* Switchboard SDK.
|
|
24
|
+
*/
|
|
25
|
+
export declare const SWITCHBOARD_ON_DEMAND_PROGRAM_ID: PublicKey;
|
|
26
|
+
export declare const SEED_JURY: Buffer<ArrayBuffer>;
|
|
27
|
+
export declare const MAX_PANEL_SIZE = 9;
|
|
28
|
+
export declare const MAX_CANDIDATES = 64;
|
|
29
|
+
/** Derive the Jury PDA for a 32-byte jobId hash. */
|
|
30
|
+
export declare function deriveJuryPda(jobIdHash: Uint8Array): [PublicKey, number];
|
|
31
|
+
export interface OpenJuryParams {
|
|
32
|
+
caller: PublicKey;
|
|
33
|
+
jobIdHash: Uint8Array;
|
|
34
|
+
panelSize: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function buildOpenJuryIx(params: OpenJuryParams): TransactionInstruction;
|
|
37
|
+
export interface CandidateInput {
|
|
38
|
+
authority: PublicKey;
|
|
39
|
+
stakeAtoms: bigint;
|
|
40
|
+
}
|
|
41
|
+
export interface SealPanelParams {
|
|
42
|
+
cranker: PublicKey;
|
|
43
|
+
jury: PublicKey;
|
|
44
|
+
candidates: ReadonlyArray<CandidateInput>;
|
|
45
|
+
mockSeed: Uint8Array;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Dev / test path. Use this when you want a deterministic draw for a
|
|
49
|
+
* smoke test or local fixture. Production path is
|
|
50
|
+
* `buildSealPanelFromRandomnessIx`.
|
|
51
|
+
*/
|
|
52
|
+
export declare function buildSealPanelIx(params: SealPanelParams): TransactionInstruction;
|
|
53
|
+
export interface SealPanelFromRandomnessParams {
|
|
54
|
+
cranker: PublicKey;
|
|
55
|
+
jury: PublicKey;
|
|
56
|
+
candidates: ReadonlyArray<CandidateInput>;
|
|
57
|
+
/** Switchboard On-Demand `Randomness` account that's been revealed. */
|
|
58
|
+
randomness: PublicKey;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Production path. The program reads the `result_buffer` from the
|
|
62
|
+
* Switchboard account directly — caller is responsible for having
|
|
63
|
+
* already triggered the Switchboard request + reveal flow before
|
|
64
|
+
* cranking this IX. Pre-reveal calls fail with
|
|
65
|
+
* `RandomnessNotResolved`.
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildSealPanelFromRandomnessIx(params: SealPanelFromRandomnessParams): TransactionInstruction;
|
|
68
|
+
export interface FetchedJury {
|
|
69
|
+
jobIdHash: Uint8Array;
|
|
70
|
+
panelSize: number;
|
|
71
|
+
sealed: boolean;
|
|
72
|
+
seedUsed: Uint8Array;
|
|
73
|
+
panel: PublicKey[];
|
|
74
|
+
bump: number;
|
|
75
|
+
}
|
|
76
|
+
export declare function fetchJury(conn: Connection, jobIdHash: Uint8Array): Promise<FetchedJury | null>;
|
|
77
|
+
/**
|
|
78
|
+
* Layout (must match programs/sacp_jury/src/lib.rs Jury):
|
|
79
|
+
* 8 disc + 32 jobId + 1 panel_size + 1 sealed +
|
|
80
|
+
* 32 seed_used + 4 panel_len + 32 * panel_len + 1 bump.
|
|
81
|
+
*/
|
|
82
|
+
export declare function parseJuryFromBuffer(data: Buffer): FetchedJury;
|
|
83
|
+
//# sourceMappingURL=jury.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jury.d.ts","sourceRoot":"","sources":["../src/jury.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EACL,UAAU,EACV,SAAS,EAET,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAQzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,WAE5C,CAAC;AAEF,eAAO,MAAM,SAAS,qBAAsB,CAAC;AAC7C,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,cAAc,KAAK,CAAC;AAEjC,oDAAoD;AACpD,wBAAgB,aAAa,CAAC,SAAS,EAAE,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAQxE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,sBAAsB,CAqB9E;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAgBD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC1C,QAAQ,EAAE,UAAU,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,eAAe,GACtB,sBAAsB,CAcxB;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC1C,uEAAuE;IACvE,UAAU,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,6BAA6B,GACpC,sBAAsB,CAcxB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,UAAU,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,UAAU,GACpB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAK7B;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAiC7D"}
|
package/dist/jury.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for `sacp_jury` — VRF-seeded jury draw program (Phase 8b
|
|
3
|
+
* Step 4).
|
|
4
|
+
*
|
|
5
|
+
* - `deriveJuryPda(jobIdHash)` — PDA lookup, deterministic from the
|
|
6
|
+
* sha256(jobId) bytes that buyer + provider both produce.
|
|
7
|
+
* - `buildOpenJuryIx(...)` — opens the Jury account before any
|
|
8
|
+
* panel draw runs.
|
|
9
|
+
* - `buildSealPanelIx(...)` — dev / test path. Caller supplies the
|
|
10
|
+
* candidate list and a mock 32-byte seed.
|
|
11
|
+
* - `buildSealPanelFromRandomnessIx(...)` — production path. Pass a
|
|
12
|
+
* Switchboard On-Demand `Randomness` account; the program reads
|
|
13
|
+
* its `result_buffer` directly.
|
|
14
|
+
* - `fetchJury` / `parseJuryFromBuffer` — read + decode the sealed
|
|
15
|
+
* panel for downstream consumers (e.g. evaluator UI).
|
|
16
|
+
*/
|
|
17
|
+
import { PublicKey, SystemProgram, TransactionInstruction, } from "@solana/web3.js";
|
|
18
|
+
import { encodeBytes32, encodeInstruction, encodeU8, encodeU64, } from "./codec.js";
|
|
19
|
+
export const SACP_JURY_PROGRAM_ID = new PublicKey("9tLdTxzEFKqqi9tK7DcRhoJ5HzWaxUzgqXnyjUZfM5i7");
|
|
20
|
+
/**
|
|
21
|
+
* Switchboard On-Demand program id used by `seal_panel_from_randomness`.
|
|
22
|
+
* Same value baked into `programs/sacp_jury/src/lib.rs`. Exported so
|
|
23
|
+
* the client can derive Randomness PDAs without re-importing the
|
|
24
|
+
* Switchboard SDK.
|
|
25
|
+
*/
|
|
26
|
+
export const SWITCHBOARD_ON_DEMAND_PROGRAM_ID = new PublicKey("SBondMDrcV3K4kxZR1HNVT7osZxAHVHgYXL5Ze1oMUv");
|
|
27
|
+
export const SEED_JURY = Buffer.from("jury");
|
|
28
|
+
export const MAX_PANEL_SIZE = 9;
|
|
29
|
+
export const MAX_CANDIDATES = 64;
|
|
30
|
+
/** Derive the Jury PDA for a 32-byte jobId hash. */
|
|
31
|
+
export function deriveJuryPda(jobIdHash) {
|
|
32
|
+
if (jobIdHash.length !== 32) {
|
|
33
|
+
throw new Error(`jobIdHash must be 32 bytes, got ${jobIdHash.length}`);
|
|
34
|
+
}
|
|
35
|
+
return PublicKey.findProgramAddressSync([SEED_JURY, Buffer.from(jobIdHash)], SACP_JURY_PROGRAM_ID);
|
|
36
|
+
}
|
|
37
|
+
export function buildOpenJuryIx(params) {
|
|
38
|
+
if (params.panelSize < 1 || params.panelSize > MAX_PANEL_SIZE) {
|
|
39
|
+
throw new Error(`panelSize must be 1..${MAX_PANEL_SIZE}, got ${params.panelSize}`);
|
|
40
|
+
}
|
|
41
|
+
const [jury] = deriveJuryPda(params.jobIdHash);
|
|
42
|
+
const data = encodeInstruction("open_jury", encodeBytes32(params.jobIdHash), encodeU8(params.panelSize));
|
|
43
|
+
return new TransactionInstruction({
|
|
44
|
+
programId: SACP_JURY_PROGRAM_ID,
|
|
45
|
+
keys: [
|
|
46
|
+
{ pubkey: params.caller, isSigner: true, isWritable: true },
|
|
47
|
+
{ pubkey: jury, isSigner: false, isWritable: true },
|
|
48
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
49
|
+
],
|
|
50
|
+
data,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
function encodeCandidates(list) {
|
|
54
|
+
if (list.length > MAX_CANDIDATES) {
|
|
55
|
+
throw new Error(`candidate list exceeds MAX_CANDIDATES=${MAX_CANDIDATES}, got ${list.length}`);
|
|
56
|
+
}
|
|
57
|
+
const len = Buffer.alloc(4);
|
|
58
|
+
len.writeUInt32LE(list.length);
|
|
59
|
+
const parts = list.map((c) => Buffer.concat([c.authority.toBuffer(), encodeU64(c.stakeAtoms)]));
|
|
60
|
+
return Buffer.concat([len, ...parts]);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Dev / test path. Use this when you want a deterministic draw for a
|
|
64
|
+
* smoke test or local fixture. Production path is
|
|
65
|
+
* `buildSealPanelFromRandomnessIx`.
|
|
66
|
+
*/
|
|
67
|
+
export function buildSealPanelIx(params) {
|
|
68
|
+
const data = encodeInstruction("seal_panel", encodeCandidates(params.candidates), encodeBytes32(params.mockSeed));
|
|
69
|
+
return new TransactionInstruction({
|
|
70
|
+
programId: SACP_JURY_PROGRAM_ID,
|
|
71
|
+
keys: [
|
|
72
|
+
{ pubkey: params.jury, isSigner: false, isWritable: true },
|
|
73
|
+
{ pubkey: params.cranker, isSigner: true, isWritable: false },
|
|
74
|
+
],
|
|
75
|
+
data,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Production path. The program reads the `result_buffer` from the
|
|
80
|
+
* Switchboard account directly — caller is responsible for having
|
|
81
|
+
* already triggered the Switchboard request + reveal flow before
|
|
82
|
+
* cranking this IX. Pre-reveal calls fail with
|
|
83
|
+
* `RandomnessNotResolved`.
|
|
84
|
+
*/
|
|
85
|
+
export function buildSealPanelFromRandomnessIx(params) {
|
|
86
|
+
const data = encodeInstruction("seal_panel_from_randomness", encodeCandidates(params.candidates));
|
|
87
|
+
return new TransactionInstruction({
|
|
88
|
+
programId: SACP_JURY_PROGRAM_ID,
|
|
89
|
+
keys: [
|
|
90
|
+
{ pubkey: params.jury, isSigner: false, isWritable: true },
|
|
91
|
+
{ pubkey: params.cranker, isSigner: true, isWritable: false },
|
|
92
|
+
{ pubkey: params.randomness, isSigner: false, isWritable: false },
|
|
93
|
+
],
|
|
94
|
+
data,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
export async function fetchJury(conn, jobIdHash) {
|
|
98
|
+
const [pda] = deriveJuryPda(jobIdHash);
|
|
99
|
+
const info = await conn.getAccountInfo(pda, "confirmed");
|
|
100
|
+
if (!info)
|
|
101
|
+
return null;
|
|
102
|
+
return parseJuryFromBuffer(info.data);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Layout (must match programs/sacp_jury/src/lib.rs Jury):
|
|
106
|
+
* 8 disc + 32 jobId + 1 panel_size + 1 sealed +
|
|
107
|
+
* 32 seed_used + 4 panel_len + 32 * panel_len + 1 bump.
|
|
108
|
+
*/
|
|
109
|
+
export function parseJuryFromBuffer(data) {
|
|
110
|
+
let offset = 8;
|
|
111
|
+
const readBytes32 = () => {
|
|
112
|
+
const v = new Uint8Array(data.subarray(offset, offset + 32));
|
|
113
|
+
offset += 32;
|
|
114
|
+
return v;
|
|
115
|
+
};
|
|
116
|
+
const readU8 = () => {
|
|
117
|
+
const v = data.readUInt8(offset);
|
|
118
|
+
offset += 1;
|
|
119
|
+
return v;
|
|
120
|
+
};
|
|
121
|
+
const readU32 = () => {
|
|
122
|
+
const v = data.readUInt32LE(offset);
|
|
123
|
+
offset += 4;
|
|
124
|
+
return v;
|
|
125
|
+
};
|
|
126
|
+
const readPubkey = () => {
|
|
127
|
+
const v = new PublicKey(data.subarray(offset, offset + 32));
|
|
128
|
+
offset += 32;
|
|
129
|
+
return v;
|
|
130
|
+
};
|
|
131
|
+
const jobIdHash = readBytes32();
|
|
132
|
+
const panelSize = readU8();
|
|
133
|
+
const sealed = readU8() === 1;
|
|
134
|
+
const seedUsed = readBytes32();
|
|
135
|
+
const panelLen = readU32();
|
|
136
|
+
const panel = [];
|
|
137
|
+
for (let i = 0; i < panelLen; i++)
|
|
138
|
+
panel.push(readPubkey());
|
|
139
|
+
const bump = readU8();
|
|
140
|
+
return { jobIdHash, panelSize, sealed, seedUsed, panel, bump };
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=jury.js.map
|
package/dist/jury.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jury.js","sourceRoot":"","sources":["../src/jury.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@telaro/sacp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "Solana Agent Commerce Protocol (sACP) — TypeScript SDK. Job lifecycle escrow + bonded validator registry on Solana, ERC-8183 compatible. Reference implementation by Telaro Protocol.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -66,6 +66,10 @@
|
|
|
66
66
|
"./agreement": {
|
|
67
67
|
"types": "./dist/agreement.d.ts",
|
|
68
68
|
"import": "./dist/agreement.js"
|
|
69
|
+
},
|
|
70
|
+
"./jury": {
|
|
71
|
+
"types": "./dist/jury.d.ts",
|
|
72
|
+
"import": "./dist/jury.js"
|
|
69
73
|
}
|
|
70
74
|
},
|
|
71
75
|
"files": [
|
|
@@ -139,6 +143,7 @@
|
|
|
139
143
|
"smoke:phase8b": "tsx tests/devnet-phase8b.ts",
|
|
140
144
|
"smoke:jury-verdict": "tsx tests/devnet-jury-verdict.ts",
|
|
141
145
|
"smoke:resolver-routing": "tsx tests/devnet-resolver-routing.ts",
|
|
146
|
+
"smoke:jury-sdk": "tsx tests/devnet-jury-sdk.ts",
|
|
142
147
|
"smoke:phantom": "tsx tests/devnet-phantom.ts",
|
|
143
148
|
"smoke:x402": "tsx tests/devnet-x402.ts",
|
|
144
149
|
"smoke:mcp-server": "tsx tests/devnet-mcp-server.ts"
|