GenLayer Project Boilerplate
The GenLayer Project Boilerplate is a template for building decentralized applications (DApps) on GenLayer. This boilerplate includes a complete example implementation of a football prediction market, demonstrating best practices and common patterns for GenLayer development.
This boilerplate is a work in progress and is not yet ready for production use. You can find the latest version at: GenLayer Project Boilerplate (opens in a new tab)
Features
- Contract Templates: Ready-to-use intelligent contract templates and examples
 - Testing Framework: Built-in testing infrastructure for end-to-end testing
 - Frontend Integration: Vue.js-based frontend setup with GenLayerJS integration
 - Environment Configuration: Pre-configured environment setup for development
 - Example Implementation: Full football prediction market implementation
 
How it's Built
The boilerplate project is structured to provide a development environment for GenLayer applications, combining both backend contract development and frontend user interface.
Technologies Used
- Python: For intelligent contract development and testing
 - Vue.js: Frontend framework for building user interfaces
 - GenLayerJS: SDK for interacting with GenLayer contracts
 - pytest: Testing framework for contract validation
 - Vite: Frontend build tool and development server
 
Project Structure
project-root/
βββ app/                 # Frontend application
β   βββ src/             # Vue.js source files
β   βββ .env.example     # Frontend environment variables template
βββ contracts/           # Intelligent Contracts
β   βββ football_prediction_market.py
βββ test/                # Test files
βββ .env.example         # Main environment variables templateRequirements
Before using the GenLayer Project Boilerplate, ensure your system meets the following requirements:
- GenLayer Studio: Running instance required
 - Node.js: Version 18.x or higher
 - Python: Version 3.8 or higher
 
Installation
- Clone the boilerplate repository:
 
git clone https://github.com/genlayerlabs/genlayer-project-boilerplate
cd genlayer-project-boilerplate- Set up the environment:
 
cp .env.example .envUsage
Deploying Contracts
- Access the GenLayer Simulator UI (default: http://localhost:8080 (opens in a new tab))
 - Navigate to "Contracts" section
 - Create a new contract using 
/contracts/football_prediction_market.py - Deploy through the "Run and Debug" interface
 
Frontend Setup
- Configure the frontend environment:
 
cd app
cp .env.example .env
# Add your contract address to VITE_CONTRACT_ADDRESS- Install dependencies and start the development server:
 
npm install
npm run devRunning Tests
Execute the test suite using pytest:
pip install -r requirements.txt
pytest testFootball Prediction Market Example
The included example contract demonstrates a complete prediction market implementation with the following features:
Contract Functions
Create Predictions:
create_prediction(game_date: str, team1: str, team2: str, predicted_winner: str)Resolve Predictions:
resolve_prediction(prediction_id: str)Query Data:
get_player_predictions(player_address: str)
get_player_points(player_address: str)Frontend Integration
The Vue.js frontend demonstrates:
- Wallet connection handling
 - Contract interaction using GenLayerJS
 - User interface for prediction creation and management
 - Real-time updates for prediction status
 
Testing Framework
The boilerplate includes a comprehensive testing suite covering the following scenarios:
Contract Schema
The schema of the contract is well generated and has the expected methods and variables.
Test Scenarios
Successful Draw Prediction
Tests the scenario where a player correctly predicts a draw between two teams. When the match is resolved as a draw, the player should receive 1 point for their accurate prediction.
Successful Winner Prediction
Validates the case where a player correctly predicts the winning team. Upon match resolution confirming their predicted team as the winner, the player should be awarded 1 point.
Unsuccessful Prediction
Covers the scenario where a player's prediction doesn't match the actual result. This could be:
- Predicting Team A wins, but Team B wins
 - Predicting a draw, but there's a winner
 - Predicting a winner, but the match ends in a draw In all these cases, the player should receive 0 points.
 
Best Practices
- Always use environment variables for configuration
 - Implement comprehensive testing for all contract functions
 - Follow the provided folder structure for consistency
 - Use TypeScript for frontend development
 - Implement proper error handling in both contract and frontend code