编程语言
首页 > 编程语言> > 零知识证明C++库libsnark的安装经验

零知识证明C++库libsnark的安装经验

作者:互联网

本人最近正在安装零知识证明C++库libsnark(Github链接在此),网上教程极少,很多方法不适合自己,走了很多弯路,前前后后抑郁了十天左右,终于喜大普奔的安好了。在此记录一下自己这些天的历程。有时候不是教程不对,而是各种玄学问题,往往头一天怎么也搞不出来第二天一下就好了,所以心态要放平,不要焦躁,一时配不出来没关系,回去睡一觉再来,做好配他半个月的准备。其实我认认真真装也就装了五六天左右,这期间倒是把整个库给摸清楚了。其实这个库的官网安装教程非常详细,花些功夫自己摸索不借助别人的教程也能顺利安装,所以不要过度依赖网上的教程,自己明白各个部分的功能以后安装很快的,有bug还更容易排查。

硬件环境

我是在win10中安装VMware,然后安装的ubuntu18.04.6,换了国内的清华镜像源。网上教程很多,这里浅放几条我当时用的以作参考:
VMware虚拟机安装Ubuntu16-18系统超详细过程(含下载地址)
Windows10下安装Ubuntu18.04LTS详细教程
Ubuntu换国内阿里、清华镜像源

先看README.md文件

这是官网上说的需要的依赖项:
在这里插入图片描述
暂时不知道这些是干嘛的没关系,主要是这一条:
Fetch and compiled via Git submodules:
libff,libfqfft,GTest,ate-pairing,xbyak,Subset of SUPERCOP
也就是说这六个子模块要分别拉取然后编译,在哪拉取呢,我们来看一看libsnark库里有些啥:
在这里插入图片描述
看到depends文件夹了吗?点开,这里面就是我们需要的六个子模块的链接地址,如下图所示。挨个下载编译就可以了。点开任意一个子模块,里面都有详细的README.md文件,告诉你这个子模块是干什么的,如何安装,非常详细,跟着做就可以了。
在这里插入图片描述
接着看到README.md文件里这几句话:
在这里插入图片描述
这是libsnark安装运行所需要的包,先安上。根据自己的ubuntu版本选择相应命令。我是Ubuntu18.04.6,所以执行第一条:

sudo apt install build-essential cmake git libgmp3-dev libprocps-dev python3-markdown libboost-program-options-dev libssl-dev python3 pkg-config

然后开始正式安装整个libsnark库。

1.把整个库拉下来

找个地方建一个文件夹,cd进去,比如我是在Desktop里建了一个libsnark文件夹(可以换一个名字,我当时没在意,现在发现下载的包也叫libsnark,两个libsnark套一起,有时候容易混)

cd Desktop
mkdir libsnark
cd libsnark

然后把整个库克隆下来,有两种方法

方法一:用命令行

执行命令

git clone https://github.com/scipr-lab/libsnark.git

这个网站好像不太好下载,经常git不下来,出现诸如以下这样的问题
在这里插入图片描述
没关系,多试几次,实在不行用方法二。

方法二:直接下载解压压缩包

直接在libsnark的github官网首页点击“Code”–“Download ZIP”,下载后解压到我们建的libsnark文件夹,结果是一样的
在这里插入图片描述

下载好后,打开我们刚刚下载的libsnark文件夹,双击打开depends文件夹,发现里面有六个文件夹,名字正好对应六个待安装的子模块,外加一个CMakeLists.txt文件。打开这六个文件夹里面都是空的,需要我们分别单独下载安装。

2.安装子模块xbyak

我没有按照官网顺序安装,因为我反反复复安装几十遍以后发现各个子模块之间有依赖关系,所以我从最底层的xbyak开始安装。

(1)先cd进需要安装的文件夹

cd depends
cd xbyak

(2)然后下载更新子模块并安装,同样有两种方法

方法一:命令行

终端输入以下命令:

git submodule init && git submodule update
make install

出现以下代码就算是装好了
在这里插入图片描述

方法二

和之前一样直接下载压缩包。点击xbyak@f0a8f7f进入
在这里插入图片描述下载压缩包
在这里插入图片描述
解压后得到以下文件,全选后复制进~/Desktop/libsnark/libsnark/depends/xbyak目录下
在这里插入图片描述
回到终端,执行以下命令:

make install

安装成功后命令行显示跟方法一的一样

其实方法二就是将方法一中的git submodule init && git submodule update命令改为手动下后载解压,本质没太大区别,只是本人这几天网实在不行,只能直接下载压缩包了。后面每个子模块都可以这样代替,我就不详细写了。

3.安装子模块ate-pairing

(1)先从xbyak文件夹出来,cd进ate-pairing:

cd ..
cd ate-pairing

(2)更新下载该子模块:

git submodule init && git submodule update

网和我一样不好的直接下载压缩包解压进ate-pairing文件夹就可以了,和之前的一样

