@reclaimprotocol/attestor-core 5.0.1-beta.2 → 5.0.1-beta.22
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/browser/resources/attestor-browser.min.mjs +4512 -0
- package/lib/avs/abis/avsDirectoryABI.js +338 -341
- package/lib/avs/abis/delegationABI.js +1 -4
- package/lib/avs/abis/registryABI.js +719 -722
- package/lib/avs/client/create-claim-on-avs.js +129 -157
- package/lib/avs/config.js +18 -24
- package/lib/avs/contracts/ReclaimServiceManager.js +1 -0
- package/lib/avs/contracts/common.js +1 -0
- package/lib/avs/contracts/factories/ReclaimServiceManager__factory.js +1139 -1156
- package/lib/avs/contracts/factories/index.js +4 -4
- package/lib/avs/contracts/index.js +2 -6
- package/lib/avs/types/index.js +1 -0
- package/lib/avs/utils/contracts.js +30 -50
- package/lib/avs/utils/register.js +75 -70
- package/lib/avs/utils/tasks.js +38 -45
- package/lib/client/create-claim.js +402 -431
- package/lib/client/tunnels/make-rpc-tcp-tunnel.js +46 -48
- package/lib/client/tunnels/make-rpc-tls-tunnel.js +125 -121
- package/lib/client/utils/attestor-pool.js +23 -22
- package/lib/client/utils/client-socket.js +86 -109
- package/lib/client/utils/message-handler.js +79 -89
- package/lib/config/index.js +40 -58
- package/lib/external-rpc/benchmark.js +61 -74
- package/lib/external-rpc/event-bus.js +12 -15
- package/lib/external-rpc/handle-incoming-msg.js +216 -225
- package/lib/external-rpc/jsc-polyfills/1.js +70 -68
- package/lib/external-rpc/jsc-polyfills/2.js +17 -12
- package/lib/external-rpc/jsc-polyfills/event.js +10 -15
- package/lib/external-rpc/jsc-polyfills/index.js +2 -2
- package/lib/external-rpc/jsc-polyfills/ws.js +77 -79
- package/lib/external-rpc/setup-browser.js +28 -28
- package/lib/external-rpc/setup-jsc.js +17 -17
- package/lib/external-rpc/types.js +1 -0
- package/lib/external-rpc/utils.js +89 -89
- package/lib/external-rpc/zk.js +55 -50
- package/lib/index.js +2 -6
- package/lib/mechain/abis/governanceABI.js +457 -460
- package/lib/mechain/abis/taskABI.js +502 -505
- package/lib/mechain/client/create-claim-on-mechain.js +24 -29
- package/lib/mechain/constants/index.js +3 -8
- package/lib/mechain/types/index.js +1 -0
- package/lib/proto/api.js +4200 -4087
- package/lib/proto/tee-bundle.js +1261 -1241
- package/lib/providers/http/index.js +616 -603
- package/lib/providers/http/patch-parse5-tree.js +27 -29
- package/lib/providers/http/utils.js +289 -248
- package/lib/providers/index.js +3 -6
- package/lib/server/create-server.js +89 -91
- package/lib/server/handlers/claimTeeBundle.js +231 -211
- package/lib/server/handlers/claimTunnel.js +66 -73
- package/lib/server/handlers/completeClaimOnChain.js +20 -25
- package/lib/server/handlers/createClaimOnChain.js +21 -27
- package/lib/server/handlers/createTaskOnMechain.js +40 -50
- package/lib/server/handlers/createTunnel.js +85 -90
- package/lib/server/handlers/disconnectTunnel.js +4 -7
- package/lib/server/handlers/fetchCertificateBytes.js +37 -53
- package/lib/server/handlers/index.js +21 -24
- package/lib/server/handlers/init.js +27 -28
- package/lib/server/handlers/toprf.js +13 -16
- package/lib/server/socket.js +97 -100
- package/lib/server/tunnels/make-tcp-tunnel.js +161 -186
- package/lib/server/utils/apm.js +32 -25
- package/lib/server/utils/assert-valid-claim-request.js +305 -334
- package/lib/server/utils/config-env.js +2 -2
- package/lib/server/utils/dns.js +12 -18
- package/lib/server/utils/gcp-attestation.js +233 -181
- package/lib/server/utils/generics.d.ts +1 -1
- package/lib/server/utils/generics.js +43 -37
- package/lib/server/utils/iso.js +253 -256
- package/lib/server/utils/keep-alive.js +36 -36
- package/lib/server/utils/nitro-attestation.js +295 -220
- package/lib/server/utils/oprf-raw.js +48 -55
- package/lib/server/utils/process-handshake.js +200 -218
- package/lib/server/utils/proxy-session.js +5 -5
- package/lib/server/utils/tee-oprf-mpc-verification.js +82 -78
- package/lib/server/utils/tee-oprf-verification.js +165 -142
- package/lib/server/utils/tee-transcript-reconstruction.js +176 -129
- package/lib/server/utils/tee-verification.js +397 -334
- package/lib/server/utils/validation.js +30 -37
- package/lib/types/bgp.js +1 -0
- package/lib/types/claims.js +1 -0
- package/lib/types/client.js +1 -0
- package/lib/types/general.js +1 -0
- package/lib/types/handlers.js +1 -0
- package/lib/types/providers.d.ts +3 -2
- package/lib/types/providers.gen.js +9 -15
- package/lib/types/providers.js +1 -0
- package/lib/types/rpc.js +1 -0
- package/lib/types/signatures.d.ts +1 -2
- package/lib/types/signatures.js +1 -0
- package/lib/types/tunnel.js +1 -0
- package/lib/types/zk.js +1 -0
- package/lib/utils/auth.js +54 -66
- package/lib/utils/b64-json.js +15 -15
- package/lib/utils/bgp-listener.js +107 -111
- package/lib/utils/claims.js +89 -80
- package/lib/utils/env.js +13 -17
- package/lib/utils/error.js +43 -47
- package/lib/utils/generics.js +284 -235
- package/lib/utils/http-parser.js +232 -187
- package/lib/utils/logger.js +80 -71
- package/lib/utils/prepare-packets.js +69 -67
- package/lib/utils/redactions.js +163 -121
- package/lib/utils/retries.js +22 -24
- package/lib/utils/signatures/eth.js +29 -28
- package/lib/utils/signatures/index.js +5 -10
- package/lib/utils/socket-base.js +84 -88
- package/lib/utils/tls.js +28 -28
- package/lib/utils/ws.js +19 -19
- package/lib/utils/zk.js +542 -582
- package/package.json +12 -5
- package/lib/external-rpc/global.d.js +0 -0
- package/lib/scripts/build-browser.d.ts +0 -1
- package/lib/scripts/build-jsc.d.ts +0 -1
- package/lib/scripts/build-lib.d.ts +0 -1
- package/lib/scripts/check-avs-registration.d.ts +0 -1
- package/lib/scripts/check-avs-registration.js +0 -28
- package/lib/scripts/fallbacks/crypto.d.ts +0 -1
- package/lib/scripts/fallbacks/crypto.js +0 -4
- package/lib/scripts/fallbacks/empty.d.ts +0 -3
- package/lib/scripts/fallbacks/empty.js +0 -4
- package/lib/scripts/fallbacks/re2.d.ts +0 -1
- package/lib/scripts/fallbacks/re2.js +0 -7
- package/lib/scripts/fallbacks/snarkjs.d.ts +0 -1
- package/lib/scripts/fallbacks/snarkjs.js +0 -10
- package/lib/scripts/fallbacks/stwo.d.ts +0 -6
- package/lib/scripts/fallbacks/stwo.js +0 -159
- package/lib/scripts/generate-provider-types.d.ts +0 -5
- package/lib/scripts/generate-provider-types.js +0 -101
- package/lib/scripts/generate-receipt.d.ts +0 -9
- package/lib/scripts/generate-receipt.js +0 -101
- package/lib/scripts/generate-toprf-keys.d.ts +0 -1
- package/lib/scripts/generate-toprf-keys.js +0 -24
- package/lib/scripts/jsc-cli-rpc.d.ts +0 -1
- package/lib/scripts/jsc-cli-rpc.js +0 -35
- package/lib/scripts/register-avs-operator.d.ts +0 -1
- package/lib/scripts/register-avs-operator.js +0 -3
- package/lib/scripts/start-server.d.ts +0 -1
- package/lib/scripts/start-server.js +0 -11
- package/lib/scripts/update-avs-metadata.d.ts +0 -1
- package/lib/scripts/update-avs-metadata.js +0 -20
- package/lib/scripts/utils.d.ts +0 -1
- package/lib/scripts/utils.js +0 -10
- package/lib/scripts/whitelist-operator.d.ts +0 -1
- package/lib/scripts/whitelist-operator.js +0 -16
package/package.json
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reclaimprotocol/attestor-core",
|
|
3
|
-
"version": "5.0.1-beta.
|
|
3
|
+
"version": "5.0.1-beta.22",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"imports": {
|
|
7
|
-
"#src/*.ts": "./src/*.ts"
|
|
7
|
+
"#src/*.ts": "./src/*.ts",
|
|
8
|
+
"#src/*.js": "./lib/*.js"
|
|
8
9
|
},
|
|
9
10
|
"exports": {
|
|
10
11
|
".": {
|
|
@@ -14,10 +15,13 @@
|
|
|
14
15
|
"./external-rpc": {
|
|
15
16
|
"types": "./lib/external-rpc/index.d.ts",
|
|
16
17
|
"default": "./lib/external-rpc/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./browser": {
|
|
20
|
+
"default": "./browser/resources/attestor-browser.min.mjs"
|
|
17
21
|
}
|
|
18
22
|
},
|
|
19
23
|
"scripts": {
|
|
20
|
-
"build": "
|
|
24
|
+
"build": "rm -rf lib && tspc -p tsconfig.build.json",
|
|
21
25
|
"build:browser": "sh ./src/scripts/build-browser.sh",
|
|
22
26
|
"run:tsc": "node --experimental-strip-types",
|
|
23
27
|
"start": "npm run run:tsc -- src/scripts/start-server.ts",
|
|
@@ -47,7 +51,8 @@
|
|
|
47
51
|
"publish:pkg": "npm publish --access public"
|
|
48
52
|
},
|
|
49
53
|
"files": [
|
|
50
|
-
"lib/*"
|
|
54
|
+
"lib/*",
|
|
55
|
+
"browser/resources/attestor-browser.min.mjs"
|
|
51
56
|
],
|
|
52
57
|
"keywords": [
|
|
53
58
|
"reclaim-protocol",
|
|
@@ -122,11 +127,13 @@
|
|
|
122
127
|
"eslint": "^9.39.4",
|
|
123
128
|
"eslint-plugin-no-relative-import-paths": "^1.6.1",
|
|
124
129
|
"event-target-shim": "^6.0.2",
|
|
125
|
-
|
|
130
|
+
"json-schema-to-typescript": "^15.0.4",
|
|
126
131
|
"ts-jest": "^29.4.6",
|
|
132
|
+
"ts-patch": "^3.3.0",
|
|
127
133
|
"ts-proto": "^2.11.6",
|
|
128
134
|
"typechain": "^8.3.2",
|
|
129
135
|
"typescript": "^5.9.3",
|
|
136
|
+
"typescript-transform-paths": "^3.5.6",
|
|
130
137
|
"whatwg-url": "^14.2.0",
|
|
131
138
|
"yaml": "^2.8.3"
|
|
132
139
|
},
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'src/server/utils/config-env';
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import "src/server/utils/config-env";
|
|
2
|
-
import { getContracts } from "../avs/utils/contracts.js";
|
|
3
|
-
async function main() {
|
|
4
|
-
const { wallet, contract } = getContracts();
|
|
5
|
-
const meta = await contract.taskCreationMetadata();
|
|
6
|
-
console.log(
|
|
7
|
-
"Metadata parameters:",
|
|
8
|
-
`maxTaskCreationDelayS: ${meta.maxTaskCreationDelayS}`,
|
|
9
|
-
`minSignaturesPerTask: ${meta.minSignaturesPerTask}`,
|
|
10
|
-
`maxTaskLifetimeS: ${meta.maxTaskLifetimeS}`
|
|
11
|
-
);
|
|
12
|
-
console.log(`Checking registration for operator ${wallet.address}`);
|
|
13
|
-
const operatorAddr = wallet.address;
|
|
14
|
-
const metadata = await contract.getMetadataForOperator(operatorAddr).catch((err) => {
|
|
15
|
-
if (err.message.includes("Operator not found")) {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
throw err;
|
|
19
|
-
});
|
|
20
|
-
if (!metadata) {
|
|
21
|
-
console.log("Operator not registered");
|
|
22
|
-
const isWhitelisted = await contract.isOperatorWhitelisted(operatorAddr);
|
|
23
|
-
console.log(`Is whitelisted: ${isWhitelisted}`);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
console.log("Operator registered, URL:", metadata.url);
|
|
27
|
-
}
|
|
28
|
-
void main();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const webcrypto: Crypto;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function regularRegex(pattern: string, flags?: string): RegExp;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const wtns: any, groth16: any, zkey: any;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Browser fallback for stwo - loads from window.s2circuits
|
|
3
|
-
* The s2circuits.js script must be loaded before this runs
|
|
4
|
-
*/
|
|
5
|
-
import type { MakeZKOperatorOpts, ZKOperator } from '@reclaimprotocol/zk-symmetric-crypto';
|
|
6
|
-
export declare function makeStwoZkOperator({ algorithm, fetcher, }: MakeZKOperatorOpts<object>): ZKOperator;
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
const Base64 = {
|
|
2
|
-
fromUint8Array(arr) {
|
|
3
|
-
let binary = "";
|
|
4
|
-
for (const element of arr) {
|
|
5
|
-
binary += String.fromCharCode(element);
|
|
6
|
-
}
|
|
7
|
-
return btoa(binary);
|
|
8
|
-
},
|
|
9
|
-
toUint8Array(str) {
|
|
10
|
-
const binary = atob(str);
|
|
11
|
-
const arr = new Uint8Array(binary.length);
|
|
12
|
-
for (let i = 0; i < binary.length; i++) {
|
|
13
|
-
arr[i] = binary.charCodeAt(i);
|
|
14
|
-
}
|
|
15
|
-
return arr;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
function getS2Circuits() {
|
|
19
|
-
const s2 = window["s2circuits"];
|
|
20
|
-
if (!s2) {
|
|
21
|
-
throw new Error("s2circuits not loaded. Make sure s2circuits.js is loaded before using stwo.");
|
|
22
|
-
}
|
|
23
|
-
return s2;
|
|
24
|
-
}
|
|
25
|
-
function assertU32Counter(counter) {
|
|
26
|
-
if (!Number.isInteger(counter) || counter < 0 || counter > 4294967295) {
|
|
27
|
-
throw new RangeError("counter must be a uint32 integer (0 to 4294967295)");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
let wasmInitialized = false;
|
|
31
|
-
let initPromise;
|
|
32
|
-
async function ensureWasmInitialized(fetcher, logger) {
|
|
33
|
-
if (wasmInitialized) {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
if (initPromise) {
|
|
37
|
-
return initPromise;
|
|
38
|
-
}
|
|
39
|
-
initPromise = (async () => {
|
|
40
|
-
try {
|
|
41
|
-
const s2 = getS2Circuits();
|
|
42
|
-
const wasmBytes = await fetcher.fetch("stwo", "s2circuits_bg.wasm", logger);
|
|
43
|
-
s2.initSync({ module: wasmBytes });
|
|
44
|
-
wasmInitialized = true;
|
|
45
|
-
} catch (err) {
|
|
46
|
-
initPromise = void 0;
|
|
47
|
-
throw err;
|
|
48
|
-
}
|
|
49
|
-
})();
|
|
50
|
-
return initPromise;
|
|
51
|
-
}
|
|
52
|
-
function serializeWitness(algorithm, input) {
|
|
53
|
-
if (!input.noncesAndCounters?.length) {
|
|
54
|
-
throw new Error("noncesAndCounters must be a non-empty array");
|
|
55
|
-
}
|
|
56
|
-
const { noncesAndCounters: [{ nonce, counter }] } = input;
|
|
57
|
-
assertU32Counter(counter);
|
|
58
|
-
const data = {
|
|
59
|
-
algorithm,
|
|
60
|
-
key: Base64.fromUint8Array(input.key),
|
|
61
|
-
nonce: Base64.fromUint8Array(nonce),
|
|
62
|
-
counter,
|
|
63
|
-
plaintext: Base64.fromUint8Array(input.out),
|
|
64
|
-
// out = decrypted plaintext
|
|
65
|
-
ciphertext: Base64.fromUint8Array(input.in)
|
|
66
|
-
// in = encrypted ciphertext
|
|
67
|
-
};
|
|
68
|
-
return new TextEncoder().encode(JSON.stringify(data));
|
|
69
|
-
}
|
|
70
|
-
function deserializeWitness(witness) {
|
|
71
|
-
const json = new TextDecoder().decode(witness);
|
|
72
|
-
return JSON.parse(json);
|
|
73
|
-
}
|
|
74
|
-
function makeStwoZkOperator({
|
|
75
|
-
algorithm,
|
|
76
|
-
fetcher
|
|
77
|
-
}) {
|
|
78
|
-
return {
|
|
79
|
-
generateWitness(input) {
|
|
80
|
-
return serializeWitness(algorithm, input);
|
|
81
|
-
},
|
|
82
|
-
async groth16Prove(witness, logger) {
|
|
83
|
-
await ensureWasmInitialized(fetcher, logger);
|
|
84
|
-
const s2 = getS2Circuits();
|
|
85
|
-
const data = deserializeWitness(witness);
|
|
86
|
-
const key = Base64.toUint8Array(data.key);
|
|
87
|
-
const nonce = Base64.toUint8Array(data.nonce);
|
|
88
|
-
const plaintext = Base64.toUint8Array(data.plaintext);
|
|
89
|
-
const ciphertext = Base64.toUint8Array(data.ciphertext);
|
|
90
|
-
let resultJson;
|
|
91
|
-
switch (data.algorithm) {
|
|
92
|
-
case "chacha20":
|
|
93
|
-
resultJson = s2.generate_chacha20_proof(key, nonce, data.counter, plaintext, ciphertext);
|
|
94
|
-
break;
|
|
95
|
-
case "aes-128-ctr":
|
|
96
|
-
resultJson = s2.generate_aes128_ctr_proof(key, nonce, data.counter, plaintext, ciphertext);
|
|
97
|
-
break;
|
|
98
|
-
case "aes-256-ctr":
|
|
99
|
-
resultJson = s2.generate_aes256_ctr_proof(key, nonce, data.counter, plaintext, ciphertext);
|
|
100
|
-
break;
|
|
101
|
-
default:
|
|
102
|
-
throw new Error(`Unsupported algorithm: ${data.algorithm}`);
|
|
103
|
-
}
|
|
104
|
-
const result = JSON.parse(resultJson);
|
|
105
|
-
if (result.error) {
|
|
106
|
-
throw new Error(`Stwo proof generation failed: ${result.error}`);
|
|
107
|
-
}
|
|
108
|
-
if (!result.proof) {
|
|
109
|
-
throw new Error("Stwo proof generation failed: no proof returned");
|
|
110
|
-
}
|
|
111
|
-
return { proof: result.proof };
|
|
112
|
-
},
|
|
113
|
-
async groth16Verify(publicSignals, proof, logger) {
|
|
114
|
-
await ensureWasmInitialized(fetcher, logger);
|
|
115
|
-
const s2 = getS2Circuits();
|
|
116
|
-
const expectedNonce = publicSignals.noncesAndCounters[0]?.nonce;
|
|
117
|
-
const expectedCounter = publicSignals.noncesAndCounters[0]?.counter;
|
|
118
|
-
const expectedCiphertext = publicSignals.in;
|
|
119
|
-
const expectedPlaintext = publicSignals.out;
|
|
120
|
-
if (!expectedNonce || expectedCounter === void 0) {
|
|
121
|
-
logger?.warn("Invalid publicSignals: missing nonce or counter");
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
assertU32Counter(expectedCounter);
|
|
125
|
-
const proofStr = typeof proof === "string" ? proof : new TextDecoder().decode(proof);
|
|
126
|
-
let resultJson;
|
|
127
|
-
if (algorithm === "chacha20") {
|
|
128
|
-
resultJson = s2.verify_chacha20_proof(
|
|
129
|
-
proofStr,
|
|
130
|
-
expectedNonce,
|
|
131
|
-
expectedCounter,
|
|
132
|
-
expectedPlaintext,
|
|
133
|
-
expectedCiphertext
|
|
134
|
-
);
|
|
135
|
-
} else {
|
|
136
|
-
resultJson = s2.verify_aes_ctr_proof(
|
|
137
|
-
proofStr,
|
|
138
|
-
expectedNonce,
|
|
139
|
-
expectedCounter,
|
|
140
|
-
expectedPlaintext,
|
|
141
|
-
expectedCiphertext
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
const result = JSON.parse(resultJson);
|
|
145
|
-
if (result.error) {
|
|
146
|
-
logger?.warn({ error: result.error }, "Stwo STARK verification failed");
|
|
147
|
-
return false;
|
|
148
|
-
}
|
|
149
|
-
return result.valid === true;
|
|
150
|
-
},
|
|
151
|
-
release() {
|
|
152
|
-
wasmInitialized = false;
|
|
153
|
-
initPromise = void 0;
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
export {
|
|
158
|
-
makeStwoZkOperator
|
|
159
|
-
};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import { readdir, readFile, writeFile } from "fs/promises";
|
|
2
|
-
import { compile } from "json-schema-to-typescript";
|
|
3
|
-
import { parse } from "yaml";
|
|
4
|
-
const PROVIDER_SCHEMAS_PATH = "./provider-schemas";
|
|
5
|
-
const GEN_TS_FILENAME = "./src/types/providers.gen.ts";
|
|
6
|
-
const BinaryDataType = "BinaryData";
|
|
7
|
-
async function main() {
|
|
8
|
-
const folders = await findAllProviderFolders();
|
|
9
|
-
console.log(`Generating for ${folders.length} provider folders`);
|
|
10
|
-
let ts = "/* eslint-disable */\n/* Generated file. Do not edit */";
|
|
11
|
-
ts += `
|
|
12
|
-
|
|
13
|
-
type ${BinaryDataType} = Uint8Array | string
|
|
14
|
-
`;
|
|
15
|
-
let providerTypeMap = "\nexport interface ProvidersConfig {\n";
|
|
16
|
-
let providerSchemaMap = "\nexport const PROVIDER_SCHEMAS = {\n";
|
|
17
|
-
for (const folder of folders) {
|
|
18
|
-
const {
|
|
19
|
-
schemaTitle: paramsSchemaTitle,
|
|
20
|
-
ts: paramsSchemaTs,
|
|
21
|
-
jsonTitle: paramsJsonTitle
|
|
22
|
-
} = await generateTsFromYamlSchema(folder, "parameters");
|
|
23
|
-
const {
|
|
24
|
-
schemaTitle: secretParamsSchemaTitle,
|
|
25
|
-
ts: secretParamsSchemaTs,
|
|
26
|
-
jsonTitle: secretParamsJsonTitle
|
|
27
|
-
} = await generateTsFromYamlSchema(
|
|
28
|
-
folder,
|
|
29
|
-
"secret-parameters"
|
|
30
|
-
);
|
|
31
|
-
ts += `
|
|
32
|
-
${paramsSchemaTs}
|
|
33
|
-
${secretParamsSchemaTs}`;
|
|
34
|
-
providerTypeMap += ` ${folder}: {
|
|
35
|
-
`;
|
|
36
|
-
providerTypeMap += ` parameters: ${paramsSchemaTitle}
|
|
37
|
-
`;
|
|
38
|
-
providerTypeMap += ` secretParameters: ${secretParamsSchemaTitle}
|
|
39
|
-
`;
|
|
40
|
-
providerTypeMap += " }\n";
|
|
41
|
-
providerSchemaMap += ` ${folder}: {
|
|
42
|
-
`;
|
|
43
|
-
providerSchemaMap += ` parameters: ${paramsJsonTitle},
|
|
44
|
-
`;
|
|
45
|
-
providerSchemaMap += ` secretParameters: ${secretParamsJsonTitle}
|
|
46
|
-
`;
|
|
47
|
-
providerSchemaMap += " },\n";
|
|
48
|
-
}
|
|
49
|
-
providerTypeMap += "}\n";
|
|
50
|
-
providerSchemaMap += "}\n";
|
|
51
|
-
ts += providerTypeMap;
|
|
52
|
-
ts += providerSchemaMap;
|
|
53
|
-
await writeFile(GEN_TS_FILENAME, ts);
|
|
54
|
-
console.log(`Wrote to ${GEN_TS_FILENAME}`);
|
|
55
|
-
}
|
|
56
|
-
async function getJsonSchemaForProvider(name, type) {
|
|
57
|
-
const paramsYaml = await readFile(
|
|
58
|
-
`${PROVIDER_SCHEMAS_PATH}/${name}/${type}.yaml`,
|
|
59
|
-
{ encoding: "utf-8" }
|
|
60
|
-
);
|
|
61
|
-
const paramsJson = parse(paramsYaml);
|
|
62
|
-
return paramsJson;
|
|
63
|
-
}
|
|
64
|
-
async function generateTsFromYamlSchema(name, type) {
|
|
65
|
-
const paramsJson = await getJsonSchemaForProvider(name, type);
|
|
66
|
-
let paramsSchemaTs = await compile(
|
|
67
|
-
paramsJson,
|
|
68
|
-
"",
|
|
69
|
-
{
|
|
70
|
-
additionalProperties: false,
|
|
71
|
-
bannerComment: "",
|
|
72
|
-
ignoreMinAndMaxItems: true,
|
|
73
|
-
declareExternallyReferenced: false,
|
|
74
|
-
customName({ type: type2, format }) {
|
|
75
|
-
if (type2 === "string" && format === "binary") {
|
|
76
|
-
return BinaryDataType;
|
|
77
|
-
}
|
|
78
|
-
return void 0;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
);
|
|
82
|
-
const jsonTitle = `${paramsJson.title}Json`;
|
|
83
|
-
paramsSchemaTs += `
|
|
84
|
-
export const ${jsonTitle} = ${JSON.stringify(paramsJson)}`;
|
|
85
|
-
return {
|
|
86
|
-
ts: paramsSchemaTs,
|
|
87
|
-
schemaTitle: paramsJson.title,
|
|
88
|
-
jsonTitle
|
|
89
|
-
};
|
|
90
|
-
}
|
|
91
|
-
async function findAllProviderFolders() {
|
|
92
|
-
const providerFolders = await readdir(
|
|
93
|
-
PROVIDER_SCHEMAS_PATH,
|
|
94
|
-
{ withFileTypes: true }
|
|
95
|
-
);
|
|
96
|
-
return providerFolders.filter((p) => p.isDirectory()).map((p) => p.name);
|
|
97
|
-
}
|
|
98
|
-
void main();
|
|
99
|
-
export {
|
|
100
|
-
generateTsFromYamlSchema
|
|
101
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import '#src/server/utils/config-env.ts';
|
|
2
|
-
import type { ProviderName, ProviderParams, ProviderSecretParams } from '#src/index.ts';
|
|
3
|
-
type ProviderReceiptGenerationParams<P extends ProviderName> = {
|
|
4
|
-
name: P;
|
|
5
|
-
params: ProviderParams<P>;
|
|
6
|
-
secretParams: ProviderSecretParams<P>;
|
|
7
|
-
};
|
|
8
|
-
export declare function main<T extends ProviderName>(receiptParams?: ProviderReceiptGenerationParams<T>): Promise<void>;
|
|
9
|
-
export {};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import "../server/utils/config-env.js";
|
|
2
|
-
import { setCryptoImplementation } from "@reclaimprotocol/tls";
|
|
3
|
-
import { webcryptoCrypto } from "@reclaimprotocol/tls/webcrypto";
|
|
4
|
-
import { readFile } from "fs/promises";
|
|
5
|
-
import {
|
|
6
|
-
API_SERVER_PORT,
|
|
7
|
-
createClaimOnAttestor,
|
|
8
|
-
getAttestorClientFromPool,
|
|
9
|
-
getTranscriptString,
|
|
10
|
-
logger,
|
|
11
|
-
providers,
|
|
12
|
-
WS_PATHNAME
|
|
13
|
-
} from "../index.js";
|
|
14
|
-
import { getCliArgument } from "../scripts/utils.js";
|
|
15
|
-
import { createServer, decryptTranscript } from "../server/index.js";
|
|
16
|
-
import { assertValidateProviderParams } from "../server/utils/validation.js";
|
|
17
|
-
import { getEnvVariable } from "../utils/env.js";
|
|
18
|
-
setCryptoImplementation(webcryptoCrypto);
|
|
19
|
-
const DEFAULT_ATTESTOR_HOST_PORT = "wss://eu.attestor.reclaimprotocol.org/ws";
|
|
20
|
-
const PRIVATE_KEY_HEX = getEnvVariable("PRIVATE_KEY_HEX") || "0x0123788edad59d7c013cdc85e4372f350f828e2cec62d9a2de4560e69aec7f89";
|
|
21
|
-
let server;
|
|
22
|
-
async function main(receiptParams) {
|
|
23
|
-
const paramsJson = receiptParams ?? await getInputParameters();
|
|
24
|
-
if (!(paramsJson.name in providers)) {
|
|
25
|
-
throw new Error(`Unknown provider "${paramsJson.name}"`);
|
|
26
|
-
}
|
|
27
|
-
assertValidateProviderParams(paramsJson.name, paramsJson.params);
|
|
28
|
-
let attestorHostPort = getCliArgument("attestor") || DEFAULT_ATTESTOR_HOST_PORT;
|
|
29
|
-
if (attestorHostPort === "local") {
|
|
30
|
-
console.log("starting local attestor server...");
|
|
31
|
-
server = await createServer();
|
|
32
|
-
attestorHostPort = `ws://localhost:${API_SERVER_PORT}${WS_PATHNAME}`;
|
|
33
|
-
}
|
|
34
|
-
globalThis.ATTESTOR_BASE_URL = attestorHostPort.replace("ws://", "http://").replace("wss://", "https://");
|
|
35
|
-
const zkEngine = getCliArgument("zk") === "gnark" ? "gnark" : "stwo";
|
|
36
|
-
const { request, error, claim } = await createClaimOnAttestor({
|
|
37
|
-
name: paramsJson.name,
|
|
38
|
-
secretParams: paramsJson.secretParams,
|
|
39
|
-
params: paramsJson.params,
|
|
40
|
-
ownerPrivateKey: PRIVATE_KEY_HEX,
|
|
41
|
-
client: { url: attestorHostPort },
|
|
42
|
-
logger,
|
|
43
|
-
zkEngine
|
|
44
|
-
});
|
|
45
|
-
if (error) {
|
|
46
|
-
console.error("claim creation failed:", error);
|
|
47
|
-
} else {
|
|
48
|
-
const ctx = claim?.context ? JSON.parse(claim.context) : {};
|
|
49
|
-
console.log(`receipt is valid for ${paramsJson.name} provider`);
|
|
50
|
-
if (ctx.extractedParameters) {
|
|
51
|
-
console.log("extracted params:", ctx.extractedParameters);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
if (!request) {
|
|
55
|
-
throw new Error("Missing request in claim");
|
|
56
|
-
}
|
|
57
|
-
const decTranscript = await decryptTranscript(
|
|
58
|
-
request?.transcript,
|
|
59
|
-
logger,
|
|
60
|
-
zkEngine,
|
|
61
|
-
request?.fixedServerIV,
|
|
62
|
-
request?.fixedClientIV
|
|
63
|
-
);
|
|
64
|
-
const transcriptStr = getTranscriptString(decTranscript);
|
|
65
|
-
console.log("receipt:\n", transcriptStr);
|
|
66
|
-
console.log("claim:\n", claim);
|
|
67
|
-
const client = getAttestorClientFromPool(attestorHostPort);
|
|
68
|
-
await client.terminateConnection();
|
|
69
|
-
}
|
|
70
|
-
async function getInputParameters() {
|
|
71
|
-
const paramsJsonFile = getCliArgument("json");
|
|
72
|
-
if (!paramsJsonFile) {
|
|
73
|
-
const name = getCliArgument("name");
|
|
74
|
-
const paramsStr = getCliArgument("params");
|
|
75
|
-
const secretParamsStr = getCliArgument("secretParams");
|
|
76
|
-
if (!name || !paramsStr || !secretParamsStr) {
|
|
77
|
-
throw new Error("Either provide --json argument for parameters JSON or provide separately with --name, --params & --secretParams");
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
name,
|
|
81
|
-
params: JSON.parse(paramsStr),
|
|
82
|
-
secretParams: JSON.parse(secretParamsStr)
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
let fileContents = await readFile(paramsJsonFile, "utf8");
|
|
86
|
-
for (const variable in process.env) {
|
|
87
|
-
fileContents = fileContents.replace(
|
|
88
|
-
`{{${variable}}}`,
|
|
89
|
-
process.env[variable]
|
|
90
|
-
);
|
|
91
|
-
}
|
|
92
|
-
return JSON.parse(fileContents);
|
|
93
|
-
}
|
|
94
|
-
main().catch((err) => {
|
|
95
|
-
console.error("error in receipt gen", err);
|
|
96
|
-
}).finally(() => {
|
|
97
|
-
server?.close();
|
|
98
|
-
});
|
|
99
|
-
export {
|
|
100
|
-
main
|
|
101
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { hexlify } from "ethers";
|
|
2
|
-
import { logger, makeDefaultOPRFOperator } from "../utils/index.js";
|
|
3
|
-
const ENGINE = "gnark";
|
|
4
|
-
const TOTAL_KEYS = 10;
|
|
5
|
-
const THRESHOLD = 1;
|
|
6
|
-
async function main() {
|
|
7
|
-
const op = makeDefaultOPRFOperator("chacha20", ENGINE, logger);
|
|
8
|
-
const {
|
|
9
|
-
publicKey,
|
|
10
|
-
privateKey,
|
|
11
|
-
shares
|
|
12
|
-
} = await op.generateThresholdKeys(TOTAL_KEYS, THRESHOLD);
|
|
13
|
-
logEnvValue("TOPRF_PUBLIC_KEY", publicKey);
|
|
14
|
-
logEnvValue("TOPRF_PRIVATE_KEY", privateKey);
|
|
15
|
-
for (const [i, share] of shares.entries()) {
|
|
16
|
-
console.log(`# Share ${i}`);
|
|
17
|
-
logEnvValue("TOPRF_SHARE_PUBLIC_KEY", share.publicKey);
|
|
18
|
-
logEnvValue("TOPRF_SHARE_PRIVATE_KEY", share.privateKey);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
function logEnvValue(name, value) {
|
|
22
|
-
console.log(`${name}=${hexlify(value)}`);
|
|
23
|
-
}
|
|
24
|
-
void main();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '#src/external-rpc/jsc-polyfills/index.ts';
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import "../external-rpc/jsc-polyfills/index.js";
|
|
2
|
-
import { setCryptoImplementation } from "@reclaimprotocol/tls";
|
|
3
|
-
import { pureJsCrypto } from "@reclaimprotocol/tls/purejs-crypto";
|
|
4
|
-
import { handleIncomingMessage } from "../external-rpc/index.js";
|
|
5
|
-
import { B64_JSON_REVIVER } from "../utils/b64-json.js";
|
|
6
|
-
function readIncomingMsg() {
|
|
7
|
-
const cmd2 = readline();
|
|
8
|
-
return JSON.parse(cmd2, B64_JSON_REVIVER);
|
|
9
|
-
}
|
|
10
|
-
setCryptoImplementation(pureJsCrypto);
|
|
11
|
-
print("Input base URL for attestor");
|
|
12
|
-
const initCmd = readIncomingMsg();
|
|
13
|
-
if (initCmd.type !== "init") {
|
|
14
|
-
throw new Error("Expected init command");
|
|
15
|
-
}
|
|
16
|
-
globalThis.RPC_CHANNEL_NAME = "cli";
|
|
17
|
-
globalThis.ATTESTOR_BASE_URL = initCmd.attestorBaseUrl;
|
|
18
|
-
const channel = {
|
|
19
|
-
postMessage(message) {
|
|
20
|
-
print(message);
|
|
21
|
-
}
|
|
22
|
-
};
|
|
23
|
-
globalThis[RPC_CHANNEL_NAME] = channel;
|
|
24
|
-
print("reading RPC messages...");
|
|
25
|
-
let cmd;
|
|
26
|
-
while (cmd = readIncomingMsg(), cmd.type !== "quit") {
|
|
27
|
-
if (cmd.type === "init") {
|
|
28
|
-
continue;
|
|
29
|
-
}
|
|
30
|
-
handleIncomingMessage(cmd);
|
|
31
|
-
await new Promise((resolve) => {
|
|
32
|
-
setTimeout(resolve, 500);
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
print("done");
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'src/server/utils/config-env';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import '#src/server/utils/config-env.ts';
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import "../server/utils/config-env.js";
|
|
2
|
-
import { setCryptoImplementation } from "@reclaimprotocol/tls";
|
|
3
|
-
import { webcryptoCrypto } from "@reclaimprotocol/tls/webcrypto";
|
|
4
|
-
import { getApm } from "../server/utils/apm.js";
|
|
5
|
-
getApm();
|
|
6
|
-
setCryptoImplementation(webcryptoCrypto);
|
|
7
|
-
async function main() {
|
|
8
|
-
const { createServer } = await import("../server/index.js");
|
|
9
|
-
return createServer();
|
|
10
|
-
}
|
|
11
|
-
main();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'src/server/utils/config-env';
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import "src/server/utils/config-env";
|
|
2
|
-
import { getContracts } from "../avs/utils/contracts.js";
|
|
3
|
-
import { getCliArgument } from "../scripts/utils.js";
|
|
4
|
-
async function main() {
|
|
5
|
-
const { contract } = getContracts();
|
|
6
|
-
const minSignaturesPerTask = getCliArgument("minSignaturesPerTask");
|
|
7
|
-
if (!minSignaturesPerTask) {
|
|
8
|
-
throw new Error(
|
|
9
|
-
"Provide operator address via --minSignaturesPerTask <num>"
|
|
10
|
-
);
|
|
11
|
-
}
|
|
12
|
-
const tx = await contract.updateTaskCreationMetadata({
|
|
13
|
-
minSignaturesPerTask: +(minSignaturesPerTask || 0),
|
|
14
|
-
maxTaskCreationDelayS: 0,
|
|
15
|
-
maxTaskLifetimeS: 0
|
|
16
|
-
});
|
|
17
|
-
await tx.wait();
|
|
18
|
-
console.log("Updated task creation metadata");
|
|
19
|
-
}
|
|
20
|
-
void main();
|
package/lib/scripts/utils.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function getCliArgument(arg: string): string | undefined;
|
package/lib/scripts/utils.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import 'src/server/utils/config-env';
|