@actuallyfair/verifier 0.0.7 → 0.0.9

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.
Files changed (36) hide show
  1. package/dist/compute-wager.d.ts +1 -10
  2. package/dist/compute-wager.js +5 -24
  3. package/dist/generated/context/crash-dice.d.ts +5 -0
  4. package/dist/generated/context/crash-dice.js +15 -1
  5. package/dist/generated/context/fair-coin-toss.d.ts +7 -2
  6. package/dist/generated/context/fair-coin-toss.js +18 -2
  7. package/dist/generated/context/hilo.d.ts +5 -0
  8. package/dist/generated/context/hilo.js +15 -1
  9. package/dist/generated/context/index.d.ts +80 -22
  10. package/dist/generated/context/index.js +57 -50
  11. package/dist/generated/context/mines.d.ts +5 -0
  12. package/dist/generated/context/mines.js +15 -1
  13. package/dist/generated/context/multi-roulette.d.ts +7 -2
  14. package/dist/generated/context/multi-roulette.js +15 -1
  15. package/dist/generated/context/plinko.d.ts +5 -0
  16. package/dist/generated/context/plinko.js +15 -1
  17. package/dist/generated/context/tower.d.ts +5 -0
  18. package/dist/generated/context/tower.js +15 -1
  19. package/package.json +2 -1
  20. package/protobuf/context/crash-dice.proto +2 -1
  21. package/protobuf/context/fair-coin-toss.proto +2 -1
  22. package/protobuf/context/hilo.proto +2 -1
  23. package/protobuf/context/index.proto +12 -11
  24. package/protobuf/context/mines.proto +2 -1
  25. package/protobuf/context/multi-roulette.proto +2 -1
  26. package/protobuf/context/plinko.proto +1 -0
  27. package/protobuf/context/tower.proto +2 -1
  28. package/src/compute-wager.ts +6 -39
  29. package/src/generated/context/crash-dice.ts +17 -1
  30. package/src/generated/context/fair-coin-toss.ts +20 -2
  31. package/src/generated/context/hilo.ts +17 -1
  32. package/src/generated/context/index.ts +64 -55
  33. package/src/generated/context/mines.ts +17 -1
  34. package/src/generated/context/multi-roulette.ts +17 -1
  35. package/src/generated/context/plinko.ts +17 -1
  36. package/src/generated/context/tower.ts +17 -1
@@ -1,6 +1,5 @@
1
1
  import { Currency } from "./generated/currency";
2
2
  import { FairCoinToss, FairCoinToss_Choice } from "./generated/context/fair-coin-toss";
3
- import { CrashDice } from "./generated/context/crash-dice";
4
3
  import { MultiRoulette } from "./generated/context/multi-roulette";
5
4
  export type CompressedSeed = number;
6
5
  export type RandomSource = Uint8Array;
@@ -22,15 +21,7 @@ export declare function computeFairCoinTossOutcome(randomSource: RandomSource, w
22
21
  };
23
22
  export declare function computeCrashResult(hash: Uint8Array, gameHash: Uint8Array, // This is the hash of the next from the hash chain
24
23
  houseEdge?: number): number;
25
- export type CrashDiceOutcome = {
26
- multiplier: number;
27
- target: number;
28
- win: boolean;
29
- };
30
- export declare function computeCrashDiceResultFromRandomSource(randomSource: RandomSource): number;
31
- export declare function computeCrashDiceResult(hash: Uint8Array, clientSeed: string): number;
32
- export declare function computeCrashDiceOutcomeFromRandomSource(randomSource: RandomSource, bet: CrashDice): CrashDiceOutcome;
33
- export declare function computeCrashDiceOutcome(hash: Uint8Array, clientSeed: string, bet: CrashDice): CrashDiceOutcome;
24
+ export declare function computeCrashDiceResult(randomSource: RandomSource, houseEdge: number): number;
34
25
  export declare function computeMultiRouletteResult(randomSource: RandomSource, bet: MultiRoulette): number | undefined;
