天空 Blond - Neo
type: channel
link: https://www.skyblond.info/tag/Neo/
items: 【歪门邪道】树莓派编译运行Neo CLI v3.0.2

【歪门邪道】树莓派编译运行Neo CLI v3.0.2
type: item
date: 2021-09-19T15:59:00+08:00
description: 最近对区块链颇有兴趣，但传统的工作量证明实属费电不环保。于是将目光转向权益证明/抵押证明的区块链。正巧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小时。-全文完-