diff --git a/README.md b/README.md index 86efab0..ea61ecc 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # gamejutsu-tezos-contracts GameJutsu framework helps you create on-chain arbiters for state channel based games + +## Deployed contracts +### Ghostnet +* [arbiter](https://ghostnet.tzkt.io/KT1UZzu4ar6STUj2Mxde2hKH8LncCmY2vfjt) diff --git a/arbiter.jsligo b/arbiter.jsligo new file mode 100644 index 0000000..769063c --- /dev/null +++ b/arbiter.jsligo @@ -0,0 +1,42 @@ +type game = { + rules : address, + started : bool, + finished: bool, + key_hash_to_player_id: map, + players: [key, key] + } ; + +type storage = map; + +type game_move = { + game_id: nat, + nonce: nat, + player: key, + old_state: bytes, + new_state: bytes, + move: bytes +} + +type signed_game_move = { + game_move: game_move, + signatures: map +} + +type parameter = +| ["DisputeMove", signed_game_move] +| ["ProposeGame", address] +| ["AcceptGame", nat]; + +const dispute_move = ([store, signed_game_move] : [storage, signed_game_move]) => store; //TODO +const propose_game = ([store, rules] : [storage, address]) => store; +const accept_game = ([store, game_id] : [storage, nat]) => store; + +const main = ([action, store] : [parameter, storage]) : [list , storage] => { + return [ + list([]), + (match (action, { + DisputeMove: sgm => dispute_move ([store, sgm]), + ProposeGame: rules => propose_game ([store, rules]), + AcceptGame: game_id => accept_game ([store, game_id])})) + ] +};