# Celestia Validator Node 搭建教程

By [Chuck](https://paragraph.com/@chuck-3) · 2022-11-02

---

> 配置要求：
> 
> 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
    

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

![如红框所示，出现这个就代表安装成功](https://storage.googleapis.com/papyrus_images/102eb1199e1b20a5369425185d653291f214bed1820ec72be33c188a5fe23520.png)

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

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](https://discord.gg/celestiacommunity) 领水，在 \`#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
    

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

如果安装成功，则会出来这个结果：

    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
    

🎉 完成！

---

*Originally published on [Chuck](https://paragraph.com/@chuck-3/celestia-validator-node)*
