Moderator: Eran Tromer
Presenters: Howard Wu & Collin Chin
Authors:
To be presented on 2021-04-19.
Resources:
Note taker: Daira Hopwood
Motivation:
Decentralised applications have scalability issues due to everyone reexecuting all transactions.
Time-sharing resources across all parties.
Limited execution environments are being used to improve throughput.
History of all state-transitions must be executed by all parties causes privacy issues.
Lack of privacy also enables front-running attacks against consensus.
ZKPs enable prover to prove known state-execution was performed correctly without publicly disclosing contents.
Challenges:
DApps have weak guarantees of correctness and safety.
Require specialised expertise to represent executions.
Solution:
Leo is formally verified programming language for zero-knowledge applications. It is composable, decidable and universal.
Leo has 3 primary stages. Code -> Parser -> AST -> Conversion -> …
Focus on Type Inference.
Type inference: automatically detects types of an expression in a formal language.
Formal definition of Leo language, aimed at producing a verifying compiler that proves semantic equivalence between input and output programs
Using ACL2 to verify each stage, using a formal model of the phase. There might be nondeterminism in the specification of the phase.
Compose the stage proofs to obtain an end-to-end proof.
Adding more optimization phases. Proofs are composable for modularity of the compiler.
Leo is implemented in Rust, 65000+ LoC, 12 contributors
Formally verified in ACL2, open-sourcing this soon.
70+ page language specification.
Also built tooling and frameworks, including Leo Playground. Will be released tomorrow.
Aleo Studio - IDE for writing zk applications.
Aleo package manager, with collaborative features.
https://leo-lang.org
https://paper.leo-lang.org
https://github.com/AleoHQ/leo
Does it support nondeterminism?
Is the scope of Leo just specifying a circuit? Does it include precomputation?
Own implementation of proof system and curves?
Supporting zkInterface?
Eran: proposed extensions to zkInterface coming from SIEVE programme.
Francois Garillot: rationale for Hindley-Milner, relation to e.g. Noir?
Francois: Why standardize specific language? What is required of the IR to enable more general standard that would enable formal verification?
Francois: need to abstract in order to standardize. Otherwise we are standardizing precisely Leo.
Eran: drill more into what zkInterface should provide to support what Leo needs.
Daira: comparison with CirC? (https://eprint.iacr.org/2020/1586)
Kev: relation to ACIR (unlimited fan-in gates and black-box functions)
Kev: rationale for Hindley-Milner?
Alessandro: Verifying Leo programs against higher-level specifications is indeed of interest. But no work on that yet — focusing on the compilation process.
Stephane Graham-Langrand on Terminology: In the formal methods community, the name “Leo” is already taken as the name of a well-established Theorem Prover. Is the name set in stone? :-) It’s going to be confusing while interacting with the FM community…
Eran: standardizing language aspects (syntax and semantics that are quite opinionated) would be an uphill battle.
Telegram group for discussion: invite link here
Formal specification doc: link here