Urgent.News

What's breaking now, across thousands of outlets.

Tech

One rounding, not many: why a provably-fair verifier must match the server bit for bit

Originally published on the Betkyo Journal , where every figure is read from the game engine's source. Every provably fair round on this site turns a 256-bit hash into a number between 0 and 1 and then into an outcome. The server does that in Kotlin; the browser verifier does it in JavaScript. Both languages hold numbers as 64-bit doubles with 53 bits of precision , and a hash has more bits than…

A provably-fair verifier must match the server bit for bit to ensure accurate outcomes. This is because a hash, consisting of thirty-two bytes, needs to be converted into a number between 0 and 1. The server handles this conversion in Kotlin, while the browser verifier performs it in JavaScript. Both languages use 64-bit doubles with 53 bits of precision, which means that the hash, having more bits than that, requires some rounding during the conversion process.

If the server rounds once and the verifier rounds multiple times, the resulting numbers may differ by the last bit, leading to potential discrepancies in game outcomes. To prevent this, the engine constructs the number as two exact pieces added together in a single operation, dividing the first four bytes by 2³² and the next bytes by 2⁵⁶ or 2⁶⁴.

This ensures that the only rounding occurs once, matching the server's conversion method. The verifier, like the server, uses the same arithmetic to compute the result, making a rejection truly reflective of the game's fairness. By avoiding multiple rounding operations, the provably-fair verifier helps maintain trust in the integrity of the game's outcome.

Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.

Read the original at dev.to →

More in Tech

Nothing could start without the dependency we had filed as optional

Our configuration service was tier three. No SLO, no pager, a single replica for a long time, and a line in the architecture document describing it as a soft dependency because clients cache their…

  • Configuration service deemed soft dependency, but crucial for client startup
  • Node pool rotation caused service outage, triggering cascade failures
  • Service reclassified as tier one with added redundancy and monitoring

I Made Four Authorization Engines Answer the Same Questions

"Which authorization engine should I use" always gets answered with a table. Cedar is analyzable, Rego is expressive, Zanzibar is relationship-based. I could never feel the difference from any of it.

  • Four authorization engines tested with identical rules and simultaneous requests
  • Cedar, Rego, Zanzibar, and Casbin engines each with unique strengths and weaknesses
  • ReBAC failed to handle time-based constraints during business hours

What MiniMax H3 Max is, how to call it, and why we built h3max.info

MiniMax H3 landed at the end of July 2026, the open weights followed in August, and fal.ai shipped a speed-tuned build called H3 Max a few weeks later.

  • MiniMax H3, H3 Max Turbo, and H3 Max are distinct models
  • H3 Max Turbo renders 5-second 768p clips in 3 seconds
  • H3 Max is multimodal, processing text, images, videos, audio

Stop Slamming Downstream Services: Singleflight Request Coalescing with Java Virtual Threads

Stop Slamming Downstream Services: Singleflight Request Coalescing with Java Virtual Threads Virtual threads solved your JVM I/O bottlenecks, but downstream internal services are now on fire because…

  • Singleflight request coalescing pattern addresses virtual thread load on services.
  • Developers often use Redis or synchronized blocks, worsening the issue.
  • JVM-based Singleflight ensures efficient, scalable high-throughput handling.

More from Saturday 12 September →