Celestia Validator Node 搭建教程

配置要求:

4 核 8 G,磁盘空闲位置 >= 250 GB,1 Gbps 下载带宽/ 100 Mbps上传带宽

本文使用的系统为:Ubuntu Linux 20.04 (LTS) x64

1. 安装依赖

安装运行节点所必要的东西,首先升级 apt(可以理解为应用商店)。在命令行复制粘贴这行命令,如无特殊说明,本文中其他命令皆可直接复制粘贴!!!

sudo apt update && sudo apt upgrade -y

升级好 apt 之后,我们安装相应的依赖,

sudo apt install curl tar wget clang pkg-config libssl-dev jq build-essential git make ncdu -y

Celestia 的 App 和 Node 都是用 Golang 这门语言写的,所以我们需要安装 Golang 去编译和运行它们。一行一个命令,一行一行地复制执行。

ver="1.18.2"
cd $HOME
wget "https://golang.org/dl/go$ver.linux-amd64.tar.gz"
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf "go$ver.linux-amd64.tar.gz"
rm "go$ver.linux-amd64.tar.gz"

下一步需要把 Go 的路径添加到系统环境变量里面(可以理解为帮助系统去找到 Go)

echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile

# 这行是注释,不要复制,👆上面是一条命令,👇下面是一条命令

source $HOME/.bash_profile

然后我们可以在命令行输入下面的命令去检查 Go 是否安装成功

go version

如果安装成功,应该是像我这个样子的:

如红框所示,出现这个就代表安装成功
如红框所示,出现这个就代表安装成功

2. 部署 celestia-app

2.1 安装 celestia-app

复制以下命令并执行,不要复制注释

# 命令一
cd $HOME

# 命令二
rm -rf celestia-app

# 命令三
git clone https://github.com/celestiaorg/celestia-app.git

# 命令四
cd celestia-app/

# 命令五
APP_VERSION=$(curl -s \
  https://api.github.com/repos/celestiaorg/celestia-app/releases/latest \
  | jq -r ".tag_name")

# 命令六
git checkout tags/$APP_VERSION -b $APP_VERSION

# 命令七
make install

2.2 设置连接到 Mamaki 网络

复制以下命令,一行一个

cd $HOME
rm -rf networks
git clone https://github.com/celestiaorg/networks.git

给你的节点起个名字

# 这里你可以把 "Chuck's Validator Node" 换成你想要起的名字,记得带引号 ""
celestia-appd init "Chuck's Validator Node" --chain-id mamaki

复制 genesis.json 文件

cp $HOME/networks/mamaki/genesis.json $HOME/.celestia-app/config

设置 seeds 和 peers

