Napolean icon

roll

Napolean | PRO | 04/22/24 01:56:01 PM UTC | 0 ⭐ | 13927 👁️ | Never ⏰ | []
C# |

3.77 KB

|

None

|

0 👍

/

0 👎

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.

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