zkapp-cli
Version:
CLI to create zkApps (zero-knowledge apps) for Mina Protocol
50 lines • 2.12 kB
JavaScript
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);
[] = 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