@rolly-dev/wasm-signer 1.5.1 → 1.7.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.
@@ -51,6 +51,18 @@ export function compute_payout_dice(random: BigUint64Array, bet_atomic: bigint,
51
51
  */
52
52
  export function compute_payout_plinko(random: BigUint64Array, bet_atomic: bigint, sector: number, rows: number, is_extreme: boolean): BigUint64Array;
53
53
 
54
+ /**
55
+ * Compute prediction hash: `Poseidon2(game_id, p0, p1, p2)` → 4 field elements.
56
+ *
57
+ * Matches `compute_prediction_hash_native` in the circuit (`games/shared.rs`)
58
+ * and the in-circuit `build_prediction_hash`.
59
+ *
60
+ * Semantics of p0–p2 depend on the game:
61
+ * Dice: `(mode, pred_lo, pred_hi)`
62
+ * Plinko: `(sector, rows, is_extreme)`
63
+ */
64
+ export function compute_prediction_hash(game_id: number, p0: number, p1: number, p2: number): BigUint64Array;
65
+
54
66
  /**
55
67
  * Extract dice roll number [0, 1000) from Poseidon2 random output.
56
68
  *
@@ -79,6 +91,19 @@ export function compute_roll_plinko(random: BigUint64Array, rows: number): numbe
79
91
  */
80
92
  export function compute_server_seed_hash(server_seed: BigUint64Array): BigUint64Array;
81
93
 
94
+ /**
95
+ * Compute user seed with bet-parameter binding:
96
+ * `Poseidon2(game_id, bet, pred_hash[4], secret[4])` → 4 field elements.
97
+ *
98
+ * Matches the circuit constraint in `slot/fairness.rs`.
99
+ * Prevents the operator from swapping bet parameters after the user commits.
100
+ *
101
+ * `bet` is the full bet amount in atomic units (u64).
102
+ * `pred_hash` must be 4 elements (output of `compute_prediction_hash`).
103
+ * `secret` must be 4 elements (output of `generate_user_secret`).
104
+ */
105
+ export function compute_user_seed_binding(game_id: number, bet: bigint, pred_hash: BigUint64Array, secret: BigUint64Array): BigUint64Array;
106
+
82
107
  /**
83
108
  * Derive a session key from 32 bytes of entropy (e.g. MetaMask signature).
84
109
  *
@@ -97,6 +122,19 @@ export function compute_server_seed_hash(server_seed: BigUint64Array): BigUint64
97
122
  */
98
123
  export function derive_session_key(sig_bytes: Uint8Array): BigUint64Array;
99
124
 
125
+ /**
126
+ * Generate a cryptographically random user secret — 4 Goldilocks field elements.
127
+ *
128
+ * Each element is reduced mod p for canonical representation (safe for circuit use).
129
+ * Uses `getrandom` (`crypto.getRandomValues` in browser, OS entropy in Node.js).
130
+ *
131
+ * ```js
132
+ * const secret = generate_user_secret();
133
+ * // secret.length === 4, each < GOLDILOCKS_P
134
+ * ```
135
+ */
136
+ export function generate_user_secret(): BigUint64Array;
137
+
100
138
  /**
101
139
  * Generate a random user seed — 10 alphanumeric characters.
102
140
  *
@@ -258,10 +296,13 @@ export interface InitOutput {
258
296
  readonly compute_multi_dice: (a: number) => bigint;
259
297
  readonly compute_payout_dice: (a: number, b: number, c: number, d: bigint, e: number, f: number, g: number) => void;
260
298
  readonly compute_payout_plinko: (a: number, b: number, c: number, d: bigint, e: number, f: number, g: number) => void;
299
+ readonly compute_prediction_hash: (a: number, b: number, c: number, d: number, e: number) => void;
261
300
  readonly compute_roll_dice: (a: number, b: number) => number;
262
301
  readonly compute_roll_plinko: (a: number, b: number, c: number) => number;
263
302
  readonly compute_server_seed_hash: (a: number, b: number, c: number) => void;
303
+ readonly compute_user_seed_binding: (a: number, b: number, c: bigint, d: number, e: number, f: number, g: number) => void;
264
304
  readonly derive_session_key: (a: number, b: number, c: number) => void;
305
+ readonly generate_user_secret: (a: number) => void;
265
306
  readonly generate_user_seed: (a: number) => void;
266
307
  readonly goldilocks_fields_to_hex: (a: number, b: number, c: number) => void;
267
308
  readonly goldilocks_reduce: (a: bigint) => bigint;
@@ -125,6 +125,35 @@ export function compute_payout_plinko(random, bet_atomic, sector, rows, is_extre
125
125
  }
126
126
  }
127
127
 
128
+ /**
129
+ * Compute prediction hash: `Poseidon2(game_id, p0, p1, p2)` → 4 field elements.
130
+ *
131
+ * Matches `compute_prediction_hash_native` in the circuit (`games/shared.rs`)
132
+ * and the in-circuit `build_prediction_hash`.
133
+ *
134
+ * Semantics of p0–p2 depend on the game:
135
+ * Dice: `(mode, pred_lo, pred_hi)`
136
+ * Plinko: `(sector, rows, is_extreme)`
137
+ * @param {number} game_id
138
+ * @param {number} p0
139
+ * @param {number} p1
140
+ * @param {number} p2
141
+ * @returns {BigUint64Array}
142
+ */
143
+ export function compute_prediction_hash(game_id, p0, p1, p2) {
144
+ try {
145
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
146
+ wasm.compute_prediction_hash(retptr, game_id, p0, p1, p2);
147
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
148
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
149
+ var v1 = getArrayU64FromWasm0(r0, r1).slice();
150
+ wasm.__wbindgen_export2(r0, r1 * 8, 8);
151
+ return v1;
152
+ } finally {
153
+ wasm.__wbindgen_add_to_stack_pointer(16);
154
+ }
155
+ }
156
+
128
157
  /**
129
158
  * Extract dice roll number [0, 1000) from Poseidon2 random output.
130
159
  *
@@ -184,6 +213,40 @@ export function compute_server_seed_hash(server_seed) {
184
213
  }
185
214
  }
186
215
 
216
+ /**
217
+ * Compute user seed with bet-parameter binding:
218
+ * `Poseidon2(game_id, bet, pred_hash[4], secret[4])` → 4 field elements.
219
+ *
220
+ * Matches the circuit constraint in `slot/fairness.rs`.
221
+ * Prevents the operator from swapping bet parameters after the user commits.
222
+ *
223
+ * `bet` is the full bet amount in atomic units (u64).
224
+ * `pred_hash` must be 4 elements (output of `compute_prediction_hash`).
225
+ * `secret` must be 4 elements (output of `generate_user_secret`).
226
+ * @param {number} game_id
227
+ * @param {bigint} bet
228
+ * @param {BigUint64Array} pred_hash
229
+ * @param {BigUint64Array} secret
230
+ * @returns {BigUint64Array}
231
+ */
232
+ export function compute_user_seed_binding(game_id, bet, pred_hash, secret) {
233
+ try {
234
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
235
+ const ptr0 = passArray64ToWasm0(pred_hash, wasm.__wbindgen_export3);
236
+ const len0 = WASM_VECTOR_LEN;
237
+ const ptr1 = passArray64ToWasm0(secret, wasm.__wbindgen_export3);
238
+ const len1 = WASM_VECTOR_LEN;
239
+ wasm.compute_user_seed_binding(retptr, game_id, bet, ptr0, len0, ptr1, len1);
240
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
241
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
242
+ var v3 = getArrayU64FromWasm0(r0, r1).slice();
243
+ wasm.__wbindgen_export2(r0, r1 * 8, 8);
244
+ return v3;
245
+ } finally {
246
+ wasm.__wbindgen_add_to_stack_pointer(16);
247
+ }
248
+ }
249
+
187
250
  /**
188
251
  * Derive a session key from 32 bytes of entropy (e.g. MetaMask signature).
189
252
  *
@@ -218,6 +281,32 @@ export function derive_session_key(sig_bytes) {
218
281
  }
219
282
  }
220
283
 
284
+ /**
285
+ * Generate a cryptographically random user secret — 4 Goldilocks field elements.
286
+ *
287
+ * Each element is reduced mod p for canonical representation (safe for circuit use).
288
+ * Uses `getrandom` (`crypto.getRandomValues` in browser, OS entropy in Node.js).
289
+ *
290
+ * ```js
291
+ * const secret = generate_user_secret();
292
+ * // secret.length === 4, each < GOLDILOCKS_P
293
+ * ```
294
+ * @returns {BigUint64Array}
295
+ */
296
+ export function generate_user_secret() {
297
+ try {
298
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
299
+ wasm.generate_user_secret(retptr);
300
+ var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
301
+ var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
302
+ var v1 = getArrayU64FromWasm0(r0, r1).slice();
303
+ wasm.__wbindgen_export2(r0, r1 * 8, 8);
304
+ return v1;
305
+ } finally {
306
+ wasm.__wbindgen_add_to_stack_pointer(16);
307
+ }
308
+ }
309
+
221
310
  /**
222
311
  * Generate a random user seed — 10 alphanumeric characters.
223
312
  *
Binary file
@@ -6,10 +6,13 @@ export const compute_address_hash: (a: number, b: number, c: number) => void;
6
6
  export const compute_multi_dice: (a: number) => bigint;
7
7
  export const compute_payout_dice: (a: number, b: number, c: number, d: bigint, e: number, f: number, g: number) => void;
8
8
  export const compute_payout_plinko: (a: number, b: number, c: number, d: bigint, e: number, f: number, g: number) => void;
9
+ export const compute_prediction_hash: (a: number, b: number, c: number, d: number, e: number) => void;
9
10
  export const compute_roll_dice: (a: number, b: number) => number;
10
11
  export const compute_roll_plinko: (a: number, b: number, c: number) => number;
11
12
  export const compute_server_seed_hash: (a: number, b: number, c: number) => void;
13
+ export const compute_user_seed_binding: (a: number, b: number, c: bigint, d: number, e: number, f: number, g: number) => void;
12
14
  export const derive_session_key: (a: number, b: number, c: number) => void;
15
+ export const generate_user_secret: (a: number) => void;
13
16
  export const generate_user_seed: (a: number) => void;
14
17
  export const goldilocks_fields_to_hex: (a: number, b: number, c: number) => void;
15
18
  export const goldilocks_reduce: (a: bigint) => bigint;
package/js/browser.mjs CHANGED
@@ -6,10 +6,13 @@ export {
6
6
  compute_multi_dice,
7
7
  compute_payout_dice,
8
8
  compute_payout_plinko,
9
+ compute_prediction_hash,
9
10
  compute_roll_dice,
10
11
  compute_roll_plinko,
11
12
  compute_server_seed_hash,
13
+ compute_user_seed_binding,
12
14
  derive_session_key,
15
+ generate_user_secret,
13
16
  generate_user_seed,
14
17
  goldilocks_fields_to_hex,
15
18
  goldilocks_modulus,
package/js/index.d.ts CHANGED
@@ -4,10 +4,13 @@ export {
4
4
  compute_multi_dice,
5
5
  compute_payout_dice,
6
6
  compute_payout_plinko,
7
+ compute_prediction_hash,
7
8
  compute_roll_dice,
8
9
  compute_roll_plinko,
9
10
  compute_server_seed_hash,
11
+ compute_user_seed_binding,
10
12
  derive_session_key,
13
+ generate_user_secret,
11
14
  generate_user_seed,
12
15
  goldilocks_fields_to_hex,
13
16
  goldilocks_modulus,
@@ -8,10 +8,13 @@ module.exports = {
8
8
  compute_multi_dice: wasm.compute_multi_dice,
9
9
  compute_payout_dice: wasm.compute_payout_dice,
10
10
  compute_payout_plinko: wasm.compute_payout_plinko,
11
+ compute_prediction_hash: wasm.compute_prediction_hash,
11
12
  compute_roll_dice: wasm.compute_roll_dice,
12
13
  compute_roll_plinko: wasm.compute_roll_plinko,
13
14
  compute_server_seed_hash: wasm.compute_server_seed_hash,
15
+ compute_user_seed_binding: wasm.compute_user_seed_binding,
14
16
  derive_session_key: wasm.derive_session_key,
17
+ generate_user_secret: wasm.generate_user_secret,
15
18
  generate_user_seed: wasm.generate_user_seed,
16
19
  goldilocks_fields_to_hex: wasm.goldilocks_fields_to_hex,
17
20
  goldilocks_modulus: wasm.goldilocks_modulus,
@@ -4,10 +4,13 @@ export {
4
4
  compute_multi_dice,
5
5
  compute_payout_dice,
6
6
  compute_payout_plinko,
7
+ compute_prediction_hash,
7
8
  compute_roll_dice,
8
9
  compute_roll_plinko,
9
10
  compute_server_seed_hash,
11
+ compute_user_seed_binding,
10
12
  derive_session_key,
13
+ generate_user_secret,
11
14
  generate_user_seed,
12
15
  goldilocks_fields_to_hex,
13
16
  goldilocks_modulus,
package/js/node.cjs CHANGED
@@ -8,10 +8,13 @@ module.exports = {
8
8
  compute_multi_dice: wasm.compute_multi_dice,
9
9
  compute_payout_dice: wasm.compute_payout_dice,
10
10
  compute_payout_plinko: wasm.compute_payout_plinko,
11
+ compute_prediction_hash: wasm.compute_prediction_hash,
11
12
  compute_roll_dice: wasm.compute_roll_dice,
12
13
  compute_roll_plinko: wasm.compute_roll_plinko,
13
14
  compute_server_seed_hash: wasm.compute_server_seed_hash,
15
+ compute_user_seed_binding: wasm.compute_user_seed_binding,
14
16
  derive_session_key: wasm.derive_session_key,
17
+ generate_user_secret: wasm.generate_user_secret,
15
18
  generate_user_seed: wasm.generate_user_seed,
16
19
  goldilocks_fields_to_hex: wasm.goldilocks_fields_to_hex,
17
20
  goldilocks_modulus: wasm.goldilocks_modulus,
package/js/node.mjs CHANGED
@@ -9,10 +9,13 @@ export const {
9
9
  compute_multi_dice,
10
10
  compute_payout_dice,
11
11
  compute_payout_plinko,
12
+ compute_prediction_hash,
12
13
  compute_roll_dice,
13
14
  compute_roll_plinko,
14
15
  compute_server_seed_hash,
16
+ compute_user_seed_binding,
15
17
  derive_session_key,
18
+ generate_user_secret,
16
19
  generate_user_seed,
17
20
  goldilocks_fields_to_hex,
18
21
  goldilocks_modulus,
package/js/react.mjs CHANGED
@@ -5,10 +5,13 @@ import init, {
5
5
  compute_multi_dice,
6
6
  compute_payout_dice,
7
7
  compute_payout_plinko,
8
+ compute_prediction_hash,
8
9
  compute_roll_dice,
9
10
  compute_roll_plinko,
10
11
  compute_server_seed_hash,
12
+ compute_user_seed_binding,
11
13
  derive_session_key,
14
+ generate_user_secret,
12
15
  generate_user_seed,
13
16
  goldilocks_fields_to_hex,
14
17
  goldilocks_modulus,
@@ -39,10 +42,13 @@ const fns = {
39
42
  compute_multi_dice: guard(compute_multi_dice),
40
43
  compute_payout_dice: guard(compute_payout_dice),
41
44
  compute_payout_plinko: guard(compute_payout_plinko),
45
+ compute_prediction_hash: guard(compute_prediction_hash),
42
46
  compute_roll_dice: guard(compute_roll_dice),
43
47
  compute_roll_plinko: guard(compute_roll_plinko),
44
48
  compute_server_seed_hash: guard(compute_server_seed_hash),
49
+ compute_user_seed_binding: guard(compute_user_seed_binding),
45
50
  derive_session_key: guard(derive_session_key),
51
+ generate_user_secret: guard(generate_user_secret),
46
52
  generate_user_seed: guard(generate_user_seed),
47
53
  goldilocks_fields_to_hex: guard(goldilocks_fields_to_hex),
48
54
  goldilocks_modulus: guard(goldilocks_modulus),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rolly-dev/wasm-signer",
3
- "version": "1.5.1",
3
+ "version": "1.7.0",
4
4
  "description": "Poseidon2 hashing & bet signing for Rolly ZK-Rollup (WASM, Goldilocks field)",
5
5
  "type": "module",
6
6
  "exports": {