UNPKG

zkapp-cli

Version:

CLI to create zkApps (zero-knowledge apps) for Mina Protocol

50 lines 2.12 kB
import { TicTacToe } from './tictactoe.js'; import { Field, Bool, PrivateKey, Mina, AccountUpdate, Signature, } from 'o1js'; import { describe, it, beforeEach } from 'node:test'; import assert from 'node:assert'; describe('tictactoe', () => { let player1, player1Key, player2, zkAppAddress, zkAppPrivateKey; beforeEach(async () => { const Local = await Mina.LocalBlockchain({ proofsEnabled: false }); Mina.setActiveInstance(Local); [player1, player2] = Local.testAccounts; player1Key = player1.key; zkAppPrivateKey = PrivateKey.random(); zkAppAddress = zkAppPrivateKey.toPublicKey(); }); it('generates and deploys tictactoe', async () => { const zkApp = new TicTacToe(zkAppAddress); const txn = await Mina.transaction(player1, async () => { AccountUpdate.fundNewAccount(player1); await zkApp.deploy(); await zkApp.startGame(player1, player2); }); await txn.prove(); await txn.sign([zkAppPrivateKey, player1Key]).send(); const board = zkApp.board.get(); assert.deepStrictEqual(board, Field(0)); }); it('deploys tictactoe & accepts a correct move', async () => { const zkApp = new TicTacToe(zkAppAddress); // deploy let txn = await Mina.transaction(player1, async () => { AccountUpdate.fundNewAccount(player1); await zkApp.deploy(); await zkApp.startGame(player1, player2); }); await txn.prove(); await txn.sign([zkAppPrivateKey, player1Key]).send(); // move const [x, y] = [Field(0), Field(0)]; const signature = Signature.create(player1Key, [x, y]); txn = await Mina.transaction(player1, async () => { zkApp.play(player1, signature, x, y); }); await txn.prove(); await txn.sign([player1Key]).send(); // check next player const isNextPlayer2 = zkApp.nextIsPlayer2.get(); assert.deepStrictEqual(isNextPlayer2, Bool(true)); }); }); //# sourceMappingURL=tictactoe.test.js.map