lucapuddu/php-provably-fair

PhpProvablyFair is a library that generates and verifies provably fair games.

3.1.1 2022-07-06 12:05 UTC

This package is auto-updated.

Last update: 2024-04-06 15:41:36 UTC


README

Latest Version on Packagist Total Downloads

This library provides functions to generate and verify provably fair games.

Installation

Via Composer

composer require lucapuddu/php-provably-fair

The algorithm

Parameters values used in this example

$algorithm = 'sha256';
$serverSeed = 'server seed';
$clientSeed = 'client seed';
$nonce = '1';
$min = 15;
$max = 96;

Steps

  1. A hexadecimal string of variable length (depending on the algorithm used) is computed with hash_hmac. The function uses the $serverSeed as key, and the $clientSeed and $nonce as data, concatenated with an hyphen:
$output1 = hash_hmac($algorithm, "{$clientSeed}-{$nonce}", $serverSeed);
echo $output1; // 78ed9330f00055f15765cb141088f316d507204a745ad4800fd719fcbfca071a
  1. $output1 is then scaled to a number from 0 to 1, by converting it to an integer number and then dividing it by the maximum result possible (which is equal to 16 ^ length of $output1)
$output2 = hexdec($output1) / (16 ** strlen($output1));
echo $output2; // 0.47237510628475
  1. $output2 is scaled accordingly to min and max:
$result = $min + $output2 * ($max - $min);
echo $result; // 53.26238360906475‬
  1. The result is returned.

Usage

Create a ProvablyFair Object

$algorithm = 'sha256';
$serverSeed = 'server seed';
$clientSeed = 'client seed';
$nonce = 'nonce';
$min = 23.75;
$max = 44;
$generator = Builder::make()
                    ->algorithm($algorithm)
                    ->serverSeed($serverSeed)
                    ->clientSeed($clientSeed)
                    ->nonce($nonce)
                    ->range($min, $max)
                    ->build();
Default values
$algorithm = 'sha512/256';
$min = 0;
$max = 100;

Get the full list of supported algorithms here.

Roll a number

...
$output = $generator->roll();
echo $output;   //38.325308655221

// Change ProvablyFair state
$generator->setNonce('new nonce');

// Roll a new number
$output = $generator->roll();
echo $output;   //23.752100169784

Verify a roll

...
$generator->verify(38.325308655221); // true

Security

If you discover any security related issues, please use the issue tracker on github or email me at info__at__lucapuddu.com

Authors

License

MIT. Please see the license file for more information.