Coder Social home page Coder Social logo

ben2077 / cairo-rs Goto Github PK

View Code? Open in Web Editor NEW

This project forked from lambdaclass/cairo-vm

0.0 1.0 0.0 8.72 MB

cairo-rs is a Rust implementation of the Cairo VM. Cairo is a programming language for writing provable programs, where one party can prove to another that a certain computation was executed correctly. Cairo and similar proof systems can be used to provide scalability to blockchains.

Home Page: https://lambdaclass.github.io/cairo-rs

License: MIT License

Shell 0.15% Python 0.20% Rust 87.68% Makefile 0.29% Cairo 11.66%

cairo-rs's Introduction

cairo-rs

rust benchmark codecov

cairo-rs is a Rust implementation of the Cairo VM. The project used to be called cleopatra-cairo but after being feature complete we decided it was clearer to call the vm cairo-rs.

The code of the original Cairo VM can be found here.

Dependencies

  • Rust
  • Cargo
  • PyEnv for running the original VM and compiling cairo programs

Running cairo-rs

Compile with cargo build --release, once the binary is built, it can be found in target/release/ under the name cairo-rs-run. To run a compiled json program through the VM, call the executable giving it the path and name to the file to be executed.

Full compilation and execution example:

git clone https://github.com/lambdaclass/cairo-rs.git
cd cairo-rs

cargo build --release
./target/release/cairo-rs-run tests/support/fibonacci_compiled.json

WebAssembly

While cairo-rs is compatible with WebAssembly, it doesn't implement any bindings to it. Instead, create a new WebAssembly crate with cairo-rs as a dependency and implement the required functionality there.

Since mimalloc is not automatically compilable to WebAssembly, the cairo-rs dependency should disable the default features, which will in turn disable mimalloc.

WebAssembly doesn't support filesystem access unless building with WASI support, therefore cairo_run may not work as is. Running programs may require manual program, vm and runner initialization.

Testing

Run the test suite:

make test

Code Coverage

Track of the project's code coverage: Codecov.

cairo-rs benchmarks:

Running a Cairo program that gets the 1000th Fibonacci number we got the following benchmarks:

Run the benchmark suite with cargo:

cargo bench

Cairo

Original Cairo VM Internals

We wrote a document explaining how the Cairo VM works. It can be found here.

Compilers and interpreters

These is a list of recommended books to learn how to implement a compiler or an interpreter.

Computational integrity and Zero Knowledge Proofs

Basics

ZK SNARKs

STARKs

Introduction:

Vitalik Buterin's blog series on zk-STARKs:

Alan Szepieniec's STARK tutorial:

StarkWare's STARK Math blog series:

Possible changes for the future

  • Make the alloc functionality an internal feature of the VM rather than a hint.

cairo-rs's People

Contributors

fmoletta avatar juan-m-v avatar pefontana avatar unbalancedparentheses avatar entropidelic avatar oppen avatar igaray avatar azteca1998 avatar partylich avatar jrigada avatar hermanobst avatar franciscoidalgo avatar tdelabro avatar juanbono avatar bernardstanislas avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.