Celestia Validator Node 搭建教程
0xf07B
November 2nd, 2022

配置要求:

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 new entries directly to your inbox.
Collectors
View
#1
#2
#3
View collectors
This entry has been permanently stored on-chain and signed by its creator.