Skip to content

Battleship on the Algorand blockchain 🚢 🚢 💥

License

Notifications You must be signed in to change notification settings

jasonpaulos/algoship

Repository files navigation

Algoship 🚢 🚢 💥

npm version

Algoship implements a basic version of the game battleship on the Algorand blockchain.

Algoship Terminal

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.

Backround

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.

If everything is stored on a blockchain, can players cheat?

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:

  1. Players choose a secret string of bytes.
  2. Players decide if a ship should occupy that cell.
  3. They concatenate their secret with: 1 if a ship occupies this cell, otherwise 0.
  4. 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.

What if a player submits a grid with 0 ships?

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.

About

Battleship on the Algorand blockchain 🚢 🚢 💥

Resources

License

Stars

Watchers

Forks

Packages

No packages published