magadanuhak / laravel-provably-fair
一个 Laravel 扩展包,用于获取可验证的随机数
1.0.5
2024-05-28 11:04 UTC
Requires
- php: >=8.0
- laravel/framework: >=8
Requires (Dev)
- phpunit/phpunit: ^10
README
Laravel ProvablyFair 是一个包,允许使用客户端种子(前端字符串)和服务器种子(后端字符串)来生成随机数。
如果您知道客户端种子、服务器种子和nonce,您可以生成相同的随机数。nonce 是一个可计数的数字,用于计算相同的客户端种子和服务器种子被使用的次数。
安装
使用 composer 包管理器 composer 安装包。
composer require magadanuhak/laravel-provably-fair
用法
$provablyFairService = new ProvablyFair(); //Initialization of provably fair $clientSeed = $request->client_seed; // Client seed is a string that you should get from frontend $resultedData = $provablyFairService->getRandomNumber($clientSeed); // This method will return an object ProvablyFairResultData
getRandomNumber($clientSeed);
的结果是
class ProvablyFairResultData { public function __construct( public readonly string $clientSeed, public readonly string $serverSeed, public readonly int $nonce, public readonly float $resultedNumber, public readonly float $minimalValue, public readonly float $maximalValue, ) { } }
现在您可以将这些数据存储在数据库中,返回给用户。以下是从集合中随机获取一个项目的示例
class GetRandomWeapon { public function chances(): Collection { return collect([ "Ak-47" => 45, "Mp-40" => 50, "AWM" => 5, ]); } public function getItem(): string //Returns won Item Name { $sum = 0; $provablyFairService = new ProvablyFair(); //Initialization of provably fair $clientSeed = $request->client_seed; // Client seed is a string that you should get from frontend $resultedData = $provablyFairService->getRandomNumber($clientSeed); // This method will return an object ProvablyFairResultData // $resultedData = $provablyFairService->getRandomNumber($clientSeed, $serverSeed, $nonce); // $serverSeed, $nonce are optionally This method will return an object ProvablyFairResultData $choice = $resultedData->resultedNumber; return app( $this->chances() ->map(function ($value, $item) use (&$sum) { $sum += $value; return $sum; }) ->reduce(function ($result, $value, $key) use ($choice) { if (is_string($result)) { return $result; } if ($choice <= $value) { return $key; } return $result + $value; }, 0) ); } }
默认情况下,ProvablyFair::class
绑定到 ProvablyFairContract::class
。您可以使用 Laravel 服务容器依赖注入在您的 Laravel 项目中使用 ProvablyFair
class GetRandomItemByChance { public function __construct( ProvablyFairContract $provablyFair ) {} public function getProvablyFairResult(string $clientSeed): ProvablyFairResultData { return $this->provablyFair->getRandomNumber($clientSeed); } }
贡献
欢迎提交拉取请求。对于重大更改,请先打开一个问题来讨论您想要更改的内容。
请确保根据需要更新测试。