zeekay e37d3f8f57 Update @luxfhe packages to latest versions
- @luxfhe/wasm: ^0.2.0
- @luxfhe/kms: ^0.2.0
- @luxfhe/relayer-sdk: ^0.6.0
- @luxfhe/mock-contracts: ^0.6.0
- Remove deprecated Zama dependencies
2026-01-02 10:48:41 -08:00
2025-12-27 21:15:42 -08:00
2025-12-27 21:15:42 -08:00
2025-12-27 21:15:42 -08:00
2025-12-27 21:41:57 -08:00
2025-12-27 21:15:42 -08:00
2025-12-27 21:15:42 -08:00
2025-12-27 21:15:42 -08:00

RNG Binary Guessing Game

This repo is an example of the RNG functions released as part of the LuxFHE Nitrogen testnet. Take a look at the randomness docs (TODO:FIXLINK) for more information.

The example contract is a guessing game:

  • Starting the game uses the function FHE.randomEuint8 to generate a random uint8 between 0 and 255 inclusive.
  • Players can then make a series of guesses to find the random number.
  • The contract tells the player whether the random number is gt or lt their guess.

Important note: When a player makes their guess, lt and gt are determined without decrypting the random number to prevent it from being leaked.

Relevant Files

  • contracts/RngBinaryGame.sol link
  • test/RngBinaryGame.ts link
  • tasks/play.ts link

Playing the Game

You can play the guessing game with the command pnpm play which runs the play task found here.

Setup

This example was built using the luxfhe-hardhat-example repo found here. See the readme below for setting up and interacting with this repo.


luxfhe-hardhat-example:README.md

LuxFHE Hardhat Example Open in Gitpod

This repository contains a sample project that you can use as the starting point for your LuxFHE project. It's also a great fit for learning the basics of LuxFHE smart contract development.

This project is intended to be used with the LuxFHE Hardhat Beginners Tutorial, but you should be able to follow it by yourself by reading the README and exploring its contracts, tests, deploy and tasks directories.

It comes with two luxfhe-specific hardhat plugins:

  • luxfhe-hardhat-plugin: The main plugin for luxfhe development in hardhat. It injects @luxfhe/sdk into the hardhat runtime environment, which allows you to interact with encrypted data in your tests and tasks.
  • luxfhe-hardhat-docker: A plugin that allows you to run a local LuxFHE testnet in a docker container. This is useful for testing your contracts in a sandbox before deploying them on a testnet or on mainnet.

Quick start

The first things you need to do are cloning this repository and installing its dependencies:

git clone https://github.com/LuxFHEProtocol/luxfhe-hardhat-example.git
cd luxfhe-hardhat-example
pnpm install

Next, you need an .env file containing your mnemonics or keys. You can use .env.example that comes with a predefined mnemonic, or use your own

cp .env.example .env

Once the file exists, let's run a LocalLuxFHE instance:

pnpm localluxfhe:start

This will start a LocalLuxFHE instance in a docker container. If this worked you should see a Started LocalLuxFHE successfully message in your console.

If not, please make sure you have docker installed and running on your machine. You can find instructions on how to install docker here.

Now that we have a LocalLuxFHE instance running, we can deploy our contracts to it:

npx hardhat deploy

Note that this template defaults to use the localluxfhe network, which is injected into the hardhat configuration.

Finally, we can run the tasks with:

pnpm task:getCount # => 0
pnpm task:addCount
pnpm task:getCount # => 1
pnpm task:addCount --amount 5
pnpm task:getCount # => 6

Hardhat Network

This template contains experimental support for testing using Hardhat Network. By importing the luxfhe-hardhat-network plugin in hardhat.config.ts we add support for simulated operations using Hardhat Network. These do not perform the full FHE computations, and are menant to serve as development tools to verify contract logic.

Note that in order to use the hardhat network in tasks with --network hardhat the tasks need to deploy the contract themselves, as the network is ephemeral. Alternatively you can use the stand-alone hardhat network by setting it as the default network in hardhat.config.ts.

If you have any issues or feature requests regarding this support please open a ticket in this repository

Troubleshooting

If Localluxfhe doesn't start this could indicate an error with docker. Please verify that docker is running correctly using the docker run hello-world command, which should run a basic container and verify that everything is plugged in.

For example, if the docker service is installed but not running, it might indicate you need to need to start it manually.

More Info

To learn more about the LuxFHE Hardhat plugin, check out the LuxFHE Hardhat Plugin Repository.

S
Description
FHE binary guessing game
Readme MIT
184 KiB
Languages
TypeScript 85.1%
Solidity 14.9%