본문 바로가기
코인/노드

0G Labs(Zero Gravity) 인센티브 테스트넷 검증인 노드 설치 운영하기

by : ) 2024. 4. 15.

저는 처음에 소개받고 OG인 줄 알았는데 OG가 아니라 0G(Zero Gravity)입니다.
Hack VC를 비롯하여 애니모카, OKX 등으로부터 $3.5M 사전 시드 모금을 받았다고 하네요.

 

목차

     

    1. 시스템 요구사항

     
    • 0G Validator Node Hardware Requirement
    • Memory: 8 GB RAM
    • CPU: 4 cores
    • Disk: 500 GB NVME SSD
    • Bandwidth: 100mbps Gbps for Download / Upload

     

    제가 써봤을 때 CPU는 4 코어면 넉넉하지만 메모리는 8GB로 조금 빠듯해 보였고, 디스크는 일반 HDD로도 충분했습니다. SSD도 괜찮을 것 같습니다.

     

    2. 설치 및 설정

    1. 서버 Timezone 설정

    내 PC의 Timezone 설정이 UTC인지 확인해야 합니다. Timezone이 다르면 LastResultHash가 일치하지 않아서 노드가 중단될 수 있다고 합니다.

    다음 명령어로 확인할 수 있습니다.

    timedatectl

     

    timedatectl을 입력했을 때 위와 같이 나오면 정상입니다.

     

    2. 패키지 설치

     

    패키지 관리 도구를 업데이트하고, 필요한 패키지들을 아래 명령어로 설치해 줍시다.

    sudo apt update && sudo apt install curl git jq build-essential gcc unzip wget lz4 -y

     

     

    Error가 출력되지 않았다면 패키지가 정상적으로 완료된 것입니다.

     

    3. go 설치

    0G 노드는 go 언어로 작성되었기 때문에 go를 설치해야 합니다.

    아래는 go 설치파일 다운로드, 압축 해제, 설치, 환경변수 등록, 압축파일 삭제, go 버전 확인까지 일괄적으로 수행하는 명령어입니다.

    cd $HOME && \
    wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz && \
    sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz && \
    echo "export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin" >> $HOME/.bash_profile && \
    source $HOME/.bash_profile && \
    rm -rf go1.22.0.linux-amd64.tar.gz && \
    go version

     

     

    위와 같이 go version이 출력되면 정상적으로 설치된 것입니다.

     

    4. evmosd 설치

    아래 명령어로 evmosd를 설치합니다.

    git clone -b testnet https://github.com/0glabs/0g-evmos.git
    ./0g-evmos/networks/testnet/install.sh
    source .profile

     

     

    evmosd 설치는 다소 시간이 소요됩니다. 이 작업 역시 에러가 출력되지 않으면 정상적으로 설치가 완료된 것으로 보시면 됩니다.

     

    5. 노드 초기화

    체인 아이디를 설정하고 노드를 초기화합니다. <your_validator_name> 대신 사용할 검증인 이름을 적어줍시다.

    저는 <your_validator_name>을 yvn으로 하겠습니다.

    evmosd config chain-id zgtendermint_9000-1
    evmosd init <your_validator_name> --chain-id zgtendermint_9000-1

     

     

    이런 복잡한 데이터가 출력되면 초기화가 완료된 겁니다.

     

    6. 제네시스 파일 다운로드

    제네시스파일을 다운로드하고 정상적인 파일인지 확인합니다.

    wget -P ~/.evmosd/config https://github.com/0glabs/0g-evmos/releases/download/v1.0.0-testnet/genesis.json
    evmosd validate-genesis

     

     

    이미지의 표시된 부분과 같이 출력되면 정상입니다.

     

    7. 시드 노드 설정

    config.toml 파일의 seeds 항목에 0G에서 제공하는 시드 노드를 입력합니다.

    sed -i -e "s/^seeds *=.*/seeds = \"8c01665f88896bca44e8902a30e4278bed08033f@54.241.167.190:26656,b288e8b37f4b0dbd9a03e8ce926cd9c801aacf27@54.176.175.48:26656,8e20e8e88d504e67c7a3a58c2ea31d965aa2a890@54.193.250.204:26656,e50ac888b35175bfd4f999697bdeb5b7b52bfc06@54.215.187.94:26656\"/" $HOME/.evmosd/config/config.toml

     

     

    별다른 출력이 없다면 정상적으로 입력된 것입니다.

     

    8. 스냅샷 다운로드

    스냅샷은 블록 데이터를 직접 다운로드하여 적용함으로써 블록을 동기화하는 시간을 줄여줍니다.

    wget https://rpc-zero-gravity-testnet.trusted-point.com/latest_snapshot.tar.lz4
    cp $HOME/.evmosd/data/priv_validator_state.json $HOME/.evmosd/priv_validator_state.json.backup
    evmosd tendermint unsafe-reset-all --home $HOME/.evmosd --keep-addr-book
    lz4 -d -c ./latest_snapshot.tar.lz4 | tar -xf - -C $HOME/.evmosd
    mv $HOME/.evmosd/priv_validator_state.json.backup $HOME/.evmosd/data/priv_validator_state.json

     

     

    이 부분 역시 오류가 발생하지 않으면 됩니다.

    현재 스냅샷은 2.4GB로 용량이 적은 편입니다. 시간이 지나면서 블록이 쌓이면 더 많은 용량이 필요하겠습니다.

     

    9. 서비스 만들기

    세션을 종료해도 노드가 계속 실행될 수 있게 서비스를 만들어 사용하도록 하겠습니다. 서비스를 만들고 PC가 껐다 켜져도 자동으로 실행되도록 설정합니다. 아래 내용을 복사해서 그대로 붙여넣기 해주세요.

    sudo tee /etc/systemd/system/ogvnd.service > /dev/null <<EOF
    [Unit]
    Description=0G-validator-node
    After=network.target
    
    [Service]
    User=$USER
    Type=simple
    ExecStart=$(which evmosd) start
    Restart=10
    LimitNOFILE=65535
    
    [Install]
    WantedBy=multi-user.target
    EOF
    
    sudo systemctl daemon-reload
    sudo systemctl enable ogvnd

     

    이제 0G validator node 설치 및 기본 설정이 완료되었습니다.

     

    3. 노드 실행

    이제 노드를 실행해 봅시다.

    sudo systemctl restart ogvnd

     

    백그라운드에서 실행되고 있기 때문에 아무것도 뜨지 않을 겁니다. 만일 오류가 발생한다면 잘못된 것이므로 2. 설치 및 설정 단계를 다시 진행하도록 합시다.

     

    4. 노드 상태 확인

    노드가 제대로 실행되는지 확인해 봅시다. 먼저 블록이 계속해서 생성되는지 서비스로그를 확인하고, 싱크가 제대로 맞춰졌는지 보겠습니다.

    1. 서비스 로그 확인

    다음 명령어로 로그를 확인할 수 있습니다.

    sudo journalctl -u ogvnd -f -o cat

     

     

    노드가 제대로 실행 중이라면 이미지에서 보이는 것처럼 블록이 계속해서 올라가는 것을 볼 수 있습니다.

    로그 출력을 끝내려면 ctrl + c를 입력하면 됩니다.

     

    2. 싱크 정보 확인

    다음 명령어를 입력하여 블록 싱크 진행상황을 알 수 있습니다.

    evmosd status | jq .SyncInfo

     

     

    마지막줄의 catching_up이 true면 싱크를 맞추고 있는 중이라는 뜻입니다. false가 되어야 싱크가 완료되고 최신 블록이 쌓이기 시작합니다. 노드가 제대로 동작하고 있으면 기다리면 false로 바뀝니다.

    3번째 줄의 lastest_block_height는 마지막 블록번호를 보여줍니다. 아래 링크를 클릭하면 대시보드에서 최신 블록번호를 확인할 수 있습니다.

    https://explorer.validatorvn.com/OG-Testnet

     

     

    evmosd status | jq .SyncInfo 명령어로 확인한 lastest_block_height와 위 사이트의 height가 같아지면 catching_up이 false로 변하고 정상적인 노드의 역할을 하게 됩니다.

    validators가 500인 것도 보이는데요, 며칠 전에는 검증인이 100명까지였는데 지금은 500명까지 늘어났습니다. 앞으로 더 늘어날 가능성도 있을 듯합니다.

     

    5. Validator 등록

    노드에 검증인 정보를 생성하고 등록해야 합니다. 메타마스크 지갑이 필요합니다.

    1. 지갑 생성

    기존에 보유하고 있는 지갑을 사용하는 방법과 새로 지갑을 만드는 방법 중 하나를 골라야 합니다.

    1. 신규 지갑 만들기

    새로 지갑을 만드는 방법입니다. 아래 명령어에서 <your_validator_name>을 3-5 노드 초기화 항목에서 사용한 이름을 똑같이 사용합니다. 저는 yvn으로 했었죠.

    명령어 입력 후 비밀번호를 2회 입력해야 합니다. 노드에서 지갑 사용 시 비밀번호를 계속 입력해줘야 합니다.

    evmosd keys add <your_validator_name>

     

     

    지갑이 정상적으로 생성되면 EVMOS 지갑주소와 공개키, 니모닉 데이터가 출력됩니다. 니모닉은 절대 잃어버리지 않게 잘 보관해 둡시다.

     

    2. 기존 지갑 등록하기

    기존 지갑을 등록하는 방법입니다. 신규 지갑 만드는 명령어에 recovery 옵션을 붙이는 차이입니다. <your_validator_name>을 3-5 노드 초기화 항목에서 사용한 이름으로 바꿔주세요.

    evmosd keys add <your_validator_name> --recover

     

    명령어를 입력하면 니모닉을 입력하라는 문구가 나오는데 니모닉을 입력한 다음 사용할 비밀번호를 2회 입력하면 됩니다.

     

    3. 개인키 저장해 두기

    생성한 지갑을 메타마스크에 추가할 수 있게 개인키를 저장해 두기로 하겠습니다. 마찬가지로 < your_validator_name>을 본인의 이름으로 바꿔주시면 되겠습니다.

    evmosd keys unsafe-export-eth-key <your_validator_name>

     

     

    개인키가 유출되면 위험하므로 주의하라는 경고문구가 나오는데 y를 입력한 다음 지갑 비밀번호를 입력하면 개인키가 출력됩니다. 잘 저장해 둡시다.

     

    4. 16진수 주소 가져오기

    밸리데이터를 등록하기 위해서는 컨트렉트를 실행해야 합니다. 테스트넷에서 트랜젝션을 보낼 수 있도록 토큰을 받아야 하는데 faucet 사이트에 ERC에서 사용하는 16진수 형식의 주소가 필요합니다. 아래 명령어를 입력하면 16진 형식의 주소가 출력됩니다.

    echo "0x$(evmosd debug addr $(evmosd keys show <your_validator_name> -a) | grep hex | awk '{print $3}')"

     

    5. 테스트 토큰 받기

    faucet 사이트에 접속하여 16진수 주소를 입력하여 테스트 토큰을 받도록 합시다. 0.1개가 들어옵니다.

    https://faucet.0g.ai/

     

     

    토큰이 잘 들어왔는지 확인하려면 다음 명령어로 확인이 가능합니다.

    evmosd q bank balances <wallet_address>

     

     

    이제 검증인 등록을 할 수 있게 되었습니다. 트랜젝션을 날려봅시다.

    evmosd tx staking create-validator \\
      --amount=50000000000000000aevmos \\
      --pubkey=$(evmosd tendermint show-validator) \\
      --moniker="<your_validator_name>" \\
      --chain-id=zgtendermint_9000-1 \\
      --commission-rate="0.10" \\
      --commission-max-rate="0.20" \\
      --commission-max-change-rate="0.01" \\
      --min-self-delegation="1000000" \\
      --gas="5000000" \\
      --gas-prices="50000000000aevmos" \\
      --from=<your_validator_name>

     

    트랜젝션을 보내면 txhash가 출력됩니다. 정상적으로 보내졌다면 별다른 에러가 없이 위 이미지처럼 나오게 됩니다.

    시간이 조금 지나고 검증인 등록이 이루어지면 아래 사이트에서 확인하실 수 있습니다.

    https://explorer.validatorvn.com/OG-Testnet/staking

     

    댓글