(3)查看一下ate-pairing的README.md文件,这个库的安装有两个命令,依次执行就ok:

make -j
test/bn

make -j后出来一大堆,最后几行是这样:
在这里插入图片描述
test/bn后出来一大堆,最后几行大致是这样:
在这里插入图片描述

4.安装子模块libsnark-supercop

(1)进入libsnark-supercop文件夹:

cd ..
cd libsnark-supercop

(2)更新下载子模块:

git submodule init && git submodule update

或者直接下载压缩包,解压,复制粘贴进ate-pairing文件夹

(3)查看一下libsnark-supercop的README.md,有这么一句话:
在这里插入图片描述
意思是如果解压后不能直接运行,先在这个文件夹中执行一下./do
管他能不能运行,先执行一下比较保险

./do

出现下面这些,说明安装成功在这里插入图片描述

5.安装子模块gtest

(1)进入gtest文件夹:

cd ..
cd gtest

(2)更新下载子模块:

git submodule init && git submodule update

或者直接下载解压压缩包
这个库没有需要操作的,下载完了就行了

6.安装子模块libff

(1)进入libff文件夹:

cd ..
cd libff

(2)更新下载子模块:

git submodule init && git submodule update

或者直接下载解压压缩包

重点来了,点击libff–>depends,可以看到一个ate-pairing文件夹和一个xbyak文件夹,这是libff需要的依赖项。打开这两个文件夹,大概率会发现它们是空的,这时候就要在这两个文件夹里重新拉取这两个依赖项

cd depends
cd ate-pairing
git submodule init && git submodule update
cd ..
cd xbyak
git submodule init && git submodule update
cd ..
cd ..

也可以把之前下载解压的ate-pairing和xbyak里的文件直接复制过来。这两个依赖项不需要再make。如果这两个文件夹是空的没拉取,cmake的时候会出现下面的错误:
在这里插入图片描述

(3)现在libff子模块就拉完整了,查看一下libff的README.md文件,有这几个命令:
在这里插入图片描述
明白了,先建一个build文件夹,cd进去,cmake一下:

mkdir build
cd build
cmake ..

有这几行字就是cmake成功了,因为我是第二次cmake,字比较少,第一次cmake的话会多几行
在这里插入图片描述
(4)make一下,然后install:

make
sudo make install

sudo make install 之后会需要输入密码,输入ubuntu登录密码就可以

这样就是make好了:
在这里插入图片描述
这样就是install好了:
在这里插入图片描述
官网给的命令make install安装有可能出现权限不够的情况,所以改成了sudo make install,参考的这篇博客:如何拉取libsnark库?——新手指南教程

(5)安装完以后check一下

make check

像下面这样就是OK了
在这里插入图片描述

7.安装子模块libfqfft

这个子模块的安装和libff几乎一样
(1)进入libfqfft文件夹:

cd ..
cd ..
cd libfqfft

(2)更新下载子模块:

git submodule init && git submodule update

或者直接下载解压。

点开libfqfft–>depends,可以看到libfqfft有四个依赖项,分别是ate-pairing, gtest, libff, xbyak,点开来依然都是空的,需要依次拉取。和之前一样挨个cd进去执行git submodule init && git submodule update,或者把之前的解压文件复制进去。注意libff里还有depends文件夹,里面的ate-pairing和xbyaky也是空的,也要再拉。这些都是拉了就可以了,不用编译。最后记得检查一下所有的depends文件夹里的依赖项,都不能是空的。
(3)看一下libfqfft的README.md文件,安装步骤和libff差不多。先建一个build文件夹,cd进去,cmake一下:

mkdir build
cd build
cmake ..

这样就是cmake成功了:
在这里插入图片描述
(4)make一下,然后install:

make
sudo make install

这样就是make好了:
在这里插入图片描述
这样就是install好了:
在这里插入图片描述
(5)check一下

make check

出现这个就是好了:
在这里插入图片描述

8.整体编译安装

(1)根据官网教程,回到~/Desktop/libsnark/libsnark目录下,建立build文件夹,cd进去, cmake一下,然后makemake docmake check

cd ..
cd ..
cd ..
mkdir build
cd build
cmake ..
make
make doc
make check

cmake成功的命令行显示跟之前差不多
make的命令行显示注意要有这几条很亮的绿色的Linking…,说明已经成功连接到这几个库。不然check的时候会报错(我就死在这上面两天):
成功连接到libzm库,libsnark-supercop库成功连接到libff库
成功连接到libsnark-adsnark库
如果没有的话就去前面六个子模块找,看看是哪个没装好,重装一下。比如我一开始就是ate-pairing没装好所以libzm.a就连不上。
make doc成功命令行最后几行显示如下:
在这里插入图片描述
make check成功命令行最后几行显示如下:
在这里插入图片描述
至此,整个环境就搭建好了!

总结

标签:git,make,C++,cd,submodule,文件夹,安装,libsnark
来源: https://blog.csdn.net/matlabdd1/article/details/123637302