Certainly! Below is a simple C# class that implements a provably fair dice roll system. The `RollResult` method accepts a multiplier, an optional nonce, and a house edge with a default value of 1.0. It uses SHA256 for hashing the combined seeds to ensure fairness. ```csharp using System; using System.Security.Cryptography; using System.Text; public class ProvablyFairDice { public string PublicSeed { get; set; } public string PrivateSeed { get; set; } public int Nonce { get; set; } public ProvablyFairDice(string publicSeed, string privateSeed) { PublicSeed = publicSeed; PrivateSeed = privateSeed; Nonce = 0; // Default starting nonce } public double RollResult(double multiplier, int? nonce = null, double houseEdge = 1.0) { // Use the provided nonce or the class's nonce property if not set int usedNonce = nonce ?? Nonce; // Increment the nonce for the next roll Nonce++; // Combine the seeds with the nonce to get the roll hash string rollHash = CreateHash($"{PublicSeed}:{PrivateSeed}:{usedNonce}"); // Convert the hash to a roll number double rollNumber = ConvertHashToRollNumber(rollHash); // Calculate the result with the house edge and multiplier double result = rollNumber * (100 - houseEdge) * multiplier; return result; } private string CreateHash(string input) { using (SHA256 sha256Hash = SHA256.Create()) { // ComputeHash - returns byte array byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(input)); // Convert byte array to a string StringBuilder builder = new StringBuilder(); for (int i = 0; i < bytes.Length; i++) { builder.Append(bytes[i].ToString("x2")); } return builder.ToString(); } } private double ConvertHashToRollNumber(string hash) { // Take the first 8 characters of the hash and convert them to a decimal string subHash = hash.Substring(0, 8); long decimalValue = Convert.ToInt64(subHash, 16); // Convert the decimal to a number between 0 and 100 double rollNumber = (decimalValue / (double)UInt32.MaxValue) * 100; return rollNumber; } } ``` This class uses the SHA256 hashing algorithm to ensure the fairness of the dice roll. The `RollResult` method calculates the result based on the combined seeds and nonce, applies the house edge, and then multiplies it by the given multiplier. The `Nonce` property is incremented after each roll to ensure that each roll is unique. Please note that this is a basic implementation and might need further adjustments based on your specific requirements, such as integrating with a database for seed management or adding additional security measures. Also, ensure that you're in compliance with any legal regulations regarding gambling and online games in your jurisdiction. Source: Conversation with Bing, 4/22/2024 (1) github.com. https://github.com/sownthunder/Back_2_Da_Future/tree/f6bcd431cc77ba7d931c679ffa3d59db55dd36e4/New%20Unity%20Project%2FAssets%2FEasy%20Secure%20-%20Coins%2C%20Gems%2FScripts%2FClasses%2FSystem%2FSecurityClass.cs. (2) github.com. https://github.com/neyhos-studio/LauncherBack/tree/552d4d45bd4f16ddd2c70fd0f300caf6e645e203/Helpers%2FShaHash.cs. (3) github.com. https://github.com/YajKMA/Zeiterfassung/tree/afb7955598530d2a9be557e6b33ff90d5c356e22/Security%2FHashing.cs. (4) github.com. https://github.com/UtrackiWiktor/HomeOffice/tree/02873f46fa6d5f4033626132a159fab83bb06929/HomeOffice%2Fclasses%2FPasswords%2FPassword.cs. (5) github.com. https://github.com/ShareNewsLLC/ShareNewsMVC/tree/56fbfa3c6641945f117a5181ca623c59da070176/MVC%2FControllers%2FAdminController.cs.