Live on Solana mainnet

A chessboard where every move is a signed transaction.

Click a piece, click a square. The move is sent as a real on-chain command, interpreted by a backend built with @wirebus/server, and applied for everyone live. No wallet connection. Every move is signed, ordered and permanent.

Free to play on real mainnet. Our Wirebus wallet runs in the background and pays every on-chain fee for you, so you can test it without any SOL, without a wallet, without connecting anything.

Every move is a real Solana mainnet transaction. The fees are sponsored by the Wirebus demo wallet, so playing is free for you. In a real app, each player signs from their own wallet and pays their own tiny fee.

Moves
    How it works
    1. You move. Pick a piece and a target square.
    2. Sign + send. A wirebus call builds and signs a transaction with the move command. No wallet connect.
    3. On-chain. The transaction lands on Solana mainnet: signed, ordered, permanent.
    4. Listen. @wirebus/server streams it (websocket + backfill) and decodes it.
    5. Apply. The interpreter validates it and runs the move handler, updating the board.
    6. Live. Everyone sees the move appear, with an explorer link to the transaction.
    Documentation

    Build this yourself

    1. Install

    npm install wirebus @wirebus/server @solana/web3.js

    2. The move command (envelope v1)

    { "v": 1, "cmd": "move", "args": { "from": "e2", "to": "e4" } }

    3. Send a move (client)

    import { sendCommand } from 'wirebus';
    
    await sendCommand(connection, signer, {
      controlAddress: INBOX,
      cmd: 'move',
      args: { from: 'e2', to: 'e4' },
    });

    4. The chess backend (server)

    import { serve } from '@wirebus/server';
    
    serve(connection, {
      openMode: true,
      apps: [{
        namespace: 'chess',
        controlAddress: INBOX,
        commands: {
          move: {
            schema: { parse: (a) => { /* validate squares */ return a; } },
            handler: (ctx) => applyMove(ctx.args.from, ctx.args.to),
          },
          reset: { handler: () => resetBoard() },
        },
      }],
    });

    This showcase

    Run it locally

    cd wirebus-showcase
    npm install
    SHOWCASE_SIGNER_SECRET=<funded mainnet key> npm start   # http://localhost:8095

    Notes (honest)