hackquest logo

Crossy Road

A wild 3D blockchain game where the player risks it all in traffic, every close call and high score lives forever on the Monad blockchain.

Videos

Description

Crossy Chain

A blockchain-enabled 3D arcade game where players guide a chicken across lanes of traffic, avoiding vehicles to earn high scores that are permanently recorded on the Monad blockchain using MetaMask Smart Accounts.

Built for the MetaMask Smart Accounts × Monad Dev Cook-Off Hackathon.


Overview

Crossy Chain is a Web3-powered remake of the classic Crossy Road concept. It combines fast-paced, skill-based gameplay with blockchain innovation through account abstraction and gasless user operations. Every score is submitted automatically to a smart contract on the Monad Testnet using MetaMask’s Delegation Toolkit, making on-chain gaming smooth and accessible.


Key Features

  • 3D gameplay built with Three.js

  • MetaMask Smart Account integration via the Delegation Toolkit SDK

  • On-chain score storage on the Monad Testnet

  • Retro pixel-art visuals using Press Start 2P font

  • Real-time Smart Account balance display

  • Automatic Smart Account deployment on first transaction


Technology Stack

Frontend

  • React (TypeScript)

  • Three.js for 3D rendering

  • Viem for blockchain interactions

  • Shadcn/UI + Tailwind CSS for interface

  • Wouter for routing

Blockchain

  • Monad Testnet (Chain ID 10143)

  • MetaMask Delegation Toolkit for Smart Accounts

  • Alchemy Bundler for ERC-4337 operations

  • Solidity 0.8.20

  • Hardhat environment


Smart Contract

ScoreStore.sol – A simple, gas-efficient contract for storing player scores.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract ScoreStore {
    mapping(address => uint256) public scores;

    event ScoreSaved(address indexed player, uint256 score, bool isNewHighScore);

    function saveScore(uint256 _score) external {
        bool isNewHighScore = false;

        // Only update if it's a new high score
        if (_score > scores[msg.sender]) {
            scores[msg.sender] = _score;
            isNewHighScore = true;
        }

        // Always emit the event (useful for analytics or tracking)
        emit ScoreSaved(msg.sender, _score, isNewHighScore);
    }

    function getScore(address _player) external view returns (uint256) {
        return scores[_player];
    }
}
  • Only accepts higher scores to prevent manipulation

  • Emits events for off-chain indexing

  • Transparent and auditable


How to Play

  1. Click “Connect Wallet” to create a MetaMask Smart Account.

  2. Fund the account with MON tokens on Monad Testnet.

  3. Use arrow keys to move the chicken and dodge traffic.

  4. Each successful crossing increases your score.

  5. When the game ends, your high score is automatically submitted on-chain.

  6. View your transaction on the Monad Explorer.

  7. Play https://crossyroadi.netlify.app/

Progress During Hackathon

Deployed the ScoreStore smart contract to record player high scores on-chain. Integrated wallet connection and Smart Account creation for gasless gameplay, with automatic on-chain score submission and a fallback to the user’s MetaMask EOA wallet if the Smart Account transaction fails.

Tech Stack

React
Web3
Ethers
Node
Solidity

Fundraising Status

No Funding Yet

Team Leader
AAqynt Labs
Sector
Gaming