# 命令一
BOOTSTRAP_PEERS=$(curl -sL https://raw.githubusercontent.com/celestiaorg/networks/master/mamaki/bootstrap-peers.txt | tr -d '\n')

# 命令二
echo $BOOTSTRAP_PEERS

# 命令三
sed -i.bak -e "s/^bootstrap-peers *=.*/bootstrap-peers = \"$BOOTSTRAP_PEERS\"/" $HOME/.celestia-app/config/config.toml

2.3 配置 pruning(可选)

如果你的磁盘空间不是很大的话,你可以修改 pruning 配置,直接复制粘贴下面命令。如果你磁盘空间还有很多的话,可以忽略这一步。

PRUNING="custom"
PRUNING_KEEP_RECENT="100"
PRUNING_INTERVAL="10"

# 命令一,此处怕引起小白误会,故加此注释以作说明
sed -i -e "s/^pruning *=.*/pruning = \"$PRUNING\"/" $HOME/.celestia-app/config/app.toml

# 命令二
sed -i -e "s/^pruning-keep-recent *=.*/pruning-keep-recent = \
\"$PRUNING_KEEP_RECENT\"/" $HOME/.celestia-app/config/app.toml

# 命令三
sed -i -e "s/^pruning-interval *=.*/pruning-interval = \
\"$PRUNING_INTERVAL\"/" $HOME/.celestia-app/config/app.toml

2.4 配置验证者节点模式

sed -i.bak -e "s/^mode *=.*/mode = \"validator\"/" $HOME/.celestia-app/config/config.toml

2.5 重置网络

通过这一步,会删除 data 文件夹的内容。(你可以理解为给你的手机恢复出厂设置)

celestia-appd tendermint unsafe-reset-all --home $HOME/.celestia-app

2.6 用快照快速同步数据

如果从 Genesis 下载数据的话,可能会花费很久很久的时间,而从快照同步数据(事实上这一步我也大概花了2个小时)会节省大量的时间。

复制粘贴以下命令:

# 命令一
cd $HOME

# 命令二
rm -rf ~/.celestia-app/data

# 命令三
mkdir -p ~/.celestia-app/data

# 命令四
SNAP_NAME=$(curl -s https://snaps.qubelabs.io/celestia/ | \
    egrep -o ">mamaki.*tar" | tr -d ">")

# 命令五
wget -O - https://snaps.qubelabs.io/celestia/${SNAP_NAME} | tar xf - \
    -C ~/.celestia-app/data/

2.7 用 SystemD 启动 celestia-app

用 SystemD 的原因简单理解为让 celestia-app 运行的更稳定

用以下命令(直接复制粘贴,以下是一个命令)创建 Celestia-App SystemD File:

sudo tee <<EOF >/dev/null /etc/systemd/system/celestia-appd.service
[Unit]
Description=celestia-appd Cosmos daemon
After=network-online.target
[Service]
User=$USER
ExecStart=$HOME/go/bin/celestia-appd start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target
EOF

如果这个文件创建成功的话,你运行下面的命令将会看到它的内容:

cat /etc/systemd/system/celestia-appd.service

激活并启动 celestia-app

systemctl enable celestia-appd
systemctl start celestia-appd

检查是否启动成功

systemctl status celestia-appd

检查实时的运行日志

journalctl -u celestia-appd.service -f

检查节点是否在同步数据

curl -s localhost:26657/status | jq .result | jq .sync_info

确保在结果中看到 "catching_up": false ,不然的话就让它一直运行,别管它,等它同步成功。

2.8 创建钱包

celestia-appd config keyring-backend test
celestia-appd keys add validator

之后保存助记词!!!

然后去官方 Discord 领水,在 `#arabica-faucet` 频道发送以下命令,记得替换你的地址

$request celestia1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

等到领取成功后,可以输入以下命令查看是否领取成功,记得替换成你的地址

celestia-appd start

# 这里是一个命令,是因为格式换行了。不要误认为是两行!!!
celestia-appd query bank balances celestia1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2.9 将自己的代币委托给自己

创建一个环境变量保存你的地址

# 把下面的 <validator-address> 换成你的地址
VALIDATOR_WALLET=<validator-address>

运行以下命令,将自己的代币委托给自己,注意将 celestiavaloper1q3v5cugc8cdpud87u4zwy0a74uxkk6u4q4gx4p 替换成你自己的地址

celestia-appd tx staking delegate \
    celestiavaloper1q3v5cugc8cdpud87u4zwy0a74uxkk6u4q4gx4p 1000000utia \
    --from=$VALIDATOR_WALLET --chain-id=mamaki

3. 部署 celestia-node

3.1 安装 celestia-node

输入以下命令去安装,一行一个,复制粘贴。

cd $HOME
rm -rf celestia-node
git clone https://github.com/celestiaorg/celestia-node.git
cd celestia-node/
git checkout tags/v0.3.0-rc2
make install

执行完毕后输入这个命令去确认是否安装成功:

celestia version

如果安装成功,则会出来这个结果:

Semantic version: v0.3.0-rc2
Commit: 89892d8b96660e334741987d84546c36f0996fbe

3.2 初始化 Bridge Node

celestia bridge init

如果你需要指定端口和 IP,你可以这么做(如果你不理解什么是端口和IP,可以直接不管)

celestia bridge init --core.ip <ip-address> --core.grpc.port <port>

3.3 运行 Bridge Node

celestia bridge start

3.4 用 SystemD 启动 Bridge Node

用 SystemD 还是一样的原因,更稳定。

使用以下命令**(这是一个命令,一次性复制粘贴完)**创建 SystemD 配置文件

sudo tee <<EOF >/dev/null /etc/systemd/system/celestia-bridge.service
[Unit]
Description=celestia-bridge Cosmos daemon
After=network-online.target

[Service]
User=$USER
ExecStart=$HOME/go/bin/celestia bridge start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096

[Install]
WantedBy=multi-user.target
EOF

如果创建成功,你同样可以用这个命令去查看文件内容

cat /etc/systemd/system/celestia-bridge.service

激活并运行,同时查看日志

systemctl enable celestia-bridge
systemctl start celestia-bridge && journalctl -u \
celestia-bridge.service -f

4. 运行 Validator Node

连接到 Mamaki 网络

# 自己起一个名字
MONIKER="Chuck's Validator Node"

# 上一步创建的钱包地址
VALIDATOR_WALLET="validator"

celestia-appd tx staking create-validator \
    --amount=1000000utia \
    --pubkey=$(celestia-appd tendermint show-validator) \
    --moniker=$MONIKER \
    --chain-id=mamaki \
    --commission-rate=0.1 \
    --commission-max-rate=0.2 \
    --commission-max-change-rate=0.01 \
    --min-self-delegation=1000000 \
    --from=$VALIDATOR_WALLET \
    --keyring-backend=test

然后会问你是否确认交易,输入 y,就像下面一样

confirm transaction before signing and broadcasting [y/N]: y

🎉 完成!

Subscribe to Chuck
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.