Skip to content

btq-ag/keelung

Repository files navigation

Keelung

Keelung is a domain-specific language (DSL) embedded in Haskell that is designed for creating zero-knowledge proofs (ZKPs). With Keelung, developers can create high-quality and reliable ZKPs with ease, even without expertise in cryptography.

keelung5

The Keelung Compiler

Keelung programs are compiled with the Keelung compiler.

Documentation

Check out our GitBook for more information.

Language Reference

The language reference is now available on Hackage.

Standard Library

The standard library is available here.

Discord

Find us on Discord!

Codespaces

Get started using Keelung in GitHub codespaces by navigating to Code -> Codespaces in Keelung Examples!

Roadmap

Roadmap

Current (v0.21.0)

  • A more precise method of reference counting on unsigned integers
  • Renaming of primitive datatype conversions
  • Tons of bug fixes and stability improvements

Upcoming (v0.22.0)

  • Operators for slicing and joining unsigned integers
  • Internal: improvement of representation of polynomials with our new precise reference counter
  • Internal: polynomial insertion is now 9x faster

Future

  • Snarkjs/Circom Integration: Snarkjs/Circom is currently the most popular ZK toolchain. We aim to tap into this ecosystem by integrating Keelung with Snarkjs/Circom.
  • Standard Library Optimization: We plan to heavily optimize ciphers and hash functions such as AES and Blake2.
  • PLONKish Backend Compilation Support: Supporting protocols like PLONK would allow Keelung programs to efficiently manage complex privacy-preserving computations, significantly enhancing their scalability and security across various applications.
  • Quantitative Information Flow Analysis: We are working with Prof. Kohei Suenaga of Kyoto University to enable privacy leakage analysis of Keelung programs.
  • DSL Refinement: We are transitioning statement operators (e.g. performDivMod, which is only allowed in the Comp monad) to pure operators to make these operations more versatile and easily integrated into different parts of our system.
  • Performance Improvement: We aim to speed up the compilation of operators on commonly used types such as Bytes, Word16, Word32, and Word64.
  • Benchmarking CI/CD: We plan to include benchmarking in the CI/CD pipeline.