Algoship implements a basic version of the game battleship on the Algorand blockchain.
To play, install Node and run:
npx algoship
The game will ask you for an node address and token to connect to an Algorand node. If you don't have one, consider a provider such as Algonode.
Each player has a 3x3 grid where they place ships. Each ship occupies 1 cell in the grid.
Every piece of information needed to play the game is stored on the Algorand blockchain using a
stateful smart contract. This
contract is defined in game.py
. The players interact with only this smart contract; there is no
direct communication between them.
Each player's grid of ships is stored on a public blockchain, and if these grids contained plaintext 0s and 1s players would be able to easily cheat. Instead, Algoship cryptographically commits to, but does not reveal, the values in each player's grids like so:
For each cell:
- Players choose a secret string of bytes.
- Players decide if a ship should occupy that cell.
- They concatenate their secret with: 1 if a ship occupies this cell, otherwise 0.
- They hash the concatenated string with SHA-512/256 and store the hash on the blockchain.
When it is time to reveal the value of a cell, the player submits that cell's secret. The smart contract then sees if that secret followed by 0 or 1 yields the hash that player submitted earlier, thereby revealing the hidden value.
After a game finishes, each player must disclose their secret values for any cells that remain. The smart contract then ensures that each player placed the appropriate amount of ships.