Skip to content

Okm165/applicative_bootloader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Applicative Bootloader

Applicative Bootloader is a Cairo0-based program designed to efficiently aggregate and merge proofs in a hierarchical, tree-like structure. It achieves this by verifying child proofs and applying custom aggregation logic to their outputs. The process is divided into two core operations:

  1. Verification: Validates each child proof and extracts its result.
  2. Aggregation: Merges the extracted results, producing a final output.

This enables a scalable structure where each level’s trace is proven, allowing the system to build subsequent layers seamlessly.


Applicative Bootloader Architecture

The Applicative Bootloader operates in two distinct stages:

  1. Proof Verification & Output Extraction: A multi-task bootloader verifies multiple proofs and collects their outputs.
  2. Output Aggregation: A single-task bootloader applies the specified aggregation logic to the extracted outputs, combining them into a cohesive result.

Applicative Bootloader Architecture


Key Use Case

The main use case for the Applicative Bootloader is to merge several task-specific proofs into a single consolidated proof. This approach offers scalability for an arbitrary number of tasks while maintaining efficient public memory usage. It prevents memory growth from becoming unmanageable as the proof tree grows and allows for the implementation of custom, externally defined aggregation logic.

Proof Merging Process


How to Run

To set up and run the Applicative Bootloader, follow these steps:

  1. Initialize and update submodules:

    git submodule init && git submodule update
  2. Set up the environment and compile:

    ./setup.sh && ./compile.sh
    export PYTHONPATH=.:cairo-lang
  3. Execute the following Python scripts:

    • Run the node input process:

      python input_node.py && python nodes_run.py
    • Prepare applicative bootloader inputs:

      python input_node_ar.py && python input_applicative_bootloader.py
    • Finally, run the applicative bootloader:

      python applicative_run.py