最近对区块链颇有兴趣,但传统的工作量证明实属费电不环保。于是将目光转向权益证明 / 抵押证明的区块链。正巧 Neo N3 就是其中之一,本文将介绍如何在树莓派 4B 上编译运行一个 Neo N3 的全节点 neo-cli
。
Disclaimer
我从来没写过 C#,也没搞清楚它和.net 有什么关系,如果后文中有没能遵循.net 和 / 或 C# 最佳实践的操作,请在评论区中友善的指出。由于 Neo N3 的官方实现使用 C# 实现,所以得现在树莓派上安装 dotnet sdk,目前微软暂不提供 ARM 架构的软件源,所以只能利用安装脚本手动安装:
- wget https://dot.net/v1/dotnet-install.sh
- chmod +x dotnet-install.sh
- ./dotnet-install.sh -c 5.0
安装时唯一要注意的就是安装脚本用非 root 账户执行即可,安装时使用目录 ~/.dotnet
,所以安装完成后还要修改 ~/.profile
,将安装路径加入 PATH
:PATH="$HOME/.dotnet:$PATH"
之后还要安装一些系统依赖,好在这些在树莓派官方 OS 的镜像源中全都有提供,复制粘贴 Neo Node 的说明即可:
- sudo apt-get install libleveldb-dev sqlite3 libsqlite3-dev libunwind8-dev
之后使用 git clone 获取源代码,即可开始编译:
- mkdir ~/neo-cli-build
- cd ~/neo-cli-build
- git clone -b v3.0.2 https://github.com/neo-project/neo-node.git
- cd neo-node/neo-cli
- dotnet restore
- dotnet publish -c Release
- cp -R ~/neo-cli-build/neo-node/neo-cli/bin/Release/net5.0/ ~/neo-cli-build/build-result/
- mkdir ~/neo-cli-build/build-result/Plugins
截至目前,neo-cli 的最新版本是 v3.0.2
,上述代码将在 home
目录下创建一个工作文件夹,克隆代码,使用 dotnet
进行发布版本编译,然后将编译结果复制到 build-result
文件夹中。但此时编译出来的程序还不能直接运行。根据 Neo 官方的说明,要运行一个 Neo N3 节点,除了程序本体之外还需要一个 levelDB
插件,使得本体可以使用 levelDB
存储区块数据。做成插件的好处就是这个存储层可以换成 RocksDB
,增大了灵活性,但代码就是引入了额外的复杂性。
Disclaimer2
我不知道已经编译好的 neo-modules 能不能直接使用。我知道 C# 语言会被编译成 MSIL(微软中间语言),随后被某个运行时解释执行。所以与其尝试能否正确运行,不如索性从头编译一遍。这也许不是最佳实践,但微软的东西在 Linux 上,我确实不怎么看好。Disclaimer3
上面我将 C# 称为「微软的东西」,显而易见,它并没有 Java 那么开放。在 Java 运行时的选择上,除了 Oracle 自己的 JDK 之外,我们还有许多可选的其他 JDK,比如来自商业公司的 ZuluJDK,开源的 OpenJDK 等,至于 C#,我只听过 Mono。虽然在设计上 C# 确实比 Java 要高一头,但从其他方面来看,我个人还是更喜欢 Java 一些。如下代码将获取 neo-modules 并编译全部插件。截至本文发表时,neo-modules 的版本只到 v3.0.1
:
- cd ~/neo-cli-build
- git clone -b v3.0.1 https://github.com/neo-project/neo-modules.git
- cd ~/neo-cli-build/neo-modules
- dotnet restore
- dotnet publish -c Release
- cp ~/neo-cli-build/neo-modules/src/LevelDBStore/bin/Release/net5.0/LevelDBStore.dll ~/neo-cli-build/build-result/Plugins/
编译完成后将 LevelDBStore
插件拷贝到 neo-cli 的插件目录,一个最小功能的 Neo N3 全节点就可以运行了,除此之外还可以按需要将其他插件连同配置文件拷贝到插件目录中。
运行全节点:
- cd ~/neo-cli-build/build-result
- dotnet neo-cli.dll
受制于树莓派的性能,达到完全同步耗时大约 8 小时。
- 全文完 -

【歪门邪道】树莓派编译运行 Neo CLI v3.0.2 由 天空 Blond 采用 知识共享 署名 - 非商业性使用 - 相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 https://skyblond.info/about.html 处获得。
过来种草,@(呵呵)
感觉树莓派现在还挺有用的。有些东西用服务器 / 电脑跑太费电了,不跑又很不方便,这个时候树莓派的成本还是最划算的。我家那个树莓派 2B + 用作透明代理已经有两年多了,配置完了就用 USB 插到路由器上供电,非常好