A battleship where both fleets stay encrypted on-chain. The contract finds your hits by computing on ciphertext, with Zama's fully homomorphic encryption. Real FHE, running live, from your browser.

Runs on Sepolia, the Ethereum test network: you need a little Sepolia ETH for gas, about 0.01 per game. No token, no prize. The practice mode needs no wallet.
Five frog ships, 14 cells. Only you will ever see this layout until the game ends.
Most memecoins ship a ticker. This one ships a game where the blockchain computes on data it cannot read. Your fleet is encrypted in your browser with the Zama SDK, stored on-chain as ciphertext, and every shot is answered by FHE operations inside the smart contract. The frog is named after FROG Mark 1, Zama's FPGA supercomputer built for exactly this.
The Zama relayer SDK turns your 36-bit fleet map into an encrypted input with a proof. The plain layout never leaves your device.
The contract keeps both boards as encrypted 64-bit values on Sepolia. Anyone can look. Nobody can read.
Each shot runs shift, and, equal and select on ciphertext to find hit, hit counter and win flag. No decryption needed.
Only the hit bit and the win flag are made publicly decryptable, then checked on-chain with the KMS proof. At game over, both fleets can be unhooded for anyone to audit.
// browser: the Zama relayer SDK const input = instance.createEncryptedInput(CONTRACT, user); input.add64(fleetMask); // your board, encrypted here const { handles, inputProof } = await input.encrypt(); await game.createGame(handles[0], inputProof);
// contract: one shot, answered on ciphertext (simplified) euint64 bitValue = FHE.and(FHE.shr(board, cell), 1); ebool hit = FHE.eq(bitValue, 1); newHits = FHE.add(hits, FHE.select(hit, 1, 0)); ebool won = FHE.eq(newHits, 14); FHE.makePubliclyDecryptable(hit); // only this bit opens
Your own fleet, your shots, a hit or a miss on each answer. After the game, both fleets.
Encrypted handles only, like 0x9f3a…c07e. Not the ship positions, not the remaining cells, not who is winning until a bit opens.