
零知识证明 - 深入理解Zinc
疫情在家,多看点代码。对于疫情也感慨几句,对于资深程序员,这么多年了还没有和家人在一起吃晚饭这么多天。老实讲,比平时公司附近晚上吃的好得多。上海停运了,连各种骚扰电话也少了。有空再翻了翻Zinc的设计和代码,感受一下Matter Labs对zkVM的设计和理念。Zinc提供一种可靠,简单的电路开发语言。Zinc不支持图灵完备。Zinc从2019年就开始开发,最后一个Patch是2021年9月份。commit 30d43721d98c727327bb92b6888f5903556a4261Author: Alex Z Date: Sat Sep 25 15:21:42 2021 +0300 Update README.md1. 代码框架https://github.com/matter-labs/zinc.gitZinc项目代码包含了比较多的子项目,主要分为如下几部分:zinc-book - 系统介绍Zinc的方方面面,从变量类型的定义,表达式,智能合约的实现,vm的基本原理等等。zargo - 利用zinc实现的各种包的管理器。zinc-types - Zinc相关的基础类型的定义。zinc-compiler/zinc-lexical/zinc-syntax - Zinc编译器相关,zinc语言编译成ZincVM支持的指令集。zinc-vm - ZincVM的实现,主要实现ZincVM对应的约束系统。接下来分别介绍相关的子项目。重点介绍ZincVM的实现。2. Zinc BookZinc Book给出了Zinc语言的全貌。Zinc语言的语法类似rust语言。具体的语法和表达式,相对简单。利用Zinc语言可以开发智能合约。Zinc语言通过编译器可以编译成ZincVM可以运行的指令。ZincVM的好处是运行的程序可以描述成R1CS的约束,由此可以给出程序执行的证明。Zinc语言编译器实现在zinc-compiler/zinc-lexical/zinc-syntax,对应词法/语法分析。在深入ZincVM之前,先了解一下ZincVM对应的指令集。3. ZincVM指令集ZincVM指令集定义在zinc-types/src/instructions/mod.rs:pub enum Instruction { /// The no-operation instruction. NoOperation(NoOperation), /// An evaluation stack instruction. Push(Push), /// An evaluation stack instruction. Slice(Slice), /// An evaluation stack instruction. Copy(Copy), /// A data stack instruction. Load(Load), /// A data stack instruction. LoadByIndex(LoadByIndex), /// A data stack instruction. ...





