Posted on Leave a comment

手把手教你在树莓派上部署GRIN节点与钱包

by Grin矿工小T

0x01 基础知识

Grin项目的地址是https://github.com/mimblewimble/grin,Grin官方钱包的地址是https://github.com/mimblewimble/grin-wallet。如果你点击这两个项目的releases的话,你会发现在Windows上、Linux上、macOS上都有对应的版本。树莓派是一种低功耗、低价格、运行Linux系统,但架构和台式机(amd64,或称x64架构)有所不同的一种硬件,详情参考https://www.raspberrypi.org,在淘宝上已经发售到最新的4B型号,内存1G/2G/4G不等。所以Grin要运行的软件都要从源码开始编译成为树莓派能执行的二进制文件。你需要掌握基本的Linux系统操作,以及项目管理工具git、文件编辑器vim等。如果你有着不错的Linux基础和经验,那么可以直接自行处理0x02部分,直接进行0x03部分。

0x02 编译Grin项目官方的节点和钱包

在Grin项目发布了2.0.0以后,原来一个二进制可执行文件grin管理的节点和钱包功能已经发生了分离,grin负责节点,而grin-wallet负责钱包。因此我们需要使用github拉取源码分别进行编译。而我们此次用的实验环境就是树莓派4B/2G内存版本。内存太小,构建项目时可能发生内存不够(Out Of Memory,OOM)。

使用树莓派自带的系统Raspbian用Ctrl+alt+T打开终端,

sudo apt install vim git

运行git clone命令把github上的项目拖下来:

git clone https://github.com/mimblewimble/grin

如果你对grin旧版本感兴趣,cd grin 进入文件夹后,还可以使用类似 git checkout v2.1.0 的命令切换到旧版。默认当然是最新版。

Grin项目是用rust语言编写的,所以肯定得安装

curl https://sh.rustup.rs -sSf | sh; source $HOME/.cargo/env

因为还需要其他工具,所以一起安装了:

sudo apt install build-essential cmake git libgit2-dev clang libncurses5-dev libncursesw5-dev zlib1g-dev pkg-config libssl-dev llvm

在grin文件夹里执行:

cargo build –release

喝一瓶可乐的时间,就可以在build/release/文件夹下找到编译好的grin, 用./grin执行。grin-wallet完全类似。还有一个开源钱包wallet713的体验应该比官方wallet体验好一些,项目在github.com/vault713/wallet713,带grinbox离线转账功能。编译都是很简单的。

0x03 重点是开源钱包Niffler

开源钱包Niffler的作者是xiaojay,这是一个用跨平台应用工具Electron-Vue搭建的app,项目地址是

github.com/grinfans/niffler

git clone后一定要记得git checkout v0.4.2切到最新版本。

开发框架使用的语言是js,那么不得不使用nodejs以及包管理工具npm。官网是https://nodejs.org/en,一定要注意的是,之前我们做的工作都是系统自动判断我们树莓派的架构是linux armv7l,但这时我们需要手动选择并下载。稳定版本是v12.13,而我使用了v13.3.0。

安装node就不赘述了,解压缩后,建立软连接、输出环境变量是必做的工作,然后可以用npm安装任何你需要的东西。

npm install -g vue-cli webpack electron@6.0.1

之所以要安装旧版本的electron,肯定是因为新版本无法适配树莓派。

npm i electron-builder

npm i electron-updater

这样,我们能用electron-vue渲染项目并且整体打包。需要提到的是,package.json的目的是指挥如何打包的,原始项目里面需要修改package.json几个地方:在scripts字段里,dev后面,加入

“dist”: “cross-env BUILD_TARGET=clean node .electron-vue/build.js && electron-builder –armv7l”,

这个意思就是一会儿你建立的项目是给树莓派用的;

为了安装依赖,把”postinstall”: “”改为

“postinstall”: “electron-builder install-app-deps”

还得在”build”里面的”linux”里面的”target”进行更详尽的定义:

“target”: [
“target”: “zip”,
“arch”: “armv7l”
],

还记得我们编译好的grin和grin-wallet不?那俩可执行文件必须要用cp命令拷贝到resources/bin/linux下面,因为niffler要用它们。

最后,用npm run dist可以构建项目,构建完成后在build/文件夹里可以看到一个zip,就是我们的Niffler应用了。

排错:如果webpack的plugin报错process相关的问题“process is not defined”,我的建议是,修改 .electron-vue/webpack.renderer.config.js 和 webpack.web.config.js如下,在new HtmlWebpackPlugin里面,template字段后面,minify字段前面,插入:

templateParameters(compilation, assets, options) {
return {
compilation: compilation,
webpack: compilation.getStats().toJson(),
webpackConfig: compilation.options,
htmlWebpackPlugin: {
files: assets,
options: options
},
process,
};
},

排查后,清理dist和build里旧的东西,可以再重新构建项目。

和作者沟通后,本文还会持续不断的改进。

欢迎来玩!!

发表评论

电子邮件地址不会被公开。 必填项已用*标注