ADA币开发(一)运行节点并加入测试网络

警告:

  • 本文为原创,禁止任何非授权的转载
  • 本文不构成任何投资建议,币市很凶险,投资需谨慎
  • 本文基于个人对 Cardano 官方文档的理解和实践经验,不排除有错误的可能,因为参考本文操作造成的损失,本人不承担任何责任

1. 写在前面

作者在最早接触到比特币是在2012年,然而因为年少无知,错失了比特币最早的投资机会,继而对整个加密货币市场心灰意冷。直到最近,由于某些契机,才重新开始研究开始加密货币。经过一系列比对,作者对 ADA(Cardano)产生了浓厚的兴趣。

ADA 与大众熟知的 比特币 和 以太坊 不同,属于 PoS 类型货币。用最简单的话来解释,共识的建立,并非通过算力来证明,而是靠权益来证明,因此不需要耗费大量的算力来挖矿。

ADA 目前是市值第三大的加密货币,然而 ADA 的开发却一直以慢工出细活著称,直到最近上线的 Mary 版本,才具备了“原生代币”的功能,“智能合约”功能的上线,仍需一些时日。从另一个方面来看,一个还不能二次发币炒作的加密货币,能做到第三大市值,足见底子的深厚。

因此,作者花了些精力,阅读了官方开发文档,并把一些内容进行总结。如果有计划研究加密货币代码,甚至于发行货币的读者,可以进行参考。

2. 本文内容

如果你只是想投资加密货币,那么只需要挑一个靠谱的交易所,投钱进去就行了。

而如果你想要了解加密货币的开发,亲自运行节点程序是必不可少的一步。

ADA 官方维护了一个测试网络,与正式网络相比,测试网络具备一些尚未部署的功能,并且测试网络的货币是可以自由申请的,所以很适合开发用途。

本文将介绍如何编译 ADA 节点程序,运行节点程序,并加入 ADA 官方测试网络。

3. 先决条件

与官方文档一致,本文以 Linux 平台为例(Debian 10),因此默认读者具有基础 Linux 操作经验,本文不再在基本概念上做过多解释。

官方建议为 ADA 节点程序准备 2 核心 CPU 和 4 G 内存。

鉴于克隆代码,下载第三方包均需要访问海外网络,作者建议用户直接购买一台海外云主机,作为开发平台。

4. 节点程序介绍

ADA 节点为典型的 C/S 架构。

cardano-node 为节点主进程程序,cardano-cli 为命令行工具。

cardano-node 作为主进程,负责与网络上其他节点通信,实时更新最新的区块信息,维护共识。如果你的机器资源足够强大,你可以配置 cardano-node 成为出块节点,获取收益。

cardano-cli 是命令行工具,允许用户与 cardano-node 进行交互。执行诸如公私钥生成,签署事务,提交事务到网络等等功能。

5. 安装编译器和依赖库

ADA 所有代码均使用 Haskell 语言编写,因此需要先安装 cabal (Haskell 的包管理器)和 GHC (Haskell 的编译器)

5.1 安装依赖库

Debian 10 为例,安装操作系统依赖库

apt-get update -y
apt-get install automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libtinfo-dev libsystemd-dev zlib1g-dev make g++ tmux git jq wget libncursesw5 libtool autoconf -y

5.2 安装 Cabal 和 GHC

Haskell 官方提供预编译好的 deb 包,因此可以不用参考 Cardano 教程手动安装 cabalGHC

# 添加 Haskell 源
echo "deb http://downloads.haskell.org/debian buster main" >> /etc/apt/sources.list
# 添加包签名密钥
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BA3CBA3FFE22B574 || apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys BA3CBA3FFE22B574
# 更新源
apt-get update
# 安装 Cabal 和 GHC,笔者推荐 Cabal 3.4.0.0 和 GHC 8.10.4
apt-get install -y cabal-install-3.4 ghc-8.10.4
# 上述包安装在 /opt 目录下,因此需要更新 PATH 变量,使得 cabal 命令和 ghc 命令可用
echo 'export PATH=/opt/ghc/bin:$PATH' > /etc/profile.d/x-ghc.sh
# 使环境变量的修改立即生效
source /etc/profile.d/x-ghc.sh

至此 cabal 和 ghc 命令安装完成,可以通过敲击以下命令来验证

cabal --version
ghc --version

5.3 安装定制版 libsodium

libsodium 是一个著名的加密解密库,Cardano 的开发公司 IOHK 维护了一个 libsodium 的分支版本,提供了一些额外的功能。

要编译 ADA 节点程序,必须先编译安装定制版的 libsodium。

# 克隆代码仓库
git clone https://github.com/input-output-hk/libsodium
# 进入克隆好的仓库内
cd libsodium
# 切出指定提交
git checkout -b live 66f017f1
# 编译安装
./autogen.sh
./configure
make
make install
# 添加额外的环境变量,以便编译的时候能找到自己编译的 libsodium
echo 'export LD_LIBRARY_PATH="/usr/local/lib:$LD_LIBRARY_PATH"' > /etc/profile.d/x-libsodium.sh
echo 'export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"' >> /etc/profile.d/x-libsodium.sh
# 使环境变量的修改立即生效
source /etc/profile.d/x-libsodium.sh

