Skip to main content

What Are Contributions?

Contributions are recorded actions that participants make to support the GenLayer ecosystem. Each contribution:
  • Belongs to a specific category (Validator, Builder, or Steward)
  • Has a contribution type that defines what action was performed
  • Earns base points within a defined min/max range
  • Gets multiplied by an active multiplier to calculate global points
  • Requires evidence (links and descriptions) for verification
  • Goes through steward review before points are awarded

Data Model

Contributions are structured with the following key fields:

Core Fields

class Contribution:
    user                    # Who made the contribution
    contribution_type       # What type of contribution
    category               # Validator, Builder, or Steward
    points                 # Base points awarded (within min/max)
    frozen_global_points   # Base points × multiplier (frozen)
    multiplier_at_creation # Multiplier rate when created
    contribution_date      # When the contribution was made
    notes                  # Additional context
    evidence_items         # Links and descriptions
The frozen_global_points field preserves your points even if multipliers change later. Once awarded, your points never decrease.

Contribution Types

Each contribution type defines:
  • Category: Which participant category it belongs to
  • Min/Max Points: The range of base points that can be awarded
  • Description: What qualifies for this contribution type
  • Examples: Sample submissions to guide participants
  • Submittable Flag: Whether users can submit this type (some are auto-generated)

Example Contribution Types

Node Running

Category: ValidatorPoints: 10-100Maintaining an active validator node on the GenLayer network

Blog Post

Category: BuilderPoints: 50-150Publishing technical content about GenLayer

Code Contribution

Category: BuilderPoints: 100-500Contributing code to GenLayer repositories

Special Contribution Types

Some contribution types have special purposes:

Welcome Contributions

  • builder-welcome: Awarded when completing the builder onboarding journey
  • validator-waitlist: Awarded when joining the validator waitlist
These are typically auto-generated and not directly submittable.

Graduation Contribution

  • validator: Marks graduation from waitlist to active validator status
  • Creates a snapshot on the graduation leaderboard with frozen waitlist points

Submission Lifecycle

Contributions go through a multi-state workflow:
1

Submission

Participant submits a contribution with:
  • Contribution type
  • Evidence (URLs and descriptions)
  • Contribution date
  • Notes/context
2

Pending Review

Status: pendingSubmission enters the review queue. Stewards with appropriate permissions can review it.
3

Steward Review

A steward with permission for this contribution type reviews the submission and can:
  • Accept: Convert to approved contribution and award points
  • Reject: Decline with explanation
  • Request More Info: Ask for additional evidence
  • Propose: Suggest changes for another steward to approve
4

Final Status

Status: accepted, rejected, or more_info_needed
  • If accepted: Creates a Contribution record and updates leaderboards
  • If rejected: Submission archived with steward feedback
  • If more info needed: Participant can edit and resubmit

Submission States

StateDescriptionNext Actions
pendingAwaiting initial reviewSteward review
more_info_neededRequires additional evidenceParticipant edit
acceptedApproved and converted to contributionNone (complete)
rejectedNot approvedView reason, submit new

Evidence Requirements

All contributions require evidence to verify the work was completed:

Evidence Types

Provide detailed text descriptions:
  • Explain what you built/did
  • Describe the impact or value
  • Include metrics if applicable
  • Reference relevant code or deployments
Example:
Implemented a new transaction batching system that improves 
throughput by 40%. The PR includes unit tests, integration 
tests, and updated documentation.
File uploads are not supported. All evidence must be provided as URLs or text descriptions. This ensures evidence remains accessible and verifiable long-term.

Point Calculation

When a contribution is accepted, points are calculated using this formula:
# Get the active multiplier for the contribution date
multiplier = GlobalLeaderboardMultiplier.get_active_for_type(
    contribution_type=contribution_type,
    at_date=contribution_date
)

# Calculate frozen global points
frozen_global_points = base_points * multiplier

Example Calculation

1

Base Points

Steward awards 75 points for a blog post contribution (range: 50-150)
2

Find Active Multiplier

On the contribution date (March 1, 2026), the multiplier is 1.5x
3

Calculate Global Points

75 points × 1.5 = 112.5 → 113 global points
4

Freeze Points

These 113 points are “frozen” - they won’t change even if the multiplier changes later

Contribution Validation

The system enforces several validation rules:

User Visibility

if not user.visible:
    raise ValidationError(
        "Cannot add contributions for invisible users"
    )
Only visible users can have contributions. This prevents test accounts from appearing on leaderboards.

Point Range Validation

if points < contribution_type.min_points or 
   points > contribution_type.max_points:
    raise ValidationError(
        f"Points must be between {min_points} and {max_points}"
    )
Base points must fall within the contribution type’s defined range.

Multiplier Requirement

multiplier = GlobalLeaderboardMultiplier.get_active_for_type(
    contribution_type,
    at_date=contribution_date
)
if not multiplier:
    raise ValidationError(
        "No active multiplier exists for this date"
    )
A valid multiplier must exist for the contribution date. This ensures consistent point calculations.

Viewing Contributions

Your Contributions

View all your contributions on your profile page:
  • Recent Contributions: Latest accepted contributions
  • By Category: Filter by Validator, Builder, or Steward
  • By Type: Group by contribution type
  • Point Breakdown: See base points and global points for each

Public Contributions

All contributions are public and can be viewed:
  • On user profile pages (/participant/:address)
  • In the contribution type detail pages
  • On the leaderboard with expandable contribution history
Transparency is a core value. All contributions, points, and evidence are publicly viewable to ensure fairness.

Editing Submissions

Before a submission is accepted, you can edit it:
  1. Navigate to My Submissions
  2. Click on a pending or “more info needed” submission
  3. Update evidence, description, or contribution date
  4. Save changes (no reCAPTCHA required for edits)
Once a submission is accepted and converted to a contribution, it cannot be edited. Make sure your evidence is complete before steward approval.

Missions and Highlights

Missions

Missions are special campaigns that highlight specific contribution opportunities:
class Mission:
    name               # Mission title
    description        # What participants should do
    contribution_type  # Associated contribution type
    start_date        # When it becomes active
    end_date          # When it expires
Active missions appear on the dashboard and contribution type pages.

Contribution Highlights

Stewards can feature exceptional contributions:
class ContributionHighlight:
    contribution  # The featured contribution
    title        # Short highlight title
    description  # Why this contribution is noteworthy
Highlighted contributions appear on the home page and category dashboards.

API Access

Contributions can be accessed via the REST API:

Endpoints

# List contributions
GET /api/v1/contributions/

# Get specific contribution
GET /api/v1/contributions/{id}/

# Create submission (requires auth)
POST /api/v1/contributions/

# Update submission (requires auth)
PATCH /api/v1/contributions/{id}/

# Delete submission (requires auth)
DELETE /api/v1/contributions/{id}/
See the API Reference for full documentation.

Best Practices

Provide Clear Evidence

Link directly to the relevant work. Don’t just link to your homepage.

Write Detailed Descriptions

Explain the impact and technical details of your contribution.

Choose Accurate Dates

Use the actual completion date, not the submission date.

Match Contribution Types

Select the type that best fits your work. Ask if unsure.

Common Questions

Choose the most specific type that matches your work. If it truly spans multiple types, you can submit separate contributions for each distinct aspect.
Yes! Use the accurate completion date when submitting. The system will apply the multiplier that was active on that date.
You’ll receive feedback from the steward explaining why. You can address their concerns and submit a new contribution with improved evidence.
Review times vary based on steward availability and submission volume. Check “My Submissions” for status updates.

Build docs developers (and LLMs) love