What does it mean?
HypeLoot is a brand name of Abacanes LTD, Reg No: HE443277, Having it's registered address at Strovolou, 77 STROVOLOS CENTER, 4th floor, Office 401 Strovolos, 2018, Nicosia, Cyprus, including all text, images, graphics, photographs, audio, video, buttons, icons, animations, data, messages, software, and other content, information, or materials on HypeLoot (“Materials”), and any Materials posted to or otherwise shared on HypeLoot by you such as posts made to the chatroom (“Content”).
The Services also include the deposit of in-store credits (“Credits”) which may be used to purchase virtual mystery boxes (“Boxes”) and experience points (“XP”). As randomly determined, Boxes may contain XP or physical item(s) which may be redeemed, exchanged, or otherwise disposed of (“Item(s)”). At all times, the value of the Item(s) and/or XP revealed in a Box will be equal to or greater than the price of the Box.
At the beginning of each Plinko round, a new 32-byte seed is randomly chosen. The seed is kept private until the round is complete, but its hash is calculated using the BLAKE2b hash function with a digest size of 256 bits and published before the bet is made.
BLAKE2b hashes of the concatenated secret seed, user seed, ball number, and row number are then used to calculate a floating point number between 0 and 1, which if greater than 0.5, causes the ball to drop to right, otherwise to fall to the left. This process is repeated until all balls have dropped through all rows and have been assigned multipliers.
Anyone can verify the outcome of a Plinko round after the secret seed has been revealed. As an example, the following python code first calculates a round's secret hash, the expected RTP, the outcomes for each ball, and the total payout. The "path" string shows the direction of the ball through each row: "+" indicates dropping to the right and "-" indicates dropping to the left.
import json import math import hashlib balls = 3 secret = b"9f04a20db15c8ec232e3a327ec27f7e2" user_seed = b"mySeed12345" bet_amount = 0.1 # download full config here https://api.hypeloot.com/api/plinko/config config = json.loads(""" { "name": "8-2", "rows": 8, "risk": 2, "multipliers": [12, 2.8, 1.8, 0.6, 0.2, 0.6, 1.8, 2.8, 12] } """) def bytes_to_uniform_float(xs: bytes) -> float: hash = hashlib.blake2b(xs, digest_size=32).digest() return int.from_bytes(hash[:8]) / float(2**64 - 1) def drop_ball(ball: int) -> dict: result = {"ball": ball, "path": ""} position = 0 for row in range(config["rows"]): outcome = row_outcome(ball, row) if outcome == "+": position += 1 result["path"] += outcome result["multiplier"] = config["multipliers"][position] return result def row_outcome(ball:int, row: int) -> str: full_seed = secret + f"plinko-{ball}-{row}".encode() + user_seed r = bytes_to_uniform_float(full_seed) return "+" if r > 0.5 else "-" print("Hash of secret:", hashlib.blake2b(secret, digest_size=32).digest().hex()) coefs = [math.comb(config["rows"], i) for i in range(config["rows"] + 1)] print("RTP:", sum([c*m for (c,m) in zip(coefs, config["multipliers"])]) / sum(coefs)) results = [drop_ball(i) for i in range(balls)] print("Results:", results) print("Total payout:", math.floor(sum([bet_amount * x["multiplier"] for x in results]) * 1e2) / 1e2)
Sample output:
Hash of secret: 4eda40b7d348eb1c0b13457a29d23d6dd96f6c2219053f97e51abc51d4c2f0e7 RTP: 0.9796875 Results: [{'ball': 0, 'path': '++-+----', 'multiplier': 0.6}, {'ball': 1, 'path': '--++++--', 'multiplier': 0.2}, {'ball': 2, 'path': '--++-+++', 'multiplier': 0.6}] Total payout: 0.14