On-chain Modules

Contracts

Solidity sources. OpenZeppelin. Ready to compile.

Architecture

System Overview

Four modules. Strict interfaces. No central operator.

User
  │ submitCircuit(bytes)
  ▼
┌─────────────────┐
│ QuantumCircuit  │ ──► jobId
└────────┬────────┘
         │
         ▼
┌─────────────────┐     ┌─────────────────┐
│ QVMVerifier     │ ◄───│ QuantumState    │
│  - parse gates  │     │  - amplitudes[] │
│  - run sim      │     │  - applyGate()  │
└────────┬────────┘     └─────────────────┘
         │ verified == true
         ▼
┌─────────────────┐
│ RewardPool      │ ──► ETH payout
│  - 15 ETH cap   │
└─────────────────┘

Flow

Pipeline

Deterministic simulation. No oracles.

01

Parse

Decode gate sequence.

02

Simulate

Fixed-point state evolution.

03

Check

Output vs target within ε.

04

Payout

Atomic reward release.

Modules

Contracts

QuantumCircuit.sol

Circuit Registry

Stores bytecode, metadata, timestamps. Assigns job IDs.

QuantumState.sol

State Manager

State vectors and gate operations.

QVMVerifier.sol

Verification Engine

Checks unitarity, fidelity, distributions.

RewardPool.sol

Treasury

Holds 15 ETH. Auto-releases on verification.

Source

Contracts

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

import "@openzeppelin/contracts/access/Ownable.sol";

contract QuantumCircuit is Ownable {
    struct Job {
        address submitter;
        bytes circuit;
        uint256 submittedAt;
        bool exists;
    }

    mapping(uint256 => Job) public jobs;
    uint256 public nextJobId;

    event CircuitSubmitted(
        uint256 indexed jobId,
        address indexed submitter,
        uint256 submittedAt
    );

    constructor(address initialOwner) Ownable(initialOwner) {}

    function submit(bytes calldata circuit) external returns (uint256 jobId) {
        require(circuit.length > 0, "Empty circuit");
        require(circuit.length <= 256, "Circuit too large");

        jobId = nextJobId++;
        jobs[jobId] = Job(msg.sender, circuit, block.timestamp, true);

        emit CircuitSubmitted(jobId, msg.sender, block.timestamp);
    }

    function get(uint256 jobId) external view returns (Job memory) {
        require(jobs[jobId].exists, "Job not found");
        return jobs[jobId];
    }

    function totalJobs() external view returns (uint256) {
        return nextJobId;
    }
}