Files
Fuma Nama bc78fc992d refactor(fhe): unify API - reveal() replaces getDecryptResult()
- Update to unified FHE decryption API
- Update dependencies to @luxfi/contracts
2025-12-31 21:11:42 -08:00

93 lines
2.1 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.13 <0.9.0;
import "@luxfi/contracts/fhe/FHE.sol";
import {Permissioned, Permission} from "@luxfi/contracts/fhe/access/Permissioned.sol";
// Simple console stub for development
library Console {
function log(string memory) internal pure {}
}
contract RngBinaryGame is Permissioned {
struct GameGuess {
uint8 guess;
bool lt;
bool gt;
}
struct GameState {
address player;
euint8 number;
uint8 guesses;
}
uint8 public flag = 0;
mapping(address => GameState) private gameState;
mapping(address => mapping(uint8 => GameGuess)) private gameGuesses;
constructor() {}
error GameNotFound();
error GameFinished();
error OutOfGuesses();
function createGame() public {
gameState[msg.sender] = GameState({
player: msg.sender,
number: FHE.randomEuint8(),
guesses: 0
});
}
function guess(uint8 _guess) public {
if (gameState[msg.sender].player != msg.sender) revert GameNotFound();
GameState storage game = gameState[msg.sender];
if (game.guesses >= 12) revert OutOfGuesses();
if (
game.guesses > 1 &&
!gameGuesses[msg.sender][game.guesses - 1].lt &&
!gameGuesses[msg.sender][game.guesses - 1].gt
) revert GameFinished();
euint8 eGuess = FHE.asEuint8(uint256(_guess));
Console.log("trivial encrypt finished");
ebool eLt = FHE.lt(eGuess, game.number);
FHE.decrypt(eLt);
bool lt = FHE.reveal(eLt);
Console.log("lt finished");
ebool eGt = FHE.gt(eGuess, game.number);
FHE.decrypt(eGt);
bool gt = FHE.reveal(eGt);
Console.log("gt finished");
gameGuesses[msg.sender][game.guesses] = GameGuess({
guess: _guess,
lt: lt,
gt: gt
});
game.guesses += 1;
Console.log("finished");
flag += 1;
}
function getGameState() public view returns (GameGuess[] memory guesses) {
if (gameState[msg.sender].player != msg.sender) revert GameNotFound();
GameState memory game = gameState[msg.sender];
guesses = new GameGuess[](game.guesses);
for (uint8 i = 0; i < game.guesses; i++) {
guesses[i] = gameGuesses[msg.sender][i];
}
}
}