35
26
  export declare function computeMineLocations(randomSource: RandomSource, revealedCells: Set<number>, // tiles we know are safe
36
27
  cells: number, // how many cells in total
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.computePlinkoResult = exports.computePlinkoResultFromRandomSource = exports.computePlinkoHouseEdge = exports.computePlinkoPascalsProbabilities = exports.computePlinkoPath = exports.computePinkoPossibilityIndexFromPath = exports.computeMinesMultiplier = exports.computeMineLocations = exports.computeMultiRouletteResult = exports.computeCrashDiceOutcome = exports.computeCrashDiceOutcomeFromRandomSource = exports.computeCrashDiceResult = exports.computeCrashDiceResultFromRandomSource = exports.computeCrashResult = exports.computeFairCoinTossOutcome = exports.computeFairCoinTossResult = exports.computeRandomSource = exports.computeRandomSourceFromCompressedSeed = exports.computeCompressedSeedFromGameHash = exports.computeCompressedSeed = exports.splitHelixHash = void 0;
3
+ exports.computePlinkoResult = exports.computePlinkoResultFromRandomSource = exports.computePlinkoHouseEdge = exports.computePlinkoPascalsProbabilities = exports.computePlinkoPath = exports.computePinkoPossibilityIndexFromPath = exports.computeMinesMultiplier = exports.computeMineLocations = exports.computeMultiRouletteResult = exports.computeCrashDiceResult = exports.computeCrashResult = exports.computeFairCoinTossOutcome = exports.computeFairCoinTossResult = exports.computeRandomSource = exports.computeRandomSourceFromCompressedSeed = exports.computeCompressedSeedFromGameHash = exports.computeCompressedSeed = exports.splitHelixHash = void 0;
4
4
  const sha256_1 = require("@noble/hashes/sha256");
5
5
  const hmac_1 = require("@noble/hashes/hmac");
6
6
  const utils_1 = require("@noble/curves/abstract/utils");
@@ -78,33 +78,14 @@ houseEdge = 0) {
78
78
  return doComputeCrashResult((0, hmac_1.hmac)(sha256_1.sha256, hash, gameHash), houseEdge);
79
79
  }
80
80
  exports.computeCrashResult = computeCrashResult;
