Skip to main content

Overview

info

Version Alpha 0.2 A game platform contract (see below) has been originated on Hangzhounet: KT1QW2haDVNiSaTW7NmL8ece16NwBGGpVLZh. The ledger: KT19FUt5vfAGKAiG1rtibTzYnz5yDZxmhfum.

What are state channels?

State channels combine the decentralization and security offered by the Tezos blockchain with the throughput and low latency offered by off-chain operations. As such, they provide a "layer two solution" that overcomes scalability limits and reduces operational costs.

By way of analogy, an ordinary legal contract does not require a judge to be present at every interaction of the involved parties. Indeed this is only needed in the comparatively rare cases of disagreement or foul play. The same is true for state channels: they provide a way for parties to interact off-chain and only need to fall back to on-chain operations to settle conflicts.

Build metadata

Games!

To explain how state channels work, this guide describes a game platform. It allows users to play games such as chess or tic-tac-toe. A prize for the winner is agreed upon at the start and settled at the end of a game. Actually, the provided framework is slightly more general and it is easy to see how games generalize to other types of contracts, e.g. financial ones.

How does it work?

The game platform, represented on-chain by a contract, allows participants to open channels between each other. To assure each other that debt resulting from game outcomes will be settled, they then push bonds that can only be withdrawn under certain conditions. The next step is to actually play the game: the players send each other signed off-chain operations, without any chain interactions. In case of disagreement either player can move the game to the blockchain. This ensures that the players can force each other to respect the rules of the game. If all goes well, very few operations take place on-chain, making game play cheaper (off-chain operations have no associated gas cost) and possibly faster.

The rules of a game are stipulated in a so-called model. (using SmartPy or any other methods to generate Michelson). Each instance of a model is called a game. In each game two players take turns in making moves.

Contracts and examples

The contracts for the platform, as well as the game models, can be found under smartpy.io/ide > Templates > Regular Templates > State Channels. In particular, there is:

API: instantiating the ledger and platform

ledgersp.Contract

fa2config$fa2configSee Python tab or FA2 template
metadatasp.TBigMap(sp.TString, sp.TBytes)metadata of the contract
adminsp.TAddressAllowed to set token metadata/permissions and inactivate the contract.

gamePlatformsp.Contract

adminssp.TSet(sp.TAddress)Set of admins of the platform. They are allowed to set token/model/games metada.
ledgersp.TAddressAddress of the only contract authorized to indicate that bonds has be pushed.
platform_addresssp.TAddress(optional) The address of the platform you want to replicate.