零知识证明(ZKP)发展至今,大多数方案都是基于低级别表述语言实现的,例如 QAP、R1CS 或 Circuit。尽管 ZKP 不受语言限制,可以使用任何语言定义,但是高级语言所带来的生成证明的复杂度却是难以接受的。因此很多区块链技术团队开始使用新的 DSL 语言去编写业务逻辑,来实现复杂度较低的证明,但是这种模式却增加了用户编写合约的难度,因为大多数用户根本没有时间和精力学习 Rust、C++ 等语言。
Matter Labs 团队为了解决 ZKP 的图灵完备问题,引入了 ZINC 这门新的编写智能合约的语言。 然而该团队在 Youtube 上一段 ZKEVM 设计视频中曾公开表示 ZINC 目前并不是图灵完备的,缺乏循环、递归等内容。团队还表示,为了减少引入新的语言给开发者带来的学习成本,将尝试采用 Solidity-> YUL -> LLVM IR-> ZKEVM 的技术路线。
受该视频启发,本系列文章将与读者探讨使用 LLVM 编译器编译 Solidity /YUL字节码 到 R1CS 或 Circuit 的过程。尽管该方案后续可能发生重大变化,但是也是一次很好的学习机会。
第一篇 LLVM 介绍
概念
LLVM是模块化和可重用的编译器与工具链技术的集合, 经常被误认为是一个单纯的编译器,拿来跟 Clang 和 GCC 进行比较,实际上 Clang 也是仅仅作为 LLVM 项目的一部分单独发行的。以下是对这几个概念的详细介绍。
ChatGPT金融业应用首批研究成果可解读美联储声明、预测股价:金色财经报道,Man AHL机器学习在4月发表了两篇新论文——《ChatGPT能否解读美联储表态?》和《ChatGPT可以预测股价走势吗?回报可预测性和大型语言模型》,将这一人工智能聊天机器人应用于市场相关的任务,一项是解读美联储的声明是鹰派还是鸽派,另一项是确定消息面对某只股票而言是利好还是利空。ChatGPT在两项测试中都取得了出色的成绩,暗示该技术在将新闻报道、推文和演讲稿等大量文字转化为交易信号方面,可能迈出了重大一步。(新浪财经)[2023/4/18 14:09:37]
LLVM:LLVM 和虚拟机技术没有关系。它的名字并不是一个缩写,而是 LLVM 项目的全称。LLVM 的目标是提供一个现代化的、基于 SSA 编译策略的、同时支持静态和动态编译任何编程语言的编译器架构。现在 LLVM 已经发展成为一个由多个子项目组成的总体项目,其中许多子项目已被广泛应用于学术研究、商业和开源项目中。LLVM 核心库提供了与编译器相关的支持,可以作为多种语言编译器的后端来使用。能够进行程序语言的编译期优化、链接优化、在线编译优化和代码生成。
Clang:是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程语言。Clang 对源程序进行词法分析和语义分析,并将分析结果转换为 Abstract Syntax Tree(AST 抽象语法树) 和LLVM-IR,最后使用 LLVM 作为后端代码的生成器。
欧科云链解读《海南自贸港总体方案》:区块链产业的政策洼地与制度高地:6月1日,国务院印发了《海南自由贸易港建设总体方案》,其中在多个地方提到了区块链产业相关政策。欧科云链研究院认为《方案》将推动海南自贸区成为我国区块链产业的政策洼地与制度高地。从《方案》内容上看,海南自贸港的区块链产业发展将分为两个阶段:在2025年前的第一阶段,主要任务是推动区块链和实体经济深度融合,实现海南“贸易投资自由化便利化”,主要在“产权保护”和“新一代信息基础设施”两个方面深耕;在2035年前的第二个阶段,将以海南自贸区作为先行试点,建立数据确权、数据交易、数据安全和区块链金融的标准,确保我国在未来跨境数据的国际规则制定中不会处于被动位置。[2020/6/2]
GCC:GNU编译器套件(GNU Compiler Collection)包括C、C++、Objective-C、Java、Go语言的前端,也包括这些语言的库(如 libstdc++、libgcj 等)。GCC的开发初衷便是一款专为GNU操作系统设计的编译器。
LLVM-IR 优化器 - opt
通过 opt 命令,我们可以直接在命令行中调用 LLVM 工具链提供的 IR 代码优化器对 LLVM-IR 代码优化,该优化器同时支持对可读文本以及二进制格式下的 LLVM-IR 代码进行优化,并且可以通过参数执行相应的优化策略。
优化策略比较多,这里不一一列举,只列举一些常用的策略
-mem2reg:该策略会将IR内的内存级变量引用提升为寄存器级变量引用
“-constprop” :该策略主要是用于 “常量传播优化”
“-dce” :该策略主要是用于删除死代码(无法执行到的代码)
opt -S -mem2reg -constprop -dce hello.ll
LLVM 静态编译器 - llc
llc 是 LLVM 命令行工具提供的一个静态编译器。通过该编译器,可以将一个包含有 LLVM-IR 代码的 “.ll' 文件编译为以 “.s” 结尾的为特定平台架构的汇编代码文件。
llc hello.ll
执行完上述命令,会在当前目录生成一个 hello.s 的汇编文件,因为我的机器是 mac os 的,所以生成的汇编文件中会带有 mac os version 等字样
LLVM 汇编器 - llvm-as
通过 llvm-as 命令行工具,可以将包含有可读文本格式的 LLVM-IR 文件转为二进制格式的 LLVM 比特码
llvm-as hello.ll
执行完上述命令,会在当前目录生成一个 hello.bc 的比特码文件,可以通过 hexdump 查看文件具体内容
LLVM 符号表查看器 - llvm-nm
通过 llvm-nm 命令行工具,我们可以查看一个包含二进制 LLVM-IR 比特码的 “.bc” 文件内的符号表信息
上述命令中, “-A” 参数表示在输出结果中显示每个符号的来源文件名。 查看该输出可知在这个 LLVM 模块中存在两个符号,一个是内部名为 “main” 的符号,该符号对应着源码中的主函数,“T” 表示该函数是一个全局对象函数。“printf” 符号是引用外部标准库的函数, 所以用 “U”表示。
上面的实例中,我们生成了多个包含不同状态的 LLVM-IR 中间代码,以及面向特定底层平台架构的汇编代码,对于这些文件,我们都可以使用 Clang 将其编译为可执行的二进制文件。
本文简单介绍了 LLVM 项目,让读者能够了解 LLVM 项目的整体架构,懂得通过改造 LLVM 编译器前端,可以适配多种高级编程语言,包括 Java、Rust、Solidity 等。 鉴于直接通过 Solidity 生成 LLVM IR 难度较大,且 Solidity 语法变更迅速,开发者可通过 Solidity 生成中间语言 YUL ,将 YUL 作为输入提供给 LLVM 前端生成 LLVM IR 字节码,即各种零知识证明需要的表示形式,最后在 ZKEVM 中执行。从理论上来讲这套逻辑没有任何问题,但是实际执行的工程难度还是非常大的,具体细节需要研究后再做定论。
OKLink 数据显示,DeFi 抵押借贷总量已达 253 亿美元,而在这一庞大的借款数额背后,是规模远超于此的抵押物。超额抵押贷款,早已成为 DeFi 借贷的通用范式.
1900/1/1 0:00:00游戏一直以来都是很多区块链创业者尝试的方向,但几年来很少看到成功的案例。随着DeFi和NFT的发展,以及元宇宙概念的兴起,尤其是在Axie Infinity爆红之后,链游创业真正迎来了时机成熟的.
1900/1/1 0:00:00领先的非托管加密货币交易所ShapeShift即将关闭公司实体,开始向多个区块链的去中心化金融(DeFi)投资者空投3.4 亿个 FOX 代币.
1900/1/1 0:00:00Alpaca Finance是BSC上最大的杠杆流动性挖矿平台。 它允许用户将自有资产作为保证金,借入Alpaca金库中的BUSD、BNB和ETH等资产来组成LP,再投入到Pancake Swa.
1900/1/1 0:00:00Kava Labs在成功推出Kava 5主网和HARD Protocol V2版本后,按照Kava 2021生态规划即将迎来全球首个连接DeFi、区块链和金融服务的跨链流动性中心——Kava S.
1900/1/1 0:00:00撰文:PAKA Labs研究员 MIDDLE.XReviewed : Shawn Lin 林晓( 文中部分内容翻译自?RMRK官方博客?)1990年12月25日.
1900/1/1 0:00:00