81
- function computeCrashDiceResultFromRandomSource(randomSource) {
81
+ function computeCrashDiceResult(randomSource, houseEdge) {
82
82
  const normalized = u32FromHash(randomSource);
83
83
  const max = 2 ** 32;
84
- const multiplierTimes100 = Math.floor((100 * max) / (max - normalized));
85
- return multiplierTimes100 / 100;
86
- }
87
- exports.computeCrashDiceResultFromRandomSource = computeCrashDiceResultFromRandomSource;
88
- function computeCrashDiceResult(hash, clientSeed) {
89
- const randomSource = computeRandomSource(clientSeed, hash);
90
- return computeCrashDiceResultFromRandomSource(randomSource);
84
+ let result = ((1 - houseEdge) * max) / (max - normalized);
85
+ result = Math.floor(result * 100) / 100;
86
+ return Math.max(1, result);
91
87
  }
92
88
  exports.computeCrashDiceResult = computeCrashDiceResult;
93
- function computeCrashDiceOutcomeFromRandomSource(randomSource, bet) {
94
- const multiplier = computeCrashDiceResultFromRandomSource(randomSource);
95
- const target = bet.target;
96
- return {
97
- multiplier,
98
- target,
99
- win: multiplier >= target,
100
- };
101
- }
102
- exports.computeCrashDiceOutcomeFromRandomSource = computeCrashDiceOutcomeFromRandomSource;
103
- function computeCrashDiceOutcome(hash, clientSeed, bet) {
104
- const randomSource = computeRandomSource(clientSeed, hash);
105
- return computeCrashDiceOutcomeFromRandomSource(randomSource, bet);
106
- }
107
- exports.computeCrashDiceOutcome = computeCrashDiceOutcome;
108
89
  // returns the index of which roulette outcome was picked
109
90
  function computeMultiRouletteResult(randomSource, bet) {
110
91
  const seedHash = (0, sha256_1.sha256)(randomSource);
@@ -4,6 +4,7 @@ export interface CrashDice {
4
4
  amount: Amount | undefined;
5
5
  target: number;
6
6
  houseEdge: number;
7
+ compressedSeed: number;
7
8
  }
8
9
  export declare const CrashDice: {
9
10
  encode(message: CrashDice, writer?: _m0.Writer): _m0.Writer;
@@ -17,6 +18,7 @@ export declare const CrashDice: {
17
18
  } | undefined;
18
19
  target?: number | undefined;
19
20
  houseEdge?: number | undefined;
21
+ compressedSeed?: number | undefined;
20
22
  } & {
21
23
  amount?: ({
22
24
  currency?: import("../currency").Currency | undefined;
@@ -27,6 +29,7 @@ export declare const CrashDice: {
27
29
  } & { [K in Exclude<keyof I["amount"], keyof Amount>]: never; }) | undefined;
28
30
  target?: number | undefined;
29
31
  houseEdge?: number | undefined;
32
+ compressedSeed?: number | undefined;
30
33
  } & { [K_1 in Exclude<keyof I, keyof CrashDice>]: never; }>(base?: I | undefined): CrashDice;
31
34
  fromPartial<I_1 extends {
32
35
  amount?: {
@@ -35,6 +38,7 @@ export declare const CrashDice: {
35
38
  } | undefined;
36
39
  target?: number | undefined;
37
40
  houseEdge?: number | undefined;
41
+ compressedSeed?: number | undefined;
38
42
  } & {
39
43
  amount?: ({
40
44
  currency?: import("../currency").Currency | undefined;
@@ -45,5 +49,6 @@ export declare const CrashDice: {
45
49
  } & { [K_2 in Exclude<keyof I_1["amount"], keyof Amount>]: never; }) | undefined;
46
50
  target?: number | undefined;
47
51
  houseEdge?: number | undefined;
52
+ compressedSeed?: number | undefined;
48
53
  } & { [K_3 in Exclude<keyof I_1, keyof CrashDice>]: never; }>(object: I_1): CrashDice;
49
54
  };
@@ -8,7 +8,7 @@ exports.CrashDice = void 0;
8
8
  const minimal_1 = __importDefault(require("protobufjs/minimal"));
9
9
  const amount_1 = require("../amount");
10
10
  function createBaseCrashDice() {
11
- return { amount: undefined, target: 0, houseEdge: 0 };
11
+ return { amount: undefined, target: 0, houseEdge: 0, compressedSeed: 0 };
12
12
  }
13
13
  exports.CrashDice = {
14
14
  encode(message, writer = minimal_1.default.Writer.create()) {
@@ -21,6 +21,9 @@ exports.CrashDice = {
21
21
  if (message.houseEdge !== 0) {
22
22
  writer.uint32(25).double(message.houseEdge);
23
23
  }
24
+ if (message.compressedSeed !== 0) {
25
+ writer.uint32(37).fixed32(message.compressedSeed);
26
+ }
24
27
  return writer;
25
28
  },
26
29
  decode(input, length) {
@@ -48,6 +51,12 @@ exports.CrashDice = {
48
51
  }
49
52
  message.houseEdge = reader.double();
50
53
  continue;
54
+ case 4:
55
+ if (tag !== 37) {
56
+ break;
57
+ }
58
+ message.compressedSeed = reader.fixed32();
59
+ continue;
51
60
  }
52
61
  if ((tag & 7) === 4 || tag === 0) {
53
62
  break;
@@ -61,6 +70,7 @@ exports.CrashDice = {
61
70
  amount: isSet(object.amount) ? amount_1.Amount.fromJSON(object.amount) : undefined,
62
71
  target: isSet(object.target) ? globalThis.Number(object.target) : 0,
63
72
  houseEdge: isSet(object.houseEdge) ? globalThis.Number(object.houseEdge) : 0,
73
+ compressedSeed: isSet(object.compressedSeed) ? globalThis.Number(object.compressedSeed) : 0,
64
74
  };
65
75
  },
66
76
  toJSON(message) {
@@ -74,6 +84,9 @@ exports.CrashDice = {
74
84
  if (message.houseEdge !== 0) {
75
85
  obj.houseEdge = message.houseEdge;
76
86
  }
87
+ if (message.compressedSeed !== 0) {
88
+ obj.compressedSeed = Math.round(message.compressedSeed);
89
+ }
77
90
  return obj;
78
91
  },
79
92
  create(base) {
@@ -86,6 +99,7 @@ exports.CrashDice = {
86
99
  : undefined;
87
100
  message.target = object.target ?? 0;
88
101
  message.houseEdge = object.houseEdge ?? 0;
102
+ message.compressedSeed = object.compressedSeed ?? 0;
89
103
  return message;
90
104
  },
91
105
  };
@@ -2,6 +2,7 @@ import _m0 from "protobufjs/minimal";
2
2
  /** This is a very simple coin toss with 50/50 odds. Does not have amounts as its just for demo apps */
3
3
  export interface FairCoinToss {
4
4
  playerChoice: FairCoinToss_Choice;
5
+ compressedSeed: number;
5
6
  }
6
7
  export declare enum FairCoinToss_Choice {
7
8
  HEADS = 0,
@@ -17,12 +18,16 @@ export declare const FairCoinToss: {
17
18
  toJSON(message: FairCoinToss): unknown;
18
19
  create<I extends {
19
20
  playerChoice?: FairCoinToss_Choice | undefined;
21
+ compressedSeed?: number | undefined;
20
22
  } & {
21
23
  playerChoice?: FairCoinToss_Choice | undefined;
22
- } & { [K in Exclude<keyof I, "playerChoice">]: never; }>(base?: I | undefined): FairCoinToss;
24
+ compressedSeed?: number | undefined;
25
+ } & { [K in Exclude<keyof I, keyof FairCoinToss>]: never; }>(base?: I | undefined): FairCoinToss;
23
26
  fromPartial<I_1 extends {
24
27
  playerChoice?: FairCoinToss_Choice | undefined;
28
+ compressedSeed?: number | undefined;
25
29
  } & {
26
30
  playerChoice?: FairCoinToss_Choice | undefined;
27
- } & { [K_1 in Exclude<keyof I_1, "playerChoice">]: never; }>(object: I_1): FairCoinToss;
31
+ compressedSeed?: number | undefined;
32
+ } & { [K_1 in Exclude<keyof I_1, keyof FairCoinToss>]: never; }>(object: I_1): FairCoinToss;
28
33
  };
@@ -40,13 +40,16 @@ function fairCoinToss_ChoiceToJSON(object) {
40
40
  }
41
41
  exports.fairCoinToss_ChoiceToJSON = fairCoinToss_ChoiceToJSON;
42
42
  function createBaseFairCoinToss() {
43
- return { playerChoice: 0 };
43
+ return { playerChoice: 0, compressedSeed: 0 };
44
44
  }
45
45
  exports.FairCoinToss = {
46
46
  encode(message, writer = minimal_1.default.Writer.create()) {
47
47
  if (message.playerChoice !== 0) {
48
48
  writer.uint32(8).int32(message.playerChoice);
49
49
  }
50
+ if (message.compressedSeed !== 0) {
51
+ writer.uint32(21).fixed32(message.compressedSeed);
52
+ }
50
53
  return writer;
51
54
  },
52
55
  decode(input, length) {
@@ -62,6 +65,12 @@ exports.FairCoinToss = {
62
65
  }
63
66
  message.playerChoice = reader.int32();
64
67
  continue;
68
+ case 2:
69
+ if (tag !== 21) {
70
+ break;
71
+ }
72
+ message.compressedSeed = reader.fixed32();
73
+ continue;
65
74
  }
66
75
  if ((tag & 7) === 4 || tag === 0) {
67
76
  break;
@@ -71,13 +80,19 @@ exports.FairCoinToss = {
71
80
  return message;
72
81
  },
73
82
  fromJSON(object) {
74
- return { playerChoice: isSet(object.playerChoice) ? fairCoinToss_ChoiceFromJSON(object.playerChoice) : 0 };
83
+ return {
84
+ playerChoice: isSet(object.playerChoice) ? fairCoinToss_ChoiceFromJSON(object.playerChoice) : 0,
85
+ compressedSeed: isSet(object.compressedSeed) ? globalThis.Number(object.compressedSeed) : 0,
86
+ };
75
87
  },
76
88
  toJSON(message) {
77
89
  const obj = {};
78
90
  if (message.playerChoice !== 0) {
79
91
  obj.playerChoice = fairCoinToss_ChoiceToJSON(message.playerChoice);
80
92
  }
93
+ if (message.compressedSeed !== 0) {
94
+ obj.compressedSeed = Math.round(message.compressedSeed);
95
+ }
81
96
  return obj;
82
97
  },
83
98
  create(base) {
@@ -86,6 +101,7 @@ exports.FairCoinToss = {
86
101
  fromPartial(object) {
87
102
  const message = createBaseFairCoinToss();
88
103
  message.playerChoice = object.playerChoice ?? 0;
104
+ message.compressedSeed = object.compressedSeed ?? 0;
89
105
  return message;
90
106
  },
91
107
  };
@@ -40,6 +40,7 @@ export declare function hiLoMove_ChoiceToJSON(object: HiLoMove_Choice): string;
40
40
  export interface HiLo {
41
41
  start?: HiLoStart | undefined;
42
42
  move?: HiLoMove | undefined;
43
+ compressedSeed: number;
43
44
  }
44
45
  export declare const HiLoStart: {
45
46
  encode(message: HiLoStart, writer?: _m0.Writer): _m0.Writer;
@@ -116,6 +117,7 @@ export declare const HiLo: {
116
117
  playerChoice?: HiLoMove_Choice | undefined;
117
118
  moveIndex?: number | undefined;
118
119
  } | undefined;
120
+ compressedSeed?: number | undefined;
119
121
  } & {
120
122
  start?: ({
121
123
  amount?: {
@@ -140,6 +142,7 @@ export declare const HiLo: {
140
142
  playerChoice?: HiLoMove_Choice | undefined;
141
143
  moveIndex?: number | undefined;
142
144
  } & { [K_2 in Exclude<keyof I["move"], keyof HiLoMove>]: never; }) | undefined;
145
+ compressedSeed?: number | undefined;
143
146
  } & { [K_3 in Exclude<keyof I, keyof HiLo>]: never; }>(base?: I | undefined): HiLo;
144
147
  fromPartial<I_1 extends {
145
148
  start?: {
@@ -153,6 +156,7 @@ export declare const HiLo: {
153
156
  playerChoice?: HiLoMove_Choice | undefined;
154
157
  moveIndex?: number | undefined;
155
158
  } | undefined;
159
+ compressedSeed?: number | undefined;
156
160
  } & {
157
161
  start?: ({
158
162
  amount?: {
@@ -177,5 +181,6 @@ export declare const HiLo: {
177
181
  playerChoice?: HiLoMove_Choice | undefined;
178
182
  moveIndex?: number | undefined;
179
183
  } & { [K_6 in Exclude<keyof I_1["move"], keyof HiLoMove>]: never; }) | undefined;
184
+ compressedSeed?: number | undefined;
180
185
  } & { [K_7 in Exclude<keyof I_1, keyof HiLo>]: never; }>(object: I_1): HiLo;
181
186
  };
@@ -292,7 +292,7 @@ exports.HiLoMove = {
292
292
  },
293
293
  };
294
294
  function createBaseHiLo() {
295
- return { start: undefined, move: undefined };
295
+ return { start: undefined, move: undefined, compressedSeed: 0 };
296
296
  }
297
297
  exports.HiLo = {
298
298
  encode(message, writer = minimal_1.default.Writer.create()) {
@@ -302,6 +302,9 @@ exports.HiLo = {
302
302
  if (message.move !== undefined) {
303
303
  exports.HiLoMove.encode(message.move, writer.uint32(18).fork()).ldelim();
304
304
  }
305
+ if (message.compressedSeed !== 0) {
306
+ writer.uint32(29).fixed32(message.compressedSeed);
307
+ }
305
308
  return writer;
306
309
  },
307
310
  decode(input, length) {
@@ -323,6 +326,12 @@ exports.HiLo = {
323
326
  }
324
327
  message.move = exports.HiLoMove.decode(reader, reader.uint32());
325
328
  continue;
329
+ case 3:
330
+ if (tag !== 29) {
331
+ break;
332
+ }
333
+ message.compressedSeed = reader.fixed32();
334
+ continue;
326
335
  }
327
336
  if ((tag & 7) === 4 || tag === 0) {
328
337
  break;
@@ -335,6 +344,7 @@ exports.HiLo = {
335
344
  return {
336
345
  start: isSet(object.start) ? exports.HiLoStart.fromJSON(object.start) : undefined,
337
346
  move: isSet(object.move) ? exports.HiLoMove.fromJSON(object.move) : undefined,
347
+ compressedSeed: isSet(object.compressedSeed) ? globalThis.Number(object.compressedSeed) : 0,
338
348
  };
339
349
  },
340
350
  toJSON(message) {
@@ -345,6 +355,9 @@ exports.HiLo = {
345
355
  if (message.move !== undefined) {
346
356
  obj.move = exports.HiLoMove.toJSON(message.move);
347
357
  }
358
+ if (message.compressedSeed !== 0) {
359
+ obj.compressedSeed = Math.round(message.compressedSeed);
360
+ }
348
361
  return obj;
349
362
  },
350
363
  create(base) {
@@ -356,6 +369,7 @@ exports.HiLo = {
356
369
  ? exports.HiLoStart.fromPartial(object.start)
357
370
  : undefined;
358
371
  message.move = (object.move !== undefined && object.move !== null) ? exports.HiLoMove.fromPartial(object.move) : undefined;
372
+ message.compressedSeed = object.compressedSeed ?? 0;
359
373
  return message;
360
374
  },
361
375
  };