@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.
- package/dist/node/rolly_wasm_signer.d.ts +38 -0
- package/dist/node/rolly_wasm_signer.js +92 -0
- package/dist/node/rolly_wasm_signer_bg.wasm +0 -0
- package/dist/node/rolly_wasm_signer_bg.wasm.d.ts +3 -0
- package/dist/node-inline/rolly_wasm_signer.d.ts +38 -0
- package/dist/node-inline/rolly_wasm_signer.js +93 -1
- package/dist/node-inline/rolly_wasm_signer.mjs +91 -2
- package/dist/node-inline/rolly_wasm_signer_bg.wasm.d.ts +3 -0
- package/dist/web/rolly_wasm_signer.d.ts +41 -0
- package/dist/web/rolly_wasm_signer.js +89 -0
- package/dist/web/rolly_wasm_signer_bg.wasm +0 -0
- package/dist/web/rolly_wasm_signer_bg.wasm.d.ts +3 -0
- package/js/browser.mjs +3 -0
- package/js/index.d.ts +3 -0
- package/js/node-inline.cjs +3 -0
- package/js/node-inline.mjs +3 -0
- package/js/node.cjs +3 -0
- package/js/node.mjs +3 -0
- package/js/react.mjs +6 -0
- package/package.json +1 -1
|
@@ -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,
|
package/js/node-inline.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-inline.mjs
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,
|
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),
|