6. 编译 ADA 节点程序代码

终于到了最重要的一步,编译 ADA 节点程序代码

# 克隆代码仓库
git clone https://github.com/input-output-hk/cardano-node.git
# 进入代码仓库
cd cardano-node
# 更新仓库信息
git fetch --all --recurse-submodules --tags
# 切出指定版本,作者写本文的时候,最新版本为 1.25.1
git checkout -b live 1.25.1
# 添加对自已编译的 libsodium 库的引用
echo "package cardano-crypto-praos" >>  cabal.project.local
echo "  flags: -external-libsodium-vrf" >>  cabal.project.local
# 编译
cabal update
cabal build all

编译过程可能耗时长达半个小时,因此需要耐心等待,如果没有意外,最终能正确构建 cardano-nodecardano-cli 两个可执行程序

将可执行程序复制到 /usr/local/bin 以完成安装

cp -p dist-newstyle/build/x86_64-linux/ghc-8.10.4/cardano-node-1.25.1/x/cardano-node/build/cardano-node/cardano-node /usr/local/bin/
cp -p dist-newstyle/build/x86_64-linux/ghc-8.10.4/cardano-cli-1.25.1/x/cardano-cli/build/cardano-cli/cardano-cli /usr/local/bin/

可以敲击如下命令来验证

cardano-node --version
cardano-cli --version

7. 建立工作目录

上面已经完成了 cardano-nodecardano-cli 两个命令的编译,下面就要着手建立工作目录,准备真正运行了

# 假设以 /data/cardano 为工作目录
mkdir -p /data/cardano
cd /data/cardano
# 建立数据目录
mkdir db
# 从官网下载连接测试网络所需配置文件
wget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/testnet-config.json
wget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/testnet-byron-genesis.json
wget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/testnet-shelley-genesis.json
wget https://hydra.iohk.io/job/Cardano/cardano-node/cardano-deployment/latest-finished/download/1/testnet-topology.json

8. 启动节点

所有准备工作已经妥当,下面是最激动人心的一步了,启动测试节点。

首先要保证你的云主机防火墙开放了 3001 端口,允许其他节点访问你自己的 3001 端口;然后从云主机厂商那里获取你的服务器公网地址。

最后执行以下命令,即可启动 cardano-node 节点,并连接到测试网络

# 进入工作目录
cd /data/dardano
# 启动 cardano-node
cardano-node run \
        --topology testnet-topology.json \
        --database-path db \
        --socket-path node.socket \
        --host-addr [服务器公网IP] \
        --port 3001 \
        --config testnet-config.json

正常情况下,你会看到一堆输出信息,表示 cardano-node 正在与测试网络同步最新的区块信息。

ADA币开发(一)运行节点并加入测试网络_第1张图片

由于上述命令会运行 cardano-node 并占用当前命令行,因此需要新开一个命令行,或者使用 tmux 终端复用程序新开窗口。

输入以下命令验证

# 之前的命令会使 cardano-node 在 /data/cardano/node.socket 处创建本地通讯 socket 文件
# 因此需要更新环境变量,让 cardano-cli 知道怎么调用 cardano-node 服务
echo 'export CARDANO_NODE_SOCKET_PATH="/data/cardano/node.socket"' > /etc/profile.d/x-cardano-node.sh
source /etc/profile.d/x-cardano-node.sh
# 使用 cardano-cli 获取当前 tip 信息
cardano-cli query tip --testnet-magic 1097911063

不出意外,cardano-cli 也应该能获取到当前区块信息

ADA币开发(一)运行节点并加入测试网络_第2张图片

至此,你的 cardano-node 节点已经成功地和 ADA 测试网络建立了连接,现在你可以放置一个晚上,让你的 cardano-node 节点完成区块数据同步。

记得使用 tmux 终端复用程序,或者使用 systemd service 文件,让你的 cardano-node 能够后台运行,防止你与服务器连接断开,导致进程退出。

下期预告

下一期,我会告诉你如何创建一个 Cardano 钱包地址,并从官方那里要到 1000 测试 tADA 币

参考资料

https://docs.cardano.org/projects/cardano-node/en/latest/getting-started/install.html

https://docs.cardano.org/projects/cardano-node/en/latest/stake-pool-operations/getConfigFiles_AND_Connect.html

https://downloads.haskell.org/~debian/

赞助

ADA 地址:addr1q9aemmfl4qr8sjp2xj5zupzvuamuw36z5awv865qt0lsl3pj72alpak07tadfuusgl5guq3ndtr3r2aknt4c3tgny7eqna8kkj

BTC 地址:bc1q5s6wwn3f4nj9sygv9fzwzuuuqqve0323mnwf8e

你可能感兴趣的:(加密货币,Cardano,区块链)