-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathprovable.js
58 lines (56 loc) · 1.29 KB
/
provable.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
const assert = require("assert");
const {
md5,
sha256,
ByteGenerator,
// bytesToFloat,
floats,
ints,
defaults,
} = require("./utils");
module.exports =
(emit = (x) => x) =>
(config) => {
config = defaults(config);
const generator = ByteGenerator(config);
return {
next(salt, clientSeed) {
return defaults({
clientSeed: clientSeed || md5(`${config.clientSeed}:${salt}`),
serverSeed: sha256(`${config.serverSeed}:${salt}`),
});
},
state() {
return config;
},
floats(count = 1) {
++config.nonce;
assert(
Number.MAX_SAFE_INTEGER !== config.nonce,
"max nonce, rotate seed."
);
const result = floats(generator, count);
emit(config);
return result;
},
ints(count, max, min) {
++config.nonce;
assert(
Number.MAX_SAFE_INTEGER !== config.nonce,
"max nonce, rotate seed."
);
const result = ints(generator, count, max, min);
emit(config);
return result;
},
tick() {
++config.nonce;
assert(
Number.MAX_SAFE_INTEGER !== config.nonce,
"max nonce, rotate seed."
);
emit(config);
return config;
},
};
};